Concepts

Responses and pagination

Understand Management API responses, page and cursor pagination, and Send API responses.

Qboxmail APIs return different response formats depending on which API you use.

Management API responses

Most Management API responses look like this:

{
  "resources": [],
  "pagination": {}
}

For list endpoints, resources contains the current page of items and pagination contains navigation metadata.

{
  "resources": [
    {
      "code": "DD66042061",
      "name": "example.com"
    }
  ],
  "pagination": {
    "per": 25,
    "page": 1,
    "total_pages": 1,
    "query": null,
    "filter": null,
    "status": null,
    "sort_field": null,
    "sort": null,
    "total_records": 1
  }
}

For single-resource endpoints, resources usually contains one item. For delete operations, the response may be 204 No Content.

Pagination parameters

Common list endpoints support some or all of these query parameters:

ParameterDescription
pagePage number. Defaults to 1.
perNumber of records per page. Defaults commonly to 25.
queryText search/filter, when supported by the endpoint.
statusStatus filter, when supported.
sort_fieldField used for sorting, when supported.
sortSort direction, usually asc or desc.
pickOptional field/resource selector on endpoints that support it.

Always check the endpoint reference for the exact filters supported by each resource.

Cursor pagination for ETLive logs

The ETLive log endpoints (/api/etlive/accesses, /api/etlive/mailins, and /api/etlive/mailouts) do not use page and per. They use a cursor instead:

ParameterDescription
countNumber of entries per page. Defaults to 30.
sinceCursor returned as pagination.last by the previous page. Omit it for the first page.
sortbycreate (default) or update. Other fields, such as login_at, are not supported.
sortdirdesc (default, newest first) or asc.
with_totalsSet to yes to include pagination.total_records.

A response looks like this:

{
  "resources": [],
  "pagination": {
    "count": "100",
    "last": "<cursor>",
    "total_records": 742
  }
}

To read every entry for a day:

  1. Call the endpoint without since.
  2. Read pagination.last from the response.
  3. Call the endpoint again with the same parameters and since=<pagination.last>.
  4. Repeat until the API returns 404, which means there are no more entries.
curl "https://api.qboxmail.com/api/etlive/accesses?domain=D123456789&date=2026-10-09&action=all&count=100&since=<pagination.last>" \
  -H "X-Api-Token: <MANAGEMENT_API_TOKEN>"

Keep sortby, sortdir, and the filters unchanged between pages, otherwise the cursor no longer matches the result order.

Use cursor pagination with sortby=create, the default. With sortby=update, paging with since can skip or repeat entries.

Send API responses

The Send API does not paginate /v1/send or /v1/send/bulk responses. It returns the messages accepted in that request.

These responses require a Send API token from an existing Delivery account. If the Delivery account, sending domain, or token is missing, fix that setup before expecting accepted-message responses.

{
  "error_code": 0,
  "message": "OK",
  "request_id": "f43eb659-beb4-4f8a-a737-2d403998f4cf",
  "queued_messages": 1,
  "messages": [
    {
      "error_code": 0,
      "message": "OK",
      "request_id": "f43eb659-beb4-4f8a-a737-2d403998f4cf",
      "message_id": "8a16f3df-7f5f-4e53-a7e7-3e665ef57c51@example.test",
      "submitted_at": "2026-04-16T08:41:13.225Z",
      "to": "john@example.com"
    }
  ],
  "suppression_summary": {
    "status": "checked",
    "checked_recipients": 1,
    "accepted_recipients": 1,
    "suppressed_recipients": 0,
    "suppressed_emails": []
  }
}

Field naming

Public request and response fields use snake_case.

Examples:

  • request_id
  • message_id
  • queued_messages
  • suppression_summary
  • total_records

On this page