Transaction ID, duplicates and conversion corrections
How the tracker uses txid to tell a repeated postback from a status change and from a payout correction.
A transaction ID is the number of the deal in the affiliate network. The network passes it in the incoming postback as the txid or tid parameter. Based on it, the tracker decides what to do with a postback for a click that already has a conversion: skip it, update the status or correct the amount.
What counts as one conversion
A conversion is identified by a pair: the click ID and the txid.
- Postbacks with the same click ID and the same
txidbelong to one conversion. - The same click with a different
txidis a separate conversion. To change the status, the network must send the previoustxid; for a new conversion, a different one. - The same
txidon a different click is a different conversion. - If the request has both
txidandtid,txidis used. - The value is compared as is, case-sensitive.
- An unreplaced macro counts as an empty value:
{txid},{{txid}},${txid},[txid],[[txid]],%txid%,#txid#,<txid>. In square and angle brackets and between%or#, a value that starts with a digit, for example[12345]or#1001#, still counts as a transaction ID. In curly braces, any value counts as empty. - If the click already has a conversion recorded under such a value in square or angle brackets, between
%or#, or in the form${txid}, a postback with that value continues this conversion: a repeat is skipped, and a status change updates it.
Each change to a conversion is recorded as a new version. Reports and logs use the latest version.
Processing rules
The tracker compares the postback with the latest version of the conversion with the same txid. The status is compared after status mapping.
| What arrived | What the tracker does | Outgoing S2S and CAPI |
|---|---|---|
The first postback with this txid | Records the conversion | Sent |
| Same status, same payout | Skips the postback | Not sent |
| Same status, no payout passed | Keeps the previous payout and skips the postback | Not sent |
| Same status, different payout | Records a new version with the new amount | Not sent |
| Different status | Records a new version with the new status | Sent |
lead or hold after sale | Skips the postback, the sale stays | Not sent |
The tracker responds to all of these postbacks with ok and code 200.
Events go to the configured recipients: the source and campaign S2S postbacks and the Facebook Conversions API. Only the lead and sale statuses are sent to Facebook.
Exact repeat
A postback with the same txid, status and payout as the latest version is an exact repeat. It does not create a second conversion and is not sent to recipients a second time. A repeat without an amount also counts as exact: the previous payout is kept.
In the Logs → Postbacks («Логи → Postbacks») log, a repeat shows up as a line where SUBID is the click ID:
Duplicate transaction for SUBID (status sale) — skippedStatus change
A postback with the same txid and a different status updates the conversion, for example lead → sale, hold → sale, sale → rejected, rejected → sale. The tracker records a new version and sends the event to recipients.
- If the send postback to source («слать постбэк в источник») checkbox is cleared for the conversion type, no S2S is sent for this status.
- The amount is taken from this same postback according to the payout rules. If the postback has no amount, the previous one is not carried over: 0 or the offer payout is recorded.
Payout correction
A postback with the same txid, the same status and a different amount corrects the conversion's payout. Reports keep the new amount. The event is not sent to recipients again, because the status did not change.
payout=0is also a correction: the payout becomes zero.- A postback without an amount, with an empty value or with an amount that could not be parsed keeps the previous payout.
- If the offer has a payout set and the Payout from postback parameter («Выплата из параметра постбэка») checkbox is cleared, the amount from the postback is not used, and you cannot correct it with a postback.
- Changing the payout in the offer settings does not recalculate recorded conversions: a repeat with the same status keeps the previous amount.
What else counts as a correction
A new version that is not sent to recipients is also recorded in two cases:
- the network sent a different status of its own that maps to the same tracker status;
- a different cost was passed in the
costparameter.
If cost is not passed in the repeated postback, is empty or still contains an unreplaced macro, the cost from the previous version is kept.
Late lead or hold after sale
If lead or hold with the same txid arrives after sale, the tracker skips the postback. The conversion stays a sale, and nothing is sent to recipients. This line appears in the Logs → Postbacks log:
Late transaction status for SUBID — skippedThe rule applies only to lead and hold. The rejected status after sale is accepted and moves the conversion to rejected.
Exchange rate on repeats
The payout is converted to USD when the postback is received, see Currencies and rates.
- A postback with the same
txidin the same currency is converted at the rate recorded in the previous version of the conversion. A change of status or amount a few days later does not change the rate. - If the payout currency is different, the rate for the day the postback was received is used.
- If a repeat with the same status arrived without an amount, the previous amount, currency and rate are kept.
Postback without txid
The tracker does not check a postback without txid for repeats:
- the postback is recorded and sent to recipients, even if it is a repeat from the network;
- in reports, the conversion log and the click card, all postbacks without
txidfor one click are one conversion with the latest status and the latest amount; - the exception is
leadorholdaftersale: such a postback is skipped, as is a postback withoutstatus. The sale stays, nothing is sent to recipients, and the lineLate status without txid for SUBID — skippedappears in the Logs → Postbacks log; - several sales on one click remain one.
Without txid, a repeat from the network sends the event to the source and to Facebook a second time. Pass your network's transaction ID macro in txid.
If the network has no such macro, remove &txid={txid} from the postback URL rather than leaving it unreplaced.
How versions are shown in the panel
Earlier versions of a conversion are not shown in the panel — only the latest one.
- Campaign conversion log: one row per pair of click and
txidwith the latest status, payout and time for the selected period. The transaction ID is in the Txid column. - Click card, the Conversions («Конверсии») block: the latest state of each of the click's transactions. A conversion without an ID shows “No txid” («Без txid») in the Transaction («Транзакция») column.
- Event delivery log, the Logs → Event delivery («Логи → Доставка событий») tab: each recorded version is a separate Conversion record («Запись конверсии») row. For a new conversion and a status change, S2S and CAPI rows are added to it if recipients are configured. A payout correction has no such rows. A skipped repeat and a late status create no rows.
- Reports: with attribution by conversion date, a conversion is assigned to the time of its latest version. A payout correction moves the conversion to the day of the correction, see Attribution: click date or conversion date.
The Logs section is visible to the owner and the admin.
CSV import
Rows of a conversion import go through the same rules: an exact repeat does not create a duplicate, and a different status or a different payout updates the conversion. The tracker replaces an empty tid in the file with import: followed by the sub_id value. Outgoing events are sent during an import only if the Send outgoing S2S and CAPI («Отправлять исходящие S2S и CAPI») checkbox is checked.