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

# Advertisers: launch your first campaign

Getting started · For advertisers · Updated 30 October 2026
Web version: https://www.affiliateos.ai/help/getting-started/advertiser-first-campaign

Create an account, list the steps you'll pay for, verify each one with a free test event, add at least $50, then submit for approval. Publishers can run the campaign once our team approves it.

## Before you start

- Your app's store links, or the public HTTPS address of your site.
- Someone who can change your server. Events are sent from your backend, never from the app.

## Steps

### Create your account

[Start a campaign](https://app.affiliateos.xyz/login?type=advertiser&mode=signup) creates your advertiser account. Sign-up is open, and your balance is only drawn when a live event matches a tap.

### Add your product

Add your app as a product, with its iOS and Android store links, or your site with its public HTTPS address. Each product gets an `appId`; your events will carry it.

### Campaigns, then New campaign

Choose **New campaign** for the product, then add each [event](https://www.affiliateos.ai/glossary#event) you'll pay for: a key your server will send, such as `level_25`, and a price.

| Event key | When it fires | Price |
|---|---|---|
| `chapter_1` | The player finishes chapter 1 | $0.60 |
| `level_25` | The player reaches level 25 | $1.50 |
| `starter_pack_purchase` | The player buys the starter pack | $4.00 |

Example for Tidewater Games. Nothing is paid at install, so the first event is chapter 1. Prices are yours to set, from $0.01; each event starts as **Awaiting test**.

### Capture afos_click_id

On every tap, we add `afos_click_id` to your destination URL. Store it on the player, and send it back as `clickId` on every live event. For apps:

- **Android:** read it from the Play install referrer on first launch.
- **iOS, or no app changes:** when a new player first opens the app, your server calls `POST /v1/advertiser/match-install` and stores the click ID it returns.
- **If you use an attribution tool** such as AppsFlyer or Adjust, set your store link to its link and read `afos_click_id` from the install data.

Website campaigns read `afos_click_id` from the landing page's URL and keep it until sign-up.

### Mint API key, then send a test event for each event

Choose **Mint API key**. The key starts with `ak_` and is shown once; keep it on your server. Then send each event from your server with `"test": true`, or press **Send test** next to it. A [test event](https://www.affiliateos.ai/glossary#test-event) is never charged. Each one turns **Verified**.

> Figure: Example: the Tidewater Putt campaign in Setting up, with three events. chapter_1 and level_25 are Verified, starter_pack_purchase is Awaiting test.

### Add funds

Submitting needs a balance of at least $50. Choose **Add funds**, or **Contact us to add funds** if that is what your account shows. Live events draw on the balance at each event's price.

> **Funds are non-refundable.** They can't be withdrawn and are only used for campaign activity on AffiliateOS. When the balance can't cover an event, the event is logged as `insufficient_balance` and not charged. When the balance drops below a live campaign's cheapest event, your live campaigns pause until you add funds. The [terms](https://www.affiliateos.ai/terms#s5) govern if this page and they differ.

### Submit for approval

When every required event is **Verified** and the balance is $50 or more, choose **Submit for approval**. The campaign moves from Setting up to In review. Once our team approves it, it goes Live and publishers can run it.

### Check it worked

Open **Event logs** on the campaign: it shows each event and its status. `approved` on a live event means it matched a tap and was charged its price. `missing_attribution` means it came without a click ID, or with one that matches no tap of ours: it is logged and never charged.

## What you're never charged for

- Test events.
- Live events without a click ID, or with one that matches no tap of ours (`missing_attribution`).
- The same event twice: send a stable `eventId`, and a retry comes back as `duplicate`.
- Events with a `timestamp` that isn't within 48 hours of when we receive it, or past the event's attribution window (`outside_window`). Send events as they happen.

The full request, every field and every status are in the [advertiser events reference](https://www.affiliateos.ai/help/developers#advertiser-events).
