Kori Docs

API v1

Crie documentos, acompanhe assinaturas e baixe o PDF assinado a partir do seu sistema. Respostas em JSON; identificadores são sempre públicos.

Autenticação

Gere um token em Configurações › Desenvolvedores e envie no cabeçalho Authorization. Tokens só de leitura não criam nem enviam documentos.

curl https://koridocs.com/api/v1/me \
  -H "Authorization: Bearer kori_xxxxxxxx_…"

Endpoints

GET/meEmpresa, plano e uso do mês
GET/templatesModelos da empresa e prontos, com os campos de cada um
GET/documents?status=sent&per_page=25Lista de documentos (paginada)
POST/documentsCria documento a partir de PDF (file ou pdf_base64) ou modelo (template_id + values)
GET/documents/{id}Documento, situação e signatários
GET/documents/{id}/linksLinks de assinatura (sign_url e embed_url) de cada pessoa
POST/documents/{id}/sendEnvia um rascunho
POST/documents/{id}/remindReenvia o lembrete para quem ainda não assinou
POST/documents/{id}/cancelCancela (reason opcional)
GET/documents/{id}/downloadPDF assinado (só quando concluído)

Exemplo: criar e enviar

curl -X POST https://koridocs.com/api/v1/documents \
  -H "Authorization: Bearer kori_xxxxxxxx_…" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Contrato de prestação de serviços",
    "pdf_base64": "JVBERi0xLjcK…",
    "signers": [
      {"name": "Maria Souza", "email": "maria@exemplo.com.br", "document_number": "52998224725"},
      {"name": "Ana Lima", "email": "ana@exemplo.com.br", "witness": true}
    ],
    "send": true
  }'

Signatários aceitam name, email, phone, document_number (CPF), role, witness, method (code|a1) e represents_cnpj. Com send=true a resposta já traz o sign_url de cada pessoa.

Webhooks

Cadastre uma URL HTTPS e escolha os eventos. Cada entrega vem com X-Kori-Event e X-Kori-Signature (HMAC-SHA256 do timestamp + corpo, com o seu segredo). Respostas fora de 2xx são repetidas em 1 min, 5 min, 30 min, 2 h, 6 h e 24 h.

document.sent · signer.viewed · signer.signed · signer.declined · document.completed · document.canceled · document.expired · envelope.completed

// X-Kori-Signature: t=1730000000,v1=<hex>
$expected = hash_hmac('sha256', $t.'.'.$rawBody, $secret);
hash_equals($expected, $v1) && abs(time() - $t) < 300;

Assinatura embutida

Libere a origem do seu sistema em Desenvolvedores e abra o embed_url num iframe. A página avisa o seu sistema por postMessage quando a pessoa assina ou recusa.

<iframe src="{embed_url}" style="width:100%;height:90vh;border:0" allow="camera; geolocation"></iframe>
<script>
window.addEventListener('message', (e) => {
  if (e.data?.source === 'kori-docs' && e.data.event === 'signer.signed') { /* … */ }
});
</script>

Limites

120 requisições por minuto por token. Documentos criados pela API contam na cota mensal do plano.