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 |
|---|---|---|
| GET | Get your unique postback URL template + supported macros |
| POST | Receive a conversion event from a tracker |
| 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}
¤cy={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 conversionLead— form submissionSignUp/Registration— account creationAddToCartSubscribeApp_Install— for mobile app campaignsCustom_*— 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 eventsPer-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/postbackrecent 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
Set up postback tracking — step-by-step setup
Postback vs pixel — which to use — comparison
Connect Keitaro via Tracker Hub — tracker integration that often pairs with postback