Read back draft targeting
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.
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/draft-targeting"{ "success": true, "data": { "campaignId": "9114", "suggestionsEnabled": false, "distributionLocations": [ { "name": "Store #1", "lat": 41.9, "lng": -87.65, "radius": 3000, "is_focused": true, "selected_routes_count": 12 } ], "routes": [ { "zip": "60614", "croute": "C021", "residentCount": 512, "businessCount": 14, "totalCount": 526 } ], "totalCount": 1 }}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.
Submit for review POST
Submits a finished draft to Oppizi for review. The campaign stops at **In Review**. Nothing is charged, and nothing prints or is mailed automatically — an Oppizi reviewer approves it, and production starts after that. There is no API that triggers printing or fulfilment directly. If anything is missing the call fails and names it; [creation status](/docs/api-reference/campaign-builder/getcampaigncreationstatus) lists what is outstanding. 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.