Campaigns API
Create, list, update, delete, and enqueue multi-step outreach campaigns — api.misar.io/reach/api/campaigns.
Campaigns are multi-step outreach sequences. Each campaign holds an ordered list of steps (channel + delay + message) and an optional audience filter, and can be enqueued to dispatch sends to its audience.
Base URL: https://api.misar.io/reach/api · Auth: Authorization: Bearer mrk_…
Response bodies on the developer contract are open-form — the examples below show the representative fields returned; additional fields may be present.
List campaigns
/api/campaignsReturns the caller's campaigns. Required scope: campaigns:read.
Response fields
campaignsArray<Campaign>Campaigns owned by the authenticated account, newest first.
curl https://api.misar.io/reach/api/campaigns \
-H "Authorization: Bearer mrk_your_key_here"{
"campaigns": [
{
"id": "uuid",
"name": "Q3 SaaS founders",
"status": "draft",
"steps": 3,
"created_at": "2026-07-01T10:00:00Z"
}
]
}Create a campaign
/api/campaignsCreates an outreach campaign with an optional step sequence. Required scope: campaigns:write.
Request body
namestringbodyrequiredCampaign name.
descriptionstringbodyOptional free-text description.
audience_filterobjectbodyFirmographic / contact filter that resolves the campaign's audience.
stepsArray<Step>bodyOrdered outreach steps. Each step is { channel, delay_hours, subject, body }.
scheduled_atstringbodyISO-8601 timestamp to start the campaign. Omit to keep it as a draft.
send_interval_secondsnumberbodyMinimum delay between individual sends when the campaign is enqueued.
Step fields
channelstringbodyDelivery channel for the step, e.g. "email", "linkedin", "sms", "whatsapp".
delay_hoursnumberbodyHours to wait after the previous step before sending this one.
subjectstringbodyMessage subject (email/channels that support it).
bodystringbodyMessage body. Supports personalization tokens.
curl -X POST https://api.misar.io/reach/api/campaigns \
-H "Authorization: Bearer mrk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"name": "Q3 SaaS founders",
"audience_filter": { "industry": "SaaS", "headcount_min": 10 },
"send_interval_seconds": 30,
"steps": [
{ "channel": "email", "delay_hours": 0, "subject": "Quick question", "body": "Hi {{firstName}}…" },
{ "channel": "email", "delay_hours": 72, "subject": "Following up", "body": "Circling back…" }
]
}'{
"ok": true,
"campaign": { "id": "uuid", "name": "Q3 SaaS founders", "status": "draft" }
}Get a campaign
/api/campaigns/:idReturns a single campaign with its steps. Required scope: campaigns:read.
Path parameters
idstringpathrequiredUUID of the campaign.
curl https://api.misar.io/reach/api/campaigns/CAMPAIGN_ID \
-H "Authorization: Bearer mrk_your_key_here"{
"campaign": {
"id": "uuid",
"name": "Q3 SaaS founders",
"status": "draft",
"steps": [{ "channel": "email", "delay_hours": 0, "subject": "Quick question" }]
}
}Update a campaign
/api/campaigns/:idUpdates a campaign's name, description, audience filter, steps, or schedule. Only provided fields are modified. Required scope: campaigns:write.
Path parameters
idstringpathrequiredUUID of the campaign.
Request body — any subset of the create fields.
curl -X PATCH https://api.misar.io/reach/api/campaigns/CAMPAIGN_ID \
-H "Authorization: Bearer mrk_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "name": "Q3 SaaS founders — v2" }'{ "ok": true, "campaign": { "id": "uuid", "name": "Q3 SaaS founders — v2" } }Delete a campaign
/api/campaigns/:idDeletes a campaign. Required scope: campaigns:write.
Path parameters
idstringpathrequiredUUID of the campaign.
curl -X DELETE https://api.misar.io/reach/api/campaigns/CAMPAIGN_ID \
-H "Authorization: Bearer mrk_your_key_here"{ "ok": true }Enqueue a campaign
/api/campaigns/:id/enqueueResolves the campaign's audience and enqueues its sends for dispatch. This is a rate-limited (api tier) endpoint. Required scope: campaigns:write.
Path parameters
idstringpathrequiredUUID of the campaign to enqueue.
curl -X POST https://api.misar.io/reach/api/campaigns/CAMPAIGN_ID/enqueue \
-H "Authorization: Bearer mrk_your_key_here"{ "ok": true, "queued": 128 }Status codes
| Code | Meaning |
|---|---|
200 | Campaign returned / updated / deleted |
201 | Campaign created or enqueued |
403 | Missing campaigns:read / campaigns:write scope |
404 | Campaign not found or not owned by the caller |
422 | Validation error in request body |
429 | Rate limit exceeded on enqueue — retry after Retry-After |
See Rate limits and Errors.