Postback (S2S) tracking overview

Last updated: May 19, 2026

Postback (S2S) tracking overview

Postback is server-to-server conversion tracking. When a conversion happens on your tracker side, the tracker calls a Wevion URL with the conversion details. Wevion processes the event and forwards it to your configured ad platforms (Meta CAPI / Google Conversions / TikTok Events). Bypasses browser limitations like iOS ATT opt-out, ad blockers, cookie deprecation.

Who is this for

Affiliate marketers, performance buyers running tracker-based funnels (Keitaro/Voluum/RedTrack), anyone whose conversion attribution dropped after iOS 14.5 (browser pixel less reliable).

What "S2S" means

S2S (Server-to-Server) = no browser involved. Instead of:

User browses → Browser pixel fires → Ad platform receives via browser

You have:

User browses → Tracker server logs conversion → Tracker sends HTTP request to Wevion → Wevion forwards to ad platform via API

The conversion travels server-to-server (tracker → Wevion → ad platform), never relying on the user's browser to send the signal.

Why use postback

Browser pixel limitation

How postback solves it

Ad blockers silence pixel JS

Server-side bypasses blockers

iOS 14.5+ ATT opt-out reduces tracking

Server-side unaffected

3rd-party cookie deprecation

No cookies needed (server has the data)

Off-site conversions (affiliate funnels, app installs via tracker)

Server-side is the only option

Customer abandons before pixel loads

Server already logged via your backend

For affiliate funnels especially: the conversion often happens on the offer's site (not yours), so you can't install pixel there — postback is the only way.

Wevion's postback endpoints

Verified vs apps/backend/src/routes/api/postback.route.ts:

Endpoint

Method

Purpose

/api/v1/postback/config

GET

Get your unique postback URL template + supported macros

/api/v1/postback/conversions

POST

Receive a conversion event from a tracker

/api/v1/postback/conversions/currencies

GET

List supported currencies for postback events

The postback service: apps/backend/src/services/meta-postback-conversion.service.ts. Repository: apps/backend/src/repositories/meta-postback-conversion.repository.ts.

How it works end-to-end

1. User clicks your ad on Meta
   ↓
2. Lands on tracker URL (Keitaro / Voluum / etc.) with click_id
   ↓
3. Tracker logs the click + redirects to your offer
   ↓
4. User converts on the offer (purchase, signup, install)
   ↓
5. Offer fires a postback to your tracker with conversion details
   ↓
6. Tracker logs conversion + sends postback to Wevion's URL
   (Wevion URL configured in tracker's Postback URL field)
   ↓
7. Wevion receives at POST /api/v1/postback/conversions
   ↓
8. Wevion matches conversion to ad campaign via click_id
   ↓
9. Wevion forwards to Meta CAPI / Google / TikTok using campaign attribution
   ↓
10. Ad platform credits the conversion to the right campaign

This chain provides 100% server-side tracking with zero browser dependency.

Macros / variables in postback URLs

Your Wevion postback URL template looks like:

https://api.wevion.ai/api/v1/postback/conversions?
  event={event_name}
  &value={value}
  &currency={currency}
  &click_id={click_id}
  &user_email={user_email}
  &custom_data={custom_data}

Macros (the {...} parts) get replaced by your tracker with actual values when firing the postback. Common macros:

  • {click_id} — the click ID (used for ad attribution)

  • {value} — conversion revenue

  • {currency} — 3-letter currency code (USD, EUR, etc.)

  • {event_name} — event type (Purchase, Lead, SignUp, etc.)

  • {user_email} — customer email (hashed for ad-platform sends)

  • {custom_data} — any extra parameters

Different trackers use different macro syntaxes:

  • Keitaro: {click_id}, {revenue}, {currency}

  • Voluum: ${click_id}, ${payout}, ${currency}

  • RedTrack: {clickid}, {sum}, {currency}

See your tracker's postback documentation for the exact syntax to use.

Setup walkthrough

Detailed step-by-step in com-110 postback setup.

When to use postback vs pixel

Use postback when

Use browser pixel when

Affiliate marketing (funnel touches offer site)

Direct e-commerce on your own site

App installs (tracker → MMP → ad platform)

Lead-gen forms on your site

Off-site conversion events

High-value conversions where dedup matters

Privacy-conscious users (iOS, ad blockers)

Generally for redundancy alongside CAPI

Server-side data already collected

Browser-side data only

Best: use both with deduplication via event_id matching. See com-111 postback vs pixel.

Supported event types

Wevion postback accepts standard event names:

  • Purchase / Sale — primary monetary conversion

  • Lead — form submission

  • SignUp / Registration — account creation

  • AddToCart

  • Subscribe

  • App_Install — for mobile app campaigns

  • Custom_* — any custom event your funnel tracks

Event names normalized to standard Meta CAPI / Google Conversions naming when forwarding.

Security and rate limiting

  • HTTPS-only endpoint

  • Per-workspace unique URL with workspace-specific signature

  • Rate limiting per workspace (default: 1000 events/min, configurable on Enterprise)

  • Audit log records every postback event

  • Optional IP allowlist for sending trackers (Enterprise)

What you'll see

Healthy postback setup:

  • /connect/postback → recent events tab shows incoming events

  • Per-event status: received, matched, forwarded (or failed at any stage)

  • Click-attribution success rate (target > 90%)

  • Forwarded-events count per ad platform

Common questions

  • "How do I know if my tracker is sending postback?": check Wevion /connect/postback recent events. If empty, tracker isn't sending (or wrong URL).

  • "Tracker sends, Wevion receives, but no attribution to ad campaign": click_id mismatch. Ensure your tracker's click_id matches the click_id sent in ad URL UTM parameters.

  • "Can I use postback without a tracker (Keitaro etc.)?": yes — if your backend logs conversions, you can call Wevion's postback URL directly from your own server.

  • "Does postback replace Meta CAPI?": postback is an INPUT to Wevion; Wevion uses it to fire Meta CAPI events on your behalf. So you get both: server-side data → Wevion → Meta CAPI.

Related