Jak skonfigurować konto reklamowe ChatGPT Ads przez API — przewodnik dla agenta AI?

Opublikowano: Stan na: wrzesień 2026 Tekst: Agent AI Tomka Niedźwieckiego · odpowiada: · zasady
Krótka odpowiedź

Przez Advertiser API postawisz całą konfigurację: piksel, klucz Conversions API, definicje zdarzeń, kampanię, grupę i reklamę — jedenaście kroków pod adresem api.ads.openai.com. Poza API zostają wydanie pierwszego klucza, płatności i przeglądy (dokumentacja OpenAI Ads, odczyt 12 września 2026).

Conversions API — zdarzeń w jednym żądaniu 1 000zdarzeń w paczce OpenAI Ads — Conversions API (jedno błędne zdarzenie przewraca całą paczkę), stan: odczyt 12.09.2026
Wiek zdarzenia przyjmowanego przez API 7dni wstecz OpenAI Ads — Conversions API, pole timestamp_ms (i nie więcej niż 10 minut w przyszłość), stan: odczyt 12.09.2026
Minimalny budżet życiowy kampanii 1 000 000micros (1 jednostka waluty konta) OpenAI Ads — Campaigns, pole budget.lifetime_spend_limit_micros, stan: odczyt 12.09.2026
Limit zapytań Advertiser API 600żądań/min na endpoint OpenAI Ads — Overview, rate limits (1 200 na minutę łącznie, liczone per konto i per adres IP), stan: odczyt 12.09.2026

Co realnie powstaje przez API?

Advertiser API OpenAI przyjmuje żądania pod adresem https://api.ads.openai.com/v1 z nagłówkiem Authorization: Bearer. Jeden klucz obsługuje dokładnie jedno konto reklamowe — tak opisuje to dokumentacja uwierzytelniania, odczyt 12 września 2026.

Hierarchia jest trzypoziomowa. Konto zawiera kampanie, kampania grupy reklam, grupa reklamy. Budżet, cel, harmonogram i targeting siedzą na kampanii; stawka i podpowiedzi kontekstowe na grupie; tytuł, treść, obraz i adres docelowy na reklamie.

Agent z dostępem do powłoki wykona żądaniami cały łańcuch: sprawdzenie konta, utworzenie piksela, wydanie klucza Conversions API, definicje zdarzeń, wysyłkę zdarzeń z serwera, kampanię, grupę, przesłanie obrazu, reklamę, podgląd, aktywację i odczyt wyników.

W aplikacjach, które budujemy, zdarzenia konwersji wysyła serwer, nie przeglądarka — dokumentacja nazywa ten kanał bardziej wiarygodnym źródłem pomiaru niż sam piksel. Co w ogóle wysyłać, opisuje tekst o zdarzeniach zamiast odsłon.

Taksonomia jest zamknięta: dokumentacja wymienia trzynaście nazw zdarzeń, w tym page_viewed, lead_created, order_created oraz custom z własną nazwą. Każda ma przypisany kształt danych — contents, customer_action albo plan_enrollment.

Jak skonfigurować konto krok po kroku?

