Toate destinațiile primesc același event_id pe care îl folosește și pixelul din browser (SDK-ul generează ID-ul o singură dată per eveniment și îl trimite în ambele direcții). Modurile per platformă (dashboard → Settings): hybrid (pixel + server, recomandat), server (fără pixel în browser), browser (fără server).
| Platformă | API | Dedup | Matching trimis de Edge | Test |
|---|---|---|---|---|
| Meta | Conversions API v21 (graph.facebook.com/<pixel>/events) | event_id = pixel eventID | IP, UA, _fbp, _fbc (din cookie sau fbclid), email/telefon/nume hash, external_id = hash(bc_id) | test_event_code → Events Manager → Test events |
| TikTok | Events API v1.3 (business-api.tiktok.com/open_api/v1.3/event/track/) | event_id = pixel event_id | IP, UA, _ttp, ttclid, email/telefon hash, external_id | test_event_code → Events Manager → Test events |
| Microsoft Ads | Conversions API (capi.uet.microsoft.com/v1/<tagId>/events) | eventId + eventName = uetq.push('event', <nume>, {event_id}) | anonymousId = bc_id, msclkid, IP, UA, email/telefon hash; adStorageConsent G/D | fără mod test; verifică UET → Conversion goals / răspunsul API în Events |
| ChatGPT Ads | Conversions API (bzr.openai.com/v1/events?pid=) | id = pixel event_id | email/telefon hash, IP, UA, oppref (click id) | validate_only (checkbox în Settings) |
| GA4 / Google Ads | prin sGTM (GA4 client) — Edge trimite evenimentul în format Measurement Protocol cu IP/UA/cookie-urile originale | transaction_id / dedup nativ | cookie FPID (sGTM), gclid prin Conversion Linker | GA4 DebugView / Google Ads Diagnostics |
Evenimente canonice → nume per platformă:
| canonic | Meta | TikTok | Microsoft (eventName) | ChatGPT Ads |
|---|---|---|---|---|
| page_view | PageView | Pageview | pageLoad (eveniment separat) | page_viewed |
| view_content | ViewContent | ViewContent | view_content | contents_viewed |
| add_to_cart | AddToCart | AddToCart | add_to_cart | items_added |
| initiate_checkout | InitiateCheckout | InitiateCheckout | initiate_checkout | checkout_started |
| purchase | Purchase | CompletePayment | purchase | order_created |
| lead | Lead | SubmitForm | lead | lead_created |
| complete_registration | CompleteRegistration | CompleteRegistration | complete_registration | registration_completed |
Detalii de format: Meta contents[{id, quantity, item_price}] + content_ids/num_items/order_id; TikTok contents[{content_id, content_type, content_name, price, quantity}] + order_id; Microsoft customData.items[{id, quantity, price, name}] + itemIds, pageType, value/ecommTotalValue; OpenAI amount întreg în unități minore (25.99 → 2599), contents[{id, name, quantity, amount}], customer_action pentru lead/înregistrare.
Consimțământ: cu ad_storage = denied (starea din GTM, trimisă de tag-ul web) Meta/TikTok/OpenAI nu primesc evenimentul (setare per platformă „Only send when ad_storage is granted"); Microsoft primește adStorageConsent: D (nu îl folosește pentru atribuire/remarketing, conform spec).
Microsoft remarketing cere ID Sync în browser: cu „Customer ID" completat, SDK-ul trage o dată pe sesiune c.bing.com/c.gif?Red3=BACID_<CID>&VID=<bc_vid>; bc_vid e același identificator pe care Edge îl trimite ca anonymousId.
Google Ads: nu are API public server-to-server pentru conversii web — se folosesc tag-urile native din containerul server (Conversion Linker + Conversion Tracking + user-provided data), alimentate de evenimentele forwardate de Edge/Google tag. Pașii exacți sunt în dashboard → client → Install → secțiunea 4.
Preset heartbeat. The server preset ships a small custom template ("Bigconvert heartbeat") and a tag firing under the same conditions as the GA4 tag: a GET to https://<host>/bc/preset-ping with the container version and event name, no user data. Edge stores the last ping per client (preset-ping-<slug>.json in the edge-logs volume); the Install page's Check section shows *live / seen only in Preview / not seen yet*. A 200 from the server container only means the GA4 client claimed the request, not that any tag fired.
Server container modes. destinations.ga4: true = Edge forwards every recognised event to the client's server container (GA4 tag + Google Ads tags fire there); rules-only = only rule-created events reach GA4, but events the Google Ads server tags want are still forwarded with ep.bc_ga4=0 so the preset's GA4 tag skips them (Google Ads S2S never depends on GA4); false = nothing is forwarded.
Each canonical event (page_view, view_content, view_item_list, add_to_cart, initiate_checkout, purchase, lead, complete_registration) has one switch per platform: GA4 / server container, Google Ads (browser), Google Ads (server: the preset's native tags, gated by the bc_ads event-data flag Edge adds to the GA4 forward), Meta, TikTok, Microsoft, ChatGPT Ads. Untick a cell when another system already sends that event to that platform (typical: purchase from the POS / ERP integration such as ProductXL) so it is not counted twice; everything else keeps flowing. The web SDK skips that platform's pixel (and the server POST entirely when every server platform is off); Edge marks the destination as skipped, so direct posts cannot bypass it. The GA4 column controls the GA4-format forward to the server container, which also feeds the native Google Ads tags configured there.
The server container receives events through its GA4 *client* (a transport format). Edge forwards events there even when the client has no GA4 Measurement ID (placeholder tid=G-BCSERVER). Inside the container the native Google Ads Conversion Tracking / Remarketing tags (from the preset) send straight to Google Ads with the conversion ID + label and the gclid kept by Conversion Linker; attribution is Google Ads' own, not a GA4 import. The GA4 tag is optional.
Orders arriving from the shop backend (POST /bc/webhook/<secret>?source=woocommerce|shopify|generic) become the canonical profit event (value = profit after purchase cost, shipping, packing, fees) with the attribution of the visit that placed them (visitor store). Destinations: GA4 purchase_profit + the preset's Google Ads conversion tag "Profit (POAS)" (label with event profit), Meta custom event Profit; other platforms only if switched on in the Events matrix. Cancellations/refunds after the send become GA4 refund. Full guide: docs/OFFLINE_POAS.md.
destinations.googleads + googleAdsApi{customerId, actions, …}: Edge uploads the events that have a conversion action straight into Google Ads through the Data Manager API (events:ingest; click id or hashed email/phone, consent signals, eventSource), and retracts them by order id on refund through the Google Ads API (uploadConversionAdjustments). The old uploadClickConversions path is kept behind uploadVia: 'adsapi' for developer tokens allowlisted before 15 June 2026 only. Independent of the server container; the two can coexist (use the Events matrix to avoid double counting: either the server tag or the API for a given event). Guide: docs/GOOGLE_ADS_API.md.