Server-to-server postback setup lets your tracker and a traffic partner exchange conversion data through a direct HTTP call, with no browser or cookie involved. To get it working, you need three things: a captured and persisted click identifier, a secure postback endpoint on your tracker, and exact macro mapping between your platform and your partner's. This guide walks through setup, parameter mapping, testing, reliability hardening, and the verification steps a buyer-first affiliate should run before trusting any vendor's numbers.
TL;DR:
- Store each click_id in a database or other durable record on your server, because session expiry or device changes can break later attribution.
- Every postback needs a click identifier and status; copy the partner’s macro syntax exactly, while txn_id or externalId prevents duplicate conversion records.
- Test one offer with a real tracked click and a pending event, then confirm the log matches before expanding to additional events.
- Before scaling a vendor, request raw logs and run a controlled test batch of 50 to 250 clicks, verifying each conversion against its click_id.
- Match the attribution window to the partner’s terms and record click and postback timestamps; late calls can miss attribution, while retries can duplicate conversions without deduplication.
Table of Contents
- How to set up S2S postback tracking step by step
- Postback URL parameters and how macros map between platforms
- How to test a postback and troubleshoot common failures
- Reliability and security practices for production postbacks
- Pre-launch checklist and the pitfalls that break postbacks
- What 11 years of vetting solo ad vendors teaches about tracking claims
- Why postback latency affects conversion tracking accuracy
- Handling attribution windows and delayed conversions
- Managing multi-touch scenarios with server-to-server postbacks
- Tracking integrity is what your ad spend actually depends on
- Verify before you scale: how we help you check a postback setup
- FAQ
- Sources
How to set up S2S postback tracking step by step
Setting up a working postback is a sequence, not a single setting. Skip a step and the chain breaks somewhere between the click and the conversion.
- Generate your tracker's postback URL. Every tracking platform gives you a unique postback endpoint, the address that receives conversion data from your affiliate network or advertiser. Know exactly where it lives in your tracker's dashboard before you touch anything else.
- Tag your affiliate and offer links with the click ID macro. Your tracker generates a unique click identifier for every visitor, and your partner needs to capture it. Append your tracker's click_id macro to the destination URL so the partner's system stores it when the click lands.
- Capture and persist the click_id at landing, server-side. The ID has to live somewhere durable, tied to a database record or a backend store, not just a browser session cookie. According to TrackNow, losing that identifier to session expiry or a device switch is one of the most common ways attribution breaks.
- Fire the postback on the qualifying event. When a sale, lead, or signup happens, your server sends an HTTP call back to the partner (or receives one from them) that includes the click_id and a status parameter at minimum, plus whatever optional fields your setup calls for: transaction ID, amount, currency, customer ID, or sub-parameters for campaign breakdowns.
- Paste the final URL into the right dashboard field and save. Partner platforms usually let you set a postback globally or per offer. Start with one offer and one event type, confirm it works, then expand.
TrackNow also flags a mix-up worth watching for: there are two separate postback directions. One runs from the affiliate network to your tracker to record the conversion. The other runs from your tracker back to the traffic source to report it upstream. Pasting the wrong URL into the wrong dashboard field is a common and quietly damaging error, since it can look like everything is configured while no data actually moves.
A practical seven-step version of this same flow, including guidance on starting with one event before scaling, is laid out in Trackier's setup guide. The core advice lines up: verify end-to-end with a single partner and a single event before adding complexity.
Postback URL parameters and how macros map between platforms
A postback URL is built from parameters, and only two of them are non-negotiable.
- click_id (also called subid, aff_sub, or tid): the identifier that ties the conversion back to the original click. Without it, the postback has nothing to match.
- status: tells the receiving system whether the event is an approved sale, a pending lead, or a rejected transaction.
- txn_id or externalId: a transaction-level identifier used for deduplication, so the same conversion is never counted twice.
- amount and currency: the payout or sale value and the currency it's denominated in, useful for revenue reporting.
- customer_id: an internal reference for the converting user, useful for lifetime value tracking.
- sub1 through sub5: optional slots for campaign, creative, or placement breakdowns.
A generic template looks like this: https://yourtracker.com/postback?click_id={click_id}&status={status}&txn_id={txn_id}&amount={amount}¤cy={currency}. The exact macro syntax (curly braces, dollar signs, or square brackets) differs by platform, and according to Track360's documentation, a standard postback needs at minimum a click ID and a status field, with amount, currency, txn_id, customer_id, and sub-parameters as the common optional set. Never guess a macro name. Copy it character for character from the partner's documentation and map it to the matching field in your tracker.
How to test a postback and troubleshoot common failures
Test with a real click. Click through your own tracking link, let it land, grab the click_id your system actually generated, and use that to trigger a test conversion. According to Profit Ninja, fabricated or hardcoded IDs often pass basic syntax checks but fail live matching, which creates false confidence in a setup that doesn't actually work.
- Check for an empty log entry. If nothing shows up at all, the postback call never fired, usually because the event trigger isn't wired up on the backend.
- Look for a literal macro string in the log, like the literal text "{click_id}" instead of an actual ID. That means the macro name doesn't match what the platform expects.
- Watch for a "click not found" response. This usually means the ID was lost somewhere in a redirect chain or mapped to the wrong parameter.
- Note any 4xx or 5xx response codes. A 4xx often points to an authentication problem or a malformed URL; a 5xx usually means the receiving server had an issue.
- Test deduplication by sending the same txn_id twice. A correctly built endpoint returns an idempotent response instead of logging a second conversion.
Pro Tip: Run your first test postback with the event status set to "pending" rather than "approved," so a mistake during testing doesn't pay out a real commission.
Reliability and security practices for production postbacks
A postback that works once in testing isn't the same as one that holds up under real traffic volume.
- Build in retry logic. Use exponential backoff for transient 5xx errors, and respect any Retry-After header a partner sends on a 429 response.
- Deduplicate on txn_id or externalId. RefCampaign's API documentation recommends always including a dedupe key so repeated calls return an idempotent response instead of double-counting a conversion.
- Authenticate every call. A shared postback secret or a signed header is safer than a secret embedded in the URL, since URLs tend to end up in logs. HTTPS is required, not optional, in any production setup.
- Whitelist IPs where your platform supports it, log requests in enough detail to debug later, and set up alerts that flag a sudden spike in error rates before it becomes a bigger problem.
Pre-launch checklist and the pitfalls that break postbacks
Before sending real traffic, confirm the basics hold: click_id persists past the session, the postback URL is saved in the correct partner dashboard field, your authentication secret is set and tested, IPs are whitelisted where supported, your SSL certificate is valid, retry and dedupe logic are both implemented, and a real test conversion has actually recorded.
- Literal macro in the log: the macro name doesn't match the partner's documentation, so copy it again exactly.
- Lost subid in a redirect: an intermediate redirect is stripping the parameter, so check each hop in the chain.
- Storing only a session cookie: move click_id storage to a database tied to a persistent user or click record.
- Wrong postback field: the URL was pasted into a conversion-reporting field instead of a traffic-reporting field, or vice versa.
- Missing required parameters: click_id or status is absent from the call, so the receiving system has nothing to match.
- No retry queue: a single failed call becomes a permanently lost conversion.
- No txn_id dedupe: page reloads or partner retries create duplicate conversion records.
- Expired certificate or no HTTPS: the call fails outright or gets rejected by a partner that enforces secure connections.
- Double-firing on page reload: a conversion pixel or postback trigger fires again when a user refreshes the confirmation page.
What 11 years of vetting solo ad vendors teaches about tracking claims
Watching traffic sellers overpromise for over a decade teaches a simple lesson: a vendor's word about delivered conversions means nothing without logs to back it up. Before trusting a vendor's reported numbers, ask them directly: can you show raw postback logs from a real test click? Which exact macro do you pass for click_id? Do you support IP whitelisting on your postback endpoint? Will you run a controlled test batch, say 100 clicks, before a full buy? These questions sit inside a broader 21-question vendor vetting framework built for exactly this kind of verification.
— Philip Coble
Why postback latency affects conversion tracking accuracy
Postback latency is the delay between when a conversion event happens and when the postback call actually reaches your tracker or partner's server. A few seconds of lag rarely matters. Minutes or hours can.
Attribution windows close on a schedule, and a late postback can land after the window has already expired, which means a real conversion gets reported as unattributed or dropped entirely. Delays also complicate deduplication: if a retry fires because the first call seemed slow, and both eventually arrive, a system without proper idempotency can log the same sale twice.
Latency tends to come from a few predictable places: a backend job queue that batches events instead of firing them immediately, a partner's server throttling incoming requests, or a retry loop firing repeatedly because the original call timed out before confirming success. Firing the postback as close to the event itself as the backend architecture allows, and logging the timestamp of both the event and the postback call, makes latency problems visible instead of silent. When conversion counts in your tracker consistently lag behind what a partner reports, latency is often the first thing worth checking before assuming fraud or a broken macro.
Handling attribution windows and delayed conversions
An attribution window is the span of time after a click during which a conversion still counts toward that click. Most networks and trackers set this window somewhere between a few hours and 30 or 60 days, depending on the offer type, and the exact figure always comes from the specific partner's terms rather than a universal standard.
Delayed conversions, the kind that happen days after the original click, create a real tension: the postback has to arrive before the window closes, or the sale won't attribute correctly even though the original click was genuine. This is especially common with longer sales cycles, trial-to-paid conversions, or offers with a cooling-off period.
A few practical habits reduce the damage. Persist the click_id in durable storage rather than a session cookie, since a delayed conversion days later needs that ID to still be retrievable. Confirm your attribution window setting matches what your partner actually enforces on their end, since a mismatch here creates conversions that silently fail to match. And when a postback fires late because of a legitimately long sales cycle rather than a technical delay, make sure your system logs the original click timestamp separately from the postback timestamp, so you can tell the difference between "slow data" and "a conversion outside the window."

