---
title: "List campaigns"
method: GET
path: "/v1/finder/campaigns"
tags: ["RecruitAffiliates.ai"]
---

# List campaigns

`GET /v1/finder/campaigns`

## Request

- Base URL: `https://api.affiliaterail.com`
- URL: `https://api.affiliaterail.com/v1/finder/campaigns`
- Auth: HTTP bearer

The brand's campaigns, newest first.

**Scope:** `finder:read` (or `finder:write`)

## Query parameters

- `brand_id` string: Which brand. Defaults to the organization's oldest.
- `limit` string: 1 to 100, default 25
- `cursor` string: `next_cursor` from the previous page, with the same filters

## Response `200`

Campaigns

- FinderCampaignPage
  - `data` FinderCampaign[], required
    - `id` string, required: Prefixed id (`fca_…`)
    - `object` 'finder_campaign', required
    - `brand_id` string, required: Prefixed id (`fbr_…`)
    - `inbox_id` string, nullable, required
    - `name` string, required
    - `state` 'draft' | 'running' | 'paused' | 'stopped' | 'finished', required
    - `audience` object, nullable, required
      - `source` object, required
        - `kind` 'list' | 'stage' | 'segment', required
        - `list_id` string, nullable, required
        - `stage` string, nullable, required
        - `segment_id` string, nullable, required: The segment the campaign was picked from, when `kind` is `segment`
      - `checked_at` string, date-time, nullable, required: ISO-8601, UTC
      - `included` integer, required
      - `excluded` object, required
        - `existing_affiliate` integer
        - `do_not_contact` integer
        - `rule_excluded` integer
        - `same_person` integer
        - `no_email` integer
        - `invalid_email` integer
        - `unverified_email` integer
        - `suppressed` integer
        - `already_contacted` integer
        - `not_open` integer
        - `over_limit` integer
    - `approved` boolean, required: True once someone approved the current emails in the app
    - `created_at` string, date-time, required: ISO-8601, UTC
    - `updated_at` string, date-time, required: ISO-8601, UTC
  - `has_more` boolean, required: True when `next_cursor` fetches more
  - `total_count` integer, required: Every object matching the filters, ignoring the cursor
  - `next_cursor` string, nullable, required: Pass as `cursor` with the same filters to get the next page. Null on the last page.

## Other responses

- `400`: Invalid request
- `401`: Missing or unknown API key
- `402`: The organization's Recruit Affiliates plan does not include the API
- `403`: Key lacks the required scope
- `404`: No such object in your organization
- `409`: In conflict with the object's state, or the same idempotent request is still running
- `422`: The request was understood and refused
- `429`: Rate limited, by key or by organization: see Retry-After and X-RateLimit-Scope
- `501`: Not available to a test key (`sandbox_no_send`)

---

[API](https://skmtc.dev/affiliaterail/apis/affiliaterail-api.md) · [All operations](https://skmtc.dev/affiliaterail/apis/affiliaterail-api/llms.txt) · [OpenAPI document](https://skmtc.dev/affiliaterail/apis/affiliaterail-api/revisions/ea41f345c092?raw)
