Skip to main content

CampaignOfferContextResponse

The curated, recipient-facing view of a campaign offer --- enough for a client to render the review/accept screen. Deliberately minimal: no internal ids, no inviter identity, no raw verification code, no persistence internals, no creative/storage internals. Returned from the public token surface. The voices array lists the podcast's ready voices the recipient can pick to accept the offer.

campaignNamestring

Name of the campaign the offer belongs to

Example: Spring Sneaker Launch
brandNamestring

Brand advertising in the campaign

Example: Acme Footwear
productNamestring

Product being advertised in the campaign

Example: Acme Trail Runner 2
podcastTitlestring

Title of the podcast the offer is for

Example: The Daily Tech Roundup
statusstring

Lifecycle status of the campaign-offer invitation behind the magic link

Possible values: [pending, started, accepted, rejected, expired, cancelled]

Example: pending
expiresAtdate-time

When the magic-link offer invitation expires and can no longer be acted on

Example: 2026-01-15T09:30:00Z
verifiedboolean

Whether the recipient has already passed verification-code verification for this magic link

Example: false
codeExpiresAtdate-timenullable

When the current verification code expires, if one is outstanding; null when no code has been sent

Example: 2026-01-15T09:30:00Z
voices object[]

The podcast's ready voices the recipient can choose from when accepting the offer

  • Array [
  • idstring

    Unique identifier for the voice.

    Example: 7Hb2Kp9QvL3mNx0R8tZ4
    titlestringnullable

    Display name of the voice.

    Example: Morning Host
    statusstring

    Lifecycle status; a voice is 'ready' once it has audio samples

    Possible values: [pending, ready, archived, failed]

    Example: ready
  • ]
  • CampaignOfferContextResponse
    {
    "campaignName": "Spring Sneaker Launch",
    "brandName": "Acme Footwear",
    "productName": "Acme Trail Runner 2",
    "podcastTitle": "The Daily Tech Roundup",
    "status": "pending",
    "expiresAt": "2026-01-15T09:30:00Z",
    "verified": false,
    "codeExpiresAt": "2026-01-15T09:30:00Z",
    "voices": [
    {
    "id": "7Hb2Kp9QvL3mNx0R8tZ4",
    "title": "Morning Host",
    "status": "ready"
    }
    ]
    }