Autenticação
Todas as requisições precisam de uma API key no header Authorization. As chaves seguem o padrão ctk_live_* e são geradas na aba API & Integrações do painel.
Disponível em todos os planos, já no teste gratuito de 3 dias. A chave é criada em Painel → API & Integrações → Nova chave. Guarde-a — não é exibida novamente após a criação.
Base URL
A URL exata da sua instância aparece no painel após criar a primeira API key.
Quick start
Da API key ao contrato gerado em 3 passos.
Crie a API key no painel
Painel → API & Integrações → Nova chave
Faça POST para criar o contrato
A geração é assíncrona — retorna 202 com job_id
Faça polling do job-status
Progresso de 0 a 100. Quando status: "completed", o contrato está pronto
Endpoints
/v1/contracts
Retorna lista paginada dos contratos da organização. Ordenados por data de criação decrescente.
Query params
| page | integer | Página (padrão: 1) |
| limit | integer | Itens por página, máx 100 (padrão: 20) |
| status | string | draft · active · signed · archived |
/v1/contracts
Cria um contrato e inicia a geração assíncrona. Retorna 202 imediatamente com job_id e contract_id. Use /job-status para fazer polling. Consome 1 crédito do plano.
Body (JSON)
| title * | string | Título do contrato |
| description * | string | Descrição do contexto para geração (mín. 20 chars) |
| contract_type | string | servicos · trabalho · imobiliario · comercial · juridico |
| expires_at | ISO 8601 | Data de expiração (opcional) |
/v1/contracts/:id/job-status
Retorna o progresso da geração. Faça polling a cada 2–3s. Quando status: "completed", o contrato está disponível em GET /v1/contracts/:id.
/v1/contracts/:id
Retorna o contrato com conteúdo completo (campo content em Markdown). Só disponível após status: "completed".
/v1/contracts/:id
Atualiza metadados do contrato. Não altera o conteúdo gerado — para isso use o editor no painel.
Body (JSON — todos opcionais)
| title | string | Novo título |
| status | string | draft · active · archived |
| expires_at | ISO 8601 | null | Data de expiração |
/v1/contracts/:id/versions
Retorna todas as versões do contrato em ordem cronológica. Cada versão tem o conteúdo completo.
/v1/signature-requests
GET lista as solicitações de assinatura. POST cria uma nova solicitação e retorna o link de assinatura para enviar ao signatário.
POST body
| contract_id * | string | ID do contrato |
| signer_name * | string | Nome do signatário |
| signer_email * | string | E-mail do signatário |
Webhooks
Configure endpoints para receber eventos em tempo real. Cada entrega inclui assinatura HMAC-SHA256 no header X-Cotract-Signature. Retry automático com backoff exponencial.
contract.created
Contrato criado via API ou painel
contract.updated
Título, status ou expiração alterados
signature.requested
Solicitação de assinatura criada
signature.completed
Contrato assinado pelo signatário
Verificar assinatura HMAC
Limites & Créditos
30
req / minuto por API key
Rate limit global — todas as chamadas
1
crédito por /contracts ou /reviews
Geração e validação consomem 1 crédito cada
∞
leituras sem custo
GET, PATCH, job-status, etc.
Créditos de API são uma bolsa separada da assinatura: não expiram e são consumidos só pela API. Quando acabam, a API retorna 402 Payment Required — sem cobrança automática extra. Quando o rate limit é estourado, retorna 429 Too Many Requests com o header Retry-After.
Créditos de API
Para quem integra via /v1/contracts ou /v1/reviews. Bolsa separada da assinatura: não expira, consumida só pela API (1 crédito por contrato gerado ou validação). Pagamento único, cartão ou PIX.
App vs. API: geração pelo painel exige assinatura ativa; geração pela API exige créditos de API. São saldos independentes — sem surpresa de fatura. Quando acabam, a API responde 402 Payment Required e é só comprar mais.
R$29,80
20 chamadas /contracts ou /reviews
R$1,49/crédito
R$119,90
100 chamadas /contracts ou /reviews
R$1,20/crédito
R$549,90
500 chamadas /contracts ou /reviews
R$1,10/crédito
Créditos disponíveis na aba API & Integrações do painel após ativar o teste ou qualquer plano.
Erros
Todos os erros seguem o formato {"error": "mensagem", "code": "ERROR_CODE"}.
| HTTP | Código | Causa |
|---|---|---|
401 |
UNAUTHORIZED |
API key inválida ou ausente |
402 |
INSUFFICIENT_CREDITS |
Sem créditos disponíveis para criar contrato |
404 |
NOT_FOUND |
Contrato não encontrado ou sem acesso |
422 |
VALIDATION_ERROR |
Campos obrigatórios ausentes ou inválidos |
429 |
RATE_LIMITED |
Limite de 30 req/min atingido |
500 |
INTERNAL_ERROR |
Erro interno — tente novamente |