Set launch date and volume
Sets the remaining details — when the campaign starts and how much is delivered.
Do not work out the launch date yourself. Creation status returns earliestStartDate, which already accounts for print lead times and the channel you picked.
Needs an OAuth access token carrying the campaigns:create scope — a plain client key is refused. The campaign must be one of yours; anything else returns 404.
Authorization
campaignBuilderOAuth campaigns:createOAuth access token carrying the campaigns:create scope, obtained through the Oppizi consent screen (the same sign-in used by the MCP connector). A plain client key carries no scopes and is refused on these endpoints.
In: header
Scope: campaigns:create
Path Parameters
Your campaign id.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X PATCH "https://example.com/client/campaigns/string/details" \ -H "Content-Type: application/json" \ -d '{}'{ "success": true, "data": { "campaignId": 9700, "startDate": "2026-11-03" }}Link an audience POST
Attaches one of your saved address lists to the campaign — the targeting for an ADM campaign. List them at [GET /client/audiences](/docs/api-reference/assets/listaudiences). Needs an OAuth access token carrying the `campaigns:create` scope — a plain client key is refused. The campaign must be one of yours; anything else returns 404.
Check what a draft still needs GET
What this draft still needs before it can be submitted, and the earliest date it could launch. `earliestStartDate` already accounts for print lead times and the channel you picked. Poll this after a failed submit to see exactly what is outstanding. `submittable` has three values, not two: `true`, `false`, or `null` when a prerequisite could not be checked. Treat `null` as "unknown", not as "no" — the response also sets `complete: false` and explains which check did not run.