OppiziDeveloper
Guides

Create an ADM Campaign

Build an address-list Direct Mail (ADM) campaign end-to-end over REST — draft, audience, design, details, and submit for review.

An ADM (address-list Direct Mail) campaign mails postcards to an address list you've uploaded — your own customers or prospects. This guide walks the full flow, from an empty draft to a campaign sitting In Review.

The flow has five steps:

  1. Create a draft campaign.
  2. Link an audience — your uploaded address list.
  3. Select a design from your library.
  4. Set details — launch date and volume.
  5. Submit for review.

Campaign creation always stops at In Review. Nothing is printed, mailed, or charged until the Oppizi team confirms it. There is no API that triggers printing or fulfilment directly.

Prerequisites

Building a campaign is a write, so it needs an OAuth access token carrying the campaigns:create scope — the same consent screen your AI assistant uses (see Connect Claude or ChatGPT).

A plain client key (Authorization: Bearer <client-key>) carries no scopes. It works for reads, but every endpoint on this page will answer 403. Ask Oppizi to enable campaigns:create for your account, then authorise once to get a token.

You also need at least one audience (uploaded address list) and one design on your account — list them with GET /client/audiences and GET /client/designs.

export OPPIZI_TOKEN="YOUR_OAUTH_ACCESS_TOKEN"   # must carry campaigns:create
export API="https://developer-api.oppizi.com"

Step 1 — Create a draft

channel: "ADM" is the default, and subtype defaults to ADM for an address-list campaign.

curl -X POST "$API/client/campaigns" \
  -H "Authorization: Bearer $OPPIZI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Spring winback — ADM",
    "channel": "ADM",
    "subtype": "ADM"
  }'
{
  "success": true,
  "data": { "id": 48207 }
}

Campaign ids are integers. Keep the id — every following step references it.

Pick an audience and attach it to the draft. List your audiences first if you don't have the id handy:

curl "$API/client/audiences" \
  -H "Authorization: Bearer $OPPIZI_TOKEN"

curl -X POST "$API/client/campaigns/48207/audience" \
  -H "Authorization: Bearer $OPPIZI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "audienceId": 4410 }'

For ADM, the audience is the targeting — the postcards go to the addresses on that list. (Saturating whole neighbourhoods with no list instead? That's EDDM.)

Step 3 — Select a design

curl "$API/client/designs" \
  -H "Authorization: Bearer $OPPIZI_TOKEN"

curl -X POST "$API/client/campaigns/48207/design" \
  -H "Authorization: Bearer $OPPIZI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "designId": 7781 }'

Step 4 — Set details

Do not compute the launch date yourself. Ask the campaign what its earliest possible start is — it depends on the channel and print lead time:

curl "$API/client/campaigns/48207/creation-status" \
  -H "Authorization: Bearer $OPPIZI_TOKEN"

That response carries earliestStartDate, plus what the draft is still missing. Then set the details (note: PATCH):

curl -X PATCH "$API/client/campaigns/48207/details" \
  -H "Authorization: Bearer $OPPIZI_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": "2026-11-02",
    "volume": 2500
  }'

Step 5 — Submit for review

curl -X POST "$API/client/campaigns/48207/submit" \
  -H "Authorization: Bearer $OPPIZI_TOKEN"
{
  "success": true,
  "data": { "id": 48207, "status": "IN_REVIEW" }
}

If something is still missing, the call fails and names it — poll GET /client/campaigns/48207/creation-status, fix it, and submit again.

From here an Oppizi reviewer approves, and the internal proof, print and mail pipeline runs. Track it with GET /client/campaigns/48207/status-tracking.

Changed your mind? POST /client/campaigns/48207/cancel abandons the draft, and PATCH /client/campaigns/48207 renames it.

The same flow via MCP

StepMCP tool
Create draftcreate_campaign
Link audiencelink_campaign_audience
Designselect_campaign_design
Launch date & volumeset_campaign_details
What's still missingget_campaign_readiness
Submitsubmit_campaign

Just describe it:

"Create a direct mail campaign to my winback list using the Spring postcard, launching the first week of November — then submit it for review."

See Connect Claude or ChatGPT.

Next steps

On this page