{"id":9356,"date":"2026-08-10T08:20:00","date_gmt":"2026-08-10T06:20:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=9356"},"modified":"2026-10-24T02:15:21","modified_gmt":"2026-10-24T00:15:21","slug":"microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/","title":{"rendered":"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET"},"content":{"rendered":"<p>Die Microsoft Advertising Conversions API (CAPI) stellt einen serverseitigen \u00dcbertragungsweg f\u00fcr Ereignisse aus Checkout, CRM und weiteren Systemen bereit. Dadurch lassen sich L\u00fccken durch ausgebliebene Browseranfragen verringern. Ein angenommenes Ereignis ist jedoch nicht automatisch eine zugeordnete Conversion: Einwilligung, Kennungen, Conversion-Ziele und Attributionsregeln bleiben ma\u00dfgeblich.<\/p>\n<p>Zur Umsetzung geh\u00f6ren Ereigniszuordnung, Zugangsdaten, zul\u00e4ssige Kennungen, Duplikatbehandlung und eine \u00fcberwachte Versandwarteschlange. Ein pauschaler Aufwand von ein bis zwei Wochen w\u00fcrde Unterschiede zwischen vorhandenen Datensystemen verdecken. Das Mai-Release 2026 erg\u00e4nzte GetUetTagAuthKey und den Click-ID-Bericht; ein ge\u00e4ndertes Dokumentationsdatum allein belegt keine \u00c4nderung des Backend-Verhaltens.<\/p>\n<h2>1. Anfrageformat und Zugangsdaten<\/h2>\n<p>Ereignisse werden als JSON an <code>https:\/\/capi.uet.microsoft.com\/v1\/{tagId}\/events<\/code> gesendet, mit dem CAPI-Schl\u00fcssel des Tags in <code>Authorization: Bearer \u2026<\/code>. Das Array <code>data<\/code> enth\u00e4lt h\u00f6chstens 1.000 Ereignisse. <code>eventType<\/code> lautet <code>custom<\/code> oder <code>pageLoad<\/code>; <code>eventTime<\/code> enth\u00e4lt die UTC-Unixzeit in Sekunden innerhalb der vergangenen sieben Tage. <code>userData<\/code> ben\u00f6tigt mindestens eine unterst\u00fctzte Kennung. Seitenaufrufe ben\u00f6tigen zus\u00e4tzlich <code>eventSourceUrl<\/code>. Benutzerdefinierte Conversion-Ziele m\u00fcssen zu den konfigurierten Ereigniseigenschaften passen.<\/p>\n<p>Der getrennte Campaign-Management-Aufruf verwendet OAuth sowie die erforderlichen Entwickler- und Kontoheader. Diese Zugangsdaten sind nicht mit dem CAPI-Schl\u00fcssel austauschbar. <code>GetUetTagAuthKey<\/code> ruft einen vorhandenen Schl\u00fcssel ab; die erstmalige Erzeugung setzt den Besitz des Tags voraus. Ein erneuter Abruf rotiert den Schl\u00fcssel nicht. Neuerzeugung oder Widerruf m\u00fcssen dem unterst\u00fctzten Kontoverfahren folgen.<\/p>\n<h2>2. Eine echte Dokumentationsabweichung mit begrenzter Aussagekraft<\/h2>\n<p>Zum Pr\u00fcfdatum 24. Oktober 2026 zeigt der Integrationsleitfaden <code>TagId<\/code> und die verschachtelte Antwort <code>TagAuthKey.AuthKey<\/code>. Die Operationsreferenz nennt <code>UetTagId<\/code> und den flachen Wert <code>UetTagAuthKey<\/code>. Das ist eine Abweichung zwischen Dokumenten, kein Beleg f\u00fcr unterschiedliche API-Vertr\u00e4ge pro Konto. Anfragen sollten dem gew\u00e4hlten SDK beziehungsweise Operationsvertrag folgen und in einer autorisierten Integrationsumgebung gepr\u00fcft werden.<\/p>\n<p>Der Adapter akzeptiert Dictionaries und Objektantworten in beiden beschriebenen Formen, weist gemeldete Teilfehler und widerspr\u00fcchliche Schl\u00fcssel zur\u00fcck und protokolliert kein Geheimnis. Der Zugriff als Dictionary erfolgt erst nach Pr\u00fcfung des Antworttyps.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> collections.abc <span class=\"cbb-keyword\">import<\/span> Mapping\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">field<\/span>(value, name):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> value.<span class=\"cbb-function\">get<\/span>(name) <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">isinstance<\/span>(value, Mapping) <span class=\"cbb-keyword\">else<\/span> <span class=\"cbb-function\">getattr<\/span>(value, name, <span class=\"cbb-constant\">None<\/span>)\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">extract_auth_key<\/span>(response):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">field<\/span>(response, <span class=\"cbb-string\">\"PartialErrors\"<\/span>):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"Auth response contains errors; inspect redacted diagnostics\"<\/span>)\n<\/span><span class=\"cbb-line\">    values = &#91;<span class=\"cbb-function\">field<\/span>(response, <span class=\"cbb-string\">\"UetTagAuthKey\"<\/span>),\n<\/span><span class=\"cbb-line\">              <span class=\"cbb-function\">field<\/span>(<span class=\"cbb-function\">field<\/span>(response, <span class=\"cbb-string\">\"TagAuthKey\"<\/span>), <span class=\"cbb-string\">\"AuthKey\"<\/span>)&#93;\n<\/span><span class=\"cbb-line\">    keys = {v <span class=\"cbb-keyword\">for<\/span> v <span class=\"cbb-keyword\">in<\/span> values <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">isinstance<\/span>(v, str) <span class=\"cbb-keyword\">and<\/span> v.<span class=\"cbb-function\">strip<\/span>()}\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">len<\/span>(keys) != <span class=\"cbb-number\">1<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"Missing or conflicting auth-key fields\"<\/span>)\n<\/span><span class=\"cbb-line\">    key = keys.<span class=\"cbb-function\">pop<\/span>()\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-function\">any<\/span>(c.<span class=\"cbb-function\">isspace<\/span>() <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-function\">ord<\/span>(c) &lt; <span class=\"cbb-number\">32<\/span> <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-function\">ord<\/span>(c) == <span class=\"cbb-number\">127<\/span> <span class=\"cbb-keyword\">for<\/span> c <span class=\"cbb-keyword\">in<\/span> key):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">\"Invalid auth-key whitespace\/control character\"<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> key<\/span><\/code><\/pre><\/figure>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/quality-9356-auth-20261024.png\" width=\"1120\" height=\"720\" loading=\"lazy\" alt=\"Leitfaden und Operationsreferenz weichen bei Feldnamen ab. Der Adapter pr\u00fcft beide Formen; Schl\u00fcsselabruf ist keine Rotation.\"><figcaption>Leitfaden und Operationsreferenz weichen bei Feldnamen ab. Der Adapter pr\u00fcft beide Formen; Schl\u00fcsselabruf ist keine Rotation.<\/figcaption><\/figure>\n<p>Schema-Toleranz repariert weder falsche Zugangsdaten noch eine ung\u00fcltige Anfrage. Diagnoseprotokolle sollten Anfrage-\/Tracking-IDs, Status und eine bereinigte Fehlerklassifikation enthalten. Rohe Auth-Antworten, Bearer-Header und Kundendaten geh\u00f6ren nicht in gew\u00f6hnliche Logs. Das Laden eines neu freigegebenen Secrets zwischen Batches erleichtert den Wechsel; unterbrechungsfreie Rotation und vernachl\u00e4ssigbare Zugriffslatenz sind dadurch nicht garantiert.<\/p>\n<h2>3. Deduplizierung ben\u00f6tigt mehr als eine Bestellnummer<\/h2>\n<p>Browser- und Serverkopie desselben Ereignisses ben\u00f6tigen dasselbe UET-Tag, einen passenden Ereignisnamen und eine stabile Ereignis-ID. UET-JavaScript verwendet <code>event_id<\/code>, CAPI dagegen <code>eventId<\/code>. Die Kennung sollte das Gesch\u00e4ftsereignis identifizieren, etwa den abgeschlossenen Kauf, und bei Wiederholungen unver\u00e4ndert bleiben. Kauf und Erstattung sind verschiedene Ereignisse, auch bei derselben Bestellung.<\/p>\n<p>Eine gespeicherte zuf\u00e4llige Ereignis-ID oder eine bewusst mit Ereignistyp und Namensraum versehene Bestellkennung kann diese Stabilit\u00e4t liefern. Der zweite Transportweg darf keine neue Zufalls-ID erzeugen. Rein serverseitige CRM-Ereignisse haben kein Browsergegenst\u00fcck, ben\u00f6tigen aber weiterhin zuverl\u00e4ssige Wiederholungsverwaltung. Stabile Kennungen unterst\u00fctzen die Duplikatvermeidung; eine absturzsichere Genau-einmal-Garantie folgt aus einem einzelnen Feld nicht.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/quality-9356-flow-20261024.png\" width=\"1120\" height=\"720\" loading=\"lazy\" alt=\"Passendes UET-Tag, Ereignisname und stabile ID unterst\u00fctzen die Duplikatvermeidung. HTTP-Annahme und Attribution ben\u00f6tigen getrennte Pr\u00fcfungen.\"><figcaption>Passendes UET-Tag, Ereignisname und stabile ID unterst\u00fctzen die Duplikatvermeidung. HTTP-Annahme und Attribution ben\u00f6tigen getrennte Pr\u00fcfungen.<\/figcaption><\/figure>\n<h2>4. Feldbezogene Normalisierung und Einwilligung<\/h2>\n<p>Die aktuellen Microsoft-Vorgaben f\u00fcr E-Mail-Adressen umfassen das Entfernen \u00e4u\u00dferer Leerzeichen, von Punkten und Plus-Alias im lokalen Teil, Kleinschreibung und SHA-256. Diese Regel gilt f\u00fcr Microsofts Zuordnung, nicht allgemein f\u00fcr gespeicherte Kontaktadressen oder andere Plattformen. Telefonnummern werden in kanonischem E.164-Format einschlie\u00dflich f\u00fchrendem Plus gehasht. Der Helfer erwartet eine bereits international normalisierte Nummer; l\u00e4nderspezifische Verarbeitung und Pr\u00fcfung der tats\u00e4chlichen Nummer geh\u00f6ren davor.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> hashlib\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">import<\/span> re\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">microsoft_email_hash<\/span>(value):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">isinstance<\/span>(value, str):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">    value = value.<span class=\"cbb-function\">strip<\/span>()\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> value.<span class=\"cbb-function\">count<\/span>(<span class=\"cbb-string\">\"@\"<\/span>) != <span class=\"cbb-number\">1<\/span> <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-function\">any<\/span>(c.<span class=\"cbb-function\">isspace<\/span>() <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-function\">ord<\/span>(c) &lt; <span class=\"cbb-number\">32<\/span> <span class=\"cbb-keyword\">for<\/span> c <span class=\"cbb-keyword\">in<\/span> value):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">    local, domain = value.<span class=\"cbb-function\">split<\/span>(<span class=\"cbb-string\">\"@\"<\/span>)\n<\/span><span class=\"cbb-line\">    local = local.<span class=\"cbb-function\">split<\/span>(<span class=\"cbb-string\">\"+\"<\/span>, <span class=\"cbb-number\">1<\/span>)&#91;<span class=\"cbb-number\">0<\/span>&#93;.<span class=\"cbb-function\">replace<\/span>(<span class=\"cbb-string\">\".\"<\/span>, <span class=\"cbb-string\">\"\"<\/span>)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> local <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-keyword\">not<\/span> domain <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-string\">\".\"<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-keyword\">in<\/span> domain:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> hashlib.<span class=\"cbb-function\">sha256<\/span>((local + <span class=\"cbb-string\">\"@\"<\/span> + domain).<span class=\"cbb-function\">lower<\/span>().<span class=\"cbb-function\">encode<\/span>(<span class=\"cbb-string\">\"utf-8\"<\/span>)).<span class=\"cbb-function\">hexdigest<\/span>()\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">microsoft_phone_hash<\/span>(e164):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">isinstance<\/span>(e164, str) <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-keyword\">not<\/span> re.<span class=\"cbb-function\">fullmatch<\/span>(<span class=\"cbb-string\">r\"\\+&#91;1-9&#93;&#91;0-9&#93;{6,14}\"<\/span>, e164):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> hashlib.<span class=\"cbb-function\">sha256<\/span>(e164.<span class=\"cbb-function\">encode<\/span>(<span class=\"cbb-string\">\"utf-8\"<\/span>)).<span class=\"cbb-function\">hexdigest<\/span>()<\/span><\/code><\/pre><\/figure>\n<p>Diese Helfer sind bewusst begrenzte Beispiele, keine vollst\u00e4ndigen E-Mail- oder Telefonnummernpr\u00fcfer. Ung\u00fcltige oder fehlende Kennungen sollten entfallen, statt durch Hashes von Platzhaltern ersetzt zu werden. IP-Adresse, User-Agent und Click-ID folgen eigenen Feldregeln; die pauschale Anweisung, jede Kennung zu hashen, ist falsch. Hashing macht identifizierende Daten au\u00dferdem nicht anonym.<\/p>\n<p><code>adStorageConsent<\/code> erlaubt <code>G<\/code> und <code>D<\/code>. Ohne Angabe gilt laut Dokumentation standardm\u00e4\u00dfig eine erteilte Einwilligung. Eine ausdr\u00fccklich gesetzte Zustandsangabe ist deshalb wichtig: Ereignisse mit verweigertem Consent werden nicht f\u00fcr Werbezwecke einschlie\u00dflich Attribution und Remarketing verwendet. Das Feld erteilt keine Erlaubnis zur sonst unzul\u00e4ssigen \u00dcbermittlung personenbezogener Daten.<\/p>\n<p>Die Anwendung muss eine zul\u00e4ssige Erfassungs- und \u00dcbermittlungsgrundlage sicherstellen, relevante Einwilligungsnachweise speichern und vor dem Versand geltende Widerrufs- oder Sperrregeln erneut pr\u00fcfen. Eine fr\u00fchere Zustimmung rechtfertigt nicht das Ignorieren eines sp\u00e4teren Widerrufs. Ein Telefonverkauf kann einen getrennten Einwilligungsnachweis besitzen; ein fehlendes Webbanner belegt allein weder Erlaubnis noch Verbot. Ein unbekannter Zustand darf nicht stillschweigend als erteilt gelten.<\/p>\n<h2>5. Sieben Tage, Zukunftszeiten und die letzte Stunde<\/h2>\n<p>Eine Alterspr\u00fcfung muss zuk\u00fcnftige Zeitstempel zur\u00fcckweisen, ohne g\u00fcltige Datens\u00e4tze allein wegen einer nahenden Frist zu verwerfen. Die Funktion unterscheidet ung\u00fcltige, zuk\u00fcnftige, abgelaufene und dringliche Zeitstempel. Ein dringliches Ereignis bleibt f\u00fcr einen sofortigen Versuch vorgesehen; die Warnschwelle ist keine vorgezogene API-Ablauffrist. Unmittelbar vor dem Versand ist die Eignung erneut zu pr\u00fcfen.<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"python\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">Python<\/span><span class=\"cbb-actions\"><button type=\"button\" class=\"cbb-button cbb-button--wrap\" data-cbb-action=\"wrap\" aria-pressed=\"true\" title=\"Wrap long lines\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><path d=\"M2 4h12M2 8h9.5a2.5 2.5 0 0 1 0 5H8m0 0 1.5-1.5M8 13l1.5 1.5M2 12h3\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg><span class=\"cbb-sr\">Wrap long lines<\/span><\/button><button type=\"button\" class=\"cbb-button cbb-button--copy\" data-cbb-action=\"copy\" data-cbb-done=\"Copied\" data-cbb-failed=\"Press Ctrl+C to copy\"><svg aria-hidden=\"true\" focusable=\"false\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"><rect x=\"5.5\" y=\"5.5\" width=\"8\" height=\"8.5\" rx=\"1.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><path d=\"M10.5 3.5V3A1.5 1.5 0 0 0 9 1.5H4A1.5 1.5 0 0 0 2.5 3v6.5A1.5 1.5 0 0 0 4 11h.5\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"\/><\/svg><span class=\"cbb-button-label\" aria-live=\"polite\">Copy<\/span><\/button><\/span><\/figcaption><pre class=\"cbb-pre\" tabindex=\"0\"><code class=\"cbb-code language-python\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">from<\/span> datetime <span class=\"cbb-keyword\">import<\/span> datetime, timedelta, timezone\n<\/span><span class=\"cbb-line\">\n<\/span><span class=\"cbb-line\"><span class=\"cbb-keyword\">def<\/span> <span class=\"cbb-function\">event_age_state<\/span>(event_time, now):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">isinstance<\/span>(event_time, datetime) <span class=\"cbb-keyword\">or<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-function\">isinstance<\/span>(now, datetime):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-string\">\"invalid\"<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> event_time.tzinfo <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-constant\">None<\/span> <span class=\"cbb-keyword\">or<\/span> event_time.<span class=\"cbb-function\">utcoffset<\/span>() <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-constant\">None<\/span> <span class=\"cbb-keyword\">or<\/span> now.tzinfo <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-constant\">None<\/span> <span class=\"cbb-keyword\">or<\/span> now.<span class=\"cbb-function\">utcoffset<\/span>() <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-constant\">None<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-string\">\"invalid\"<\/span>\n<\/span><span class=\"cbb-line\">    age = now.<span class=\"cbb-function\">astimezone<\/span>(timezone.utc) - event_time.<span class=\"cbb-function\">astimezone<\/span>(timezone.utc)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> age &lt; <span class=\"cbb-function\">timedelta<\/span>(<span class=\"cbb-number\">0<\/span>):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-string\">\"future\"<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> age &gt;= <span class=\"cbb-function\">timedelta<\/span>(days=<span class=\"cbb-number\">7<\/span>):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-string\">\"expired\"<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> age &gt;= <span class=\"cbb-function\">timedelta<\/span>(days=<span class=\"cbb-number\">7<\/span>, hours=<span class=\"cbb-number\">-1<\/span>):\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-string\">\"urgent\"<\/span>\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-string\">\"ready\"<\/span><\/span><\/code><\/pre><\/figure>\n<p>Die Grenze von genau sieben Tagen wird vorsichtig als abgelaufen behandelt. Der Helfer liefert nur Zust\u00e4nde und versendet oder l\u00f6scht keine Datens\u00e4tze. Eine dauerhafte Warteschlange ben\u00f6tigt eindeutige Ergebnisse, begrenzte Wiederholungen und Zust\u00e4ndigkeit f\u00fcr laufende Auftr\u00e4ge. Nach einem Worker-Absturz kann die Zustellung unklar sein; eine Statusspalte allein beweist deshalb keine folgenlose Wiederaufnahme. Alte Ereignisse d\u00fcrfen zur Umgehung des Fensters keinen aktuellen Zeitstempel erhalten.<\/p>\n<h2>6. HTTP-Erfolg und Ereigniserfolg unterscheiden sich<\/h2>\n<p>Der Leitfaden dokumentiert inzwischen ausdr\u00fccklich HTTP 400 f\u00fcr Validierungsfehler und 401 f\u00fcr Autorisierungsfehler. Eine 401 erfordert die Korrektur von Zugangsdaten und Tag-Zuordnung; ein unver\u00e4ndert ung\u00fcltiges Payload sollte nach 400 nicht endlos wiederholt werden. Vor\u00fcbergehende Transport- oder Dienstfehler k\u00f6nnen begrenzte Wiederholungen mit exponentiell wachsender Wartezeit und Zufallsanteil erhalten. Eine tats\u00e4chlich gelieferte Retry-After-Anweisung ist zu ber\u00fccksichtigen; ein undokumentiertes zahlenm\u00e4\u00dfiges Anfragelimit wird nicht angenommen.<\/p>\n<p>Standardm\u00e4\u00dfig verhindert ein Validierungsfehler die Verarbeitung des gesamten Batches. Mit <code>continueOnValidationError: true<\/code> k\u00f6nnen g\u00fcltige Ereignisse verarbeitet und ung\u00fcltige \u00fcbersprungen werden. HTTP 200 kann daher Fehler oder Warnungen enthalten; eine Warnung kann das Entfernen eines optionalen Feldes bedeuten. <code>eventsReceived<\/code> und Diagnosedetails m\u00fcssen vor der Annahmemarkierung abgeglichen werden. Die Dokumentation begrenzt die ausgegebenen Fehler-\/Warnungsdetails auf die ersten zehn Eintr\u00e4ge. Das Fehlen eines Datensatzes in der sichtbaren Fehlerliste beweist deshalb nicht immer dessen Annahme.<\/p>\n<p>Eine einfachere Anfangsstrategie l\u00e4sst Teilverarbeitung deaktiviert, validiert lokal und trennt fehlerhafte Datens\u00e4tze zur Korrektur ab. Das Monitoring sollte API-Annahme, verworfene Ereignisse, entfernte Felder und sp\u00e4ter zugeordnete Conversions unterscheiden. Protokolle speichern sichere Kennungen und Fehlerklassen statt ungefilterter Antwortinhalte.<\/p>\n<h2>7. Monitoring und Datenabgleich<\/h2>\n<p>N\u00fctzlich sind das Alter des \u00e4ltesten offenen Ereignisses, dringliche und abgelaufene Datens\u00e4tze, Versandlatenz-Perzentile, angenommene Ereignisse, Validierungsfehler, Consent und Abdeckung durch s\u00e4mtliche unterst\u00fctzten Kennungen. \u201eKein E-Mail-Hash\u201c bedeutet nicht \u201ekeine Kennung\u201c; ein Ereignis kann msclkid oder ein anderes akzeptiertes Feld enthalten. Abgelaufene Datens\u00e4tze k\u00f6nnen aus alter Daten\u00fcbernahme oder falschen Zeitstempeln entstehen und beweisen keinen sechst\u00e4gigen Ausfall.<\/p>\n<p>Spr\u00fcnge bei Consent oder Kennungsabdeckung begr\u00fcnden eine Untersuchung, beweisen jedoch keinen bestimmten Formular- oder Consent-Tool-Fehler. Traffic-Zusammensetzung, Akquisekan\u00e4le und tats\u00e4chliche Gesch\u00e4fts\u00e4nderungen k\u00f6nnen dieselben Kennzahlen ver\u00e4ndern. Die von Microsoft ausgewiesenen Conversions m\u00fcssen nicht allen angenommenen Bestellungen entsprechen: Zuordnung, Ziele, Zeitfenster, Z\u00e4hlregeln, Berichtsdatum und Verarbeitungszeit beeinflussen den Vergleich.<\/p>\n<div class=\"lw-faq\"><h2>Fragen und Antworten<\/h2><h3>Beweisen aggregierte Summen die Deduplizierung?<\/h3><p>Nein. Zeitlich abgestimmte Summen k\u00f6nnen auff\u00e4llige Ver\u00e4nderungen zeigen; zur Eingrenzung der Duplikatbehandlung sind jedoch Ereignis-Testf\u00e4lle und Versandnachweise erforderlich. Ein niedrigerer Plattformwert beweist allein keine verlorenen API-Ereignisse.<\/p><h3>Ist der Click-ID-Bericht erforderlich?<\/h3><p>Nein. MSClickIdPerformanceReport kann bei Verf\u00fcgbarkeit die Analyse auf Klickebene unterst\u00fctzen. Die Spaltenreferenz enth\u00e4lt funktionsbezogene Verf\u00fcgbarkeitshinweise; zwei Hinweise auf derselben Seite beweisen keinen Pilotstatus des gesamten Berichts. ConversionsQualified ist als Double dokumentiert. Kontoverf\u00fcgbarkeit und Berichtssemantik sind vor einer betrieblichen Abh\u00e4ngigkeit zu pr\u00fcfen.<\/p><h3>Was \u00e4ndert sich beim Remarketing?<\/h3><p>Der aktuelle Leitfaden verlangt clientseitigen ID Sync f\u00fcr Remarketing\/Zielgruppen und empfiehlt den Abgleich f\u00fcr die Qualit\u00e4t der Conversion-Messung. Ein rein serverseitiger Ereignisstrom ersetzt diesen Browserschritt nicht automatisch. Auch der Abgleich unterliegt den geltenden Einwilligungsregeln; die Besucher-ID muss mit anonymousId im Serverereignis \u00fcbereinstimmen.<\/p><\/div><div class=\"lw-quellen\"><h2>Quellen<\/h2><ul><li><a href=\"https:\/\/learn.microsoft.com\/en-us\/advertising\/guides\/uet-conversion-api-integration?view=bingads-13\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft: CAPI integration<\/a><\/li><li><a href=\"https:\/\/learn.microsoft.com\/en-us\/advertising\/campaign-management-service\/getuettagauthkey?view=bingads-13\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft: GetUetTagAuthKey<\/a><\/li><li><a href=\"https:\/\/learn.microsoft.com\/en-us\/advertising\/guides\/release-notes?view=bingads-13\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft: API release notes<\/a><\/li><li><a href=\"https:\/\/learn.microsoft.com\/en-us\/advertising\/reporting-service\/msclickidperformancereportcolumn?view=bingads-13\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft: click-ID report columns<\/a><\/li><li><a href=\"https:\/\/learn.microsoft.com\/en-us\/advertising\/guides\/universal-event-tracking?view=bingads-13\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft: Universal Event Tracking<\/a><\/li><li><a href=\"https:\/\/learn.microsoft.com\/en-us\/advertising\/guides\/reports?view=bingads-13\" target=\"_blank\" rel=\"noopener noreferrer\">Microsoft: reporting<\/a><\/li><\/ul><\/div>","protected":false},"excerpt":{"rendered":"<p>Microsofts Conversions API meldet K\u00e4ufe vom Server an UET: Endpoint, Auth Key, Deduplizierung, Hashing \u2013 und die unterschiedlichen Angaben in Leitfaden und Referenz zur Struktur der Token-Antwort.<\/p>\n","protected":false},"author":1,"featured_media":13789,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13],"tags":[92023,92026,92029,92032],"class_list":["post-9356","post","type-post","status-publish","format-standard","hentry","category-digital-marketing-de","tag-conversion-tracking-de","tag-marketing-cyfrowy-pl-de","tag-first-party-data-de","tag-tracking-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Microsoft Advertising Conversions API: UET-Serverevents, Authentifizierung, Deduplizierung, Hashing und Pr\u00fcfung der API-Antworten.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Microsoft Advertising Conversions API: UET-Serverevents, Authentifizierung, Deduplizierung, Hashing und Pr\u00fcfung der API-Antworten.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-10T06:20:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-24T00:15:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9356-microsoft-advertising-conversions-ap-g.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Lukas Wojcik\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Lukas Wojcik\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET\",\"datePublished\":\"2026-08-10T06:20:00+00:00\",\"dateModified\":\"2026-10-24T00:15:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/\"},\"wordCount\":1341,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9356-microsoft-advertising-conversions-ap-g.png\",\"keywords\":[\"Conversion Tracking\",\"Digital Marketing\",\"First-Party Data\",\"Tracking\"],\"articleSection\":[\"Digital Marketing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/\",\"name\":\"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9356-microsoft-advertising-conversions-ap-g.png\",\"datePublished\":\"2026-08-10T06:20:00+00:00\",\"dateModified\":\"2026-10-24T00:15:21+00:00\",\"description\":\"Microsoft Advertising Conversions API: UET-Serverevents, Authentifizierung, Deduplizierung, Hashing und Pr\u00fcfung der API-Antworten.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9356-microsoft-advertising-conversions-ap-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-9356-microsoft-advertising-conversions-ap-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/digital-marketing-de\\\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET | Lukas Wojcik","description":"Microsoft Advertising Conversions API: UET-Serverevents, Authentifizierung, Deduplizierung, Hashing und Pr\u00fcfung der API-Antworten.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/","og_locale":"en_US","og_type":"article","og_title":"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET | Lukas Wojcik","og_description":"Microsoft Advertising Conversions API: UET-Serverevents, Authentifizierung, Deduplizierung, Hashing und Pr\u00fcfung der API-Antworten.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-08-10T06:20:00+00:00","article_modified_time":"2026-10-24T00:15:21+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9356-microsoft-advertising-conversions-ap-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET","datePublished":"2026-08-10T06:20:00+00:00","dateModified":"2026-10-24T00:15:21+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/"},"wordCount":1341,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9356-microsoft-advertising-conversions-ap-g.png","keywords":["Conversion Tracking","Digital Marketing","First-Party Data","Tracking"],"articleSection":["Digital Marketing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/","name":"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9356-microsoft-advertising-conversions-ap-g.png","datePublished":"2026-08-10T06:20:00+00:00","dateModified":"2026-10-24T00:15:21+00:00","description":"Microsoft Advertising Conversions API: UET-Serverevents, Authentifizierung, Deduplizierung, Hashing und Pr\u00fcfung der API-Antworten.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9356-microsoft-advertising-conversions-ap-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-9356-microsoft-advertising-conversions-ap-g.png","width":1200,"height":630,"caption":"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/digital-marketing-de\/microsoft-advertising-conversions-api-praxisleitfaden-fur-server-seitiges\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Microsoft Advertising Conversions API: Praxisleitfaden f\u00fcr server-seitiges UET"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9356","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=9356"}],"version-history":[{"count":8,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9356\/revisions"}],"predecessor-version":[{"id":23142,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/9356\/revisions\/23142"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/13789"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=9356"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=9356"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=9356"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}