Central de Ajuda/API Reference

API REST Pública

Conecte o Cadenio a todo o seu stack

Automatize workflows de compliance, sincronize dados de runs com sistemas externos e construa dashboards ou agentes de IA usando API keys com escopo e uma interface REST padrão.

01

Crie uma API key

Acesse Configurações → Integrações → API Keys e crie uma nova key. Selecione apenas os escopos que a integração exige.

02

Faça uma requisição

Inclua a key no header Authorization: Bearer. A URL base é https://api.cadenio.com — não há prefixo de versão.

03

Trate a resposta

As respostas são JSON com campos em camelCase, iguais aos que o próprio app web do Cadenio envia e recebe. Erros incluem os campos statusCode e error para tratamento.

Autenticação

Autenticação via Bearer token

Todas as requisições à API precisam incluir uma API key válida no header Authorization usando o esquema Bearer. As keys têm prefixo sk_live_ e estão disponíveis para organizações no plano Business ou superior, em Configurações → Integrações → API Keys.

Atenção: O valor completo da key é exibido apenas uma vez, no momento da criação. Armazene-o com segurança — não pode ser recuperado depois. Se perdido, revogue e crie uma nova.

Header obrigatório

Authorizationstringobrigatório

Deve ser Bearer seguido da sua API key sk_live_.

Content-Typestringopcional

Obrigatório para requisições POST e PATCH. Definir como application/json.

Requisição
curl https://api.cadenio.com/runs \
  -H "Authorization: Bearer sk_live_a1b2c3..." \
  -H "Content-Type: application/json"

Escopos

Referência de escopos

Cada API key possui um conjunto de escopos que define exatamente quais operações ela pode executar, mais um modo de recurso que restringe ainda mais quais templates ou pastas ela pode acessar. Requisições de sessão (navegador) são sempre permitidas independentemente dos escopos — o controle se aplica apenas a requisições via API key.

EscopoDescrição
runs:readLeitura de listas de runs, detalhes, analytics e exportações
runs:writeAtualizar título do run, status/prazo/responsável de tarefas, aprovações
runs:executeIniciar novos runs a partir de um template
templates:readLeitura de templates, tarefas, campos, regras e versões
templates:writeCriação e edição de templates, tarefas, campos, regras e fases
templates:publishPublicar um rascunho de template como uma nova versão
files:readDownload de arquivos, thumbnails e verificação de status de scan
files:writeUpload e exclusão de arquivos anexados a tarefas de runs
data-sources:readLeitura de fontes de dados, colunas, linhas e relações
data-sources:writeCriação e atualização de fontes de dados, colunas e linhas
users:readLeitura da lista de membros da organização
webhooks:manageCriar, listar, atualizar, testar e excluir endpoints de webhook

Modo de recurso (resourceMode)

Além dos escopos, cada key tem um resourceMode: ALL (padrão, acessa qualquer template/run da org), SELECTED_TEMPLATES (restrita a uma lista de templates) ou SELECTED_FOLDERS (restrita a todo template dentro das pastas selecionadas). A restrição vale para templates, seus rascunhos, runs e execução de tarefas — uma key restrita a um template não consegue ler nem alterar outros, mesmo que o request 'pareça' válido.

Rate limits

Limites de requisição

Os rate limits são aplicados por API key, de forma independente de outras keys ou usuários de sessão da mesma organização. Requisições de leitura (GET) têm uma cota bem maior que requisições de escrita (POST/PATCH/DELETE), já que listar e consultar é muito mais barato que mutações.

  • Requisições de escrita: 300 requisições por minuto por API key
  • Requisições de leitura (GET): 1.500 requisições por minuto por API key
  • Toda resposta inclui os headers X-RateLimit-Limit, X-RateLimit-Remaining e X-RateLimit-Reset
  • Exceder o limite retorna HTTP 429 com header Retry-After (segundos até a janela resetar)
Headers de rate limit
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 294
X-RateLimit-Reset: 1785005060
Resposta 429
HTTP/1.1 429 Too Many Requests
Retry-After: 47

{
  "statusCode": 429,
  "message": "Rate limit exceeded",
  "error": "Too Many Requests",
  "retryAfter": 47
}

Respostas de erro

Respostas de erro

Erros retornam um corpo JSON padrão: statusCode (igual ao status HTTP), error (uma frase curta e estável, como "Forbidden" ou "Not Found"), message (uma string legível por humanos, ou um array de strings para erros de validação), timestamp e path. Não existe um código de erro separado legível por máquina para a maioria dos erros — trate por statusCode e, quando útil, por trechos de message.

