Skip to main content
All endpoints require Authorization: Bearer ck_....

List campaigns

GET /v1/campaigns Scope: campaigns:list

Query parameters

Response 200

Each item in data is a CampaignShort. The in_review field mirrors filters.deny_always.

Example


Create campaign

POST /v1/campaigns Scope: campaigns:create

Request body

CampaignBody. See Campaign create for defaults and minimal example.

Response 201

CampaignFull

Get campaign

GET /v1/campaigns/:id Scope: campaigns:show

Path parameters

Response 200

CampaignFull — includes is_test_mode (true if caller IP is in filters.whitelist).

Update campaign

PUT /v1/campaigns/:id Scope: campaigns:update Full replace — same schema as create. Not a partial PATCH.

Request body

CampaignBody

Response 200

CampaignFull

Delete campaign

DELETE /v1/campaigns/:id Scope: campaigns:delete Soft-deletes the campaign.

Response 204

HTTP status is 204. The handler may attach a JSON body { "message": "..." } (Express quirk). Treat success as status 204.

Clone campaign

POST /v1/campaigns/:id/clone Scope: campaigns:clone No request body.

Response 200

CampaignFull

Toggle status

PUT /v1/campaigns/:id/toggle-status Scope: campaigns:toggle Toggles the campaign active flag. No request body.

Response 200

Empty body. Re-fetch with GET show if you need the updated active value.