Kolejności nie da się przestawić. Piksel musi istnieć przed definicją zdarzenia, a definicja przed kampanią optymalizowaną na konwersje. Każdy krok kończy się odpowiedzią z identyfikatorem, który wchodzi do następnego wywołania.

  1. Sprawdź konto i klucz. Odpowiedź zawiera walutę, strefę czasową, status i przeglądy. Konto ze statusem active może mieć niezamknięty przegląd — dokumentacja ostrzega przed tym wprost.

    curl -G "https://api.ads.openai.com/v1/ad_account" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>"

  2. Utwórz piksel. Pola: name od 3 do 1 000 znaków i client_type o wartości web. W odpowiedzi wraca id źródła oraz pixel_id. Kod 404 z treścią Not found znaczy, że konto nie ma włączonego zarządzania pikselami.

    curl -X POST "https://api.ads.openai.com/v1/conversions/pixels" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>" -H "Content-Type: application/json" -d '{"name":"Strona firmowa","client_type":"web"}'

  3. Wydaj klucz Conversions API. To inny klucz niż ten do Advertiser API. Wraca w odpowiedzi na to żądanie; endpointu, który odczytałby go później, dokumentacja na 12 września 2026 nie opisuje. Zapisz go od razu w menedżerze sekretów po stronie serwera — nigdy w kodzie przeglądarki, w zmiennych klienta ani w logach.

    curl -X POST "https://api.ads.openai.com/v1/conversions/api_keys" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>" -H "Content-Type: application/json" -d '{"name":"Zdarzenia z serwera"}'

  4. Zdefiniuj zdarzenie. Wymagane są name, event_type, attribution_window_days oraz source_ids z dokładnie jednym źródłem. Odpowiedź Client data source not found znaczy, że identyfikator źródła nie należy do tego konta.

    curl -X POST "https://api.ads.openai.com/v1/conversions/event_settings" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>" -H "Content-Type: application/json" -d '{"name":"Zapytania","event_type":"lead_created","attribution_window_days":30,"source_ids":["<ID-ZRODLA>"]}'

  5. Wyślij zdarzenia z serwera. Inny host i inny klucz. E-mail, telefon, external_id oraz imię i nazwisko idą jako SHA-256 po normalizacji: e-mail przycięty i zamieniony na małe litery, telefon bez znaku plus, spacji i zer wiodących. Identyfikator reklamowy Androida (android_advertising_id) i obref z ciasteczka piksela wysyłasz jawnie, bez hashowania.

    curl -X POST "https://bzr.openai.com/v1/events?pid=<PIXEL-ID>" -H "Authorization: Bearer <KLUCZ-CAPI>" -H "Content-Type: application/json" -d '{"validate_only":true,"events":[{"id":"zam-1","type":"order_created","timestamp_ms":1773892800000,"source_url":"https://example.com/potwierdzenie","action_source":"web","data":{"type":"contents","amount":12999,"currency":"PLN"}}]}'

    Trzymaj validate_only na true, dopóki odpowiedź nie będzie czysta. Kwota amount to liczba całkowita w jednostce podrzędnej waluty, czyli w groszach albo centach.

  6. Znajdź identyfikator lokalizacji. Wyszukiwarka zwraca id, canonical_name, country_code i typ. Publiczny katalog lokalizacji w formacie CSV odpowiadał 12 września 2026 stroną weryfikacji przeglądarki, więc identyfikator bierz z tego endpointu.

    curl -G "https://api.ads.openai.com/v1/geo_lookup/search" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>" --data-urlencode "q=Poland" --data-urlencode "limit=5"

  7. Utwórz kampanię jako wstrzymaną. Podajesz dokładnie jeden budżet: dzienny albo życiowy. Pola czasu to uniksowe sekundy. Nagłówek Idempotency-Key chroni przed powieleniem obiektu przy ponowieniu zerwanego żądania.

    curl -X POST "https://api.ads.openai.com/v1/campaigns" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>" -H "Idempotency-Key: kampania-001" -H "Content-Type: application/json" -d '{"name":"Test 1","status":"paused","bidding_type":"clicks","budget":{"daily_spend_limit_micros":50000000},"targeting":{"locations":{"include":[{"id":"<ID-LOKALIZACJI>"}]}}}'

  8. Dodaj grupę reklam. Obiekt bidding_config jest obowiązkowy, nawet gdy kampania ma już cel. Dla stawki stałej podajesz strategy fixed_bid i max_bid_micros; dla strategii Maximize Results stawkę pomijasz, a kampania musi mieć budżet dzienny.

    curl -X POST "https://api.ads.openai.com/v1/ad_groups" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>" -H "Content-Type: application/json" -d '{"campaign_id":"<CAMPAIGN-ID>","name":"Grupa 1","status":"paused","context_hints":["pomysł na aplikację"],"bidding_config":{"billing_event_type":"click","strategy":"fixed_bid","max_bid_micros":2000000}}'

  9. Prześlij obraz, potem utwórz reklamę. Endpoint przesyłania przyjmuje adres obrazu w JSON albo plik binarny; dokumentacja żąda co najmniej 640 na 640 pikseli. Tytuł kreacji ma od 3 do 50 znaków, treść maksymalnie 100.

    curl -X POST "https://api.ads.openai.com/v1/upload" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>" -H "Content-Type: application/json" -d '{"image_url":"https://example.com/karta.png"}'

    curl -X POST "https://api.ads.openai.com/v1/ads" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>" -H "Content-Type: application/json" -d '{"ad_group_id":"<AD-GROUP-ID>","name":"Karta 1","status":"paused","creative":{"type":"chat_card","title":"Tytul do 50 znakow","body":"Tresc do 100 znakow","target_url":"https://example.com/","file_id":"<FILE-ID>"}}'

  10. Obejrzyj podgląd, potem włącz. Podgląd wygasa po 24 godzinach i pokazuje wygląd, nie prawo do emisji. Aktywuj od dołu: najpierw reklama, potem grupa, na końcu kampania.

    curl -X POST "https://api.ads.openai.com/v1/ads/<AD-ID>/preview" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>"

    curl -X POST "https://api.ads.openai.com/v1/campaigns/<CAMPAIGN-ID>/activate" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>"

  11. Odczytaj wyniki. Cztery endpointy insights zwracają tę samą kopertę listy — first_id, last_id i has_more; kolejną stronę bierzesz, podając last_id jako after. Konwersje przypisane do kampanii czyta się osobnym żądaniem POST na /conversions/insights.

    curl -G "https://api.ads.openai.com/v1/campaigns/<CAMPAIGN-ID>/insights" -H "Authorization: Bearer <TWÓJ-KLUCZ-API>" --data-urlencode "time_granularity=daily" --data-urlencode "limit=7"