Statusexemplo de error / message
400Bad RequestFalha na validação de entrada, ou conflito de regra de negócio (ex.: completar um run com tarefas obrigatórias pendentes)
401UnauthorizedAPI key ausente, malformada ou revogada ('Authentication required')
401UnauthorizedEndpoint exige sessão de navegador; API keys não podem acessá-lo (ex.: o próprio /api-keys)
402Payment RequiredCorpo inclui { code: "FEATURE_LOCKED", capability }. O plano da org não inclui este recurso
403ForbiddenKey não possui o escopo necessário para esta ação
403ForbiddenO modo de recurso da key não concede acesso a este template/pasta
404Not FoundRecurso não existe, foi excluído, ou não é acessível a partir desta org
429Too Many RequestsRate limit excedido. Verifique o header Retry-After para o atraso de nova tentativa em segundos
500Internal Server ErrorErro inesperado no servidor. Tente novamente com backoff; contate o suporte se persistir
Resposta de erro
HTTP/1.1 403 Forbidden

{
  "statusCode": 403,
  "timestamp": "2026-07-24T16:43:10Z",
  "path": "/runs",
  "message": "API key missing required scope: runs:read",
  "error": "Forbidden"
}

Runs

Runs

Um run é uma instância de execução de um template. Representa um processo em andamento ou concluído, com tarefas atribuídas, prazos e trilha de auditoria completa. Runs têm tanto um id UUID (usado em toda URL) quanto um publicId curto e amigável, usado para exibição.

GET/runsruns:read

Listar runs

Retorna uma lista paginada de runs da organização, mais recentes primeiro. Use parâmetros de consulta para filtrar por status, template ou data agendada.

Parâmetros

statusstringopcional

Filtrar por status do run. Um de: RUNNING, OVERDUE, COMPLETED, CANCELLED.

templateIdstringopcional

Filtrar runs iniciados de um template específico.

scheduledDatestringopcional

Filtrar pela data agendada (YYYY-MM-DD).

stalledForDaysintegeropcional

Somente runs ativos (RUNNING/OVERDUE) sem atividade há pelo menos esse número de dias.

limitintegeropcional

Itens por página. Padrão e máximo: 200.

Requisição
curl -G https://api.cadenio.com/runs \
  -H "Authorization: Bearer sk_live_..." \
  -d status=RUNNING \
  -d limit=20
Resposta
HTTP/1.1 200 OK

{
  "data": [
    {
      "id": "3ed4dcf7-a102-4327-81ab-723b34d8a6b5",
      "publicId": "r_3ytXrD6WA7",
      "title": "Vendor Onboarding - ACME Corp",
      "status": "RUNNING",
      "templateId": "6795dfb5-15de-4f41-8a96-b83830526ca6",
      "ownerUserId": "2bc947d9-114d-4c7f-9d18-6af9cfa2393c",
      "scheduledDateLocal": "2026-07-24",
      "createdAt": "2026-07-24T14:22:00Z",
      "completedAt": null
    }
  ],
  "total": 1,
  "hasMore": false
}

// id is the UUID you use in every other endpoint. publicId is a short,
// human-friendly identifier (only runs have one) meant for display in UI/PDFs.
POST/runsruns:execute

Iniciar um run

Cria um novo run a partir de um template publicado. O run abre imediatamente com status RUNNING e todas as tarefas geradas a partir da versão publicada do template. Se o resourceMode da sua key for SELECTED_TEMPLATES ou SELECTED_FOLDERS, templateId precisa estar dentro do conjunto permitido.

Parâmetros

templateIdstringobrigatório

ID do template a ser iniciado. O template precisa estar publicado.

titlestringopcional

Nome de exibição personalizado. Padrão: padrão de título do template ou o nome do template.

scheduledDateLocalstringopcional

Data agendada no formato YYYY-MM-DD, no fuso horário da org. Padrão: hoje.

ownerEmailstringopcional

Email do usuário a ser definido como responsável pelo run. Padrão: criador da API key.

variablesobjectopcional

Mapa chave-valor sobrescrevendo as variáveis de fluxo do template para este run.

Requisição
curl -X POST https://api.cadenio.com/runs \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "templateId": "6795dfb5-15de-4f41-8a96-b83830526ca6",
    "title": "Vendor Onboarding - ACME Corp"
  }'
Resposta
HTTP/1.1 201 Created

{
  "id": "3ed4dcf7-a102-4327-81ab-723b34d8a6b5",
  "publicId": "r_3ytXrD6WA7",
  "title": "Vendor Onboarding - ACME Corp",
  "status": "RUNNING",
  "templateId": "6795dfb5-15de-4f41-8a96-b83830526ca6",
  "templateVersionId": "fbc7dd41-334e-416b-8ddd-acb053aa0dd9",
  "ownerUserId": "2bc947d9-114d-4c7f-9d18-6af9cfa2393c",
  "createdAt": "2026-07-24T14:22:00Z"
}
PATCH/runs/tasks/:taskId/statusruns:write

