Get a campaign

GET/v1/campaigns/{id}

Secret key — sk_… or sk_test_… · Base URL https://api.volanea.com

Includes estimatedAudience (live count) for drafts and scheduled campaigns; frozen totals once sending.

Path parameters

  • idstringrequired

    Campaign id.

Response

The campaign.

  • campaignIdstringrequired
  • projectIdstring
  • namestringrequired
  • subjectstringrequired
  • previewTextstring | null

    Preheader — the preview line inboxes show after the subject. Injected as a hidden block at the top of the body at send time.

  • bodystringrequired
  • bodyBlocksstring | array | object | null

    The visual editor's design `body` was compiled from — a JSON string of the GrapesJS project (or a legacy block array/object), stored so the editor can reopen it. Ignored when sending — only `body` is delivered.

  • fromNamestring | null
  • fromEmailemailrequired
  • replyTostring | null

    Becomes the Reply-To header when set.

  • statusenumrequired
    draftscheduledsendingsentcancelled
  • audienceenumrequired
    allsegmentfilter
  • segmentIdstring | null
  • filterobject | null
  • abSubjectBstring | null
  • abSamplePctinteger | null
  • abDecideAtstring | null
  • abWinnerenum
    abnull
  • scheduledForstring | null
  • sentAtstring | null
  • totalRecipientsinteger
  • deliveredinteger
  • openedinteger
  • clickedinteger
  • bouncedinteger
  • complainedinteger
  • unsubscribedinteger
  • createdAtdate-timerequired
  • estimatedAudienceinteger | null

Errors

Every failure returns the standard envelope — branch on `code`, never on the wording of `error`.

  • 401Missing or invalid API key.
  • 404Not found.
  • 422Request validation failed (code `validation_error`, 422).

Request

curl https://api.volanea.com/v1/campaigns/id_123 \
  -H "Authorization: Bearer sk_..."

Response

200 · application/json

{
  "success": true,
  "data": {
    "campaignId": "cmp_2b8e",
    "projectId": "<projectId>",
    "name": "Welcome",
    "subject": "Your order shipped",
    "previewText": "<previewText>",
    "body": "<p>On its way, {{firstName}}.</p>",
    "bodyBlocks": "<bodyBlocks>",
    "fromName": "Acme",
    "fromEmail": "hello@yourdomain.com",
    "replyTo": "support@yourdomain.com",
    "status": "draft",
    "audience": "all",
    "segmentId": "seg_4a71",
    "filter": {
      "logic": "and",
      "groups": [
        {
          "filters": null
        }
      ]
    },
    "abSubjectB": "<abSubjectB>",
    "abSamplePct": 1,
    "abDecideAt": "2026-01-01T09:00:00.000Z",
    "abWinner": "a",
    "scheduledFor": "2026-01-01T09:00:00Z",
    "sentAt": "2026-01-01T09:00:00.000Z",
    "totalRecipients": 1,
    "delivered": 1,
    "opened": 1,
    "clicked": 1,
    "bounced": 1,
    "complained": 1,
    "unsubscribed": 1,
    "createdAt": "2026-01-01T09:00:00.000Z",
    "estimatedAudience": 1
  }
}

92 endpoints · OpenAPI document