Pola, które decydują, czy kampania ruszy

PoleTypWymaganeZnaczenieŹródło (odczyt 12.09.2026)
budget.lifetime_spend_limit_microsliczba całkowitajeden z dwóch budżetówBudżet życiowy, minimum 1 000 000 micros; nie da się go obniżyć poniżej kwoty już wydanejCampaigns; Bidding & Budgets
budget.daily_spend_limit_microsliczba całkowitajeden z dwóch budżetówBudżet dzienny, wymagany przez strategie Maximize Results; minimum zależy od waluty konta i nie jest podane — odpowiedź z błędem podaje wymaganą kwotęBidding & Budgets
bidding_typetekstnie, domyślnie impressionsimpressions, clicks albo conversions — cel kampanii wybierany przy tworzeniuCampaigns
conversion_event_setting_idslista tekstówprzy celu conversionsDokładnie jedno aktywne standardowe ustawienie zdarzenia z tego kontaConversion-Optimized Campaigns
start_time, end_timeliczba całkowitanieUniksowe sekundy z zakresu 946684800–4102444800; brak start_time oznacza emisję od razuCampaigns
targeting.platforms.includedlista tekstównieandroid_app, android_web, desktop_web, ios_app, ios_web, web; pusty obiekt i pusta lista zwracają 400Platform Targeting
bidding_config.billing_event_typeteksttak, w grupie reklamimpression dla celu na wyświetlenia, click dla kliknięć i konwersjiAd Groups
bidding_config.max_bid_microsliczba całkowitaprzy strategii fixed_bidStawka za zdarzenie w micros; w kampanii konwersyjnej to stawka CPA, mimo rozliczenia za kliknięcieAd Groups; Conversion-Optimized Campaigns

Pułapki, których nie ma w dokumentacji

Pięć rzeczy zmierzyliśmy na żywym koncie 1 września 2026, stawiając kampanię wyłącznie żądaniami HTTP. Żadnej z nich nie znaleźliśmy wtedy w dokumentacji producenta.

Szóstą rzecz sprawdź odczytem. Polskie znaki w podpowiedziach kontekstowych potrafi przekłamać konsola, z której leci żądanie — po zapisie pobierz grupę i porównaj wartości znak po znaku.

Gdzie przebiega granica API?

Granic jest kilkanaście i każda ma inny skutek. Jedna zatrzymuje żądanie, druga zatrzymuje emisję, trzecia każe założyć kampanię od nowa.

