Skip to content

Update Campaign

PUT
/api/public/campaign/{request_id}

Updates a campaign’s dates, cost, units and other details.

Update Campaign
curl --request PUT \
--url https://backend.podscribe.ai/api/public/campaign/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "type": "Baked-in", "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, "itunesOrYtId": "example", "geo": "GLOBAL", "expectedUnits": [ [ { "position": "pre", "length": 1 } ] ], "promo": "example", "expectedLandingUrl": "https://example.com", "product": "example", "initiative": "example", "mediaType": "podcast", "tags": [ "example" ], "teamMembers": [ "example" ], "creativeIds": [ "example" ], "weekdaysTime": [ "MTuWThF (09:00 AM-05:30 PM)", "Sa (10:00 PM-02:00 AM)" ] }'
request_id
required
string<uuid>

Campaign ID

Media typeapplication/json
type

Campaign type. When type or mediaType changes, the new pair must follow these rules.

  • DAI: dated by startDate and endDate. Not available for youtube or rumble.
  • Baked-in: dated by expectedDate. Not for streaming, sai, ott_ctv, display, video, display_video or radio.
  • story, reel, feed: Instagram formats, only for mediaType instagram. Dated by expectedDate.
Allowed values: Baked-in DAI story reel feed
startDate

Start of the campaign in ISO format, for DAI.

string<date-time>
endDate

End of the campaign in ISO format, for DAI.

string<date-time>
expectedDate

Expected air date in ISO format, for Baked-in, story, reel and feed.

string<date-time>
totalCost

Rate of the campaign. When currency is omitted, the amount is read in the stored currency, not USD.

number
cpm

CPM rate of the campaign. When currency is omitted, the amount is read in the stored currency, not USD.

number
currency

Currency code (USD, EUR, GBP). When sent, the exchange rate is calculated automatically. When omitted, the stored currency and exchange rate are left unchanged.

Allowed values: USD EUR GBP
expectedImpressions

Expected impressions of the campaign

number
itunesOrYtId

Podcast iTunes ID, YouTube channel or playlist ID, or Rumble channel name (rumble.com/c/<name>) for rumble. See mediaType for other platforms.

string
geo

Country

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. Radio uses only length. Leaving radio without them clears positions.

Array<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
mediaType

Where the ad runs, and the type values it takes.

  • podcast: podcast ad. DAI or Baked-in.
  • youtube: YouTube video ad. Baked-in only.
  • simulcast: podcast ad also run on its linked channels. DAI or Baked-in. Switching adds a campaign per channel.
  • streaming: streaming audio ad. DAI only.
  • sai: Spotify SAI (Streaming Ad Insertion) ad. DAI only.
  • ott_ctv: CTV / OTT ad. DAI only.
  • display: display ad. DAI only.
  • video: video ad. DAI only.
  • display_video: legacy combined display and video; use display or video. DAI only.
  • radio: radio ad. DAI only. Switching to it needs weekdaysTime.
  • rumble: Rumble video ad. Baked-in only.
  • twitter: Twitter post. DAI or Baked-in.
  • twitch: Twitch stream ad. DAI or Baked-in.
  • tiktok: TikTok post. DAI or Baked-in.
  • instagram: Instagram post. story, reel or feed.
  • spotify: Spotify podcast ad. DAI or Baked-in.
  • spotifyvideo: Spotify video ad. DAI or Baked-in.
  • dailywire: Daily Wire ad. DAI or Baked-in.
  • radio_show: radio show ad. DAI or Baked-in.

For youtube, twitter, twitch, tiktok, instagram: the campaign goes to the show’s linked channel or account there, else stays on the show.

For rumble, itunesOrYtId also takes a Rumble channel name. Changing mediaType or show to one without a linked Rumble channel returns 400.

When itunesOrYtId is omitted, the campaign’s current show is used.

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

Tags

Array<string>
teamMembers

Team members metadata

Array<string>
creativeIds

Creative IDs metadata

Array<string>
weekdaysTime

Radio ad days and hours. Radio only; required when switching to radio. Omit to keep current slots. Format: weekdays in Su M Tu W Th F Sa order, then a 12-hour range, e.g. MTuWThF (09:00 AM-05:30 PM).

Array<string>
Allowed length: (non-empty)
Example
[
"MTuWThF (09:00 AM-05:30 PM)",
"Sa (10:00 PM-02:00 AM)"
]