Atualizar o status de uma tarefa

Define uma tarefa como PENDING ou COMPLETED diretamente, sem coletar campos de formulário. Para tarefas com campos obrigatórios, prefira o fluxo de Execução abaixo para que os valores dos campos sejam capturados — completar uma tarefa assim não envia nenhum valor de campo.

Parâmetros

statusstringobrigatório

Novo status da tarefa.

PENDINGCOMPLETED
Requisição
curl -X PATCH \
  https://api.cadenio.com/runs/tasks/22074d71-5767-48cf-ad21-88be0b52911c/status \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "status": "COMPLETED" }'
Resposta
HTTP/1.1 204 No Content
PATCH/runs/tasks/:taskId/due-dateruns:write

Atualizar o prazo de uma tarefa

Define ou remove o prazo SLA da tarefa.

Parâmetros

dueAtdatetime | nullobrigatório

Timestamp ISO 8601 do novo prazo, ou null para removê-lo.

dueAtHasTimebooleanopcional

Se dueAt carrega um horário específico (true) ou é um prazo só-data, vencendo ao fim do dia (false).

Requisição
curl -X PATCH \
  https://api.cadenio.com/runs/tasks/22074d71-5767-48cf-ad21-88be0b52911c/due-date \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "dueAt": "2026-08-01T17:00:00Z", "dueAtHasTime": true }'
Resposta
HTTP/1.1 204 No Content
PATCH/runs/tasks/:taskId/assigneeruns:write

Reatribuir uma tarefa

Reatribui uma tarefa a outro usuário ou grupo. Envie ambos os campos como null para desatribuir completamente.

Parâmetros

assigneeIdstring | nullopcional

ID do usuário a ser atribuído à tarefa. Envie null para desatribuir.

assigneeGroupIdstring | nullopcional

ID do grupo a ser atribuído à tarefa, em vez de um usuário individual.

Requisição
curl -X PATCH \
  https://api.cadenio.com/runs/tasks/22074d71-5767-48cf-ad21-88be0b52911c/assignee \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "assigneeId": "2bc947d9-114d-4c7f-9d18-6af9cfa2393c" }'
Resposta
HTTP/1.1 204 No Content
MétodoEndpointEscopoDescrição
GET/runs/countsruns:readContagem de runs por status
GET/runs/analyticsruns:readResumo de analytics de runs
GET/runs/analytics/advancedruns:readAnalytics avançado de runs
POST/runs/analytics/filteredruns:readAnalytics com corpo de filtro customizado
POST/runs/analytics/advanced/filteredruns:readAnalytics avançado com corpo de filtro customizado
GET/runs/export/csvruns:readExportar a lista de runs como CSV
GET/runs/analytics/export/pdfruns:readExportar analytics como PDF
GET/runs/analytics/export/csvruns:readExportar analytics como CSV
POST/runs/archiveruns:writeArquivar runs em lote por ID
GET/runs/:idruns:readObter um run
GET/runs/:id/summariesruns:readObter resumos de tarefas/campos de um run
GET/runs/:id/export/csvruns:readExportar um único run como CSV
GET/runs/:id/export/pdfruns:readExportar um único run como PDF
GET/runs/:id/dependenciesruns:readStatus de dependência de tarefas de um run
GET/runs/:id/activityruns:readLog de atividade de um run
GET/runs/:id/variablesruns:readValores das variáveis de fluxo de um run
PATCH/runs/:idruns:writeRenomear um run
POST/runs/:id/completeruns:writeConcluir um run (rejeita se já estiver em estado terminal)
POST/runs/:id/cancelruns:writeCancelar um run
POST/runs/:id/reopenruns:writeReabrir um run concluído/cancelado
POST/runs/:id/migrate-to-latestruns:writeMigrar um run para a versão mais recente do template
POST/runs/tasks/:taskId/approvalruns:writeAprovar uma tarefa pendente de aprovação
POST/runs/tasks/:taskId/approval/rejectruns:writeRejeitar a aprovação de uma tarefa
GET/runs/tasks/:taskId/approval-trailruns:readHistórico de aprovação de uma tarefa
POST/runs/tasks/:taskId/force-unblockruns:writeForçar o desbloqueio de uma tarefa presa em uma dependência

Execução

Execução

Este é o primitivo para de fato preencher o formulário de uma tarefa e concluí-la — o que uma IA agêntica ou uma integração customizada deve chamar para realizar trabalho real em um run, em vez do PATCH de status simples acima. O fluxo é sempre: abrir uma entrada de execução para a tarefa, enviar um ou mais valores de campo para ela, e então concluí-la.

POST/execution/entriesruns:write

Abrir uma entrada de execução

Inicia uma entrada de execução preenchível para uma tarefa. A maioria das tarefas permite apenas uma entrada aberta por vez; tarefas repetíveis podem ter várias. Obtenha runTaskId na lista de tarefas de um run (GET /runs/:id).

