List contacts

GET/v1/contacts

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

Newest first, cursor-paginated.

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).

Response

A page of contacts.

  • dataobject[]required
    • contactIdstringrequired
    • projectIdstring
    • emailemailrequired
    • firstNamestring | null
    • lastNamestring | null
    • subscribedbooleanrequired
    • dataobject | null

      Arbitrary custom fields.

    • localestring | null
    • createdAtdate-timerequired
    • updatedAtdate-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/contacts?cursor=value&limit=50 \
  -H "Authorization: Bearer sk_..."

Response

200 · application/json

{
  "success": true,
  "data": {
    "data": [
      {
        "contactId": "con_5e90",
        "projectId": "<projectId>",
        "email": "ada@example.com",
        "firstName": "Ada",
        "lastName": "Lovelace",
        "subscribed": true,
        "data": {},
        "locale": "en",
        "createdAt": "2026-01-01T09:00:00.000Z",
        "updatedAt": "2026-01-01T09:00:00.000Z"
      }
    ],
    "nextCursor": "<nextCursor>"
  }
}

92 endpoints · OpenAPI document