DecisaDocumentação

Docs · Referência da API

/v1/conversions

Um único endpoint cobre todos os tipos de conversão. Autenticado por Bearer com a site key do seu workspace. Idempotente em (workspace_id, external_id).

Autenticação

Todas as requisições carregam um token Bearer no cabeçalho Authorization. O token é a site key do seu workspace, com o prefixo dcs_sk_. Encontre-a em Configurações → Chaves da API.

Authorization: Bearer dcs_sk_live_…

As site keys têm escopo de workspace. Faça a rotação na mesma página de configurações; as chaves antigas deixam de autenticar em até 60 segundos.

Endpoint

POST https://api.decisa.ai/v1/conversions
Content-Type: application/json
Authorization: Bearer dcs_sk_live_…

Corpo da requisição

{
  "type": "signup",
  "external_id": "user-1234",
  "visitor_id": "v_abc123...",
  "customer_email": "[email protected]",
  "value_cents": 0,
  "currency": "USD",
  "occurred_at": "2026-05-25T18:14:22Z",
  "metadata": {
    "plan": "pro",
    "trial": false
  }
}
CampoTipoDescrição
typestring · obrigatórioUm de: signup, trial_start, subscription_start, sale, lead, app_install, custom.
external_idstring · obrigatórioSeu ID único para o registro. Usado para deduplicação.
visitor_idstring · recomendadoValor do cookie first-party dcs_vid. Sem ele, a conversão não pode ser associada a um clique.
customer_emailstring · opcionalHasheado com SHA256 antes do armazenamento. Usado para o envio via CAPI.
value_centsinteger · opcionalReceita em unidades menores. Obrigatório para tipos que carregam receita.
currencystring · opcionalISO 4217. Padrão é a moeda do workspace.
occurred_atISO 8601 · opcionalO timestamp do servidor é usado se omitido.
metadataobject · opcionalFormato livre. Não usado para atribuição; exibido nos painéis.

Resposta de sucesso (201)

{
  "data": {
    "id": "conv_01HZX...",
    "type": "signup",
    "external_id": "user-1234",
    "attributed": true,
    "attribution_model": "last-click",
    "attribution_model_version": "1.0.0",
    "matched_click_id": "clk_01HZX...",
    "matched_campaign_id": null,
    "occurred_at": "2026-05-25T18:14:22Z"
  },
  "meta": null,
  "error": null
}

attributed: false significa que aceitamos a conversão, mas não encontramos um clique qualificável. A linha continua consultável no painel em Não atribuídas.

Códigos de erro

CampoTipoDescrição
401unauthorizedSite key ausente ou inválida.
403workspace_disabledO workspace está pausado por questões de cobrança ou conformidade.
422invalid_payloadA validação do esquema falhou. Veja `error.fields` para detalhes.
429rate_limitedTaxa de ingestão do workspace excedida. Tente novamente com backoff.
500server_errorTransitório. Seguro repetir — o endpoint é idempotente.

Idempotência e novas tentativas

O endpoint é idempotente em (workspace_id, external_id). Reenviar o mesmo payload retorna a linha de conversão original com HTTP 200 (não 201). Use à vontade — novas tentativas de webhook da Stripe, Shopify e Kiwify nunca criam duplicatas.

Limites de taxa

Plano gratuito: 60 requisições / minuto. Planos pagos: 600 / minuto. Picos de até 2× a taxa sustentada são absorvidos sem 429s. Limites maiores disponíveis sob solicitação.