---
title: "List a campaign's custom rates"
method: GET
path: "/campaigns/{id}/custom-rates"
tags: ["Creators"]
---

# List a campaign's custom rates

`GET /campaigns/{id}/custom-rates`

## Request

- Base URL: `https://viral.app/api/v1`
- URL: `https://viral.app/api/v1/campaigns/{id}/custom-rates`
- Auth: API key in header `x-api-key`

Returns every creator with custom rates on the campaign: their own values (major units, each naming a payout of the campaign spec by id), whether they are assigned, and the campaign's own values for reference.

## Path parameters

- `id` string, required: Campaign ID with orgcamp_ prefix

## Response `200`

OK

- object: Every creator with custom rates on a campaign.
  - `campaignId` string, required: Campaign ID with orgcamp_ prefix
  - `currency` string, required
  - `unavailableReason` string, nullable, required: Why this campaign cannot have custom rates; null when it can.
  - `rows` object[], required: Every value a creator can have their own of, with the campaign's value.
    - `key` string, required
    - `id` string, nullable, required: The payout's id; null for the video target.
    - `field` 'perVideo' | 'videoCap' | 'amountCap' | 'rate' | 'amount' | 'videoTarget', required
    - `platform` 'tiktok' | 'instagram' | 'youtube' | 'facebook' | 'snapchat': A per-platform target's row: the platform its count is for.
    - `countNoun` string: What a count row counts (video by default).
    - `group` string, required
    - `label` string, required
    - `unit` 'money' | 'rate' | 'count', required
    - `unitLabel` string, required
    - `campaignValue` number, required
    - `customValue` number, nullable, required
    - `allowsZero` boolean, required
  - `creators` object[], required
    - `creator` object, required
      - `id` string, required: Organization creator ID with orgcre_ prefix
      - `userId` string, required: User ID with user_ prefix
      - `name` string, nullable, required
      - `email` string, required
      - `image` string, nullable, required
      - `archived` boolean, required
    - `assignment` 'active' | 'upcoming', nullable, required: Whether the creator is assigned to the campaign now or later; null otherwise.
    - `customRates` object, required: A creator's custom values on a campaign.
      - `videoTarget` integer, nullable, required: The creator's own video target per cycle, in the campaign's unit; null when they follow the campaign's (and on a per-platform target, see videoTargetPlatforms).
      - `videoTargetPlatforms` object, nullable, required: A per-platform target: the creator's own count per platform (platforms left out follow the campaign's); null when they have none.
      - `values` object[], required
        - `id` string, required: The payout's id in the campaign spec.
        - `field` 'perVideo' | 'videoCap' | 'amountCap' | 'rate' | 'amount', required
        - `value` number, required: Major units (a video count for videoCap). 0 = that payout is off for the creator.
    - `updatedAt` string, required

## Other responses

- `400`: 400
- `401`: 401
- `402`: 402
- `404`: 404
- `408`: 408
- `429`: 429
- `500`: 500

---

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