S2S Postback (Server-to-Server)
S2S (Server-to-Server) Postback is the most reliable way to report conversions: when a conversion happens on your server (e.g. a payment success callback, an order write), your server sends an HTTP request directly to ADBNK, without relying on the browser loading a pixel. It's unaffected by ad blockers, cookie restrictions, or unloaded pages.
The whole chain has two parts:
- Click landing: when ADBNK directs the user to your landing page, it passes
click_idto you in the landing-page URL; - Conversion postback: when a conversion happens, your server posts back that
click_idto ADBNK.
Step 1: Receive click_id (landing-page macros)
When a user clicks your ad, ADBNK adds these parameters to your http(s) landing-page URL by default (a parameter is skipped if your URL already has it):
adbnk_click_id, adbnk_zone_id, adbnk_campaign_id, adbnk_ad_id, adbnk_creative_id, adbnk_site_idTo use your own parameter names, put macro placeholders in the landing-page URL in the advertiser console; ADBNK substitutes the real (URL-encoded) values at click time. {macro} and both work; macro names are case-insensitive and the underscore is optional ({click_id} = {ClickID} = {clickid}). Unknown macros are left as-is.
| Macro | Description |
|---|---|
{click_id} | Click ID (the key to conversion attribution) |
{campaign_id} | Campaign ID |
{adgroup_id} | Ad group ID |
{ad_id} | Ad ID |
{creative_id} | Creative ID |
{zone_id} | Zone ID (numeric) |
{zone_key} | Zone key (zone_...) |
{site_id} | Publisher site ID |
{site_domain} | Publisher site domain |
{publishment_id} | Publisher account ID |
{country} | Visitor country code (e.g. US) |
{device} | desktop / mobile / tablet |
{os} | windows / android / ios / macos / linux / other |
{browser} | edge / chrome / firefox / safari / ie / other |
{timestamp} | Unix timestamp of the click |
{random} | Random number (for cache busting) |
A value that can't be determined is replaced with an empty string.
Landing-page URL config example:
https://your-shop.com/landing?adbnk_click={click_id}&z={zone_id}After a click, the user lands on (default parameters appended):
https://your-shop.com/landing?adbnk_click=CLICK_ID&z=42&adbnk_click_id=CLICK_ID&adbnk_zone_id=42&...Store click_id carefully
Once the landing page has the click_id, save it with the session/order in your database (e.g. write it into the order record). Only then can you post it back when the conversion (order/payment) happens. Treat it as an opaque string.
Step 2: Post back the conversion (Postback URL)
When a conversion happens, your server sends a request to ADBNK's Postback endpoint (GET or POST):
https://track.adbnk.co/track/postback/track/postback and the conversion endpoint /track/conversion take the same parameters.
Request parameters
| Param | Alias | Required | Description |
|---|---|---|---|
c | code | Yes | Conversion tracker code tracking_code (cvt_...) |
click_id | clickid | No (recommended) | The click ID saved in step 1, for attribution |
value | payout | No | Conversion amount, 0 – 1,000,000; falls back to the tracker's default when omitted |
order_id | — | No | Your order ID; only passed on to your own callback (see below) |
The conversion event type is the one set on the tracker in the console; it can't be changed per request.
Responses
| HTTP | Body | Meaning |
|---|---|---|
| 200 | { "code": 0, "msg": "OK", "conversion_id": 12345 } | Conversion recorded |
| 400 | { "code": 400, "msg": "Missing click_id or tracking code" } | Neither c/code nor click_id was sent |
| 403 | { "code": 403, "msg": "Attribution rejected: ..." } | The conversion could not be attributed; nothing recorded |
| 404 | { "code": 404, "msg": "Invalid tracking code" } | Unknown or disabled tracking code |
| 500 | { "code": 500, ... } | Temporary server error — retry later |
Always send the tracking code
Always include the tracking code c; conversions sent without it are not recorded.
Repeated postbacks for the same click_id are counted once, so retries are safe.
Postback example
curl (from your server):
curl -sG "https://track.adbnk.co/track/postback" \
--data-urlencode "c=cvt_your_tracking_code" \
--data-urlencode "click_id=CLICK_ID" \
--data-urlencode "value=99.00"Successful response (JSON):
{ "code": 0, "msg": "OK", "conversion_id": 12345 }Your Postback template
The console's Get tracking code gives a ready-made template:
https://track.adbnk.co/track/postback?c=cvt_your_tracking_code&click_id={click_id}&value={payout}In your affiliate/CRM system, replace {click_id} and {payout} with your system's own variables (the saved ADBNK click ID and the conversion amount).
Optional: ADBNK calls your server
If you fill in a Postback URL in the tracker's advanced settings, ADBNK sends a GET request to it whenever a billed conversion is recorded (failed calls are retried). These placeholders are replaced in that URL:
{click_id} {payout} {conversion_value} {event_type} {tracker_id} {conversion_id} {order_id}
Trade-offs vs. Pixel / JS
| Dimension | Pixel / JS (browser) | S2S Postback (server) |
|---|---|---|
| Trigger location | Conversion page loads in the browser | Your server actively requests |
| Ad-blocker resistance | Easily blocked | Unaffected |
| Cookie/JS dependency | Yes | No |
| Reliability | Medium | High |
| click_id source | Frontend must extract from landing URL and store | Server saves it with the order and posts back |
| Best for | Static pages, no server callback | Payment callbacks, order systems |
Recommended combo
When you have a server order/payment system, prefer S2S Postback; for purely static landing pages or supplementary verification, you can add Pixel / JS conversion reporting.
For more endpoint-level conventions, see the Events & Conversion Reporting API.