← All insights
Sticky.ioTracking QAS2S postback8 min

Sticky.io postback configuration guide

Sticky.io's postback module is flexible, which means it is easy to ship a configuration that looks correct and silently drops half the conversions. Here is the configuration I deploy.

Published June 23, 2026 · Osama Malik

Why Sticky.io setups go wrong

Sticky.io supports affiliate click IDs natively (unlike Konnektive) — but it offers multiple slots, multiple event types, and a per-campaign postback model. The result is that two campaigns in the same Sticky instance can have different postback configs, and a fix on one does not propagate. Most broken Sticky setups I diagnose are inconsistency across campaigns, not a missing setting.

Step 1 — Pick a single click ID slot and stick to it

Sticky.io exposes affid, c1, c2, c3 (and more) on the order. Pick one — I default to affid — and use it across every campaign, every funnel, every postback. Document the choice. Do not let one campaign use c1 because someone copied an old template.

Step 2 — Capture the click ID on the order form

  • Add a hidden input named affid (or your chosen slot) on every order form.
  • Parse the network macro from the URL on page load — Everflow's transaction_id, Trackier's click_id, HasOffers' aff_sub.
  • Persist in sessionStorage for multi-step funnels and upsell paths.
  • Re-attach on every POST — Sticky's multi-step checkouts do not carry hidden fields automatically.

Step 3 — Configure the campaign postback

In Sticky.io admin, go to Campaigns > [your campaign] > Postback URLs. Use the macro syntax {affid}, {orderId}, {orderTotal}, {productId}. Build the URL for each network you run with:

  • Everflow: https://www.<network>.com/?nid=<id>&transaction_id={affid}&amount={orderTotal}&adv1={orderId}
  • HasOffers/Tune: https://<host>.go2cloud.org/aff_lsr?transaction_id={affid}&amount={orderTotal}
  • Trackier: https://<tracking-domain>/conversion?clickid={affid}&txn_id={orderId}&amount={orderTotal}

Step 4 — Fire on the right event

Sticky.io distinguishes new sale, upsell, rebill, decline, void, and refund. Wire each event explicitly:

  • New sale → fire main conversion postback.
  • Upsell → fire only if your affiliate deal pays on upsells (most do not by default).
  • Rebill → fire a separate postback with an event type the network recognises as recurring.
  • Decline → never fire (default).
  • Void / Refund → fire a reversal postback so the network credits back.

Step 5 — Test every event, not just the happy path

Most advertisers test one approved sale and ship. Run the full matrix in the sandbox: approved, declined, voided, refunded, rebilled. Confirm the postback fires (or does not) on each, and confirm the network reflects the action. Skipping the decline test is how you end up paying out on chargebacks for a month.

Step 6 — The silent failures to watch for

  • Campaign cloning copies the postback config — including any wrong values from the source campaign. Always re-verify on a cloned campaign.
  • Sticky.io's IP whitelist on outbound webhooks (when enabled) silently drops postbacks to networks not on the list.
  • A custom field with a different name on a duplicated funnel will return empty in the postback — check the field name per funnel, not just per campaign.
  • URL encoding: amounts with currency symbols or commas break the parser. Strip to a plain decimal in the macro.

Where this connects to the rest

Sticky.io is one piece of the chain. If your network is Everflow, run the postback diagnosis checklist on the receiving end. If you are choosing between pixels and S2S for the front-end, that decision sits upstream of this configuration.

Frequently asked

FAQ

Does Sticky.io require a custom field like Konnektive?
No — affid and c1–c3 are native order columns. You can start posting click IDs immediately as long as your form hands them off correctly.
Why does my Sticky.io postback fire on void but not on refund?
They are separate events in Sticky's postback module. If you only wired the void postback, refunds initiated days later will not reverse on the network. Configure both.
Can I fire one postback for all campaigns?
Technically yes, via campaign cloning and template URLs, but it is fragile. The cleanest setup is per-campaign postbacks generated from a documented template you keep version-controlled.

Need this fixed on a live offer?

I run hands-on tracking QA, postback validation, and launch readiness for direct advertisers. Book a 30-minute readiness call — no pitch, just a real diagnosis.

Book a readiness call