Parâmetros

runTaskIdstringobrigatório

ID da tarefa do run para a qual abrir uma entrada de execução.

Requisição
curl -X POST https://api.cadenio.com/execution/entries \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "runTaskId": "22074d71-5767-48cf-ad21-88be0b52911c" }'
Resposta
HTTP/1.1 201 Created

{
  "id": "4abc71a1-4c8d-4ac0-ae3d-4333f33ad886",
  "runTaskId": "22074d71-5767-48cf-ad21-88be0b52911c",
  "createdByUserId": "2bc947d9-114d-4c7f-9d18-6af9cfa2393c",
  "createdAt": "2026-07-24T17:28:10Z",
  "fieldValues": []
}
POST/execution/field-valuesruns:write

Enviar um valor de campo

Grava o valor de um campo em uma entrada de execução aberta. Chame uma vez por campo, ou use a variante em lote abaixo para múltiplos campos de uma vez. Os IDs de campo são estáveis por versão publicada — obtenha-os em GET /templates/:id/published-fields.

Parâmetros

executionEntryIdstringobrigatório

ID da entrada de execução retornada por POST /execution/entries.

runTaskFieldIdstringobrigatório

ID do campo sendo preenchido. Obtenha IDs estáveis de campo em GET /templates/:id/published-fields.

valueanyobrigatório

O valor a ser enviado. O formato depende do tipo do campo (string para texto, data ISO para DATE, chave da opção para DROPDOWN, etc.).

Requisição
curl -X POST https://api.cadenio.com/execution/field-values \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "executionEntryId": "4abc71a1-4c8d-4ac0-ae3d-4333f33ad886",
    "runTaskFieldId": "607ebeee-afd1-4834-8c9d-e5019e1373ad",
    "value": "42"
  }'
Resposta
HTTP/1.1 201 Created

{ "autoFilledFields": [] }

// autoFilledFields lists any other field the platform derived from this
// write (e.g. a lookup field populated from a linked data source row).
POST/execution/entries/completeruns:write

Concluir uma entrada de execução

Valida que todos os campos obrigatórios estão preenchidos e marca a tarefa como COMPLETED. Rejeita com 400 se algum campo obrigatório ainda estiver faltando ou uma aprovação obrigatória estiver pendente.

Parâmetros

executionEntryIdstringobrigatório

ID da entrada de execução a ser concluída. Marca a tarefa subjacente como COMPLETED.

idempotencyKeystringopcional

UUID gerado pelo cliente. Repetir a mesma key retorna o resultado original em vez de concluir duas vezes.

Requisição
curl -X POST https://api.cadenio.com/execution/entries/complete \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "executionEntryId": "4abc71a1-4c8d-4ac0-ae3d-4333f33ad886" }'
Resposta
HTTP/1.1 204 No Content

// Completing the last required, visible task in a run auto-completes the
// run itself — no separate call to POST /runs/:id/complete is needed.
MétodoEndpointEscopoDescrição
POST/execution/field-values/batchruns:writeEnviar múltiplos valores de campo em uma chamada
POST/execution/entries/reopenruns:writeReabrir uma entrada de execução concluída
GET/execution/tasks/:runTaskIdruns:readListar entradas de execução de uma tarefa (tarefas repetíveis podem ter várias)
GET/execution/field-values/:fieldValueId/historyruns:readObter o histórico de edições de um valor de campo enviado

Templates

Templates

Templates são os blueprints de processo: fases, tarefas, campos de formulário, regras de lógica condicional, dependências e variáveis de fluxo. Editar um template sempre altera apenas o rascunho não publicado — publicar cria um snapshot imutável do rascunho como uma nova versão, que é de onde novos runs são iniciados.

