Check what a draft still needs
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.
Authorization
ClientBearer Client-scoped key as a Bearer JWT; always pinned to your own client.
In: header
Path Parameters
Your campaign id.
Response Body
application/json
curl -X GET "https://example.com/client/campaigns/string/creation-status"{ "success": true, "data": { "campaignId": "9114", "internalStatus": "DRAFT", "lastActiveStep": "segments", "submittable": false, "missing": [ "selectedDesignId", "startDate" ], "earliestStartDate": "2026-08-10", "launchLeadTimeEnforced": true, "launchLeadTimeKnown": true, "minStartBusinessDays": 5, "asOfDateUtc": "2026-08-03", "pathfinderCities": 2, "quote": { "totalCosts": 1890.5, "flyersCount": 5000 } }}Set launch date and volume PATCH
Sets the remaining details — when the campaign starts and how much is delivered. **Do not work out the launch date yourself.** [Creation status](/docs/api-reference/campaign-builder/getcampaigncreationstatus) 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.
Read back draft targeting GET
The targeting currently saved on your draft: map zones with their route counts, the carrier routes themselves, and any demographic attributes. This is the read-back for the two targeting steps. It returns everything in one response and takes no paging parameters.