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 | /me | Empresa, plano e uso do mês |
| GET | /templates | Modelos da empresa e prontos, com os campos de cada um |
| GET | /documents?status=sent&per_page=25 | Lista de documentos (paginada) |
| POST | /documents | Cria 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}/links | Links de assinatura (sign_url e embed_url) de cada pessoa |
| POST | /documents/{id}/send | Envia um rascunho |
| POST | /documents/{id}/remind | Reenvia o lembrete para quem ainda não assinou |
| POST | /documents/{id}/cancel | Cancela (reason opcional) |
| GET | /documents/{id}/download | PDF 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.