MétodoEndpointEscopoDescrição
GET/templatestemplates:readListar templates
POST/templatestemplates:writeCriar um rascunho de template
GET/templates/:idtemplates:readObter um template
PUT/templates/:idtemplates:writeAtualizar as configurações do próprio template
DELETE/templates/:idtemplates:writeExcluir um template permanentemente. Bloqueado enquanto existirem runs RUNNING/OVERDUE.
GET/templates/:id/runstemplates:readListar runs iniciados a partir deste template
POST/templates/:id/runsruns:executeIniciar um run a partir deste template (alias de POST /runs)
POST/templates/:id/duplicatetemplates:writeDuplicar um template
POST/templates/:id/archivetemplates:writeArquivar um template
POST/templates/:id/unarchivetemplates:writeDesarquivar um template
POST/templates/:id/background-imagetemplates:writeUpload de imagem de fundo (multipart/form-data)
GET/templates/:id/published-fieldstemplates:readListar campos da versão publicada — os IDs estáveis para usar com /execution/field-values
GET/templates/:id/rules-sync-statustemplates:readVerificar progresso da sincronização de regras em segundo plano após publicar com runs ativos
POST/templates/:id/publishtemplates:publishPublicar o rascunho como uma nova versão
POST/templates/:id/discard-drafttemplates:writeDescartar alterações não publicadas do rascunho
GET/templates/:id/versionstemplates:readListar versões publicadas
GET/templates/:id/versions/:versionIdtemplates:readObter o snapshot de uma versão específica
GET/templates/:id/versions/draft-difftemplates:readComparar o rascunho atual com a última versão publicada
GET/templates/:id/versions/:versionId/difftemplates:readComparar duas versões publicadas
POST/templates/:id/versions/:versionId/restoretemplates:writeRestaurar uma versão anterior para o rascunho
GET/templates/:id/taskstemplates:readListar tarefas do rascunho
POST/templates/:id/taskstemplates:writeAdicionar uma tarefa ao rascunho
PUT/templates/:id/tasks/:taskIdtemplates:writeAtualizar uma tarefa
DELETE/templates/:id/tasks/:taskIdtemplates:writeExcluir uma tarefa
POST/templates/:id/tasks/bulk-deletetemplates:writeExcluir múltiplas tarefas
POST/templates/:id/tasks/bulk-duplicatetemplates:writeDuplicar múltiplas tarefas
PATCH/templates/:id/tasks/bulk-updatetemplates:writeAtualizar múltiplas tarefas em lote
POST/templates/:id/tasks/:taskId/fieldstemplates:writeAdicionar um campo a uma tarefa
PUT/templates/:id/tasks/:taskId/fields/:fieldIdtemplates:writeAtualizar um campo
PATCH/templates/:id/tasks/:taskId/fields/:fieldId/movetemplates:writeMover um campo para outra tarefa
DELETE/templates/:id/tasks/:taskId/fields/:fieldIdtemplates:writeExcluir um campo
POST/templates/:id/tasks/:taskId/rulestemplates:writeAdicionar uma regra de lógica condicional (mostrar/ocultar/atribuir/definir variável)
PUT/templates/:id/tasks/:taskId/rules/:ruleIdtemplates:writeAtualizar uma regra de lógica
PATCH/templates/:id/tasks/:taskId/rules/reordertemplates:writeReordenar regras de lógica
DELETE/templates/:id/tasks/:taskId/rules/:ruleIdtemplates:writeExcluir uma regra de lógica
GET/templates/:id/tasks/:taskId/dependenciestemplates:readListar as dependências de uma tarefa
PUT/templates/:id/tasks/:taskId/dependenciestemplates:writeDefinir as dependências de uma tarefa
GET/templates/:id/tasks/:taskId/dependency-treetemplates:readObter a árvore completa de dependências de uma tarefa
GET/templates/:id/phasestemplates:readListar fases
POST/templates/:id/phasestemplates:writeCriar uma fase
PUT/templates/:id/phases/:phaseIdtemplates:writeAtualizar uma fase
DELETE/templates/:id/phases/:phaseIdtemplates:writeExcluir uma fase
GET/templates/:id/variablestemplates:readListar variáveis de fluxo
POST/templates/:id/variablestemplates:writeCriar uma variável de fluxo
PUT/templates/:id/variables/:variableIdtemplates:writeAtualizar uma variável de fluxo
DELETE/templates/:id/variables/:variableIdtemplates:writeExcluir uma variável de fluxo

Webhooks

Webhooks

Webhooks entregam notificações de eventos em tempo real para o seu sistema. Toda entrega é assinada com HMAC-SHA256 usando um único segredo de assinatura, no nível da organização (não retornado por este endpoint — ver Configurações → Integrações → Webhooks), para que você possa verificar que os payloads vieram mesmo do Cadenio.

POST/webhookswebhooks:manage

Registrar um webhook

Registra um novo endpoint de webhook. url precisa ser HTTPS — HTTP simples e endereços privados/loopback/link-local são rejeitados de imediato, e a URL é revalidada a cada tentativa de entrega para fechar janelas de DNS-rebind.

Parâmetros

namestringobrigatório

Nome de exibição para este webhook.

urlstringobrigatório

Endpoint HTTPS para entrega dos payloads. HTTP simples e endereços privados/loopback/link-local são rejeitados.

enabledEventsstring[]obrigatório

Eventos aos quais este webhook está inscrito.

run.startedrun.completedrun.cancelledrun.reopenedtask.completedtask.overdueapproval.requestedapproval.grantedapproval.rejected
enabledbooleanopcional

Se o webhook está ativo. Padrão: true.

templateModestringopcional

Restringe entregas a todos os flows ou a um subconjunto selecionado de templates.

