Skip to content

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:

  1. Click landing: when ADBNK directs the user to your landing page, it passes click_id to you in the landing-page URL;
  2. Conversion postback: when a conversion happens, your server posts back that click_id to 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):

text
adbnk_click_id, adbnk_zone_id, adbnk_campaign_id, adbnk_ad_id, adbnk_creative_id, adbnk_site_id

To 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.

MacroDescription
{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:

text
https://your-shop.com/landing?adbnk_click={click_id}&z={zone_id}

After a click, the user lands on (default parameters appended):

text
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):

text
https://track.adbnk.co/track/postback

/track/postback and the conversion endpoint /track/conversion take the same parameters.

Request parameters ​

ParamAliasRequiredDescription
ccodeYesConversion tracker code tracking_code (cvt_...)
click_idclickidNo (recommended)The click ID saved in step 1, for attribution
valuepayoutNoConversion amount, 0 – 1,000,000; falls back to the tracker's default when omitted
order_id—NoYour 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 ​

HTTPBodyMeaning
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):

bash
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):

json
{ "code": 0, "msg": "OK", "conversion_id": 12345 }

Your Postback template ​

The console's Get tracking code gives a ready-made template:

text
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 ​

DimensionPixel / JS (browser)S2S Postback (server)
Trigger locationConversion page loads in the browserYour server actively requests
Ad-blocker resistanceEasily blockedUnaffected
Cookie/JS dependencyYesNo
ReliabilityMediumHigh
click_id sourceFrontend must extract from landing URL and storeServer saves it with the order and posts back
Best forStatic pages, no server callbackPayment 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.

Documentation released under the MIT License.