A API de exportação dá ao seu backend duas formas de extrair os registros de consentimento de um site em CSV: streaming síncrono para volumes até ~100k linhas, ou jobs assíncronos para volumes maiores. Ambas as rotas aceitamDocumentation Index
Fetch the complete documentation index at: https://docs.consentfly.com/llms.txt
Use this file to discover all available pages before exploring further.
Authorization: Bearer sk-... e consomem 1 unidade da cota mensal por chamada (o feature consent_export está disponível a partir do plano Starter).
A funcionalidadeconsent_exporté gerenciada server-side: contas Free recebem403 plan_limit_exceededao chamar qualquer rota desta página.
Quando usar cada modo
| Cenário | Endpoint | Resposta |
|---|---|---|
| Site com < 100k linhas | GET /api/v1/sites/{siteId}/consents/export?format=csv | 200 com text/csv em streaming |
| Site com > 100k linhas (auto) | mesma rota acima | 202 com id (vira async automaticamente) |
| Forçar async (qualquer volume) | mesma rota + ?async=true | 202 com id |
| Sempre async, independente do tamanho | POST /api/v1/sites/{siteId}/exports | 202 com id |
Modo síncrono (streaming CSV)
GET /api/v1/sites/{siteId}/consents/export?format=csv responde com Content-Type: text/csv; charset=utf-8, Content-Disposition: attachment; filename="consents-<domain>-<YYYYMMDD>.csv" e BOM UTF-8 no início (Excel abre sem perguntar encoding). A paginação por keyset mantém o uso de memória O(batch_size) mesmo em sites grandes — você pode salvar direto num arquivo.
Colunas: consent_id, accepted, analytics, marketing, country, region, user_agent, policy_version, created_at.
Modo assíncrono (enqueue + status + download)
Quando o site cruza ~100k linhas (ou quando você força com?async=true), a mesma rota responde 202 Accepted. Para sempre enfileirar (independente do tamanho), use POST /api/v1/sites/{siteId}/exports.
Enfileirar um export
202 traz id (use-o para polling), status: "queued", e status_url para consulta.
Consultar status do job
GET /api/v1/exports/{id} devolve o ExportDTO com o status atual. Quando status="ready", o campo download_url é uma URL assinada com TTL de 10 minutos.
Baixar o arquivo pronto
GET /api/v1/exports/{id}/download retorna um 302 para uma URL assinada (TTL 10 min). Use -L no cURL para seguir o redirect. Se o token expirar, basta chamar GET /exports/{id} de novo — uma URL fresca é mintada a cada chamada.
Estados possíveis
| Status | Significado |
|---|---|
queued | Esperando o worker pegar |
running | Worker está escrevendo o arquivo |
ready | Arquivo pronto, download_url disponível |
failed | Falha durante a escrita — error_message traz o detalhe |
expired | Passados 7 dias, o cron de limpeza removeu o arquivo do disco |
streamed | Foi servido inline (modo síncrono) — sem arquivo persistente |
Listar seus exports recentes
GET /api/v1/exports?limit=20 retorna os exports mais recentes (máximo 100 por chamada).
Limites e retenção
- Cota mensal: cada chamada API-key conta 1 unidade contra
request_limit. - Cap por período de cobrança: Starter 5 exports / período, Pro+ ilimitado.
- Retenção em disco: arquivos
readyvivem 7 dias; depois flipam paraexpirede o download retorna410 Gone. - Cross-tenant: chamadas para
ids que não pertencem à sua conta retornam404(nunca403, para não vazar existência).
Erros frequentes
| Código HTTP | error | Quando |
|---|---|---|
401 | unauthorized | API Key inválida, revogada ou token de download expirado |
403 | plan_limit_exceeded | Plano Free tentando usar consent_export |
404 | not_found | Export ou site não pertence à sua conta |
409 | conflict | Tentou baixar um export ainda em queued/running/failed |
410 | not_found | Arquivo foi expurgado (passados os 7 dias) |
429 | quota_exceeded | Cota mensal esgotada ou cap de exports do período atingido |
Próximo passo
Exports cobrem o passado: você pega os dados que já estão armazenados. Para reagir a eventos em tempo real (todo novo consentimento, toda mudança), configure Webhooks — o ConsentFly empurra o evento assinado para o seu endpoint assim que acontece, e seu pipeline fica sempre sincronizado sem polling.Dúvidas? suporte@consentfly.com.br