ALL_FLOWSSELECTED_TEMPLATES
templateIdsstring[]opcional

IDs de templates para restringir, quando templateMode for SELECTED_TEMPLATES.

descriptionstringopcional

Nota opcional em texto livre, para referência própria.

Requisição
curl -X POST https://api.cadenio.com/webhooks \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Sync to ERP",
    "url": "https://your-system.com/hooks/cadenio",
    "enabledEvents": ["run.completed", "task.overdue"]
  }'
Payload de exemplo
POST https://your-system.com/hooks/cadenio
content-type: application/json
x-flow-timestamp: 1785005000000
x-flow-signature: 6f9b1c...  (hex HMAC-SHA256)

{
  "event": "run.completed",
  "deliveryId": "9b1e2c3d-...",
  "timestamp": "2026-07-24T16:05:00Z",
  "orgId": "0c861a32-d927-47d7-a8f5-861a4adf28ed",
  "data": {
    "runId": "3ed4dcf7-a102-4327-81ab-723b34d8a6b5",
    "templateId": "6795dfb5-15de-4f41-8a96-b83830526ca6"
  }
}
Verificar assinatura (Node.js)
const crypto = require("crypto");

function isValid(req, secret) {
  const timestamp = req.headers["x-flow-timestamp"];
  const signature = req.headers["x-flow-signature"];
  const body = JSON.stringify(req.body); // raw body, exactly as received
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${timestamp}.${body}`)
    .digest("hex");
  return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
}

// The signing secret is a single org-wide value (WEBHOOK_SIGNING_SECRET),
// shared across all of your org's webhooks — not returned per-webhook by
// this endpoint. Find it under Settings → Integrations → Webhooks.
MétodoEndpointEscopoDescrição
GET/webhookswebhooks:manageListar webhooks
GET/webhooks/deliverieswebhooks:manageListar entregas recentes de todos os webhooks
GET/webhooks/:idwebhooks:manageObter um webhook
PATCH/webhooks/:idwebhooks:manageAtualizar um webhook (a URL é revalidada)
DELETE/webhooks/:idwebhooks:manageExcluir um webhook
POST/webhooks/:id/testwebhooks:manageEnviar uma entrega de teste
GET/webhooks/:id/deliverieswebhooks:manageListar entregas de um webhook

Arquivos

Arquivos

Upload e download de arquivos anexados a tarefas de runs. Uploads diretos precisam estar vinculados à entrada de execução de um campo específico do tipo FILE_UPLOAD/SIGNATURE; uploads grandes podem, em vez disso, usar um fluxo de upload-url assinado + confirm.

MétodoEndpointEscopoDescrição
POST/files/direct-uploadfiles:writeUpload de arquivo (multipart/form-data) e anexação à entrada de execução de uma tarefa em uma chamada
POST/files/upload-urlfiles:writeObter uma URL de upload assinada para arquivos grandes (passo 1 de 2)
POST/files/confirmfiles:writeConfirmar que um upload assinado terminou (passo 2 de 2)
GET/files/:id/downloadfiles:readObter uma URL de download assinada para um arquivo
GET/files/:id/thumbnailfiles:readObter uma URL de thumbnail para um anexo de imagem/vídeo
GET/files/:id/scan-statusfiles:readVerificar o status do scan antivírus de um upload
POST/files/bulk-download-zipfiles:readBaixar múltiplos arquivos como um único ZIP
GET/filesfiles:readListar arquivos anexados a um campo/entrada de execução
DELETE/files/:idfiles:writeExcluir um arquivo
POST/files/template-assetfiles:writeUpload de um asset de imagem no nível do template (ex.: a imagem de um campo IMAGE)
GET/files/template-asset/download-urlfiles:readObter uma URL de download para um asset de template

Fontes de dados

Fontes de dados

Tabelas estruturadas usadas para preencher campos de formulário (campos DATA_SOURCE / lookup) e orientar lógica condicional. Linhas são compostas por células tipadas; operações de linha em lote são atômicas — uma linha inválida rejeita o lote inteiro.

MétodoEndpointEscopoDescrição
GET/data-sourcesdata-sources:readListar fontes de dados
POST/data-sourcesdata-sources:writeCriar uma fonte de dados (nome + nomes de coluna)
GET/data-sources/:iddata-sources:readObter uma fonte de dados e suas colunas
PATCH/data-sources/:iddata-sources:writeAtualizar nome/descrição de uma fonte de dados
DELETE/data-sources/:iddata-sources:writeExcluir uma fonte de dados
POST/data-sources/:id/columnsdata-sources:writeAdicionar uma coluna. Tipos: TEXT, DATE, DATETIME, NUMBER, BOOLEAN, STATUS, RELATION
PATCH/data-sources/:id/columns/:columnIddata-sources:writeAtualizar uma coluna (nome, tipo ou config)
DELETE/data-sources/:id/columns/:columnIddata-sources:writeExcluir uma coluna
PATCH/data-sources/:id/columns/reorderdata-sources:writeReordenar colunas
GET/data-sources/:id/rowsdata-sources:readListar linhas (com busca, filtro de ativos e por coluna)
GET/data-sources/:id/rows/:rowIddata-sources:readObter uma única linha
POST/data-sources/:id/rowsdata-sources:writeCriar uma linha
POST/data-sources/:id/rows/bulkdata-sources:writeCriar linhas em lote (até o limite de linhas da org)
PATCH/data-sources/:id/rows/:rowIddata-sources:writeAtualizar os valores de célula de uma linha
POST/data-sources/:id/rows/bulk-updatedata-sources:writeAplicar a mesma atualização de célula a várias linhas de forma atômica
DELETE/data-sources/:id/rows/:rowIddata-sources:writeExcluir uma linha
POST/data-sources/:id/rows/bulk-deletedata-sources:writeExcluir várias linhas de forma atômica
GET/data-sources/:id/rows/:rowId/impactdata-sources:readVer onde uma linha é referenciada (runs, outras linhas)
GET/data-sources/:id/rows/:rowId/timelinedata-sources:readObter o histórico de alterações de uma linha
GET/data-sources/:id/rows/:rowId/relationsdata-sources:readListar vínculos RELATION de/para uma linha
POST/data-sources/:id/relationsdata-sources:writeVincular duas linhas via uma coluna RELATION
DELETE/data-sources/:id/relationsdata-sources:writeRemover um vínculo entre duas linhas
GET/data-sources/:id/lookupdata-sources:readBuscar linhas para um campo de template do tipo DATA_SOURCE

Gatilhos de fontes de dados

Gatilhos de fontes de dados

Gatilhos de automação que disparam quando uma linha de fonte de dados corresponde a uma condição (mais comumente uma coluna DATE atingindo hoje) — a base de automações agendadas/recorrentes construídas sobre uma fonte de dados.

MétodoEndpointEscopoDescrição
GET/data-source-triggersdata-sources:readListar gatilhos de automação
POST/data-source-triggersdata-sources:writeCriar um gatilho (ex.: disparar quando uma coluna DATE é atingida)
GET/data-source-triggers/:iddata-sources:readObter um gatilho
PATCH/data-source-triggers/:iddata-sources:writeAtualizar um gatilho
DELETE/data-source-triggers/:iddata-sources:writeExcluir um gatilho
GET/data-source-triggers/:id/firingsdata-sources:readListar disparos anteriores de um gatilho
POST/data-source-triggers/:id/dry-rundata-sources:readPré-visualizar quais linhas disparariam agora, sem despachar

Visualizações salvas

Visualizações salvas

Conjuntos de filtros de run nomeados e reutilizáveis — os mesmos filtros disponíveis na UI de Runs, salvos no servidor para que um dashboard ou relatório agendado possa referenciá-los por ID em vez de recodificar a lógica de filtro.

MétodoEndpointEscopoDescrição
GET/saved-viewsruns:readListar visualizações salvas
POST/saved-viewsruns:readCriar uma visualização salva (um conjunto de filtros de run salvo)
GET/saved-views/:idruns:readObter uma visualização salva
PATCH/saved-views/:idruns:readAtualizar uma visualização salva
DELETE/saved-views/:idruns:readExcluir uma visualização salva
POST/saved-views/previewruns:readPré-visualizar contagens de runs para um conjunto de filtros sem salvá-lo
GET/saved-views/:id/runsruns:readListar os runs que correspondem a uma visualização salva

Templates compartilhados

Templates compartilhados

Compartilhamento de templates entre organizações via um token público: publique um link de compartilhamento e deixe outra org pré-visualizar e importar seu template como uma cópia própria e independente.

MétodoEndpointEscopoDescrição
POST/templates/:templateId/sharestemplates:writeCriar um link/token compartilhável para um template
GET/templates/:templateId/sharestemplates:readListar compartilhamentos de um template
PATCH/shared-templates/:shareIdtemplates:writeAtualizar um compartilhamento
POST/shared-templates/:shareId/refreshtemplates:writeRotacionar o token de um compartilhamento
DELETE/shared-templates/:shareIdtemplates:writeRevogar um compartilhamento
GET/shared-templates/:token/previewtemplates:readPré-visualizar um template compartilhado pelo token público
POST/shared-templates/:token/importtemplates:writeImportar um template compartilhado para sua org como um novo template

Portal

Portal

Construtor de portal voltado ao cliente final: páginas compostas por blocos de conteúdo (incluindo widgets de relatório ao vivo), regras de acesso por usuário/grupo, e uma visualização pública publicada servida em um slug.

MétodoEndpointEscopoDescrição
GET/portalstemplates:readListar portais
POST/portalstemplates:writeCriar um portal
GET/portals/metemplates:readObter os portais que o chamador pode acessar
GET/portals/:portalIdtemplates:readObter um portal
PATCH/portals/:portalIdtemplates:writeAtualizar um portal
DELETE/portals/:portalIdtemplates:writeExcluir um portal
POST/portals/:portalId/publishtemplates:writePublicar um portal
POST/portals/:portalId/unpublishtemplates:writeDespublicar um portal
GET/portals/by-slug/:slug/viewtemplates:readObter o conteúdo de um portal publicado pelo slug público
GET/portals/:portalId/pagestemplates:readListar as páginas de um portal
POST/portals/:portalId/pagestemplates:writeCriar uma página
GET/portals/:portalId/pages/:pageIdtemplates:readObter uma página
PATCH/portals/:portalId/pages/:pageIdtemplates:writeAtualizar uma página
DELETE/portals/:portalId/pages/:pageIdtemplates:writeExcluir uma página
PUT/portals/:portalId/pages/:pageId/blockstemplates:writeSubstituir os blocos de conteúdo de uma página
POST/portals/:portalId/pages/:pageId/publish-changestemplates:writePublicar as alterações pendentes de uma única página
GET/portals/:portalId/access-rulestemplates:readListar regras de acesso
POST/portals/:portalId/access-rulestemplates:writeConceder acesso ao portal a um usuário/grupo
DELETE/portals/:portalId/access-rules/:ruleIdtemplates:writeRevogar uma regra de acesso
GET/portals/report-presetstemplates:readListar presets de relatório salvos
POST/portals/report-presetstemplates:writeSalvar um preset de relatório
DELETE/portals/report-presets/:presetIdtemplates:writeExcluir um preset de relatório

Usuários

Usuários

Leitura da lista de membros da organização. Use os IDs de membros para atribuir runs e tarefas via API de Runs.

MétodoEndpointEscopoDescrição
GET/usersusers:readListar membros da organização

Gerenciamento de API keys

Gerenciando API keys

API keys são criadas e revogadas em Configurações → Integrações → API Keys. Cada key tem nome, conjunto de escopos, data de expiração opcional e modo de recurso (todos os templates/pastas, ou um subconjunto selecionado). Apenas proprietários e admins privilegiados da organização podem gerenciar as keys. O valor completo da key é exibido apenas uma vez, na criação.

Importante: Esses endpoints exigem autenticação de sessão (cookie de navegador), não uma API key. Uma API key não pode gerenciar outras API keys — trate isso como uma operação exclusiva do painel.

Endpoints

GET/api-keysListar API keys ativas
POST/api-keysCriar uma nova API key
DELETE/api-keys/:idRevogar uma API key

Parâmetros de criação

namestringobrigatório

Nome de exibição para esta key.

scopesstring[]obrigatório

Escopos de permissão concedidos a esta key. Ver a referência de Escopos.

resourceModestringopcional

Quais templates/pastas esta key pode acessar. Padrão: ALL.

ALLSELECTED_TEMPLATESSELECTED_FOLDERS
scopedTemplateIdsstring[]opcional

IDs de templates acessíveis quando resourceMode for SELECTED_TEMPLATES.

scopedFolderIdsstring[]opcional

IDs de pastas acessíveis a esta key (e todo template dentro delas) quando resourceMode for SELECTED_FOLDERS.

expiresAtdatetimeopcional

Timestamp ISO 8601 após o qual a key é automaticamente rejeitada. Padrão: nunca expira.

Requisição
curl -X POST https://api.cadenio.com/api-keys \
  -H "Cookie: flow_session=...; flow_csrf=..." \
  -H "x-cadenio-csrf: ..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "ERP Sync Integration",
    "scopes": ["runs:read", "runs:execute"],
    "resourceMode": "ALL"
  }'
Resposta
HTTP/1.1 201 Created

{
  "id": "1105c74c-bc73-4d7c-b9b0-c88ca1824a5f",
  "name": "ERP Sync Integration",
  "keyPrefix": "sk_live_...93f7",
  "scopes": ["runs:read", "runs:execute"],
  "resourceMode": "ALL",
  "scopedTemplateIds": [],
  "scopedFolderIds": [],
  "status": "ACTIVE",
  "expiresAt": null,
  "createdAt": "2026-07-24T16:41:11Z",
  "plainKey": "sk_live_beda794d400a159f4214c69965412267bacfb9eafc8893f7"
}

// plainKey is shown only in this response, store it securely.

Acesso à API pública requer plano Business ou superior

API keys, permissões com escopo, webhooks e acesso programático a runs, templates e fontes de dados estão disponíveis nos planos Business e Enterprise. Fale conosco para habilitar na sua organização.