List campaigns

GET/v1/campaigns

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

Every campaign in the project — drafts, scheduled, sending, and sent — with its audience and engagement counters.

Unpaginated. Counters are aggregates maintained as the campaign sends; per-recipient detail is at GET /v1/campaigns/{id}/recipients.

Response

All campaigns.

  • dataobject[]required
    • 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

Errors

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

  • 401Missing or invalid API key.

Request

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

Response

200 · application/json

{
  "success": true,
  "data": {
    "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": null,
          "groups": 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"
      }
    ]
  }
}

92 endpoints · OpenAPI document