Forward events from AppsFlyer or Adjust
AffiliateOS isn’t a built-in partner inside AppsFlyer or Adjust, so nothing turns on with a switch in your tool. Your server, which already receives your tool’s events, forwards each one to us, with the tool’s event name and the user’s stored afos_click_id.
See also: Setup without an SDK
On this page
- A server that already receives your attribution tool’s events, such as its server callbacks.
- An
ak_key, yourappIdand yourcampaignId: see Send events server to server (S2S).
Choose Your attribution tool posts to AffiliateOS
On the campaign page, under Connect your app, choose Your attribution tool posts to AffiliateOS. You can also pick it when you create the campaign.
Add your tool’s name to each event
For each event, fill in Name in your attribution tool (optional) with the name your tool gives it, for example
af_purchase. Your server can then send the tool’s name aseventKey, and we match it to the right event. Case doesn’t matter.What the user did Event key Name in your tool Finished chapter 1 chapter_1af_level_achievedBought the starter pack starter_pack_purchaseaf_purchaseExample for Tidewater Putt.
Get afos_click_id into the install data
Use your tool’s links as your product’s App Store URL and Google Play URL, so the
afos_click_idwe add rides along to your tool. Read it on your server from the tool’s install data and save it on the user. Without a tool, see the other ways in Capture afos_click_id on your site or app.Forward each event
In the same server code that receives the tool’s event, send it on to
https://:affiliateos. xyz/ v1/ advertiser/ events { "clickId": "<stored afos_click_id>", "advertiserUserId": "tp_7731", "eventKey": "af_purchase", "eventId": "<your tool's ID for this event>", "timestamp": "2026-10-30T19:06:00.000Z", "appId": "<your appId>", "campaignId": "<your campaignId>", "transactionId": "order_5518", "revenue": 4.99, "currency": "USD" }- Use an ID that stays the same for this event as
eventId, so a repeat from your tool comes back asduplicateand is never charged twice. - Forward as events arrive. A
timestampmore than 48 hours from when we receive it is logged asoutside_windowand not charged, so a nightly batch can miss. - Purchases need a
transactionId.
- Use an ID that stays the same for this event as
Send a test for each event
Add
"test": trueand forward one of each event. Tests are never charged, and each event turns Verified: Send test events without being charged.Check it worked
Open Event logs on the campaign. Each forwarded event shows with your tool’s name as its key and a status. After launch,
missing_attributionthere means the click ID didn’t make it from your tool’s install data onto the user.