> AffiliateOS Help Center. Index of every article for AI tools: https://www.affiliateos.ai/help/llms.txt

# Postback parameters and macros, one by one

Postbacks and conversions · For publishers, networks · Updated 30 October 2026
Web version: https://www.affiliateos.ai/help/postbacks/postback-parameters

Every postback is a GET request to your URL with the conversion in the query string. Publisher postbacks always carry `action_id`, `sub_id`, `offer_id`, `status`, `payout`, `conversion_name`, `is_offer_complete` and a `verifier`; the rest appear when they apply.

## Which field is your money

The lane decides what `payout` means. Read the right one before you credit anything.

| Lane | Your earnings | The player's reward |
|---|---|---|
| Offer API, Top Offers Feed, Offer Links | `payout` | `user_payout` |
| Hosted Offerwall (`placement=offerwall`) | `revenue` | `payout` and `user_payout` |

Track your revenue from `revenue` whenever it's present, otherwise from `payout`. Don't add the two together.

> **Install-paid games pay you once, at install.** Their later steps still post back, with `user_payout` set to the player's reward. On the Offer API, feed and links those steps carry `payout=0`; on the Hosted Offerwall, `revenue=0`.

## Publisher parameters

Example: the install postback Pebble Rewards gets for Harbor Blocks, through the Offer API. The values are made up.

```text
GET https://api.pebble.example/afos
  ?action_id=act_5Kq2Wc
  &sub_id=u_48213
  &offer_id=aff_7c2e91b04d3a
  &status=completed
  &payout=4.2
  &user_payout=1.5
  &offer_name=Harbor+Blocks
  &clicktimestamp=2026-10-29T19%3A06%3A00Z
  &conversion_name=Install
  &goal_id=1
  &offer_id_numeric=136539454590266
  &goal_id_numeric=83339613210995
  &is_offer_complete=false
  &verifier=9f86d081884c7d659a2feaa0c55ad015…
```

| Parameter | Sent | Meaning |
|---|---|---|
| `action_id` | Always | The ID of this conversion. A reversal repeats it. |
| `sub_id` | Always | The user ID from your tracking link, or the `uid` you opened the wall with. |
| `offer_id` | Always | Our offer ID, as in the Offer API. |
| `offer_id_numeric` | Usually | The same ID as an integer, matching `numericId`. |
| `status` | Always | `completed` or `reversed`. |
| `payout` | Always | Your earnings for this step, in USD. On the Hosted Offerwall, the player's reward. |
| `revenue` | Wall | Your earnings for this step on the Hosted Offerwall, in USD. |
| `user_payout` | With a reward | The player's reward in USD. Credit it as sent. |
| `conversion_name` | Always | The step's name: the goal's `name` in the Offer API. |
| `offer_name` | Usually | The offer's title. Store it: a pulled offer can't be looked up later. |
| `goal_id` | Per step | Matches `goals[].id` in the Offer API. |
| `goal_id_numeric` | With `goal_id` | Matches `goals[].numericId`. |
| `is_offer_complete` | Always | `true` on the offer's last step. |
| `clicktimestamp` | Usually | Click time as the advertiser's side reported it. The format varies and it can be empty, so parse it with care. |
| `placement` | Wall | Always `offerwall`. Marks a wall postback. |
| `manual_credit` | Hand credits | `1` on a credit that isn't a completed step: a goodwill credit from our team, or one you sent from **User Credit** where it's on for your account. |
| `reason` | Some reversals | Why the conversion was taken back, in plain words, up to 200 characters. Never on credits. |
| `sub1` to `sub10` | If on the link | Your own values from the tracking link, on credits and reversals alike. Kept for 90 days. |
| `test` | Tests only | `true` on a test from **Send test postback**. Don't credit it. |
| `verifier` | Always | The [signature](https://www.affiliateos.ai/glossary#signature): HMAC-SHA256 of the URL without it. |

All values are strings in the query. Amounts have no trailing zeros: `4.2`, not `4.20`. New parameters can appear; [verify the URL as received](https://www.affiliateos.ai/help/postbacks/verify-postback-secret) and every one stays covered by the signature.

## Where `user_payout` comes from

- The advertiser set a reward for the step: `user_payout` is that reward, including when it's `0`.
- On an account paid per step, `user_payout` always equals your `payout` on Offer API, feed and link postbacks.
- No reward set: it's a suggested share of your `payout`, `0` on the install step. Where your account shows it, change the share under **My Profile**, then **API user reward**. Your payout doesn't change, and your Hosted Offerwall keeps its own reward setting.
- A reversal repeats the `user_payout` its credit was sent with, so deduct exactly what you added.

## Macros

Put a macro anywhere in your postback URL and we replace it with the value. Macros work in any case (`{SUB_ID}` works too). Any other `{placeholder}` is sent exactly as you typed it.

| Macro | Holds |
|---|---|
| `{sub_id}` | `sub_id` |
| `{transaction_id}` | `action_id` |
| `{payout}` | `payout` |
| `{revenue}` | Your earnings on every lane: `revenue` on the wall, `payout` elsewhere |
| `{user_payout}` | `user_payout`, empty when none is set |
| `{offer_id}`, `{offer_id_numeric}` | The offer ID and its integer form |
| `{goal_id}`, `{goal_id_numeric}` | The goal ID and its integer form, empty on offers with no goals |
| `{conversion_name}`, `{offer_name}` | The step's name and the offer's title |
| `{status}` | `completed` or `reversed` |
| `{reason}` | The reversal reason, empty otherwise |
| `{purchase_type}` | `purchase`, `deposit` or `subscription` when the step is one, else empty. Macro only |
| `{purchase_amount}` | The one dollar price the step's name asks for, such as `9.99`, else empty. Macro only |
| `{sub1}` to `{sub10}` | Your own values from the link, empty when the link had none |

Every parameter in the first table is also added to your URL under its own name, with or without macros.

## Network postbacks

The URL under **Workspace settings** receives a shorter set, added to the URL as is (no macros).

| Parameter | Sent | Meaning |
|---|---|---|
| `action_id` | Always | The conversion's ID. A reversal repeats it. |
| `sub_id` | Always | The value from the tracking link. |
| `offer_id` | Always | Our offer ID. |
| `status` | Always | `completed` or `reversed`. |
| `payout` | Always | Your earnings in USD. |
| `user_payout` | With a reward | The player's reward in USD. |
| `conversion_name` | Always | The step's name. |
| `offer_name` | Usually | The offer's title. |
| `goal_id` | Per step | The goal's ID. |
| `is_offer_complete` | Always | `true` on the last step. |
| `clicktimestamp` | Usually | Click time as the advertiser's side reported it. |
| `verifier` | With a secret | The signature. Without a secret, postbacks are unsigned. |
