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

# Forward events from AppsFlyer or Adjust

Advertiser campaigns · For advertisers · Updated 30 October 2026
Web version: https://www.affiliateos.ai/help/campaigns/forward-appsflyer-adjust-events

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`.

## Before you start

- A server that already receives your attribution tool's events, such as its server callbacks.
- An `ak_` key, your `appId` and your `campaignId`: see [Send events server to server (S2S)](https://www.affiliateos.ai/help/campaigns/send-server-events).

## Steps

### 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 as `eventKey`, 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_1` | `af_level_achieved` |
| Bought the starter pack | `starter_pack_purchase` | `af_purchase` |

Example 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_id` we 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](https://www.affiliateos.ai/help/campaigns/capture-afos-click-id).

### Forward each event

In the same server code that receives the tool's event, send it on to `https://affiliateos.xyz/v1/advertiser/events`:

```json
{
  "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 as `duplicate` and is never charged twice.
- Forward as events arrive. A `timestamp` more than 48 hours from when we receive it is logged as `outside_window` and not charged, so a nightly batch can miss.
- Purchases need a `transactionId`.

### Send a test for each event

Add `"test": true` and forward one of each event. Tests are never charged, and each event turns **Verified**: [Send test events without being charged](https://www.affiliateos.ai/help/campaigns/send-test-events).

### 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_attribution` there means the click ID didn't make it from your tool's install data onto the user.

> **Your tool's attribution doesn't replace the click ID.** We charge an event only when it carries an `afos_click_id` that matches a tap on your offer. An event your tool attributes to us, sent without one, is logged as `missing_attribution` and never charged.