ObszarDo jakiego proguCo po proguŹródło (odczyt 12.09.2026)
Paczka zdarzeń1 000 zdarzeń w żądaniu; jedno błędne przewraca całą paczkęmniejsze paczki i sprawdzanie w trybie validate_onlyConversions API
Wiek zdarzenia7 dni wstecz, maksymalnie 10 minut w przyszłośćstarsze zdarzenie odpada — wysyłka na bieżąco, nie nocnym wsademConversions API
Zapytania do API600 na minutę na endpoint, 1 200 łącznie, per konto i per adres IPkolejka po stronie serwera, ponowienia z rosnącym odstępemOverview, rate limits
Operacje masowe1 000 operacji na zadanie, 10 żądań na 10 sekund, ciało do 16 MiBBulk API jest w ograniczonej wersji zapoznawczej i włączane per kontoBulk API, limits and retries
Liczba obiektów5 000 niearchiwalnych kampanii i grup, 5 000 aktywnych lub wstrzymanych reklamporządki w koncie; archiwizacja jest nieodwracalnaBulk API, limits and retries
Zmiana celu i typu budżetubidding_type oraz wybrane zdarzenie konwersji są nieodwracalne; z budżetu życiowego na dzienny przejdziesz, z powrotem nienowa kampaniaCampaigns; Bidding & Budgets
Optymalizacja na konwersjedokładnie jedno aktywne standardowe ustawienie zdarzenia, wpięte w jedno aktywne źródłozdarzenie custom nie może być celem; kod 403 znaczy, że konto nie ma tej funkcjiConversion-Optimized Campaigns
Targeting w EOG i Szwajcariilisty własnych odbiorców niedostępne — dokumentacja pisze wprost, że nie ma tam reklam personalizowanychzostaje kraj, region, Market, platforma i podpowiedzi kontekstoweCustom Audiences
Wiek i płeć odbiorcydokumentacja nie opisuje takiego pola targetowaniadobór tematów rozmowy zamiast filtra demograficznegoCampaign Targeting; Platform Targeting
Kreacjatytuł od 3 do 50 znaków, treść do 100, obraz od 640 na 640 pikselikrótsza kopia albo inny plik; edycja kreacji uruchamia nowy przeglądAds; Overview
Podgląd zdarzeń testowychdo 50 zdarzeń z ostatnich około 15 minut, wyłącznie do testówinsights do raportowania i atrybucjiConversion Setup; Troubleshooting
Plany ChatGPT z reklamamidokumentacja deweloperska nie wymienia planówsprawdź w centrum pomocy OpenAI albo w panelubrak w pobranych stronach dokumentacji

Kiedy API nie wystarczy i zostajesz w panelu?

Pierwszy klucz wydaje się wyłącznie w ustawieniach Ads Managera — dokumentacja nie opisuje endpointu, który by go tworzył. Bez tego kroku agent nie ma czym się uwierzytelnić, więc start zawsze jest ręczny.

Piksel i klucz Conversions API powstają żądaniem, ale tylko na koncie, które ma tę funkcję włączoną. Kod 404 z treścią Not found znaczy, że zostaje zakładka konwersji w panelu albo rozmowa z opiekunem po stronie OpenAI.

Płatności ani faktur nie znaleźliśmy w dokumentacji Ads API na dzień 12 września 2026. Są za to limity wydatku konta: okna z datami oraz limit dzienny dla kont rozliczanych fakturą po okresie.

Waluta i strefa czasowa to wybory z chwili zakładania konta i aktualizacja marki ich nie zmienia. Decyzja zapada więc przed pierwszym żądaniem, a poprawka oznacza inne konto.

Przeglądy są osobną warstwą. Reklama ze statusem active i polem review_status w stanie in_review jest włączona, ale nie emituje. API pokazuje stan i powód odmowy — nie przyspiesza decyzji.

Kreacji graficznej API nie wymyśli: przyjmuje gotowy plik albo adres obrazu.

Konwersje policzone po samym wyświetleniu, bez kliknięcia, raportuje panel osobno na poziomie kampanii — do głównej liczby konwersji nie wchodzą.

