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

# One postback per step on multi-step offers

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

A multi-step offer sends one postback for each step a user completes, not one for the whole offer. Each has its own `action_id`, the step's `goal_id` and `conversion_name`, and that step's money. `is_offer_complete=true` marks the last one.

> **Install-paid games pay you once, at install.** Later steps reward the player, not you. Through the Offer API, the feed or a link, they post back with `payout=0` and the player's reward in `user_payout`; on the Hosted Offerwall, `revenue=0`. Offers paid per event list what each step pays you, step by step.

## Example: Harbor Blocks

Example. Harbor Blocks by Tidewater Games has 12 steps to level 40 and pays per install. Tidewater Games set a player reward for each step. Player `u_48213` on Pebble Rewards, which uses the Offer API, plays to level 40. Three of the twelve postbacks Pebble Rewards receives:

| `conversion_name` | `action_id` | `payout` | `user_payout` | `is_offer_complete` |
|---|---|---|---|---|
| `Install` | `act_5Kq2Wc` | `4.2` | `1.5` | `false` |
| `Reach level 10` | `act_8Rt3Lb` | `0` | `1.5` | `false` |
| `Reach level 40` | `act_2Wn7Qd` | `0` | `6` | `true` |

All three carry the same `sub_id=u_48213` and `offer_id`, and each its own `goal_id`. Pebble Rewards credits the player 1,500, 1,500 and 6,000 pebbles, at 1,000 pebbles per $1, and earns $4.20 in all.

## What each step's postback tells you

- **Which step:** `goal_id` matches `goals[].id` in the Offer API, and `conversion_name` is that goal's `name`. Store both: a step removed from the offer later can still post back.
- **Your money:** `payout` on the Offer API, the Top Offers Feed and links; `revenue` on the Hosted Offerwall. Read it on every step. Your offer list shows what each step pays you in `goals[].effectivePayoutUsd`.
- **The player's reward:** `user_payout`, in USD. Credit it as sent.
- **The end:** `is_offer_complete=true` on the last step only.

A step that pays you `0` still posts back when it carries a player reward, so you can keep crediting the player. [Multi-step offers: which steps pay](https://www.affiliateos.ai/help/offers/multi-step-offers) reads the same steps from the offer list's side.

## Which URL each step goes to

The first step, and any install step, is a conversion. Every later step is an event. A Conversion row receives both, unless an Event row applies to that step, so one global Conversion row is enough to receive every step. [Global or offer-specific postbacks](https://www.affiliateos.ai/help/postbacks/global-or-offer-specific) has the full order.

## On the Hosted Offerwall

Each step posts back with `placement=offerwall`. `revenue` is what you earn on that step (`0` on later steps of install-paid games) and `payout` and `user_payout` are the player's reward on your wall. Credit `user_payout`, track `revenue`.

## Edge cases

- **Steps that never post back.** A step listed in `goals` posts back. Steps that pay neither you nor the player, and steps the advertiser uses only for its own tracking, are usually left out of `goals` and send nothing.
- **A step removed after the user passed it.** It can still post back, paying you `0`, with the `user_payout` you were last sent for it, or the reward the advertiser set. It may not be in `goals` any more.
- **Time limits.** Where the advertiser sets one, `goals[].maximumCompletionTimeDays` is how many days the user has to reach that step, counted by the advertiser's side.
- **Reversing one step.** A reversal takes back one step and repeats that step's `action_id` with `status=reversed`. The other steps stand.
- **Duplicates.** Dedupe on `action_id` and `status` together, never on `offer_id` and `sub_id`: one user completes many steps of one offer.