Managing multi-touch scenarios with server-to-server postbacks
A single conversion often follows more than one click, especially when a buyer sees an offer across multiple traffic sources before converting. S2S postbacks are built around a single click_id per conversion event, which means multi-touch scenarios require a clear rule for which click gets credit.
The two common models are last-click and first-click attribution, and most trackers default to last-click unless configured otherwise. In a last-click model, the most recent click_id before conversion is the one stored and returned to the postback. In a first-click model, the original click_id persists through the entire journey regardless of later touches, which requires storage logic that doesn't overwrite the ID on a second visit.

More advanced multi-touch setups assign partial credit across several click_ids, but this requires your tracker and your partner's system to both support multi-parameter postbacks, since a standard single-click_id format has no place to carry that detail. For most affiliate marketers buying solo ads or similar single-source traffic, last-click attribution with a correctly persisted click_id covers the vast majority of cases, and the added complexity of true multi-touch modeling is rarely worth it unless you're running coordinated multi-channel campaigns at scale.
Tracking integrity is what your ad spend actually depends on
A broken postback doesn't just mean bad data. It means you're making budget decisions based on numbers that were never real in the first place. Run the test, read the logs, confirm the match, then scale.
— Philip Coble
Verify before you scale: how we help you check a postback setup
We built our guides around one habit: verify the mechanics before you trust the report. Our deep-dive on applying S2S postback setup to solo ad buying walks through the same setup covered here, mapped specifically to vendor claims and the 21-question vetting checklist.
- Run a controlled test batch, 50 to 250 clicks, before committing full budget to any vendor.
- Pull the raw postback logs from that test and confirm every click_id matches a real conversion.
- Apply the 21-question vendor vetting framework before scaling spend with any traffic source.
Start at Soloadsguide and work through the checklist before your next buy.
FAQ
What is the minimum data a postback URL must include?
A working postback needs at least two parameters: a click identifier (often called click_id, subid, or tid) and a status field showing whether the event was approved, pending, or rejected. Everything else, including transaction ID, amount, and currency, is useful but optional.
Why does my postback log show a literal macro instead of a real value?
This means the macro name in your URL doesn't match what the receiving platform actually sends, so the platform couldn't substitute a real value. According to Profit Ninja, copying the exact macro syntax from the partner's own documentation is the fix, since macro formats vary from platform to platform.
Should I test a postback with a fake click ID?
No. A fabricated or hardcoded ID can pass basic syntax validation while still failing a live match test, which gives you false confidence in a setup that isn't actually working. Always generate a real click through your tracking link first, then use that click_id for your test conversion.
How do I prevent duplicate conversions from being recorded?
Include a transaction-level identifier, often called txn_id or externalId, in every postback call, and configure your endpoint to recognize repeats and return an idempotent response instead of logging a second conversion. RefCampaign's documentation treats this deduplication key as a standard requirement for safe retries.
What should I ask a solo ad vendor to verify their postback tracking actually works?
Ask whether they can show raw postback logs from a real test click, which exact macro they pass for click_id, and whether they'll run a small controlled test batch before a full buy. These questions come directly from the 21-question vendor vetting framework built for verifying traffic claims before scaling spend.
Sources
- S2S and postback tracking (TrackNow)
- S2S postback architecture and setup (Track360)
- Postback & server-to-server (S2S) tracking (Profit Ninja)
- Postback URL setup guide (Trackier)
Recommended
- Prove Traffic Quality with a 50–250 Click Test for Solo Ad Buyers
- Solo Ad Buyers: 50–200 Click Test and 21 Questions to Verify Leads
- Marketers: Verify Solo Ad Traffic With a 100 to 200 Click Test
Want Verified Traffic Without the Guesswork?
PulseTraffic screens every seller, filters bot clicks in real time, and shows you verified buyer traffic labels before you spend a dollar.


