MisarMisar Docs
MisarMailMisarBlogMisarReachMisarPostMisarDevMisarCoderMisarSEOMisar PlatformMisar SSO
API Reference

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

GET/api/campaigns

Returns the caller's campaigns. Required scope: campaigns:read.

Response fields

campaignsArray<Campaign>

Campaigns owned by the authenticated account, newest first.

Request
curl https://api.misar.io/reach/api/campaigns \
  -H "Authorization: Bearer mrk_your_key_here"
200 — OK
{
  "campaigns": [
    {
      "id": "uuid",
      "name": "Q3 SaaS founders",
      "status": "draft",
      "steps": 3,
      "created_at": "2026-07-01T10:00:00Z"
    }
  ]
}

Create a campaign

POST/api/campaigns

Creates an outreach campaign with an optional step sequence. Required scope: campaigns:write.

Request body

namestringbodyrequired

Campaign name.

descriptionstringbody

Optional free-text description.

audience_filterobjectbody

Firmographic / contact filter that resolves the campaign's audience.

stepsArray<Step>body

Ordered outreach steps. Each step is { channel, delay_hours, subject, body }.

scheduled_atstringbody

ISO-8601 timestamp to start the campaign. Omit to keep it as a draft.

send_interval_secondsnumberbody

Minimum delay between individual sends when the campaign is enqueued.

Step fields

channelstringbody

Delivery channel for the step, e.g. "email", "linkedin", "sms", "whatsapp".

delay_hoursnumberbody

Hours to wait after the previous step before sending this one.

subjectstringbody

Message subject (email/channels that support it).

bodystringbody

Message body. Supports personalization tokens.

Request
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…" }
    ]
  }'
201 — Created
{
  "ok": true,
  "campaign": { "id": "uuid", "name": "Q3 SaaS founders", "status": "draft" }
}

Get a campaign

GET/api/campaigns/:id

Returns a single campaign with its steps. Required scope: campaigns:read.

Path parameters

idstringpathrequired

UUID of the campaign.

Request
curl https://api.misar.io/reach/api/campaigns/CAMPAIGN_ID \
  -H "Authorization: Bearer mrk_your_key_here"
200 — OK
{
  "campaign": {
    "id": "uuid",
    "name": "Q3 SaaS founders",
    "status": "draft",
    "steps": [{ "channel": "email", "delay_hours": 0, "subject": "Quick question" }]
  }
}

Update a campaign

PATCH/api/campaigns/:id

Updates a campaign's name, description, audience filter, steps, or schedule. Only provided fields are modified. Required scope: campaigns:write.

Path parameters

idstringpathrequired

UUID of the campaign.

Request body — any subset of the create fields.

Request
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" }'
200 — OK
{ "ok": true, "campaign": { "id": "uuid", "name": "Q3 SaaS founders — v2" } }

Delete a campaign

DELETE/api/campaigns/:id

Deletes a campaign. Required scope: campaigns:write.

Path parameters

idstringpathrequired

UUID of the campaign.

Request
curl -X DELETE https://api.misar.io/reach/api/campaigns/CAMPAIGN_ID \
  -H "Authorization: Bearer mrk_your_key_here"
200 — OK
{ "ok": true }

Enqueue a campaign

POST/api/campaigns/:id/enqueue

Resolves the campaign's audience and enqueues its sends for dispatch. This is a rate-limited (api tier) endpoint. Required scope: campaigns:write.

Path parameters

idstringpathrequired

UUID of the campaign to enqueue.

Request
curl -X POST https://api.misar.io/reach/api/campaigns/CAMPAIGN_ID/enqueue \
  -H "Authorization: Bearer mrk_your_key_here"
201 — Queued
{ "ok": true, "queued": 128 }

Status codes

CodeMeaning
200Campaign returned / updated / deleted
201Campaign created or enqueued
403Missing campaigns:read / campaigns:write scope
404Campaign not found or not owned by the caller
422Validation error in request body
429Rate limit exceeded on enqueue — retry after Retry-After

See Rate limits and Errors.