Why is my AI offer postback not firing?
- 📅 Updated October 23, 2026
- ⏱️ 8 min read
- 📚 Answer 1 of 4
By Masha Gebber, Help center editor
Short answer
Usually the click ID is empty on the tracking link, a macro name is misspelled, the postback scope does not match the offer, or the destination rejects the request. Check a recent click for a real click ID, then the postback URL and macros, then the postback report's response codes.
- A postback can only send a click ID that was captured in your tracking link at click time.
- Macro names are case sensitive; a typo sends the literal text instead of a value.
- The postback report and its debug view show exactly what was sent and what came back.
- Postbacks fire for recorded conversions only, so no conversion means no postback.
When a postback fails, your tracker or ad network stops learning which clicks turned into sales, and paid campaigns quickly drift toward placements that look cheap but never convert. The good news is that postback problems follow a small number of patterns. We walk through them in the order that finds the cause fastest.
A postback fires when a conversion is recorded. If there was no conversion, there is nothing to send, however perfect the postback URL is.
- Open the conversion report and look for the sale you expected.
- If there is no conversion, the problem isn't the postback. See clicks without conversions or clicks not showing.
- If there is a conversion, continue below.
Your postback sends back the click ID that was captured in your tracking link, usually in sub5. If that value was empty at click time, the postback has nothing useful to send.
- Open the conversion report and find the conversion.
- Look at the sub field you use for click IDs.
- Check what it contains.
| What you see | Meaning | Fix |
|---|---|---|
A real ID such as a1b2c3 | The click ID arrived | Continue to step 2 |
| Empty | The tracker or ad platform never passed it | Fix the tracking link or tracker destination |
A literal macro such as {clickid} | The platform didn't replace the macro | Use the macro your traffic source actually supports |
Quick check: click your own ad or tracker link, then look at the click report for that click. If the sub field is empty there, the postback can't work.
Open Postbacks in the dashboard and inspect the URL.
- Macros must be spelled exactly.
{sub5}works;{Sub5},{sub_5}and{sub-5}are sent as literal text. - Keep the curly brackets. The platform replaces
{sub5}with the value when it fires. - Don't URL-encode the macros yourself. Encoded brackets aren't recognized.
- Use the parameter names your tracker expects, for example
cid=orclickid=, as shown in your tracker's postback instructions.
A typical URL looks like this:
https://your-tracker.example.com/postback?cid={sub5}&payout={payout}&txid={transaction_id}
- Global postbacks fire for every conversion on your account.
- Specific postbacks fire only for the offer they are attached to.
If your postback is attached to one offer but your link uses another, for example a new tier's offer after an upgrade, the postback won't fire for those sales. Check that the scope covers the offers your links use.
The postback report shows each fire and the response your tracker or ad network returned.
| Response | Meaning |
|---|---|
| 2xx, such as 200 or 204 | Success. The destination accepted it. |
| 4xx, such as 400 or 404 | The destination rejected the request: wrong URL, parameter or token |
| 5xx | The destination had a server problem |
| No response or timeout | The destination didn't answer in time |
Use the debug view on a postback row to see the exact request and response. It usually answers the question immediately, because you can see whether the click ID was filled, which URL was called and what the destination replied.
If the destination returns errors, take the postback URL, replace each macro with a realistic sample value and open it in your browser or send it with a simple request tool:
https://your-tracker.example.com/postback?cid=test123&payout=40&txid=abc
- If your tracker records a test conversion, the URL works and the problem is upstream: the click ID or the scope.
- If the tracker rejects it, read its error message. Missing tokens, wrong parameter names and wrong domains are the usual culprits.
- Delete the test conversion in your tracker afterwards so your reports stay clean.
Platforms can automatically deactivate a postback after repeated failures over several days. If your postback is inactive:
- Find out why it failed, using the report and debug view.
- Fix the URL, parameters or destination.
- Reactivate the postback and test it again.
The most common cause is a global postback that requires a parameter only some traffic provides. Switching to a specific postback for that source usually fixes it.
| Setup | Where it usually breaks | What to check |
|---|---|---|
| Ad network straight to OmniPink link | The network's click ID macro is missing from the link | The network's macro name in sub5 |
| Ad network to tracker to OmniPink link | The tracker's offer URL drops the click ID | The tracker's offer URL includes sub5={clickid} |
| Tracker with a landing page in between | The landing page link loses parameters | The lander passes the click ID to the offer link |
| Several networks on one global postback | Some networks need extra parameters | Use a specific postback per network if needed |
Example: a buyer runs traffic from an adult network through a tracker. The tracker shows clicks but no conversions, while the OmniPink dashboard shows four sales.
- The conversion report shows the click ID field filled with
{clickid}as literal text. - The tracker's offer URL uses
{clickid}, but that tracker's macro is actually{click_id}. - The buyer fixes the macro in the tracker's offer URL.
- The next click shows a real ID, and the next sale's postback returns a 200 response.
- The tracker now shows conversions, and the network can optimize on them.
The postback itself was fine all along. The click ID never reached it.
Google, Meta, TikTok and Reddit don't accept simple postback URLs. They use conversion APIs that require authenticated requests. Send your postback to a tracker such as RedTrack, Voluum, BeMob, Binom or AnyTrack, and let the tracker forward conversions to the ad platform.
A postback only fires for conversions credited to you. If a visitor clicked your ad, then another affiliate's link, and then subscribed, the sale belongs to the other affiliate under last-touch attribution, and no postback fires for your click. That is correct behavior, not a failure. If your tracker shows clicks that later bought but never received a postback, attribution is one possible reason. See how attribution works.
The dashboard lists the macros you can use in a postback, such as the click ID fields, the payout, the transaction ID, the offer and the Source ID. Use only the macros on that list, spelled exactly as shown. If you need a value that isn't listed, ask support whether it is available rather than inventing a macro name, because unknown macros are sent as plain text.
- Duplicate postbacks firing on the same event create double counts. Keep one postback per destination.
- Conversions on hold or pending review may not fire until they are recorded as conversions.
- Recently changed URLs apply to future conversions only. Conversions recorded before the change used the old URL.
- Firewalls or IP allowlists on your server can block requests. Allow the platform to reach your endpoint.
- HTTPS certificate problems on your endpoint can make requests fail. Check that your certificate is valid and not expired.
- Confirm a recent conversion exists.
- Check that conversion's click ID field is a real value.
- Compare macro spelling with the dashboard's macro list.
- Confirm the postback scope covers the offer.
- Read the response code in the postback report and its debug view.
- Test every new campaign with a single click before spending.
- Keep one postback per destination, documented with its scope.
- After a tier upgrade, confirm the postback covers the new offer.
- Check the postback report weekly for failed fires.
- Write down the click ID macro each traffic source uses, and keep the list next to your link sheet.
Can I test without waiting for a real sale? Yes. See how to test a postback.
Why does my tracker show more conversions than the dashboard? The dashboard is the source of truth for what you are paid. Trackers sometimes count events the program doesn't consider conversions, or attribute differently.
Does a postback fire for every renewal on RevShare? Postbacks fire for recorded conversion events. If you need renewal events in your tracker, ask support which events are available for your setup.
Should I use a browser pixel instead? Only if your destination requires it. Server-to-server postbacks are much more reliable, especially on mobile.
If every check passes and the postback still doesn't fire, contact support by email at affiliates@omnipink.ai or on Telegram at @OMNIPINK with the postback URL, a conversion ID, the click ID you expected and a screenshot of the debug view.
Postbacks feel technical, but they fail in predictable ways. Check the click ID, the macros, the scope and the response, in that order, and you will find the break almost every time.