Listar campanhas
GET /campaigns — lista as campanhas de disparo da organização com situação, modelo, canal e contadores acumulados.
/campaignsBetaEscopo necessário: analytics:read
Lista as campanhas de disparo da organização (resolvida pela API key), da mais recente para a mais antiga (created_at decrescente). Cada linha traz a situação, o modelo, o canal e os contadores acumulados. A lista de destinatários nunca é devolvida.
Endpoint
GET https://crm.oficinamartech.com/api/v1/campaignsParâmetros de query
| Parâmetro | Tipo | Descrição |
|---|---|---|
status | draft | scheduled | sending | paused | completed | failed | cancelled | Filtra por situação. |
channel_id | UUID | Filtra pelo canal de envio (channel_id de uma campanha). |
created_since | date | Somente campanhas criadas a partir desta data (inclusive). ISO 8601 ou YYYY-MM-DD. |
created_until | date | Somente campanhas criadas antes desta data (exclusive). ISO 8601 ou YYYY-MM-DD. |
limit | int (1-100) | Tamanho da página. Default: 50. |
offset | int (0-10000) | Deslocamento da página. Default: 0. |
Um parâmetro fora desta lista é recusado com 400.
A paginação informa has_more e next_offset, sem total. offset vai até 10.000; além disso next_offset vem null mesmo com has_more true. Para percorrer um histórico longo, avance por janelas de created_since/created_until. Datas sem horário (YYYY-MM-DD) são lidas como meia-noite UTC. A resposta usa Cache-Control: private, no-store.
Exemplo
curl -s "https://crm.oficinamartech.com/api/v1/campaigns?status=completed&limit=1" \
-H "Authorization: Bearer crm_live_SEU_PREFIXO_SEU_SEGREDO"Resposta 200
{
"data": [
{
"id": "ca11ca11-58cc-4372-a567-0e02b2c3d479",
"name": "Reativação de novembro",
"status": "completed",
"message_type": "template",
"template_name": "reativacao_novembro",
"template_language": "pt_BR",
"channel_id": "ab12ab12-58cc-4372-a567-0e02b2c3d479",
"channel_name": "Comercial",
"total_contacts": 1200,
"total_sent": 1150,
"total_delivered": 1100,
"total_read": 640,
"total_failed": 12,
"total_skipped": 8,
"total_blocked": 30,
"created_by": "11111111-58cc-4372-a567-0e02b2c3d479",
"scheduled_at": "2026-11-10T12:00:00.000Z",
"started_at": "2026-11-10T12:00:03.000Z",
"completed_at": "2026-11-10T13:10:44.000Z",
"created_at": "2026-11-09T18:00:00.000Z",
"updated_at": "2026-11-10T13:10:44.000Z"
}
],
"pagination": {
"limit": 1,
"offset": 0,
"has_more": true,
"next_offset": 1
}
}total_blocked conta os contatos barrados pelas regras de envio antes do disparo. channel_name é null quando o canal não tem nome. scheduled_at, started_at e completed_at são null enquanto o evento não ocorreu. created_by é o user_id de GET /members.
Erros
| Status | Código | Quando |
|---|---|---|
400 | invalid_query | Query inválida (parâmetro desconhecido, UUID malformado, situação desconhecida, data inválida). |
401 | missing_api_key / invalid_api_key | API key ausente, inválida, expirada ou revogada. |
403 | missing_scope | A chave não tem o escopo analytics:read. |
429 | rate_limited | Acima de 120 req/min por chave ou por organização. |
500 | — | Erro interno. |