Run an EDDM Campaign
Launch an Every Door Direct Mail (EDDM) campaign over REST — target USPS carrier routes, pick a design, set details, and submit for review.
EDDM (Every Door Direct Mail) saturates every household on the USPS carrier routes you choose — no address list needed. Use it to blanket neighbourhoods around a store or across a city.
The flow mirrors ADM, but targeting is USPS carrier routes instead of an uploaded list:
- Create a draft campaign.
- Set targeting — the carrier routes to saturate.
- Select a design.
- Set details — launch date and volume.
- 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.
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.
export OPPIZI_TOKEN="YOUR_OAUTH_ACCESS_TOKEN" # must carry campaigns:create
export API="https://developer-api.oppizi.com"Step 1 — Create a draft
EDDM is a direct-mail campaign, so pass channel: "ADM" with subtype: "EDDM".
curl -X POST "$API/client/campaigns" \
-H "Authorization: Bearer $OPPIZI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Store opening saturation — EDDM",
"channel": "ADM",
"subtype": "EDDM"
}'{
"success": true,
"data": { "id": 48213 }
}Campaign ids are integers. Keep the id — every later step uses it.
Step 2 — Find and set carrier routes
Find routes first. Search by ZIP or place, list the routes in one of your cities, or ask for a suggestion around a point:
curl "$API/client/carrier-routes/search?zip=78701" \
-H "Authorization: Bearer $OPPIZI_TOKEN"
curl "$API/client/cities/1141/carrier-routes" \
-H "Authorization: Bearer $OPPIZI_TOKEN"Then set them on the draft:
curl -X POST "$API/client/campaigns/48213/areas" \
-H "Authorization: Bearer $OPPIZI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"routes": [
{ "zip": "78701", "croute": "C001" },
{ "zip": "78701", "croute": "C002" },
{ "zip": "78702", "croute": "C014" }
]
}'The number of households on the selected routes drives the quantity mailed and the price quote.
The EDDM minimum-volume rule is applied here, not at submit — an under-minimum selection is rejected straight away, so you find out while you can still add routes.
Optionally narrow by demographics (catalog: GET /client/eddm/demographic-attributes):
curl -X POST "$API/client/campaigns/48213/demographics" \
-H "Authorization: Bearer $OPPIZI_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "attributes": [{ "key": "household_income", "values": ["75k_100k"] }] }'Step 3 — Select a design
curl "$API/client/designs" \
-H "Authorization: Bearer $OPPIZI_TOKEN"
curl -X POST "$API/client/campaigns/48213/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, print lead time and the routes you picked:
curl "$API/client/campaigns/48213/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/48213/details" \
-H "Authorization: Bearer $OPPIZI_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startDate": "2026-11-02",
"volume": 5000
}'Step 5 — Submit for review
curl -X POST "$API/client/campaigns/48213/submit" \
-H "Authorization: Bearer $OPPIZI_TOKEN"{
"success": true,
"data": { "id": 48213, "status": "IN_REVIEW" }
}If something is still missing, the call fails and names it — poll
GET /client/campaigns/48213/creation-status to see what is outstanding, fix
it, and submit again.
An Oppizi reviewer approves from here, and the internal proof, print and mail
pipeline runs after that. Track it with
GET /client/campaigns/48213/status-tracking.
Changed your mind? POST /client/campaigns/48213/cancel abandons the draft.
The same flow via MCP
| Step | MCP tool |
|---|---|
| Create draft | create_campaign |
| Find routes | suggest_carrier_routes |
| Carrier routes | set_campaign_areas |
| Demographics | set_campaign_demographics |
| Design | select_campaign_design |
| Launch date & volume | set_campaign_details |
| What's still missing | get_campaign_readiness |
| Submit | submit_campaign |
Just describe it:
"Set up an EDDM campaign around my downtown store, saturating the nearest carrier routes, using my Holiday postcard, launching next month — then submit it for review."
The assistant fills each step and stops at In Review. See Connect Claude or ChatGPT.
Next steps
- Create an ADM campaign — mail your own address list instead.
- Get a price quote for the routes you picked.
- Read performance & ROI once it's live.
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.
Get a Price Quote
Price a campaign before you build it with the flyer-distribution and EDDM calculators, or estimate a draft with the per-campaign cost endpoints.