Publishers: from invite to your 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.
On this page
- 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_idand comes back on every postback, so it decides whose balance you credit.
Request access
Publisher sign-up is by request. Tell us about your app or site on the publisher access form. 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.
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 we send carries averifiermade with this secret, so your server can check it came from us.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:
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 theverifierpasses 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 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, theuid). 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
sentorfailed, orskipped_no_urlwhen no postback URL matched. The same conversion also shows in Conversions.What Reporting, Flight Recorder shows when you open a conversion. A failed delivery shows the reason on the last step.
statusiscompletedorreversed. A reversal repeats the originalaction_id, so dedupe onaction_idandstatustogether, or you drop the reversal of a conversion you already credited.- Credit
user_payoutto your user when it’s present. It is the player’s reward in USD; convert it to your own currency. - Answer with HTTP 200.
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.