{"id":10130,"date":"2026-09-20T19:03:00","date_gmt":"2026-09-20T17:03:00","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?p=10130"},"modified":"2026-10-26T13:33:51","modified_gmt":"2026-10-26T12:33:51","slug":"tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych","status":"publish","type":"post","link":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/","title":{"rendered":"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych"},"content":{"rendered":"<p>Piksel przegl\u0105darkowy mo\u017ce pomin\u0105\u0107 zakup, na przyk\u0142ad po zablokowaniu skryptu lub przedwczesnym zamkni\u0119ciu strony potwierdzenia. TikTok Events API dodaje drog\u0119 raportowania z backendu sklepu. Taka architektura mo\u017ce poprawi\u0107 kompletno\u015b\u0107 danych, ale nie gwarantuje zebrania wszystkich zdarze\u0144 ani przypisania ka\u017cdego zakupu do reklamy.<\/p>\n<p>Piksel to kod pomiarowy dzia\u0142aj\u0105cy w przegl\u0105darce. Backend oznacza oprogramowanie sklepu na serwerze. API jest interfejsem wymiany danych mi\u0119dzy programami, a token dost\u0119pu to po\u015bwiadczenie pozwalaj\u0105ce na t\u0119 wymian\u0119. Deduplikacja rozpoznaje powt\u00f3rne zg\u0142oszenia tego samego zdarzenia. Atrybucja przypisuje zakup do reklamy wed\u0142ug okre\u015blonych zasad.<\/p>\n<p>Poni\u017csza instrukcja \u0142\u0105czy oba kana\u0142y wsp\u00f3lnym identyfikatorem zdarzenia. Wymagane s\u0105 piksel TikTok, token dost\u0119pu przechowywany wy\u0142\u0105cznie na serwerze, zintegrowany system zg\u00f3d oraz wiarygodne potwierdzenie zakupu w backendzie. Przyk\u0142ady obejmuj\u0105 przygotowanie danych; po\u0142\u0105czenie ze sklepem, kolejka wysy\u0142ki i obs\u0142uga b\u0142\u0119d\u00f3w wymagaj\u0105 osobnej implementacji.<\/p>\n<figure class=\"lw-diagram\"><img decoding=\"async\" src=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/diagrams\/quality-10130-20261024.png\" width=\"1120\" height=\"580\" loading=\"lazy\" alt=\"Potwierdzony zakup jest zg\u0142aszany przez piksel i Events API ze wsp\u00f3lnym identyfikatorem, nazw\u0105 zdarzenia i kodem piksela. Deduplikacja obowi\u0105zuje w ci\u0105gu 48 godzin.\"><figcaption>Dwa kana\u0142y wymagaj\u0105 zgodnych danych zakupu i aktualnej zgody; dostarczenie nie dowodzi atrybucji reklamowej.<\/figcaption><\/figure>\n<h2>Krok 1: Sta\u0142y identyfikator potwierdzonego zakupu<\/h2>\n<p>Backend tworzy <code>event_id<\/code> tylko raz. Zg\u0142oszenia przegl\u0105darkowe, serwerowe i ponowienia zachowuj\u0105 t\u0119 sam\u0105 warto\u015b\u0107. Przyk\u0142adowo <code>purchase-10432<\/code> oznacza jeden potwierdzony zakup. Identyfikator oparty na zam\u00f3wieniu musi by\u0107 unikalny w \u017ar\u00f3dle danych i nie mo\u017ce zawiera\u0107 danych osobowych. P\u0142atno\u015bci cykliczne wymagaj\u0105 oddzielnego identyfikatora ka\u017cdej p\u0142atno\u015bci.<\/p>\n<p>TikTok deduplikuje zdarzenia wed\u0142ug kodu piksela, nazwy zdarzenia i <code>event_id<\/code> w oknie 48 godzin. Od\u015bwie\u017cenie strony potwierdzenia po zako\u0144czeniu tego okna nie jest chronione bezterminowo. Sklep musi r\u00f3wnie\u017c ogranicza\u0107 ponowne raportowanie zakup\u00f3w, na przyk\u0142ad przez status wysy\u0142ki ka\u017cdego zdarzenia. Ponowienia zachowuj\u0105 tak\u017ce pierwotny czas zakupu.<\/p>\n<h2>Krok 2: Ten sam obiekt zakupu dla piksela<\/h2>\n<p>Backend przekazuje stronie potwierdzenia pola zakupu przekszta\u0142cone do formatu, kt\u00f3ry mo\u017cna bezpiecznie umie\u015bci\u0107 na stronie: <code>event_id<\/code>, <code>contents<\/code>, <code>value<\/code> i <code>currency<\/code>. Ceny i koszyk pochodz\u0105 z potwierdzonego zam\u00f3wienia, a nie z dowolnie modyfikowanych parametr\u00f3w URL. Poni\u017csza funkcja wymaga zainicjalizowanego piksela sterowanego systemem zg\u00f3d:<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"javascript\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JavaScript<\/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-javascript\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">function<\/span> <span class=\"cbb-function\">sendTikTokPurchase<\/span>(purchase, advertisingConsent) {\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">if<\/span> (advertisingConsent !== <span class=\"cbb-constant\">true<\/span>) <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">false<\/span>;\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">if<\/span> (!purchase.event_id || !window.ttq) <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">false<\/span>;\n<\/span><span class=\"cbb-line\">  window.ttq.<span class=\"cbb-function\">track<\/span>(<span class=\"cbb-string\">'Purchase'<\/span>, {\n<\/span><span class=\"cbb-line\">    content_type: <span class=\"cbb-string\">'product'<\/span>,\n<\/span><span class=\"cbb-line\">    contents: purchase.contents,\n<\/span><span class=\"cbb-line\">    value: purchase.value,\n<\/span><span class=\"cbb-line\">    currency: purchase.currency\n<\/span><span class=\"cbb-line\">  }, { event_id: purchase.event_id });\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">true<\/span>;\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n<p>Wywo\u0142anie nast\u0119puje dopiero po potwierdzeniu zakupu i przy aktualnej zgodzie reklamowej. Wynik <code>true<\/code> oznacza wywo\u0142anie <code>ttq.track<\/code>, bez potwierdzenia dostarczenia. Inicjalizacja piksela i zdarzenia automatyczne r\u00f3wnie\u017c wymagaj\u0105 kontroli zgody.<\/p>\n<p>Nowe implementacje u\u017cywaj\u0105 <code>Purchase<\/code> w obu kana\u0142ach. Od maja 2025 r. TikTok automatycznie mapuje wcze\u015bniejsz\u0105 nazw\u0119 <code>CompletePayment<\/code> na <code>Purchase<\/code>; starsza nazwa nadal jest obs\u0142ugiwana. Inne rozbie\u017cno\u015bci bez udokumentowanego mapowania pozostaj\u0105 mo\u017cliwym \u017ar\u00f3d\u0142em b\u0142\u0119d\u00f3w.<\/p>\n<h2>Krok 3: Dost\u0119pne identyfikatory i kontekst po uzyskaniu zgody<\/h2>\n<p><code>ttclid<\/code> mo\u017ce wyst\u0119powa\u0107 w adresie strony docelowej reklamy. <code>_ttp<\/code> jest ciasteczkiem piksela. Warto\u015bci nie istniej\u0105 wy\u0142\u0105cznie w przegl\u0105darce: serwer sklepu mo\u017ce odczyta\u0107 otrzymane parametry URL i ciasteczka. Podczas pierwszego \u017c\u0105dania ciasteczko mo\u017ce jednak jeszcze nie istnie\u0107. Brakuj\u0105ce identyfikatory pozostaj\u0105 pomini\u0119te; sztuczne warto\u015bci zast\u0119pcze pogarszaj\u0105 jako\u015b\u0107 danych.<\/p>\n<p>Prosta funkcja po stronie przegl\u0105darki zapisuje dost\u0119pny identyfikator klikni\u0119cia dopiero po zgodzie. System zg\u00f3d wywo\u0142uje funkcj\u0119 po pierwszej decyzji oraz po kolejnych zmianach:<\/p>\n<figure style=\"--cbb-digits:2\" class=\"cbb cbb--wrap cbb--numbers wp-block-code-beautifier-block-code\" data-lang=\"javascript\"><figcaption class=\"cbb-head\"><span class=\"cbb-lang\">JavaScript<\/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-javascript\" style=\"counter-reset:cbb-line 0;\"><span class=\"cbb-line\"><span class=\"cbb-keyword\">function<\/span> <span class=\"cbb-function\">updateTikTokClickCookie<\/span>(advertisingConsent) {\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">const<\/span> attributes = <span class=\"cbb-string\">';path=\/;Secure;SameSite=Lax'<\/span>;\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">if<\/span> (advertisingConsent !== <span class=\"cbb-constant\">true<\/span>) {\n<\/span><span class=\"cbb-line\">    document.cookie = <span class=\"cbb-string\">'shop_ttclid=;max-age=0'<\/span> + attributes;\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span>;\n<\/span><span class=\"cbb-line\">  }\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">const<\/span> clickId = <span class=\"cbb-keyword\">new<\/span> <span class=\"cbb-function\">URLSearchParams<\/span>(location.search).<span class=\"cbb-keyword\">get<\/span>(<span class=\"cbb-string\">'ttclid'<\/span>);\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-comment\">\/\/ Local size limit, not a TikTok identifier-format specification.<\/span>\n<\/span><span class=\"cbb-line\">  <span class=\"cbb-keyword\">if<\/span> (!clickId || clickId.length &gt; <span class=\"cbb-number\">1024<\/span>) <span class=\"cbb-keyword\">return<\/span>;\n<\/span><span class=\"cbb-line\">  document.cookie = <span class=\"cbb-string\">'shop_ttclid='<\/span> + <span class=\"cbb-function\">encodeURIComponent<\/span>(clickId) +\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-string\">';max-age=2592000'<\/span> + attributes;\n<\/span><span class=\"cbb-line\">}<\/span><\/code><\/pre><\/figure>\n<p>Okres 30 dni jest przyk\u0142adow\u0105 decyzj\u0105 o retencji, a nie wymaganiem TikToka ani gwarancj\u0105 trwa\u0142o\u015bci ciasteczka. P\u00f3\u017aniejsze wej\u015bcie bez <code>ttclid<\/code> nie przed\u0142u\u017ca wa\u017cno\u015bci. Odmowa lub wycofanie zgody usuwa ciasteczko utworzone w tym przyk\u0142adzie. Identyfikatory zapisane na serwerze i oczekuj\u0105ce zdarzenia wymagaj\u0105 odpowiedniej obs\u0142ugi wycofania zgody. Usuni\u0119cie nie obejmuje ciasteczek o innych \u015bcie\u017ckach lub domenach.<\/p>\n<p>Podczas finalizacji zam\u00f3wienia dost\u0119pne identyfikatory mo\u017cna powi\u0105za\u0107 z zakupem. Pole <code>ttp<\/code> otrzymuje warto\u015b\u0107 <code>_ttp<\/code>. Adres IP i user agent (opis oprogramowania przekazywany przez przegl\u0105dark\u0119) musz\u0105 pochodzi\u0107 z pierwotnej wizyty, a nie z p\u00f3\u017aniejszego klienta API. Serwer proxy przekazuje \u017c\u0105dania mi\u0119dzy systemami. Sklep mo\u017ce ufa\u0107 adresom IP w przekazanych nag\u0142\u00f3wkach tylko wtedy, gdy przyjmuje je od prawid\u0142owo skonfigurowanych, zaufanych serwer\u00f3w po\u015brednich.<\/p>\n<h2>Krok 4: Budowa danych dla serwera<\/h2>\n<p>Adres docelowy to <code>POST https:\/\/business-api.tiktok.com\/open_api\/v1.3\/event\/track\/<\/code>, z nag\u0142\u00f3wkami <code>Access-Token<\/code> i <code>Content-Type: application\/json<\/code>. Pole <code>event_source_id<\/code> zawiera ten sam kod piksela co integracja przegl\u0105darkowa. Poni\u017csza funkcja w Pythonie przygotowuje dane bez wykonywania \u017c\u0105dania sieciowego:<\/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\">sha256<\/span>(value):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> hashlib.<span class=\"cbb-function\">sha256<\/span>(value.<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\">build_payload<\/span>(pixel_code, order, advertising_consent,\n<\/span><span class=\"cbb-line\">                  email, phone_e164=<span class=\"cbb-constant\">None<\/span>):\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> advertising_consent <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-constant\">True<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">return<\/span> <span class=\"cbb-constant\">None<\/span>\n<\/span><span class=\"cbb-line\">    email = email.<span class=\"cbb-function\">strip<\/span>().<span class=\"cbb-function\">lower<\/span>()\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> <span class=\"cbb-keyword\">not<\/span> email:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">'Missing email for this example'<\/span>)\n<\/span><span class=\"cbb-line\">    user = {<span class=\"cbb-string\">'email'<\/span>: <span class=\"cbb-function\">sha256<\/span>(email)}\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">if<\/span> phone_e164 <span class=\"cbb-keyword\">is<\/span> <span class=\"cbb-keyword\">not<\/span> <span class=\"cbb-constant\">None<\/span>:\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-comment\"># Input already parsed and validated for its country.<\/span>\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-keyword\">if<\/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;{1,14}'<\/span>, phone_e164):\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-keyword\">raise<\/span> <span class=\"cbb-function\">ValueError<\/span>(<span class=\"cbb-string\">'Expected international phone number with +'<\/span>)\n<\/span><span class=\"cbb-line\">        user&#91;<span class=\"cbb-string\">'phone'<\/span>&#93; = <span class=\"cbb-function\">sha256<\/span>(phone_e164)\n<\/span><span class=\"cbb-line\">    <span class=\"cbb-keyword\">return<\/span> {\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-string\">'event_source'<\/span>: <span class=\"cbb-string\">'web'<\/span>,\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-string\">'event_source_id'<\/span>: pixel_code,\n<\/span><span class=\"cbb-line\">        <span class=\"cbb-string\">'data'<\/span>: &#91;{\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-string\">'event'<\/span>: <span class=\"cbb-string\">'Purchase'<\/span>,\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-string\">'event_time'<\/span>: order&#91;<span class=\"cbb-string\">'confirmed_at_unix'<\/span>&#93;,\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-string\">'event_id'<\/span>: order&#91;<span class=\"cbb-string\">'event_id'<\/span>&#93;,\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-string\">'user'<\/span>: user,\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-string\">'properties'<\/span>: {\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-string\">'content_type'<\/span>: <span class=\"cbb-string\">'product'<\/span>,\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-string\">'contents'<\/span>: order&#91;<span class=\"cbb-string\">'contents'<\/span>&#93;,\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-string\">'currency'<\/span>: order&#91;<span class=\"cbb-string\">'currency'<\/span>&#93;,\n<\/span><span class=\"cbb-line\">                <span class=\"cbb-string\">'value'<\/span>: order&#91;<span class=\"cbb-string\">'value'<\/span>&#93;\n<\/span><span class=\"cbb-line\">            },\n<\/span><span class=\"cbb-line\">            <span class=\"cbb-string\">'page'<\/span>: {<span class=\"cbb-string\">'url'<\/span>: order&#91;<span class=\"cbb-string\">'confirmation_url'<\/span>&#93;}\n<\/span><span class=\"cbb-line\">        }&#93;\n<\/span><span class=\"cbb-line\">    }<\/span><\/code><\/pre><\/figure>\n<p><code>order<\/code> oznacza ju\u017c zweryfikowany rekord backendu: potwierdzony zakup, zapisany sta\u0142y identyfikator, czas zakupu w ca\u0142ych sekundach od 1 stycznia 1970 UTC (czas uniksowy), w\u0142a\u015bciwy kod waluty, np. EUR, liczbow\u0105 warto\u015b\u0107 i list\u0119 produkt\u00f3w. Adres potwierdzenia musi nale\u017ce\u0107 do domeny sklepu i nie mo\u017ce zawiera\u0107 adresu e-mail, token\u00f3w dost\u0119pu ani innych poufnych parametr\u00f3w. Zezwolenie pochodzi z zaufanego rejestru zg\u00f3d, uwzgl\u0119dniaj\u0105cego znane wycofania; niesprawdzone pole z przegl\u0105darki nie wystarcza.<\/p>\n<p>Przyk\u0142ad usuwa odst\u0119py na pocz\u0105tku i ko\u0144cu adresu e-mail oraz zamienia litery na ma\u0142e. Nast\u0119pnie SHA-256 oblicza z tego tekstu skr\u00f3t o sta\u0142ej d\u0142ugo\u015bci. Opcjonalny numer telefonu musi ju\u017c mie\u0107 prawid\u0142ow\u0105 posta\u0107, na przyk\u0142ad <code>+12133734253<\/code>; znak plus pozostaje cz\u0119\u015bci\u0105 haszowanej warto\u015bci. Wyra\u017cenie regularne sprawdza jedynie podstawowy format, bez potwierdzania poprawno\u015bci numeru. Odczyt i sprawdzenie numeru wed\u0142ug zasad w\u0142a\u015bciwego kraju nast\u0119puj\u0105 przed wywo\u0142aniem funkcji. Brakuj\u0105cy numer jest pomijany. E-mail jest wymagany w tym uproszczonym przyk\u0142adzie, ale nie stanowi jedynej metody dopasowania obs\u0142ugiwanej przez TikTok.<\/p>\n<p>Haszowanie nie anonimizuje danych. Dodatkowe pola maj\u0105 osobne zasady: <code>external_id<\/code> wymaga haszowania, natomiast <code>ttclid<\/code>, <code>ttp<\/code>, adres IP i user agent s\u0105 przesy\u0142ane bez haszowania. Surowe identyfikatory i skr\u00f3ty nie powinny trafia\u0107 do og\u00f3lnych log\u00f3w diagnostycznych. Dane kontaktowe potrzebne do realizacji zam\u00f3wienia podlegaj\u0105 odr\u0119bnym zasadom retencji sklepu.<\/p>\n<p>Wysy\u0142ka powinna nast\u0119powa\u0107 mo\u017cliwie szybko po potwierdzeniu zakupu. Kolejka zachowuje pierwotn\u0105 identyfikacj\u0119 i czas, ponownie sprawdza zgod\u0119 przed wysy\u0142k\u0105 oraz ogranicza ponowienia. Ocena obejmuje status HTTP, czyli status odpowiedzi na \u017c\u0105danie sieciowe, oraz odpowied\u017a JSON zawieraj\u0105c\u0105 uporz\u0105dkowane dane wyniku: <code>code: 0<\/code> oznacza powodzenie wywo\u0142ania API, bez dowodu dopasowania osoby lub atrybucji reklamowej. Timeout oznacza brak odpowiedzi w wyznaczonym czasie. Mo\u017ce wyst\u0105pi\u0107 tak\u017ce po przyj\u0119ciu danych, dlatego potrzebny jest status \u201ewynik nieznany\u201d, bez tworzenia nowego identyfikatora zdarzenia.<\/p>\n<h2>Krok 5: Osobna kontrola dostarczenia, powt\u00f3rze\u0144 i przypisania do reklam<\/h2>\n<p>Test Events i udost\u0119pniony <code>test_event_code<\/code> s\u0142u\u017c\u0105 do sprawdzenia wybranej integracji. Dane testowe s\u0105 oddzielone od produkcji; konfiguracja testowa musi zosta\u0107 usuni\u0119ta przed rzeczywistym raportowaniem. Widoczne zahaszowane pola nie potwierdzaj\u0105 skutecznego dopasowania osoby. Kontrolowany zakup testowy sprawdza oba kana\u0142y, wsp\u00f3lny kod piksela, identyczne identyfikatory zdarzenia i zgodne warto\u015bci zakupu.<\/p>\n<p>Bie\u017c\u0105ca kontrola opiera si\u0119 na szczeg\u00f3\u0142ach deduplikacji i diagnostyce w Events Managerze. Sumowanie metryk przegl\u0105darkowych, serwerowych i wsp\u00f3lnych wymaga wcze\u015bniejszego sprawdzenia definicji. Same r\u00f3wne sumy nie dowodz\u0105 b\u0142\u0119du: bez nak\u0142adania kana\u0142\u00f3w nie wyst\u0119puj\u0105 duplikaty. Por\u00f3wnanie zmieniaj\u0105 r\u00f3wnie\u017c op\u00f3\u017anienia raportowania, strefy czasowe i filtry.<\/p>\n<p>Uzgodnienie z danymi sklepu wymaga jednakowej definicji zakupu, okresu i zbioru zakup\u00f3w dopuszczonych do przekazania. \u201eTotal Events\u201d obejmuje zdarzenia przypisane i nieprzypisane do reklam; zakupy przypisane do reklam w Ads Managerze zale\u017c\u0105 dodatkowo od dopasowania osoby i okien atrybucji, czyli dopuszczalnych okres\u00f3w mi\u0119dzy kontaktem z reklam\u0105 a zakupem. Przyj\u0119te zdarzenie nie jest zatem gwarantowan\u0105 konwersj\u0105 reklamow\u0105.<\/p>\n<div class=\"lw-faq\"><h2>Pytania i odpowiedzi<\/h2>\n<h3>Dlaczego nawet Events API nie zapewnia zgodno\u015bci z liczb\u0105 zam\u00f3wie\u0144?<\/h3>\n<p>Zgody, brak przypisania do reklamy, op\u00f3\u017anienia i inne zasady liczenia mog\u0105 wyja\u015bnia\u0107 r\u00f3\u017cnice obok b\u0142\u0119d\u00f3w technicznych. Rejestr wysy\u0142ki rozr\u00f3\u017cnia co najmniej: brak zezwolenia, zezwolenie i oczekiwanie, odrzucenie, przyj\u0119cie oraz wynik nieznany. Wewn\u0119trzny identyfikator zdarzenia, liczba pr\u00f3b, kod b\u0142\u0119du i request ID zwykle wystarczaj\u0105 do diagnostyki bez zapisywania pe\u0142nych zestaw\u00f3w danych klient\u00f3w.<\/p>\n<h3>Czy shop_ttclid zachowuje wa\u017cno\u015b\u0107 przez 30 dni w ka\u017cdej przegl\u0105darce?<\/h3>\n<p>Nie. Safari mo\u017ce usuwa\u0107 pami\u0119\u0107 zapisywaln\u0105 przez skrypty po siedmiu dniach u\u017cywania Safari bez interakcji z witryn\u0105; niekt\u00f3re przypadki dodawania identyfikator\u00f3w \u015bledzenia do link\u00f3w podlegaj\u0105 kr\u00f3tszym limitom. Ciasteczko ustawione przez serwer nie stanowi og\u00f3lnego obej\u015bcia: WebKit ogranicza r\u00f3wnie\u017c ciasteczka, gdy wykryje zewn\u0119trzn\u0105 us\u0142ug\u0119 ukryt\u0105 za aliasem DNS (CNAME) lub adresem IP pozornie nale\u017c\u0105cym do witryny. D\u0142u\u017csze przechowywanie nie zast\u0119puje zgody ani nie wyd\u0142u\u017ca okna atrybucji.<\/p>\n<h3>Czy warto\u015b\u0107 i koszyk musz\u0105 by\u0107 zgodne w obu zg\u0142oszeniach?<\/h3>\n<p>Tak. Oba zg\u0142oszenia opisuj\u0105 ten sam zakup. Jednolite zasady dotycz\u0105ce podatk\u00f3w, dostawy, waluty i produkt\u00f3w zapobiegaj\u0105 sprzecznym warto\u015bciom przychodu. TikTok mo\u017ce uzupe\u0142nia\u0107 brakuj\u0105ce pola wcze\u015bniejszego zg\u0142oszenia; sprzeczne warto\u015bci nie powinny polega\u0107 na domniemanym pierwsze\u0144stwie danych z serwera.<\/p><\/div>\n<div class=\"lw-quellen\"><h2>\u0179r\u00f3d\u0142a<\/h2><ul><li><a href=\"https:\/\/business-api.tiktok.com\/gateway\/docs\/index?doc_id=1771100865818625&amp;identify_key=c0138ffadd90a955c1f0670a56fe348d1d40680b3c89461e09f78ed26785164b&amp;language=ENGLISH\" target=\"_blank\" rel=\"noopener noreferrer\">TikTok Events API 2.0: Zdarzenia internetowe<\/a><\/li><li><a href=\"https:\/\/business-api.tiktok.com\/gateway\/docs\/index?doc_id=1771100779668482&amp;identify_key=c0138ffadd90a955c1f0670a56fe348d1d40680b3c89461e09f78ed26785164b&amp;language=ENGLISH\" target=\"_blank\" rel=\"noopener noreferrer\">TikTok Events API 2.0<\/a><\/li><li><a href=\"https:\/\/ads.tiktok.com\/resources\/help\/article\/how-to-adopt-tiktoks-updated-standard-events?lang=en\" target=\"_blank\" rel=\"noopener noreferrer\">TikTok: Zaktualizowane zdarzenia standardowe<\/a><\/li><li><a href=\"https:\/\/ads.tiktok.com\/resources\/help\/article\/event-deduplication?lang=en\" target=\"_blank\" rel=\"noopener noreferrer\">TikTok: Wykrywanie powt\u00f3rnych zdarze\u0144<\/a><\/li><li><a href=\"https:\/\/ads.tiktok.com\/resources\/help\/article\/tiktok-adobe-eapi-implementation-guide?lang=en\" target=\"_blank\" rel=\"noopener noreferrer\">TikTok: Instrukcja integracji Adobe<\/a><\/li><li><a href=\"https:\/\/ads.tiktok.com\/resources\/help\/article\/tiktok-tealium-eapi-implementation-guide?lang=en\" target=\"_blank\" rel=\"noopener noreferrer\">TikTok: Zdarzenia testowe Tealium<\/a><\/li><li><a href=\"https:\/\/ads.tiktok.com\/resources\/help\/article\/tiktok-events-manager-monitor-and-diagnose?lang=en\" target=\"_blank\" rel=\"noopener noreferrer\">TikTok: Kontrola w Events Managerze<\/a><\/li><li><a href=\"https:\/\/webkit.org\/tracking-prevention\/\" target=\"_blank\" rel=\"noopener noreferrer\">WebKit: Ochrona przed \u015bledzeniem<\/a><\/li><\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Piksel i Events API mog\u0105 zg\u0142asza\u0107 ten sam zakup. Wykrywanie powt\u00f3rze\u0144 wymaga zgodnego kodu piksela, nazwy i ID zdarzenia w ci\u0105gu 48 godzin. Zgoda i przypisanie do reklamy wymagaj\u0105 osobnych kontroli.<\/p>\n","protected":false},"author":1,"featured_media":13835,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[131],"tags":[92035,92038,92041,92044,92238],"class_list":["post-10130","post","type-post","status-publish","format-standard","hentry","category-tutorials-pl-digital-marketing-pl","tag-conversion-tracking-pl","tag-marketing-cyfrowy-pl-pl","tag-first-party-data-pl","tag-tracking-pl","tag-tutorial-pl"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Dwukana\u0142owe \u015bledzenie TikTok: piksel i serwerowe Events API wysy\u0142aj\u0105 ten sam zakup, spi\u0119te wsp\u00f3lnym event_id, wi\u0119c konwersja liczy si\u0119 raz.\" \/>\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\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Dwukana\u0142owe \u015bledzenie TikTok: piksel i serwerowe Events API wysy\u0142aj\u0105 ten sam zakup, spi\u0119te wsp\u00f3lnym event_id, wi\u0119c konwersja liczy si\u0119 raz.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-20T17:03:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-26T12:33:51+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10130-tutorial-wdrozenie-tiktok-events-api-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=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/\"},\"author\":{\"name\":\"Lukas Wojcik\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"headline\":\"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych\",\"datePublished\":\"2026-09-20T17:03:00+00:00\",\"dateModified\":\"2026-10-26T12:33:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/\"},\"wordCount\":1445,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10130-tutorial-wdrozenie-tiktok-events-api-g.png\",\"keywords\":[\"Conversion Tracking\",\"Digital Marketing\",\"First-Party Data\",\"Tracking\",\"Tutorial\"],\"articleSection\":[\"Tutorials\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/\",\"name\":\"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10130-tutorial-wdrozenie-tiktok-events-api-g.png\",\"datePublished\":\"2026-09-20T17:03:00+00:00\",\"dateModified\":\"2026-10-26T12:33:51+00:00\",\"description\":\"Dwukana\u0142owe \u015bledzenie TikTok: piksel i serwerowe Events API wysy\u0142aj\u0105 ten sam zakup, spi\u0119te wsp\u00f3lnym event_id, wi\u0119c konwersja liczy si\u0119 raz.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10130-tutorial-wdrozenie-tiktok-events-api-g.png\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/hero-10130-tutorial-wdrozenie-tiktok-events-api-g.png\",\"width\":1200,\"height\":630,\"caption\":\"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/pl\\\/digital-marketing-pl\\\/tutorials-pl-digital-marketing-pl\\\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych\"}]},{\"@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":"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych | Lukas Wojcik","description":"Dwukana\u0142owe \u015bledzenie TikTok: piksel i serwerowe Events API wysy\u0142aj\u0105 ten sam zakup, spi\u0119te wsp\u00f3lnym event_id, wi\u0119c konwersja liczy si\u0119 raz.","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\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/","og_locale":"en_US","og_type":"article","og_title":"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych | Lukas Wojcik","og_description":"Dwukana\u0142owe \u015bledzenie TikTok: piksel i serwerowe Events API wysy\u0142aj\u0105 ten sam zakup, spi\u0119te wsp\u00f3lnym event_id, wi\u0119c konwersja liczy si\u0119 raz.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/","og_site_name":"Lukas Wojcik - Blog","article_published_time":"2026-09-20T17:03:00+00:00","article_modified_time":"2026-10-26T12:33:51+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10130-tutorial-wdrozenie-tiktok-events-api-g.png","type":"image\/png"}],"author":"Lukas Wojcik","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Lukas Wojcik","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/#article","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/"},"author":{"name":"Lukas Wojcik","@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"headline":"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych","datePublished":"2026-09-20T17:03:00+00:00","dateModified":"2026-10-26T12:33:51+00:00","mainEntityOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/"},"wordCount":1445,"commentCount":0,"publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10130-tutorial-wdrozenie-tiktok-events-api-g.png","keywords":["Conversion Tracking","Digital Marketing","First-Party Data","Tracking","Tutorial"],"articleSection":["Tutorials"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/","url":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/","name":"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/#primaryimage"},"image":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/#primaryimage"},"thumbnailUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10130-tutorial-wdrozenie-tiktok-events-api-g.png","datePublished":"2026-09-20T17:03:00+00:00","dateModified":"2026-10-26T12:33:51+00:00","description":"Dwukana\u0142owe \u015bledzenie TikTok: piksel i serwerowe Events API wysy\u0142aj\u0105 ten sam zakup, spi\u0119te wsp\u00f3lnym event_id, wi\u0119c konwersja liczy si\u0119 raz.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/#primaryimage","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10130-tutorial-wdrozenie-tiktok-events-api-g.png","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/09\/hero-10130-tutorial-wdrozenie-tiktok-events-api-g.png","width":1200,"height":630,"caption":"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych"},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/pl\/digital-marketing-pl\/tutorials-pl-digital-marketing-pl\/tutorial-wdrozenie-tiktok-events-api-w-sklepach-internetowych\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Tutorial: Wdro\u017cenie TikTok Events API w sklepach internetowych"}]},{"@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\/10130","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=10130"}],"version-history":[{"count":8,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10130\/revisions"}],"predecessor-version":[{"id":27429,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/posts\/10130\/revisions\/27429"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media\/13835"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=10130"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/categories?post=10130"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=10130"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}