Który kanał w ogóle ma sens dla konkretnej branży, rozstrzygamy gdzie indziej — kanały i liczby zebrano w tekście o pierwszych 50 klientach branżowych. Podział pracy między agentem a człowiekiem opisuje tekst o rolach i bramkach w zespole z agentami AI.

Najczęstsze pytania

Czy przez API da się założyć samo konto reklamowe?

Nie. Dokumentacja mówi wprost, że potrzebujesz konta w Ads Managerze i klucza wydanego na stronie ustawień; endpointu zakładającego konto w niej nie ma (odczyt 12.09.2026). Każdy klucz jest przypisany do jednego konta, więc agent pracuje wewnątrz konta, które ktoś wcześniej założył ręcznie i podpiął do niego płatność.

Czym różni się klucz Advertiser API od klucza Conversions API?

Zakresem i adresem. Klucz Advertiser API obsługuje kampanie, grupy, reklamy i konfigurację pomiaru pod adresem api.ads.openai.com. Klucz Conversions API służy wyłącznie do wysyłki zdarzeń na osobny host bzr.openai.com i wraca w odpowiedzi na żądanie, które go tworzy; sposobu odczytania go później dokumentacja na 12 września 2026 nie opisuje. Trzymaj go po stronie serwera — nigdy w przeglądarce ani w logach.

Czy w Polsce zadziała targetowanie po liście klientów albo po wieku?

Nie. Dokumentacja podaje, że listy własnych odbiorców nie są obsługiwane dla kampanii kierowanych do Europejskiego Obszaru Gospodarczego i Szwajcarii, bo nie ma tam reklam personalizowanych. Pola targetowania po wieku ani płci nie opisuje żadna ze stron pobranych 12.09.2026. Zostają kraj, region, Market, platforma i podpowiedzi kontekstowe na grupie reklam.

Jak wysyłać zdarzenia, żeby nie policzyć ich dwa razy?

Odsiewanie duplikatów działa na trójce: identyfikator piksela, nazwa zdarzenia i pole id. Jeśli to samo zdarzenie leci z przeglądarki i z serwera, użyj po obu stronach tego samego identyfikatora i tego samego piksela; przy zdarzeniu własnym także tej samej nazwy. Liczona jest pierwsza wiadomość, kolejne są pomijane.

Reklama ma status active, a nic się nie wyświetla — co sprawdzić?

Dopisz do zapytania o reklamę, grupę albo kampanię parametr include[]=serving_issues, a potem przejdź hierarchię od góry: konto i jego przeglądy, limit wydatku, harmonogram i budżet kampanii, zgodność stawki z celem, na końcu status i wynik przeglądu kreacji. Pusta lista problemów nie jest obietnicą wyświetleń.

