List sent emails

GET/v1/emails

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

The send log across all sources, newest first, cursor-paginated. Bodies are omitted — fetch one email for the full content.

Query parameters

  • cursorstring

    Pagination cursor — an OPAQUE token. Take the `nextCursor` from the previous page and send it back unchanged. Do not parse it, do not coerce it to a number, and do not construct one: the format is `<unixMs>.<objectId>` today and may change. A cursor that cannot be parsed is rejected with 422 `validation_error` rather than silently restarting at page one.

  • limitinteger

    Page size (1–200, default 50).

  • statusstring

    `scheduled` is a VIEW, not a stored status: it selects rows stored `queued` whose `scheduledFor` is still in the future. This is the only way to list pending scheduled sends — filtering on `queued` also returns messages already handed to the provider and awaiting a callback, which is the opposite of "still pending". `POST /v1/send` has always *returned* `status: "scheduled"`, so until this was accepted here the API handed callers a value it then refused to take back. The rows that come back still read `"status": "queued"` — the stored value — with the schedule in `scheduledFor`.

    queuedsendingsentdeliveredopenedclickedbouncedcomplainedfailedreceivedcancelledscheduled
  • sourcestring
    transactionalcampaignworkflowinbound
  • toemail

    Filter by recipient address.

Response

A page of send-log rows.

  • dataobject[]required
    • emailIdstringrequired
    • toemailrequired
    • subjectstringrequired
    • fromEmailstring
    • fromNamestring | null
    • sourceenumrequired
      transactionalcampaignworkflowinbound
    • statusenumrequired
      queuedsendingsentdeliveredopenedclickedbouncedcomplainedfailedreceivedcancelled
    • campaignIdstring | null
    • workflowIdstring | null
    • testModeboolean
    • opensinteger
    • clicksinteger
    • errorstring | null
    • sentAtstring | null
    • scheduledForstring | null
    • createdAtdate-timerequired
  • nextCursorstring | nullrequired

    Opaque token. Pass back as `cursor` verbatim to fetch the next page; `null` when there are no more rows.

Errors

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

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

Request

curl https://api.volanea.com/v1/emails?cursor=value&limit=50 \
  -H "Authorization: Bearer sk_..."

Response

200 · application/json

{
  "success": true,
  "data": {
    "data": [
      {
        "emailId": "em_1c4f",
        "to": "ada@example.com",
        "subject": "Your order shipped",
        "fromEmail": "hello@yourdomain.com",
        "fromName": "Acme",
        "source": "transactional",
        "status": "queued",
        "campaignId": "cmp_2b8e",
        "workflowId": "wf_7d31",
        "testMode": true,
        "opens": 1,
        "clicks": 1,
        "error": "<error>",
        "sentAt": "2026-01-01T09:00:00.000Z",
        "scheduledFor": "2026-01-01T09:00:00Z",
        "createdAt": "2026-01-01T09:00:00.000Z"
      }
    ],
    "nextCursor": "<nextCursor>"
  }
}

92 endpoints · OpenAPI document