Advertiser postback reference
Every parameter our postback URL accepts, the statuses that approve, hold or reverse a conversion, duplicate handling, and every response we return.
GET or POST https://cashadmedia.com/postbackParameters can be sent in the query string, as form fields, or as a JSON body with Content-Type: application/json.
Parameters
| Parameter | Also accepted as | Required | Description |
|---|---|---|---|
token | secret, key | Yes | Your token, from Postbacks in your dashboard. It only works for clicks on your own offers. |
click_id | clickid, subid, sub_id, aff_sub, sub1 | Yes | The click ID we put in your tracking link. |
event | goal, event_name, goal_id | For multi-step offers | The step's event name. Without it, the offer's first step is used. |
txn_id | transaction_id, tid, conversion_id | No | Your ID for the conversion, up to 200 characters. Without it, the click and event identify the conversion. |
status | conversion_status | No | See below. Without it, the conversion is approved. |
Any other parameters you send are kept with the conversion, which helps if one is ever disputed.
A value your platform left as an unfilled macro, like {txn_id}, [event] or ##status##, is treated as not sent. So a URL with a parameter your platform has no macro for still works.
Statuses
| You send | Effect |
|---|---|
nothing, approved, 1, pending, hold, 0, or any other value | Approves the conversion. It is billed and the user is credited right away. If it turns out bad, reverse it with a later postback. |
reversed, reversal, reverse, chargeback, rejected, declined, fraud, cancelled, canceled, 2, -1 | Reverses a conversion you sent earlier. |
Status values are not case-sensitive.
Amounts
Payouts come from the offer we agreed, including any country prices, never from the postback. A payout or amount parameter is stored but not used for billing.
Duplicates and updates
A conversion is identified by txn_id if you send one, and also by the click and event: one click can convert each step once. A second postback for the same conversion updates it or is ignored:
| Current status | You send | Result |
|---|---|---|
| approved | reversed | Reversed. |
| approved | anything else | Ignored (duplicate). |
| reversed | anything | Ignored (rejected:already_reversed). |
Daily caps
If the offer has a daily cap, conversions over it are rejected (rejected:over_cap). The cap counts approved conversions per UTC day. New clicks are turned away once it is reached, so this mostly affects users who clicked before the cap filled up.
Total budget
A campaign with a total budget stops by itself. Spend counts approved conversions and those under review. Once what's left of the budget can't pay for one more conversion, the offer is taken off every offerwall and new clicks are turned away. Users who started before that can still finish while some budget is left; after it is spent, their conversions are rejected (rejected:over_budget) and never billed. Raise the budget and the offer starts again right away.
Responses
The body is a short plain-text result. Retry only on 5xx or a network error; the other responses will not change if you send the same request again.
| HTTP | Body | Meaning |
|---|---|---|
| 200 | accepted | New conversion recorded. |
| 200 | reversed | A conversion was reversed. |
| 200 | held | Recorded and under review on our side. Nothing to do: if we reject it, it is never billed. |
| 200 | duplicate | Already recorded with this status. Nothing changed. |
| 200 | rejected:nothing_to_reverse | A reversal for a conversion we never received. |
| 200 | rejected:over_cap | The offer's daily cap was already reached. |
| 200 | rejected:over_budget | The campaign's total budget is spent. |
| 200 | rejected:already_reversed | The conversion was already reversed. |
| 200 | rejected:already_rejected | The conversion was rejected after review. |
| 400 | rejected:missing_click_id | No click ID in the request. |
| 400 | rejected:unknown_event | event doesn't match any step of the offer. |
| 403 | rejected:bad_token | The token is missing or wrong. |
| 404 | invalid_click | We have no click with that ID. Usually a macro that wasn't filled in. |