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/v1Listar sessões
Retorna sessões da sua organização com paginação por cursor e filtros por data.
GET /data/sessionsQuery parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
sort_by | string | No | "created_at" | Coluna de ordenação: "created_at" ou "updated_at" |
created_after | datetime | No | — | Sessões criadas após esta data (ISO 8601) |
created_before | datetime | No | — | Sessões criadas antes desta data (ISO 8601) |
updated_after | datetime | No | — | Sessões atualizadas após esta data (ISO 8601) |
updated_before | datetime | No | — | Sessões atualizadas antes desta data (ISO 8601) |
after_id | string | No | — | Cursor: retornar sessões após este ID |
limit | integer | No | 100 | Má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/batchQuery parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
session_ids | string[] | Yes | Lista 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/messagesQuery parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
sort_by | string | No | "created_at" | Coluna de ordenação: "created_at" ou "updated_at" |
session_id | string | No | — | Filtrar mensagens de uma sessão específica |
created_after | datetime | No | — | Mensagens criadas após esta data (ISO 8601) |
created_before | datetime | No | — | Mensagens criadas antes desta data (ISO 8601) |
updated_after | datetime | No | — | Mensagens atualizadas após esta data (ISO 8601) |
updated_before | datetime | No | — | Mensagens atualizadas antes desta data (ISO 8601) |
after_id | string | No | — | Cursor: retornar mensagens após este ID |
limit | integer | No | 100 | Má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
- Faça a primeira requisição sem
after_id - Pegue o
iddo último item retornado - Passe esse
idcomoafter_idna próxima requisição - 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