Como lidar com a paginação na Reports API síncrona

Ao solicitar dados da Reports API, a resposta pode não incluir todos os registros disponíveis caso o conjunto de dados contenha mais de 1.000 registros. Nesses casos, a API retorna uma resposta com o status de TRUNCATED, indicando que há registros adicionais disponíveis.

A TRUNCATED A resposta inclui um cursor e um iv (vetor de inicialização), que são necessários para recuperar o próximo conjunto de resultados.

Você pode lidar com a paginação de duas maneiras:

  • Use o _links.next.href URL fornecido na resposta (recomendado).
  • Passe manualmente o cursor e iv valores na sua próxima solicitação.

Você repete esse processo até que a resposta da API não seja mais TRUNCATED, o que significa que todos os registros foram recuperados.

Solicitação inicial

Aqui está um exemplo de uma solicitação inicial para recuperar registros:

GET https://api.nexmo.com/v2/reports/records?product=VERIFY-API&date_start=2025-10-28T00:00:00-0000&date_end=2025-10-30T00:00:00-0000&account_id=test123

Exemplo de uma resposta TRUNCADA

Se o conjunto de resultados contiver mais de 1.000 registros, a API responde com um "request_status": "TRUNCATED" valor e inclui o cursor, iv, e um next link para acessar a página a seguir.

{
  "_links": {
    "next": {
      "href": "https://api.nexmo.com/v2/reports/records?product=VERIFY-API&date_start=2025-10-28T00%3A00%3A00-0000&date_end=2025-10-30T00%3A00%3A00-0000&account_id=test123&cursor=VwwxWeDsSHrf5eDbC7OA4NAUJKjy0Jw91uGIhbsjpH254R3Og6HCsfy5pmcw_Nzerlbt_p6J3xRxvocnv8CIoasCH0C3Z-Gq7n1VQ5Es6hgZKx4m0IN0G6lgqahNjoRoW67XysF32MGzYs2jkol1EmZ_o-TN5wvfILqGuDuXuUiUh-QvmmNPd5p066GTRxhuS6_DGRT-x7Lw2oxV&iv=QnJtvajk5bH0wMX-8JHLRQ"
    },
    "self": {
      "href": "https://api.nexmo.com/v2/reports/records?product=VERIFY-API&date_start=2025-10-28T00%3A00%3A00-0000&date_end=2025-10-30T00%3A00%3A00-0000&account_id=test123"
    }
  },
  "request_id": "aaaa111111-b222-4556-789c-fb123456789",
  "request_status": "TRUNCATED",
  "cursor": "VwwxWeDsSHrf5eDbC7OA4NAUJKjy0Jw91uGIhbsjpH254R3Og6HCsfy5pmcw_Nzerlbt_p6J3xRxvocnv8CIoasCH0C3Z-Gq7n1VQ5Es6hgZKx4m0IN0G6lgqahNjoRoW67XysF32MGzYs2jkol1EmZ_o-TN5wvfILqGuDuXuUiUh-QvmmNPd5p066GTRxhuS6_DGRT-x7Lw2oxV",
  "iv": "QnJtvajk5bH0wMX-8JHLRQ",
  "received_at": "2025-10-29T10:04:09+00:00",
  "price": 0.0,
  "currency": "",
  "product": "VERIFY-API",
  "account_id": "41aa7248",
  "date_start": "2025-10-28T00:00:00+00:00",
  "date_end": "2025-10-30T00:00:00+00:00",
  "items_count": 1000,
  "include_subaccounts": false,
  "records": [
    {
      "account_id": "test123",
      "request_id": "06a1e004a84e4b47ab48a15f072ef0dd",
      "from": "verify",
      "to": "123456789",
      "locale": "pl-pl",
      "number_type": "MOBILE",
      "network": "26003",
      "network_name": "Orange Polska S.A.",
      "country": "PL",
      "country_name": "Poland",
      "date_received": "2025-10-29T09:56:36+00:00",
      "date_finalized": "2025-10-29T10:01:49+00:00",
      "first_event_date": "2025-10-29T09:56:36+00:00",
      "last_event_date": "2025-10-29T10:01:43+00:00",
      "status": "EXPIRED",
      "sms_event_count": "1",
      "tts_event_count": "2",
      "currency": "",
      "pricing_model": "1",
      "price": "0.1",
      "estimated_price": "0.1",
      "sms_price": "0.03980000",
      "tts_price": "0.00238217",
      "id": "06a1e004a84e4b47ab48a15f072ef0dd"
    }
  ]
}

Carregando a próxima página

Sempre que a resposta contiver "request_status": "TRUNCATED", isso significa que há mais resultados disponíveis.

Existem duas maneiras de acessar a próxima página:

O método mais fácil é enviar uma solicitação GET para a URL fornecida no _links.next.href parâmetro do TRUNCATED resposta, que já está configurada com o cursor e iv valores para sua solicitação:

GET https://api.nexmo.com/v2/reports/records?product=VERIFY-API&date_start=2025-10-28T00%3A00%3A00-0000&date_end=2025-10-30T00%3A00%3A00-0000&account_id=test123&cursor=VwwxWeDsSHrf5eDbC7OA4NAUJKjy0Jw91uGIhbsjpH254R3Og6HCsfy5pmcw_Nzerlbt_p6J3xRxvocnv8CIoasCH0C3Z-Gq7n1VQ5Es6hgZKx4m0IN0G6lgqahNjoRoW67XysF32MGzYs2jkol1EmZ_o-TN5wvfILqGuDuXuUiUh-QvmmNPd5p066GTRxhuS6_DGRT-x7Lw2oxV&iv=QnJtvajk5bH0wMX-8JHLRQ

Opção 2 — Adicionar manualmente cursor e iv

Ao criar solicitações manualmente, reutilize todos os parâmetros da sua solicitação inicial e acrescente o cursor e iv valores do anterior TRUNCATED resposta.

Continuar até que todos os registros sejam recuperados

Cada resposta paginada também pode ser TRUNCATED.
Continue seguindo o next link (ou usando valores atualizados de cursor/iv) até que a resposta da API não seja mais TRUNCATED.

Isso indica que todos os registros disponíveis foram recuperados.