Skip to content

Events & Conversion Reporting

The tracking endpoints are prefixed with /track, require no authentication, and are served by track.adbnk.co. Ad impressions, clicks, and conversions are all reported here.

The track_id needed for impressions / clicks is issued by the Ad Request API (embedded in impression_url / click_url), so the SDK usually doesn't need to assemble it manually.

track_id

track_id is an AES-128-CBC-encrypted, URL-safe string that wraps request_id, creative_id, ad_id, zone_id, bid_id, and a timestamp. A forged or tampered track_id is logged by anti-fraud (INVALID_TRACK_ID) but still returns a 1×1 pixel / normal response, so fraudsters can't sense the block.

Impression reporting

GET /track/impression/{track_id}

Returns a 1×1 transparent GIF pixel. When you render the html returned by the ad request directly, the impression pixel is auto-injected and no extra call is needed.

ParamTypeRequiredDescription
track_idstringYesPath param, from the ad request's impression_url
_vintNoProtocol version; 2+ enables signature verification
_dstringNov2 obfuscated device data
_sstringNov2 request signature
qa_kstringNov2 session key (from the ad request response)
_rstringNov2 nonce (with millisecond timestamp, for replay protection)
html
<img src="https://track.adbnk.co/track/impression/q1w2e3r4t5y6..."
     width="1" height="1" style="position:absolute;left:-9999px" alt="" />

An event is billable (billable=true) only when signature verification, anti-fraud, fingerprint consistency, and targeting all pass.

Click tracking

GET /track/click/{track_id}

Returns an interstitial page (HTML). The page collects device traits and document.referrer via JS, then POSTs to /track/click-verify; on passing, it redirects to the real landing page.

ParamTypeRequiredDescription
track_idstringYesPath param, from the ad request's click_url
_pstringNoObfuscated page info added by the SDK (page URL / referrer / timestamp)

Before returning the interstitial page, the server writes a verify_pending click event (billable=false), ensuring clicks aren't lost in no-JS / blocked scenarios.

Click verification

POST /track/click-verify

ParamTypeRequiredDescription
track_idstringYesThe click's track_id
qa_kstringYesSession key (issued at the click stage, valid 5 minutes, one-time)
_rstringNoNonce
device_dataobjectNoDevice fingerprint / screen / OS / network / page info collected by the interstitial page
json
{
  "code": 0,
  "message": "OK",
  "data": {
    "url": "https://shop.example.com/landing?click_id=CLK20260710...",
    "click_id": "CLK20260710120001a1b2..."
  }
}

The returned url is the macro-substituted landing page, and click_id is used for subsequent conversion attribution.

Landing-page macros

The landing-page URL supports macro substitution ({macro} or ): bid_id, click_id, request_id, creative_id, zone_id, timestamp, random.

Conversion reporting

GET /track/conversion or POST /track/conversion

Reporting via the conversion tracker code is recommended; the legacy click_id method is also supported.

ParamTypeRequiredDescription
code / cstringYes*Conversion tracker code tracking_code (recommended)
click_id / clickidstringNoClick ID, for attribution to a specific click
value / payoutnumberNoConversion value; defaults to the tracker's configured default
typestringNoConversion type (legacy mode), default conversion

Without code, it's handled in legacy mode where click_id is required, otherwise it returns 400.

bash
curl "https://track.adbnk.co/track/conversion?code=TRK_xxxxx&click_id=CLK20260710...&value=59.9"
json
{ "code": 0, "msg": "OK", "conversion_id": 10086 }

Conversion pixel

GET /track/conversion.gif

Reports a conversion silently as a pixel (returns a 1×1 GIF), with param c=tracking_code, suitable for landing pages that can't make AJAX calls.

html
<img src="https://track.adbnk.co/track/conversion.gif?c=TRK_xxxxx" width="1" height="1" alt="" />

S2S Postback

GET /track/postback or POST /track/postback

Server-to-server postback, with the same params as /track/conversion (internally forwarded to the conversion-handling logic), suitable for an advertiser's server to actively post back when a conversion happens.

Deduplication and attribution

  • Deduplication: impressions / clicks are treated as duplicates by ip + creative within the dedup window, controlled by admin settings ad.impression_dedup_seconds and ad.click_dedup_seconds (0 = no dedup). Duplicate events are marked DUPLICATE_IMPRESSION / DUPLICATE_CLICK and not billed.
  • Attribution: conversions are attributed via click_id to campaign_id / adgroup_id / creative_id, recording the click-to-conversion latency.
  • Billing: only events that pass anti-fraud, fingerprint consistency, and targeting checks are billed.

Conversion tracker management (advertiser)

Trackers are created and managed by advertisers at /api/advertiser/trackers (auth required):

MethodPathDescription
GET/api/advertiser/trackersTracker list
POST/api/advertiser/trackersCreate a tracker
GET/api/advertiser/trackers/{id}/codeGet the tag/postback code
POST/api/advertiser/trackers/{id}/regenerate-codeRegenerate the code
GET/api/advertiser/trackers/{id}/conversionsConversion details
GET/api/advertiser/trackers/{id}/statsConversion stats

Create tracker (POST /api/advertiser/trackers) params:

ParamTypeRequiredDescription
namestringYesTracker name
typestringNoType, default PIXEL (also POSTBACK, etc.)
event_typestringNoConversion event type, default CUSTOM
conversion_valuenumberNoDefault conversion value
attribution_windowintNoAttribution window (days), default 30
postback_urlstringNoPostback URL
pixel_codestringNoPixel code

After creation, the system auto-generates a tracking_code, which is the code used when reporting.


Related reading: Conversion Tracking guide · Ad Request API

Documentation released under the MIT License.