Skip to content

Create Campaign

POST
/api/public/campaign

Creates one campaign for each flight in the request.

Create Campaign
curl --request POST \
--url https://backend.podscribe.ai/api/public/campaign \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "name": "example", "publisher": "example", "advertiser": "example", "type": "Baked-in", "flights": [ { "startDate": "2026-04-15T12:00:00Z", "endDate": "2026-04-15T12:00:00Z", "expectedDate": "2026-04-15T12:00:00Z", "totalCost": 1, "cpm": 1, "currency": "USD", "expectedImpressions": 1 } ], "externalId": "example", "itunesOrYtId": "example", "geo": "GLOBAL", "expectedUnits": [ { "position": "pre", "length": 1 } ], "promo": "example", "expectedLandingUrl": "https://example.com", "product": "example", "initiative": "example", "expectedTalkingPoints": [ "example" ], "disallowedTalkingPoints": [ "example" ], "mediaType": "podcast", "tags": [ "example" ], "scriptUrl": "https://example.com", "teamMembers": [ "example" ], "creativeIds": [ "example" ], "billToPublisher": false }'
Media typeapplication/json
name
required

Campaign name

string
publisher

Publisher name (lookup). Optional when itunesOrYtId is provided; then the publisher is inferred from the show.

string
advertiser
required

Advertiser name

string
type
required

Campaign type. Instagram campaigns (mediaType instagram) take story, reel or feed; other media types take DAI or Baked-in.

Allowed values: Baked-in DAI story reel feed
flights
required

Flights of the campaign

Array<{startDate,endDate,expectedDate,4 more}>
startDate

start of the campaign in ISO format for DAI campaigns

string<date-time>
endDate

end of the campaign in ISO format for DAI campaigns

string<date-time>
expectedDate

expected date in ISO format for Baked-in campaings

string<date-time>
totalCost

rate of the campaign

number
cpm

cpm rate of the campaign

number
currency

Currency code (USD, EUR, GBP).

Default value: USD
Allowed values: USD EUR GBP
expectedImpressions

expected impressions of the campaign

number
externalId

External ID of the campaign

string
itunesOrYtId

ITunes ID / YouTube Channel ID / YouTube Playlist ID

string
geo

Country

Default value: GLOBAL
Allowed values: GLOBAL US GB CA AU DE FR MX IE JP ES IN BR IT AR KR SA AE ID EG AT NL DK FI IL NO NZ SE TR RU
25 moreLess
expectedUnits

Expected units of the campaign

Array<{position,length}>
position
required

Ad position

Allowed values: pre mid post feed drop
length
required

Ad length in seconds

number
promo

The discount code

string
expectedLandingUrl

Expected landing URL of the campaign

string<uri>
product

Product metadata

string
initiative

Initiative metadata

string
expectedTalkingPoints

Expected talking points

Array<string>
disallowedTalkingPoints

Disallowed talking points

Array<string>
mediaType

Media type of the campaign

Default value: podcast
Allowed values: podcast youtube simulcast streaming sai ott_ctv display video twitter twitch tiktok instagram rumble spotify spotifyvideo dailywire display_video radio_show
13 moreLess
tags

Tags

Array<string>
scriptUrl

Script URL of the campaign

string<uri>
teamMembers

Team members metadata

Array<string>
creativeIds

creative IDs metadata

Array<string>
billToPublisher

whether to bill publisher

boolean
Default value: false

OK

Media typeapplication/json
campaigns
required

The created campaigns, one per flight, in the order of flights.

Array
id
required

ID of the campaign

string<uuid>
externalId

External ID of the campaign

string nullable
Response example
{
"campaigns": [
{
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"externalId": "example"
}
]
}