Overview
Marketing holds campaigns and templates in Email Suites, with a public Marketing API for backends and agents. Create a Marketing token with marketing:send. Email campaign send uses platform email providers and requires Business Email entitlement as well.
| Item | Value |
|---|---|
| Service | Marketing |
| Status | Public Marketing API generally available · dashboard Growth CRUD live |
| Permissions | marketing:send |
| Live token shape | umk_live_marketing_<prefix>_<secret> |
| Test token shape | umk_test_marketing_<prefix>_<secret> |
| Dashboard | Dashboard → Email Suites → Marketing |
| OpenAPI | /developers/openapi-marketing.json |
| Docs (AI) | /developers/marketing.md |
Email send requires audience_json.emails[] (explicit addresses). Segment names like active-customers are not resolved automatically. SMS/WhatsApp/push send is not supported on the public API yet.
Get started
- Enable Marketing in Dashboard → Billing. For email send also enable Business Email.
- Open Dashboard → Email Suites → Marketing (optional UI).
- Dashboard → Developers → create token → product Marketing → marketing:send.
- Store the secret server-side only.
- Create a campaign with audience_json.emails and content_json.subject + html/text/body, then POST …/send.
API tokens
Authorization: Bearer umk_live_marketing_<prefix>_<secret>
API base: https://umneyconnect.com/api| Permission | Allows |
|---|---|
| marketing:send | List/create campaigns & templates; send email campaigns on the public Marketing API |
Concepts
| Resource | Description |
|---|---|
| Campaign | name, channel, status, audience_json, content_json |
| Template | name, kind, body_json |
| Send (email) | Delivers to audience_json.emails via platform email; logs to transactional activity |
Public Marketing API (token — live)
| Method | Path | Permission | Status |
|---|---|---|---|
| GET | /v1/marketing/campaigns | marketing:send | Live |
| POST | /v1/marketing/campaigns | marketing:send | Live |
| POST | /v1/marketing/campaigns/{id}/send | marketing:send | Live (email) |
| GET | /v1/marketing/templates | marketing:send | Live |
| POST | /v1/marketing/templates | marketing:send | Live |
Create + send
# Create
curl -X POST "https://umneyconnect.com/api/v1/marketing/campaigns" \
-H "Authorization: Bearer $MARKETING_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Spring launch",
"channel": "email",
"status": "draft",
"audienceJson": { "emails": ["lead@example.com"] },
"contentJson": { "subject": "Hello", "html": "<p>Welcome</p>" }
}'
# Send (also requires Business Email entitlement)
curl -X POST "https://umneyconnect.com/api/v1/marketing/campaigns/{id}/send" \
-H "Authorization: Bearer $MARKETING_API_KEY"Send is synchronous, max 50 recipients per call. Failed provider config returns 503 when all recipients fail. Optional body on send can override audienceJson/contentJson for that run only.
Dashboard Growth API (JWT — live)
| Method | Path | Purpose |
|---|---|---|
| GET|POST|PATCH|DELETE | /api/growth/marketing/campaigns | Campaign CRUD |
| GET|POST | /api/growth/marketing/templates | Templates |
| GET | /api/growth/marketing/statistics | Stats |
| GET | /api/growth/entitlements | Addon flags |
Contact sync (Business Email)
Provider list/audience upsert: public POST /v1/email/contacts (email:send) or dashboard POST /api/mail/marketing/contact — see /developers/business-email.
Errors
- 403 — Marketing not entitled / wrong token / missing marketing:send
- 403 on send — Business Email not entitled
- 400 — missing emails[], subject, or body; non-email channel
- 503 — all recipient sends failed (provider misconfigured)
- Send rate limit: 30/min IP; public keys 600/min on /api/v1/*
Agent recipe
# Enable Marketing (+ Business Email for send)
MARKETING_API_KEY=umk_live_marketing_…
# POST /v1/marketing/campaigns with audienceJson.emails
# POST /v1/marketing/campaigns/{id}/send
# Prefer customer-facing names — do not expose internal billing catalog IDs