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

# Filter offers by country, platform and category

Offers and the feed · For publishers, networks · Updated 30 October 2026
Web version: https://www.affiliateos.ai/help/offers/filter-by-country-platform-category

Add filters to your Offer API call: `country`, `state`, `platform` and `os_version` describe the user, and `content_type`, `offer_kind` and `vertical` describe the kind of offer. Values aren't case-sensitive, a comma means "any of these", and every filter you send must match.

## Filters for the user

| Parameter | Example | What it keeps |
|---|---|---|
| `country` | `US` or `US,CA` | Offers open to any of those countries. An offer with no country list counts as open everywhere. |
| `state` | `TX` | For a US user: leaves out offers that turn that state away. Send one state. |
| `platform` | `iOS` or `iOS,Android` | Offers listed for that platform. An offer listed for all platforms, or with none, matches every value. |
| `os_version` | `17.4` | With exactly one `platform`: leaves out offers the phone is too old or too new for. |
| `device` | `tablet` | Offers that name that device type. Offers that name none are left out, so most callers skip it. |

## Filters for the kind of offer

| Parameter | Example | What it keeps |
|---|---|---|
| `content_type` | `non_game` | `game` or `non_game`. Our own classification, the same on every offer. |
| `offer_kind` | `signup,finance` | `game`, `signup`, `finance`, `deposit`, `subscription`, `purchase`, `sweepstakes`, `survey`, `rewards_app` or `other`. |
| `vertical` | `sports_betting` | `sports_betting`, `real_money_gaming` or `none` for offers with neither. An offer can carry both. |
| `segment` | `install` | Named lists: `install`, `popular`, `top`. Comma-separate to require all. |
| `tracking_type` | `CPI,CPA` | The pricing label the offer was listed with. |
| `category` | `Game` | The offer's free-text category label. Labels differ from offer to offer, so prefer `content_type` or `offer_kind`. |

## Filters for one offer

| Parameter | Example | What it keeps |
|---|---|---|
| `name` | `harbor blocks` | Names that contain it, ignoring case, spaces, punctuation and accents. An exact offer ID, or its numeric ID, works here too. |
| `id` | `aff_7c2e91b04d3a` | That one offer. Takes the string `id` or the `numericId`. |
| `allow_offer_ids` | `aff_7c2e91b04d3a,aff_51d0c3e8a9f2` | Only these offers. String IDs only. |
| `block_offer_ids` | `aff_51d0c3e8a9f2` | Everything except these. String IDs only. |

Example IDs.

## Steps

### Start from the user's country and platform

Send the user's own `country` and `platform` on every call. Without `country`, the list includes offers aimed at other countries, and your users can tap offers they can't be credited for.

### Add state and OS version when you know them

For a US user, add `state`. For a phone, add `os_version` with the single `platform`, so offers the phone can't run never reach the screen.

### Narrow by kind

Use `content_type`, `offer_kind` or `vertical`. To keep sportsbooks and real-money games off a screen, add `vertical=none`.

### Combine them

```bash
curl -G "https://affiliateos.xyz/publisher/offers" \
  -d country=US -d state=TX -d platform=iOS -d os_version=17.4 \
  -d content_type=game -d vertical=none \
  -H "x-api-key: $AFFILIATEOS_KEY"
```

Example: games with no betting or real-money vertical, for user `u_48213` on an iPhone in Texas.

### Check it worked

Every row's `platforms` includes the platform you sent (or lists all, or none), every row's `geoTargeting` lets your country in, and `contentType`, `offerKind` and `verticals` match what you asked for.

> **Unclassified offers fail the kind filters.** An offer we couldn't classify, or classified with `classificationConfidence: "low"`, is left out whenever you send `content_type` or `offer_kind`. That way a filter for non-games never lets an unidentified offer through. Without those filters, the same offer is in your list.

## On the Offers page

The portal's **Offers** page has the same filters as controls: **Search offers…** (a name, an exact offer ID or a numeric ID), **Platform** (**All platforms**, **iOS**, **Android**, **Web**), **Country** (US unless you pick another; **All countries** on the **All** tab) and, on **All**, **Install only** for accounts paid at install. **Reset** clears them.

The chips across the top (**All**, **Most Popular**, **Games**, **Casino & sports**, **Sign-ups**, **Finance**, **Subscriptions & trials**) are the portal's own grouping, not an API parameter. The nearest API filters are `offer_kind` and `vertical`.

## For networks

The Network API (`/network-api/offers`) takes the same filter names, except `os_version` and `segment=top`, which only the publisher Offer API reads. In the network dashboard, **Offers** has **Country** (a comma list, such as `US, DE, GB`), **Platform** (**iOS**, **Android**, **Web**, **Desktop**) and **Tracking Type**.
