Offer API
Every offer your account can run, in one call.
One request returns each offer, pay per install (CPI) or per action (CPA), with your payout, every step and a tracking link. You choose the order.
curl -G "$AFFILIATEOS_API/publisher/offers" \
-d platform=iOS -d country=US \
-H "x-api-key: $AFFILIATEOS_KEY" const base = process.env.AFFILIATEOS_API;
const url = `${base}/publisher/offers?platform=iOS&country=US`;
const headers = { "x-api-key": process.env.AFFILIATEOS_KEY };
const { data } = await (await fetch(url, { headers })).json(); url = os.environ["AFFILIATEOS_API"] + "/publisher/offers"
params = {"platform": "iOS", "country": "US"}
headers = {"x-api-key": os.environ["AFFILIATEOS_KEY"]}
body = requests.get(url, params=params, headers=headers).json()
{
"data": { "offers": [{
"id": "aff_3b9e41c07d2a",
"name": "Harbor Blocks",
"effectivePayoutUsd": 4.2,
"isPaidOnInstall": true,
"trackingUrl": "/click?off_id=…&sub_id={SUB_ID}",
"goals": [
{ "name": "Install and open",
"effectivePayoutUsd": 4.2, "userRewardUsd": 1.5 },
… 10 more goals
{ "name": "Reach level 40",
"effectivePayoutUsd": 0, "userRewardUsd": 2.4 }
]
}]}
}
Your card, from that row
Harbor Blocks
Tidewater Games · iPhone
$4.20at install
The install pays you. Every step rewards the player.
-
effectivePayoutUsdYour payout, in US dollars. -
isPaidOnInstallTrue when the install itself pays you. -
trackingUrlPut your user's ID where it says{SUB_ID}. -
goalsAll 12 steps on one row, each with the player's reward.
01Worked example
Four listings of one game, one row.
The same game often arrives several times, under different names and prices. You get it once, with every step.
Four listings, one row
Skip this animation Skip these steps- 01 Arrive
Four listings arrive
Harbor Blocks for iPhone comes in four times, under four names, at four install prices.
Incoming listings · iPhone- Harbor Blocks - iOS $3.10 at install
- HARBOR BLOCKS (US) $4.20 at install
- Harbor Blocks iOS Multi 30 Days $3.60 at install
- Harbor Blocks: Puzzle Tiles $2.85 at install
- 02 Match
Matched by store ID
We match listings on the app's store ID, or on the name once tags like “- iOS” are stripped. Send one
countryand copies for other countries merge too.Matched by store ID- Harbor Blocks - iOS $3.10 at install
- HARBOR BLOCKS (US) $4.20 at install
- Harbor Blocks iOS Multi 30 Days $3.60 at install
- Harbor Blocks: Puzzle Tiles $2.85 at install
Same appiPhonePaid at install
- 03 Keep
One copy per pay type stays
Three copies drop out. We keep the copy with the highest install payout and the best copy paid per step, if there is one: at most two rows per game and platform.
One per game, platform and pay type- Harbor Blocks - iOS $3.10 at install
- HARBOR BLOCKS (US) $4.20 at install Kept
- Harbor Blocks iOS Multi 30 Days $3.60 at install
- Harbor Blocks: Puzzle Tiles $2.85 at install
If one copy pays at install and another per step, both stay.
- 04 Render
One row, every step
The row you get carries all 12 steps, each with its payout and the player's reward. You draw the card and choose where it goes.
Your rowHarbor Blocks $4.20 to you, at install- 01 Install and open $4.20 to you$1.50 player reward
- 02 Reach level 5 $0.30 player reward
- 03 Reach level 10 $0.40 player reward
- 04 Reach level 15 $0.50 player reward
- +8 … 8 more, up to level 40 player rewards
Only the install pays you. Every step carries the player's reward.
Step 1 of 4
02Filters
Filter it to one player's phone.
Send the player's platform, country, US state and OS version, and the list holds only offers that phone can run. Try it on 24 example offers.
/publisher/offers?platform=iOS&country=US 14 of 24 example offers match
- Harbor Blocks $4.20 at install
- Harbor Blocks $3.90 at install
- Lantern Run $2.90 at install
- Lantern Run $3.10 at install
- Copper Kitchen $3.80 at install
- Kettle Kingdom $1.60 at install
- Kettle Kingdom $1.75 at install
- Moss & Match $2.10 at install
- Fernway Solitaire $1.70 at install
- Fernway Solitaire $1.85 at install
- Reedmoor Town $3.20 at install
- Kelp Garden $5.10 at install
- Grainline Puzzle $1.40 at install
- Coin Heron $6.50 across steps
- Tidewater Putt $6.10 across steps
- Quiet Orchard $4.75 across steps
- Kelpie Bank $40.00 one action
- Kelpie Bank $40.00 one action
- Tidereel $2.40 one action
- Driftwall VPN $9.25 one action
- Brinebox Eats $6.00 one action
- Sandjar Savings $12.00 one action
- Pantry Gull $3.50 one action
- Tidewater Putt $6.10 across steps
No example offers match these filters.
The first 5 are shown. Your app decides the order.
03Availability
Full offers leave the list.
When an offer runs out of cap or budget, the list stops returning it, so nobody taps into a dead end. Cards you saved earlier need a check: send their IDs to the availability call and drop any that come back unavailable.
- Batch1 to 100 offer IDs per call.
- How oftenRecheck a card on screen at most once a minute.
- Already started An offer a player started stays fetchable by ID, so their progress keeps working.
- Offer alerts Get an email when an offer you run changes its payout or stops running. Each team member sets up their own.
Checked at 2:06 PM. Next check in a minute or more.
curl -G $AFFILIATEOS_API/publisher/offers/availability \
-d ids=aff_7c21e0b94f3a,aff_3b9e41c07d2a \
-H "x-api-key: $AFFILIATEOS_KEY" {
"status": "success",
"data": {
"offers": [
{ "id": "aff_7c21e0b94f3a", "available": false,
"cap": 0, "capResetsAt": "2026-10-30T04:00:00.000Z" },
{ "id": "aff_3b9e41c07d2a", "available": true,
"cap": null, "capResetsAt": null }
],
"checkedAt": "2026-10-29T19:06:00.000Z"
}
} 04Top Offers Feed
Or let us rank it.
Add segment=top to the same call. You get our team's picks plus the offers that converted most in the last 30 days, already in the order to show them.
?segment=top - 01 Kelp Garden $5.10per install
- 02 Harbor Blocks $4.20per install
- 03 Copper Kitchen $3.80per install
05API keys
Rotate keys without downtime.
Keep up to five keys live. Each one is shown once, when you create it, and new keys don't expire. Owners and admins make them under My Profile → API Keys.
API Keys
My Profile · 3 of 5 keys
New key. Copy it now; it won't be shown again.
pk_••••••••••••••••••••••••3e7d - Production server, new
pk_…3e7dJust now - Production server
pk_…a91f - Staging
pk_…07c2Sep 14
- 01
Create the new key
Name it after where it runs, and copy it then. It won't be shown again.
- 02
Deploy it and check
Ship it to your servers and confirm a call returns offers.
- 03
Revoke the old key
It stops working at once, except that the offer list and availability calls may accept it for up to 30 seconds.
06Docs
Docs your coding assistant can read.
The developer docs are public, and so is a Markdown file of the publisher API for your coding assistant, checked against the API on .
Copies the publisher API reference as Markdown, ready to paste into a chat. Or open publisher.md.
- /help/developers#offer-api Quickstart Your first call, the fields you'll use and a working tracking link.
- /help/developers#reference Full reference Query parameters, response fields and samples in curl, Node and Python.
- /help/developers#ai-context AI context file The publisher API as one Markdown file, for your coding assistant.
Do you tell me where an offer came from?
No. You get our offer ID (aff_…), the brand and the app's store ID. Upstream source fields are left out, and source filters return a 400.
How many offers will I get?
The catalog holds 10,000+ offers: direct offers plus AffiliateOS marketplace offers. Your list holds the ones your account can run, for the platform and country you ask about.
How often does the list change?
Through the day, as offers start, pause and fill up. If you cache cards, check them with the availability call, at most once a minute.
How do game offers pay?
Games paid per install pay you once, at install. Later steps pay you nothing; each still sends you a postback with the player's reward for you to credit. Offers paid per step list what each step pays you. On an account paid per step, the install pays you $0 and the offer lists what each later step pays you.
Is the response paged?
Only if you ask. Send page or per_page and pages hold 50 offers by default, 200 at most. Send neither and you get the whole list in one response.
Do I need an SDK?
No. HTTPS and an API key. The docs have the API host and samples in curl, Node and Python.
Request access, then make the first call.
Publisher sign-up is by request. We reply by email.