Developers

Send a conversion

When a sale or a sign-up happens, your server sends it with the hit; later it can change its status, for example a refund.

The call

POST https://<your workspace address>/track/conversions
x-api-key: your API key
Content-Type: application/json

{
  "hit": "h1.…",
  "conversionTypeCode": "sale",
  "externalId": "order-1042",
  "amount": { "value": 49.90 },
  "currency": "EUR"
}
Field
hit The signed hit from the hitctrl cookie (or from a server-side hit).
conversionTypeCode Required. The conversion type's code, for example sale.
externalId Your order or transaction ID. The same one counts once, so retrying is safe.
amount.value, currency The sale amount; needed for percent payouts. Another currency is converted at the day's rate.
exchangeRate Your own rate to the workspace currency, if your workspace accepts it.
couponCodes Coupon codes used; a coupon's partner gets the sale ahead of the hit.
externalClientId A client you registered; the sale counts for the partner of that client's hit.
country The buyer's country (two letters); prices the sale by it instead of the hit's country.
customParams.advS1–advS5 Your own values; payout groups and fraud rules can use them.
status approved, pending or test; leave it out for what the offer's goal sets.

One of hit, couponCodes or externalClientId is required. The call also works as GET with the same values in the address.

Changing a status later

POST https://<your workspace address>/track/conversions/status
{ "externalId": "order-1042", "status": "refunded" }

status is approved, pending, rejected or refunded. Add conversionTypeCode when one order has conversions of several types.

Busy moments

Send the header Prefer: respond-async: the answer is 202 at once and the conversion is recorded a moment later.

Checked against the app on October 18, 2026