Antonnia Docs
ConversationsApi reference

API de Exportação de Dados

Endpoints para exportação em massa de sessões e mensagens (ETL)

Endpoints otimizados para extração de dados em massa. Ideais para alimentar data warehouses, dashboards de BI ou pipelines de ETL.

Todos os endpoints usam paginação por cursor para garantir estabilidade em datasets grandes — sem perda de registros mesmo quando novos dados são inseridos durante a extração.

Base URL

https://services.antonnia.com/conversations/v2/api/v1

Listar sessões

Retorna sessões da sua organização com paginação por cursor e filtros por data.

GET /data/sessions

Query parameters

ParameterTypeRequiredDefaultDescription
sort_bystringNo"created_at"Coluna de ordenação: "created_at" ou "updated_at"
created_afterdatetimeNoSessões criadas após esta data (ISO 8601)
created_beforedatetimeNoSessões criadas antes desta data (ISO 8601)
updated_afterdatetimeNoSessões atualizadas após esta data (ISO 8601)
updated_beforedatetimeNoSessões atualizadas antes desta data (ISO 8601)
after_idstringNoCursor: retornar sessões após este ID
limitintegerNo100Máximo de resultados (máx: 3000)
# First page
curl -X GET "https://services.antonnia.com/conversations/v2/api/v1/data/sessions?limit=1000&sort_by=created_at" \
  -H "Authorization: Bearer sk_live_YOUR_TOKEN"

# Next page — use the last session ID as cursor
curl -X GET "https://services.antonnia.com/conversations/v2/api/v1/data/sessions?limit=1000&sort_by=created_at&after_id=sess_last_id" \
  -H "Authorization: Bearer sk_live_YOUR_TOKEN"
import httpx

BASE_URL = "https://services.antonnia.com/conversations/v2/api/v1"
HEADERS = {"Authorization": "Bearer sk_live_YOUR_TOKEN"}

sessions = []
after_id = None

while True:
    params = {"limit": 1000, "sort_by": "created_at"}
    if after_id:
        params["after_id"] = after_id

    response = httpx.get(f"{BASE_URL}/data/sessions", headers=HEADERS, params=params)
    page = response.json()

    if not page:
        break

    sessions.extend(page)
    after_id = page[-1]["id"]

Response 200

Retorna um array de objetos de sessão ordenados pela coluna sort_by.

[
  {
    "id": "sess_abc123",
    "contact_id": "5511999888777",
    "organization_id": "org_xyz",
    "conversation_id": "conv_789",
    "thread_id": null,
    "status": "closed",
    "agent": {
      "id": "agent_abc",
      "name": "Support Bot",
      "type": "ai",
      "assistant_id": "asst_123",
      "organization_id": "org_xyz",
      "created_at": "2025-01-15T10:30:00Z"
    },
    "metadata": {},
    "ending_survey_submission_id": null,
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T11:00:00Z"
  }
]

Retorna um array vazio [] quando não há mais resultados.


Buscar sessões em lote

Busca múltiplas sessões por ID em uma única requisição.

GET /data/sessions/batch

Query parameters

ParameterTypeRequiredDescription
session_idsstring[]YesLista de IDs de sessões (query param repetido)
curl -X GET "https://services.antonnia.com/conversations/v2/api/v1/data/sessions/batch?session_ids=sess_abc123&session_ids=sess_def456&session_ids=sess_ghi789" \
  -H "Authorization: Bearer sk_live_YOUR_TOKEN"
response = httpx.get(
    f"{BASE_URL}/data/sessions/batch",
    headers=HEADERS,
    params=[
        ("session_ids", "sess_abc123"),
        ("session_ids", "sess_def456"),
        ("session_ids", "sess_ghi789"),
    ],
)
sessions = response.json()

Response 200

Retorna um array de sessões na mesma ordem dos IDs solicitados. Sessões não encontradas ou de outra organização são omitidas silenciosamente.

[
  { "id": "sess_abc123", "status": "closed", "..." : "..." },
  { "id": "sess_def456", "status": "open", "..." : "..." }
]

Listar mensagens

Retorna mensagens da sua organização com paginação por cursor e filtros por data.

GET /data/messages

Query parameters

ParameterTypeRequiredDefaultDescription
sort_bystringNo"created_at"Coluna de ordenação: "created_at" ou "updated_at"
session_idstringNoFiltrar mensagens de uma sessão específica
created_afterdatetimeNoMensagens criadas após esta data (ISO 8601)
created_beforedatetimeNoMensagens criadas antes desta data (ISO 8601)
updated_afterdatetimeNoMensagens atualizadas após esta data (ISO 8601)
updated_beforedatetimeNoMensagens atualizadas antes desta data (ISO 8601)
after_idstringNoCursor: retornar mensagens após este ID
limitintegerNo100Máximo de resultados (máx: 3000)
# All messages from last 24h
curl -X GET "https://services.antonnia.com/conversations/v2/api/v1/data/messages?limit=1000&created_after=2025-01-14T00:00:00Z" \
  -H "Authorization: Bearer sk_live_YOUR_TOKEN"

# Messages from a specific session
curl -X GET "https://services.antonnia.com/conversations/v2/api/v1/data/messages?session_id=sess_abc123&limit=1000" \
  -H "Authorization: Bearer sk_live_YOUR_TOKEN"
# Incremental sync — fetch messages updated since last sync
last_sync = "2025-01-14T00:00:00Z"

messages = []
after_id = None

while True:
    params = {
        "limit": 1000,
        "sort_by": "updated_at",
        "updated_after": last_sync,
    }
    if after_id:
        params["after_id"] = after_id

    response = httpx.get(f"{BASE_URL}/data/messages", headers=HEADERS, params=params)
    page = response.json()

    if not page:
        break

    messages.extend(page)
    after_id = page[-1]["id"]

Response 200

Retorna um array de objetos de mensagem ordenados pela coluna sort_by.

[
  {
    "id": "msg_abc123",
    "session_id": "sess_abc123",
    "conversation_id": "conv_789",
    "organization_id": "org_xyz",
    "role": "user",
    "content": { "type": "text", "text": "Hello, I need help" },
    "provider_message_id": "channel_msg_001",
    "replied_provider_message_id": null,
    "run_id": null,
    "delivery_status": "delivered",
    "delivery_error_code": null,
    "delivery_error_message": null,
    "delivered_at": "2025-01-15T10:30:05Z",
    "metadata": {},
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:05Z"
  }
]

Retorna um array vazio [] quando não há mais resultados.


Paginação por cursor

Todos os endpoints de listagem (/data/sessions e /data/messages) utilizam paginação por cursor para garantir resultados estáveis em datasets grandes.

Como funciona

  1. Faça a primeira requisição sem after_id
  2. Pegue o id do último item retornado
  3. Passe esse id como after_id na próxima requisição
  4. Repita até receber um array vazio

A paginação por cursor é mais estável que offset-based. Novos registros inseridos durante a extração não causam duplicatas ou registros perdidos.

Limites

  • Máximo de 3000 registros por página (limit)
  • Padrão: 100 registros por página
  • Sem limite total de registros — pagine até receber um array vazio

On this page