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

# Publishers: from invite to your first conversion

Getting started · For publishers · Updated 30 October 2026
Web version: https://www.affiliateos.ai/help/getting-started/publisher-first-conversion

Set up postbacks before you send a single user. We never send a postback without a secret, so a conversion that happens before this step reaches your AffiliateOS report but not your server.

## Before you start

- A public URL on your server that can read query parameters. Use HTTPS: every postback carries your user's ID.
- A stable ID for each of your users. It goes on every tap as `sub_id` and comes back on every postback, so it decides whose balance you credit.

## Steps

### Request access

Publisher sign-up is by request. Tell us about your app or site on the [publisher access form](https://www.affiliateos.ai/contact?role=publisher). It goes straight to our team, and we reply by email.

### Open your invite link and set a password

Our team sends you an invite link. It works for 14 days; if it runs out, ask us for a new one. Choose a password of 8 characters or more, then sign in at the [publisher log in](https://app.affiliateos.xyz/login?type=partner).

### Postbacks, then Create postback secret

Open **Postbacks** and choose **Create postback secret**. Copy it now: it starts with `ps_` and is shown once. Every [postback](https://www.affiliateos.ai/glossary#postback) we send carries a `verifier` made with this secret, so your server can check it came from us.

> **No secret, no postbacks.** Until a secret exists, conversions still count in your reports, but nothing is sent to your server. Lose the secret and you create a new one; the old one stops verifying at once.

### Add your postback URL

Choose **Add postback** and paste your URL. You can place values where you want them with macros such as `{sub_id}`, `{transaction_id}`, `{payout}` and `{user_payout}`; every parameter is also appended to the URL either way.

Example, for Pebble Rewards:

```text
https://api.pebble.example/afos?user={sub_id}&txn={transaction_id}&reward={user_payout}
```

### Send a test postback

Open the saved postback and choose **Send test postback**. It goes through the same signing a real conversion uses and adds `test=true`, so make your server log it and skip crediting it. Check the `verifier` passes before you go on.

### Choose how to show offers

| Option | Code needed | Start here if |
|---|---|---|
| Offer Links: our team picks offers and sends a tracking link for each | None | You run a site or a newsletter |
| Hosted Offerwall | One iframe or webview | You run a rewarded app |
| Offer API or Top Offers Feed | A server call | You build your own offer screens |

The [developer docs](https://www.affiliateos.ai/help/developers) have the wall snippet and the API calls.

### Send one real user through

Use your own test user, with their own ID in `sub_id` (on the wall, the `uid`). Give every user a different ID: one shared value collapses every conversion onto one "user" you can't credit. Leave the literal `{SUB_ID}` in a link and the same thing happens.

### Check it worked

Open **Reporting**, then **Flight Recorder**, filter by **Sub ID** and open the conversion. It traces the conversion from the tap to your postback delivery, and the delivery reads `sent` or `failed`, or `skipped_no_url` when no postback URL matched. The same conversion also shows in **Conversions**.

> Figure: Example trace for click clk_7Q2f81 from user u_48213: click recorded at 2:06 PM, install received, payout of $4.20 recorded, postback delivered to api.pebble.example.

## How to read your first postbacks

- `status` is `completed` or `reversed`. A reversal repeats the original `action_id`, so dedupe on `action_id` and `status` together, or you drop the reversal of a conversion you already credited.
- Credit `user_payout` to your user when it's present. It is the player's reward in USD; convert it to your own currency.
- Answer with HTTP 200.

> **Install-paid games pay you once, at install.** Their later steps still post back with `user_payout` set to the player's reward, so you can keep crediting the player. Through the Offer API or a link, `payout=0` on those steps; on the Hosted Offerwall, `revenue=0`.

## If you add more postbacks later

Once you save any postback row, the account-level fallback URL stops being used. If you add rows for events (later steps), add a row for conversions too, or installs stop reaching you.
