---
title: "Get assignment options"
method: GET
path: "/creators/campaigns/assign-options"
tags: ["Creators"]
---

# Get assignment options

`GET /creators/campaigns/assign-options`

## Request

- Base URL: `https://viral.app/api/v1`
- URL: `https://viral.app/api/v1/creators/campaigns/assign-options`
- Auth: API key in header `x-api-key`

Preflight for POST /creators/campaigns/assign: the cycle-aligned start dates a fixed-anchor campaign offers behind startBasis prev, current and next (null where the assign would refuse the basis; rolling campaigns start on a custom day, today by default), and per creator whether an archived status or a running or scheduled assignment would make the assign fail.

## Query parameters

- `campaignId` string, required: Campaign ID with orgcamp_ prefix
- `creatorIds` string[], required

## Response `200`

OK

- object: What an assign call would accept for these creators today.
  - `campaign` object, required
    - `id` string, required: Campaign ID with orgcamp_ prefix
    - `name` string, required
    - `anchor` 'rolling' | 'fixed', required
    - `interval` 'day' | 'week' | 'month', required
    - `intervalCount` integer, required
    - `validFrom` string, required
    - `validUntil` string, nullable, required
    - `status` 'upcoming' | 'active' | 'closing' | 'ended', required: Campaign lifecycle status derived from validity window. upcoming: validFrom in the future; active: started with no end date; closing: started and has an end date in the present/future; ended: end date is in the past.
  - `today` string, required
  - `startOptions` object, nullable, required: Fixed-anchor campaigns: the cycle start dates behind startBasis prev, current and next, and today's date behind startBasis today (a mid-period join: the current cycle becomes the assignment's first period, cut to today, its fixed salary paid pro rata; startBasis custom takes any other day the same way). A basis is null when an assign with it would fail — its start lies before the campaign starts, or its cycle runs past the campaign's end date — so offer only the dated ones. Rolling campaigns have none — pass startBasis custom with the day the creator joins (today by default).
    - `prev` string, nullable, required
    - `current` string, nullable, required
    - `next` string, nullable, required
    - `today` string, nullable, required
  - `creators` object[], required
    - `id` string, required: Organization creator ID with orgcre_ prefix
    - `name` string, nullable, required
    - `archived` boolean, required: The creator is archived; also reported as blockedBy archived.
    - `blockedBy` 'payout_hold' | 'running' | 'scheduled' | 'archived', nullable, required: payout_hold: the organization's hiring is on hold because creator payouts are overdue — every creator reports it and assign fails with 402 PAYMENT_REQUIRED until the payouts are settled. running: an open assignment with no end scheduled; scheduled: an assignment that starts in the future. Either makes assign fail with CREATOR_ALREADY_ASSIGNED. A running assignment with a scheduled end does not block — the new one must start after it. archived: the creator is archived and assign fails with CREATOR_ARCHIVED — unarchive them first.
    - `assignment` object, nullable, required
      - `campaignId` string, required: Campaign ID with orgcamp_ prefix
      - `campaignName` string, required
      - `validFrom` string, required
      - `validUntil` string, nullable, required
    - `videosPaidOutsideCampaigns` object[], required: The creator's videos a video payout already paid outside any campaign (no assignment covered the days it paid), each with the last day paid, latest first. Such a payout does not take the video out of campaign calculations: an assignment starting on or before a video's paidThrough pays those days again.
      - `platform` 'facebook' | 'instagram' | 'tiktok' | 'youtube' | 'snapchat', required: Social media platform (facebook, instagram, tiktok, youtube, snapchat)
      - `platformVideoId` string, required
      - `paidThrough` 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)
