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.
Name of the campaign the offer belongs to
Spring Sneaker LaunchBrand advertising in the campaign
Acme FootwearProduct being advertised in the campaign
Acme Trail Runner 2Title of the podcast the offer is for
The Daily Tech RoundupLifecycle status of the campaign-offer invitation behind the magic link
Possible values: [pending, started, accepted, rejected, expired, cancelled]
pendingWhen the magic-link offer invitation expires and can no longer be acted on
2026-01-15T09:30:00ZWhether the recipient has already passed verification-code verification for this magic link
falseWhen the current verification code expires, if one is outstanding; null when no code has been sent
2026-01-15T09:30:00Zvoices object[]
The podcast's ready voices the recipient can choose from when accepting the offer
Unique identifier for the voice.
7Hb2Kp9QvL3mNx0R8tZ4Display name of the voice.
Morning HostLifecycle status; a voice is 'ready' once it has audio samples
Possible values: [pending, ready, archived, failed]
ready{
"campaign_name": "Spring Sneaker Launch",
"brand_name": "Acme Footwear",
"product_name": "Acme Trail Runner 2",
"podcast_title": "The Daily Tech Roundup",
"status": "pending",
"expires_at": "2026-01-15T09:30:00Z",
"verified": false,
"code_expires_at": "2026-01-15T09:30:00Z",
"voices": [
{
"id": "7Hb2Kp9QvL3mNx0R8tZ4",
"title": "Morning Host",
"status": "ready"
}
]
}