MMP Postbacks
Advertisers report conversions to AdPlusMedia with a server-to-server postback, usually fired by their mobile measurement partner. This page describes the intake endpoint, its authentication and every response you may receive.
Endpoint
| Segment | Description |
|---|---|
| [POSTBACK_TOKEN] | The global intake token. Issued by our team. |
| [PROVIDER_PASSWORD] | The password assigned to your specific provider integration. |
| [PROVIDER] | Your provider name. See the supported list below. |
Both credentials live in the URL path. Treat the whole endpoint as a secret: never paste it into a support ticket, a screenshot or a public dashboard. Every request is logged with these segments masked.
Supported providers
| Provider | Path value |
|---|---|
| AppsFlyer | AppsFlyer |
| Adjust | Adjust |
| Singular | Singular |
| Branch | Branch |
| Tenjin | Tenjin |
Parameters
| Parameter | Required | Description |
|---|---|---|
clickid |
Yes | The AdPlusMedia click code we appended to your tracking link. |
event |
Yes | The event name, matching an event configured on your campaign. |
status |
No | 1 for a conversion, 2 for a reversal. Defaults to 1. |
payout |
No | Reported revenue. Used only as a sign hint — see Pricing below. |
ip |
No | Overrides the IP recorded against the conversion. |
country |
No | Overrides the country recorded against the conversion. |
Accepted aliases
Each MMP names these fields differently, so we accept the native spelling for each one.
| Provider | Click ID | Event | Payout |
|---|---|---|---|
| AppsFlyer | clickid, af_sub1 |
event, event_name |
payout, revenue, af_revenue |
| Adjust | clickid, click_id |
event, event_name, event_token |
payout, revenue |
| Singular | clickid, click_id |
event, event_name, evtname |
payout, revenue, amount |
| Branch | clickid, click_id |
event, event_name |
payout, revenue |
| Tenjin | clickid, click_id |
event, event_name |
payout, revenue |
Example
curl "http://adplusmedia.com/api/YOUR_TOKEN/YOUR_PASSWORD/AppsFlyer?clickid=K7M2XQ9A&event=purchase&payout=12.50&status=1"
AppsFlyer template
http://adplusmedia.com/api/YOUR_TOKEN/YOUR_PASSWORD/AppsFlyer?clickid=[af_sub1]&event=[event_name]&payout=[revenue]&status=1
Pricing is authoritative on our side
The payout you send does not set the amount we record. We price every
conversion from the reward configured on your campaign event. Your value is used only to detect
whether a call represents a reversal.
Reversals
Send status=2 to reverse a previously settled conversion. We match it to the original event
and negate the authoritative amount.
curl "http://adplusmedia.com/api/YOUR_TOKEN/YOUR_PASSWORD/Adjust?clickid=K7M2XQ9A&event=purchase&status=2"
If no settled conversion exists for that event, we return 200 with
No settled conversion for this event; reversal ignored. This is intentional so your MMP
stops retrying.
Optional security controls
IP allowlist
You can restrict your provider integration to a list of IP addresses or CIDR ranges. Requests from
anywhere else are rejected with 403 Forbidden.
HMAC signature
You can additionally require a signature on every call. We compute the expected value as:
signature = hmac_sha256(http_build_query(ksort(params_without_signature)), signature_secret)
Send the resulting hex digest either as a query parameter or as a header:
| Transport | Name |
|---|---|
| Query parameter | signature (configurable per provider) |
| Header | X-Signature |
$params = [
'clickid' => 'K7M2XQ9A',
'event' => 'purchase',
'payout' => '12.50',
'status' => '1',
];
ksort($params);
$signature = hash_hmac('sha256', http_build_query($params), $signatureSecret);
Sort the parameters by key and exclude the signature field itself before hashing. A mismatch returns
401 Invalid signature.
Rate limit
The intake endpoint accepts up to 300 requests per minute. Above that you will receive
HTTP 429. Every call, including rejected ones, is written to an audit log.
Response reference
See Errors & Responses for the complete list of status codes and messages this endpoint can return.