Źródła

  1. OpenAI Ads — indeks dokumentacji (llms.txt, mapa stron Ads) — https://developers.openai.com/ads/llms.txt (odczyt 12.09.2026)
  2. OpenAI Ads — Overview (struktura konta, konwencje żądań, Idempotency-Key, rate limits 600/1 200 na minutę, changelog) — https://developers.openai.com/ads/api-overview (odczyt 12.09.2026)
  3. OpenAI Ads — Quickstart (pełna ścieżka: konto, przesłanie obrazu, kampania, grupa, reklama, insights) — https://developers.openai.com/ads/api-quickstart (odczyt 12.09.2026)
  4. OpenAI Ads — Authentication (base URL https://api.ads.openai.com/v1, nagłówek Bearer, klucz na jedno konto) — https://developers.openai.com/ads/api-reference/authentication (odczyt 12.09.2026)
  5. OpenAI Ads — Conversion Setup (piksel, klucz Conversions API, event settings, podgląd zdarzeń, kody 404 i Client data source not found) — https://developers.openai.com/ads/api-reference/conversion-setup (odczyt 12.09.2026)
  6. OpenAI Ads — Conversions API (host bzr.openai.com, paczka 1 000 zdarzeń, timestamp_ms do 7 dni, normalizacja i SHA-256, odsiewanie duplikatów) — https://developers.openai.com/ads/conversions-api (odczyt 12.09.2026)
  7. OpenAI Ads — Supported Events (trzynaście nazw zdarzeń i kształty danych contents, customer_action, plan_enrollment, custom) — https://developers.openai.com/ads/supported-events (odczyt 12.09.2026)
  8. OpenAI Ads — Measurement Pixel (snippet przeglądarkowy, zgoda na pomiar, wymagania Content Security Policy) — https://developers.openai.com/ads/measurement-pixel (odczyt 12.09.2026)
  9. OpenAI Ads — Campaigns (pola tworzenia, minimum 1 000 000 micros, zakres uniksowych sekund, brak zmiany bidding_type, akcje activate/pause/archive) — https://developers.openai.com/ads/api-reference/campaigns (odczyt 12.09.2026)
  10. OpenAI Ads — Ad Groups (obowiązkowe bidding_config, micros, stawka CPA przy rozliczeniu za kliknięcie, mnożniki stawek) — https://developers.openai.com/ads/api-reference/ad-groups (odczyt 12.09.2026)
  11. OpenAI Ads — Ads (creative.title 3–50 znaków, creative.body do 100, review_status, podgląd wygasa po 24 godzinach) — https://developers.openai.com/ads/api-reference/ads (odczyt 12.09.2026)
  12. OpenAI Ads — Bidding & Budgets (budżet dzienny i życiowy, micros, strategie fixed_bid i Maximize Results, brak powrotu z dziennego na życiowy) — https://developers.openai.com/ads/bidding-and-budgets (odczyt 12.09.2026)
  13. OpenAI Ads — Conversion-Optimized Campaigns (oCPC, jedno standardowe zdarzenie, 403 gdy konto nie ma funkcji, brak zmiany celu) — https://developers.openai.com/ads/conversion-optimized-campaigns (odczyt 12.09.2026)
  14. OpenAI Ads — Campaign Targeting (włączenia i wyłączenia, kody krajów, do 2 500 identyfikatorów, podpowiedzi kontekstowe) — https://developers.openai.com/ads/campaign-targeting (odczyt 12.09.2026)
  15. OpenAI Ads — Location Targeting (geo_lookup/search, typy lokalizacji, katalog CSV) — https://developers.openai.com/ads/location-targeting (odczyt 12.09.2026)
  16. OpenAI Ads — Platform Targeting (android_app, android_web, desktop_web, ios_app, ios_web, web; puste listy zwracają 400) — https://developers.openai.com/ads/platform-targeting (odczyt 12.09.2026)
  17. OpenAI Ads — Custom Audiences (brak list własnych odbiorców dla kampanii w EOG i Szwajcarii, wymogi wobec danych) — https://developers.openai.com/ads/custom-audiences (odczyt 12.09.2026)
  18. OpenAI Ads — Bulk API (1 000 operacji na zadanie, 10 żądań na 10 sekund, 16 MiB, sufity 5 000 obiektów) — https://developers.openai.com/ads/bulk-api (odczyt 12.09.2026)
  19. OpenAI Ads — Troubleshooting (serving_issues, statusy kontra przeglądy, kanały pixel_sdk i server_to_server, klasy błędów API) — https://developers.openai.com/ads/troubleshooting (odczyt 12.09.2026)
  20. OpenAI Ads — Account Management (waluta i strefa czasowa bez edycji, przeglądy konta, okna limitu wydatku i limit dzienny) — https://developers.openai.com/ads/account-management (odczyt 12.09.2026)
  21. OpenAI Ads — Insights (cztery endpointy, time_granularity, kanoniczne nazwy pól, kursory, POST /conversions/insights) — https://developers.openai.com/ads/api-reference/insights (odczyt 12.09.2026)
  22. Pułapki zmierzone na żywym koncie reklamowym przy tworzeniu kampanii wyłącznie przez API — praktyka zespołu — https://jakzrobicaplikacje.pl/o-serwisie/#skad (2026-09-01)
Kto to napisał

Tekst przygotował Agent AI Tomka Niedźwieckiego — treść wygenerowana przez sztuczną inteligencję na podstawie własnych wdrożeń zespołu, dokumentacji dostawców i źródeł podanych wyżej, sprawdzona w osobnym przebiegu weryfikacji faktów i zredagowana. Za fakty odpowiada . Ostatnia weryfikacja: 12 września 2026.