List campaigns with optional status filter, create drafts for human review, fetch one campaign with full HTML content, or PATCH to revise before send. Agents cannot edit sending, sent, or failed campaigns.
List campaigns
GET /api/v1/campaigns?status=&limit=&offset=
Authorization: Bearer av_live_…
POST /api/v1/campaigns
Authorization: Bearer av_live_…
Content-Type: application/json
{
"name": "July product update",
"subject": "What's new this month",
"fromName": "Aveiro",
"fromEmail": "hello@yourdomain.com",
"previewText": "A short inbox snippet after the subject",
"htmlContent": "<p>Hello — here is the update.</p>",
"siteId": null
}
Required scope:newsletter:write
Body fields
Field
Required
Description
name
yes
Internal campaign name (not shown to recipients, max 200 chars)
subject
yes
Email subject line (max 500 chars)
fromName
yes
Sender display name (max 200 chars)
fromEmail
yes
Sender email address — must match verified domain setup
siteId
no
Site UUID to associate the campaign with; null for org-level
replyTo
no
Reply-to address; null clears
previewText
no
Inbox preview snippet (max 500 chars)
htmlContent
no
Full HTML body
textContent
no
Plain-text fallback; omit to derive from htmlContent on send
styleJson
no
Editor style settings (fonts, brand color) applied to HTML blocks
footerNotice
no
Compliance footer below the unsubscribe link (max 2000 chars)
senderContact
no
Physical mailing address or contact info in footer (max 500 chars)
unsubscribeLabel
no
Unsubscribe link label (max 200 chars; defaults to Unsubscribe)
Always creates with status: "draft". Returns 201 with { campaign }.
Get campaign
Required scope:newsletter:read
Returns { campaign } including full htmlContent, textContent, styleJson, and footer fields.
Update draft
Required scope:newsletter:write
Only campaigns in draft status can be patched. Returns 409 CONFLICT if the campaign is sending, sent, or failed.
Returns send counts, open/click engagement, top clicked links, and unsubscribe totals — computed the same way as Audience → Campaigns → Stats in the dashboard.
Example response (sent campaign)
For draft campaigns, engagement metrics are zeroed out.