Referência da API
Base URL Sandbox https://sandbox.api.assinapi.com.br/v1 · Produção https://api.assinapi.com.br/v1. OpenAPI completo em /openapi.json na API (Swagger em /docs).
Envie Idempotency-Key em criações, envio, assinatura e cancelamento. Erros seguem o formato padronizado.
Autenticação
POST/v1/auth/signup
Cria conta, organização e o primeiro projeto (Sandbox pronto para uso)
curl -X POST "https://sandbox.api.assinapi.com.br/v1/auth/signup" \
-H "Content-Type: application/json"
-d '{
"name": "Maria Souza",
"email": "maria@empresa.com",
"password": "string",
"organizationName": "Empresa X"
}'POST/v1/auth/login
Login (access token de 15 min + refresh token rotativo)
curl -X POST "https://sandbox.api.assinapi.com.br/v1/auth/login" \
-H "Content-Type: application/json"
-d '{
"email": "string",
"password": "string"
}'POST/v1/auth/refresh
Troca o refresh token por um novo par (rotação; reuso revoga a sessão)
curl -X POST "https://sandbox.api.assinapi.com.br/v1/auth/refresh" \
-H "Content-Type: application/json"
-d '{
"refreshToken": "string"
}'POST/v1/auth/logout
curl -X POST "https://sandbox.api.assinapi.com.br/v1/auth/logout" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)"GET/v1/auth/sessions
Sessões ativas do usuário
curl -X GET "https://sandbox.api.assinapi.com.br/v1/auth/sessions" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"DELETE/v1/auth/sessions/{id}
curl -X DELETE "https://sandbox.api.assinapi.com.br/v1/auth/sessions/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"Conta
GET/v1/me
Usuário autenticado, organizações, papéis e projetos
curl -X GET "https://sandbox.api.assinapi.com.br/v1/me" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"PATCH/v1/me/onboarding
Respostas opcionais do onboarding (personalizam o Quickstart)
curl -X PATCH "https://sandbox.api.assinapi.com.br/v1/me/onboarding" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Content-Type: application/json"
-d '{
"building": "SAAS",
"technology": "LOVABLE",
"completed": true
}'POST/v1/me/tokens
Cria Personal Access Token (CLI/automação pessoal). Exibido uma única vez.
curl -X POST "https://sandbox.api.assinapi.com.br/v1/me/tokens" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"name": "CLI do notebook",
"scopes": [
"string"
],
"expiresInDays": 7
}'GET/v1/me/tokens
curl -X GET "https://sandbox.api.assinapi.com.br/v1/me/tokens" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"DELETE/v1/me/tokens/{id}
curl -X DELETE "https://sandbox.api.assinapi.com.br/v1/me/tokens/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"Organizações
POST/v1/organizations
Cria organização (você será OWNER) com um projeto inicial
curl -X POST "https://sandbox.api.assinapi.com.br/v1/organizations" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"name": "AC Labs"
}'GET/v1/organizations/{id}
curl -X GET "https://sandbox.api.assinapi.com.br/v1/organizations/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"PATCH/v1/organizations/{id}
curl -X PATCH "https://sandbox.api.assinapi.com.br/v1/organizations/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Content-Type: application/json"
-d '{
"name": "string",
"consentText": "string",
"branding": {
"primaryColor": "#1d4ed8",
"logoUrl": "https://…"
},
"defaultExpirationDays": 7
}'GET/v1/organizations/{id}/members
curl -X GET "https://sandbox.api.assinapi.com.br/v1/organizations/ID/members" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"POST/v1/organizations/{id}/members
Adiciona membro existente (ADMIN não pode conceder OWNER)
curl -X POST "https://sandbox.api.assinapi.com.br/v1/organizations/ID/members" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"email": "string",
"role": "OWNER"
}'Projetos
GET/v1/projects
curl -X GET "https://sandbox.api.assinapi.com.br/v1/projects" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"POST/v1/projects
Cria projeto (cada projeto tem Sandbox e Produção isolados)
curl -X POST "https://sandbox.api.assinapi.com.br/v1/projects" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"name": "ERP YourDress",
"description": "string",
"environment": "SANDBOX"
}'PATCH/v1/projects/{id}
curl -X PATCH "https://sandbox.api.assinapi.com.br/v1/projects/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Content-Type: application/json"
-d '{
"name": "string",
"description": "string",
"status": "ACTIVE",
"environment": "SANDBOX"
}'API Keys
POST/v1/api-keys
Cria API key (ask_test_… / ask_live_…). O secret é exibido UMA ÚNICA VEZ.
curl -X POST "https://sandbox.api.assinapi.com.br/v1/api-keys" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"projectId": "string",
"environment": "SANDBOX",
"name": "Backend produção",
"scopes": [
"documents:read"
]
}'GET/v1/api-keys
curl -X GET "https://sandbox.api.assinapi.com.br/v1/api-keys" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"DELETE/v1/api-keys/{id}
curl -X DELETE "https://sandbox.api.assinapi.com.br/v1/api-keys/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"POST/v1/api-keys/{id}/rotate
Rotação sem downtime: cria nova chave; a antiga segue válida até ser revogada/expirar
curl -X POST "https://sandbox.api.assinapi.com.br/v1/api-keys/ID/rotate" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"expireOldInHours": 7
}'Documentos
POST/v1/documents
Upload de PDF (multipart "file" ou JSON contentBase64). Retorna o SHA-256 calculado no servidor.
curl -X POST "https://sandbox.api.assinapi.com.br/v1/documents" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"file": "@contrato.pdf",
"title": "string"
}'GET/v1/documents
curl -X GET "https://sandbox.api.assinapi.com.br/v1/documents" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"GET/v1/documents/{id}
curl -X GET "https://sandbox.api.assinapi.com.br/v1/documents/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"GET/v1/documents/{id}/download
URL temporária assinada para download do original
curl -X GET "https://sandbox.api.assinapi.com.br/v1/documents/ID/download" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"POST/v1/documents/{id}/versions
Nova versão (versões já enviadas para assinatura permanecem imutáveis)
curl -X POST "https://sandbox.api.assinapi.com.br/v1/documents/ID/versions" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"file": "@contrato.pdf",
"title": "string"
}'Envelopes
POST/v1/envelopes
Cria envelope (DRAFT)
curl -X POST "https://sandbox.api.assinapi.com.br/v1/envelopes" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"title": "Contrato de prestação de serviços",
"message": "Olá! Segue o contrato para sua assinatura.",
"signatureLevel": "SIMPLE",
"authenticationMethod": "EMAIL_OTP"
}'GET/v1/envelopes
curl -X GET "https://sandbox.api.assinapi.com.br/v1/envelopes" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"GET/v1/envelopes/{id}
curl -X GET "https://sandbox.api.assinapi.com.br/v1/envelopes/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"PATCH/v1/envelopes/{id}
Atualiza envelope (somente DRAFT)
curl -X PATCH "https://sandbox.api.assinapi.com.br/v1/envelopes/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Content-Type: application/json"
-d '{
"title": "string",
"message": "string",
"signatureLevel": "SIMPLE",
"authenticationMethod": "EMAIL_OTP"
}'POST/v1/envelopes/{id}/documents
Anexa documento: documentId existente, upload multipart "file" ou contentBase64
curl -X POST "https://sandbox.api.assinapi.com.br/v1/envelopes/ID/documents" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"documentId": "string",
"contentBase64": "string",
"filename": "string",
"title": "string"
}'POST/v1/envelopes/{id}/signers
Adiciona signatário (CPF obrigatório para ADVANCED; armazenado cifrado)
curl -X POST "https://sandbox.api.assinapi.com.br/v1/envelopes/ID/signers" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"name": "João da Silva",
"email": "joao@email.com",
"cpf": "529.982.247-25",
"phone": "+5511999999999"
}'DELETE/v1/envelopes/{id}/signers/{signerId}
curl -X DELETE "https://sandbox.api.assinapi.com.br/v1/envelopes/ID/signers/SIGNERID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"POST/v1/envelopes/{id}/send
Envia para assinatura. signingLinks são exibidos somente nesta resposta.
curl -X POST "https://sandbox.api.assinapi.com.br/v1/envelopes/ID/send" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"notify": true
}'POST/v1/envelopes/{id}/cancel
curl -X POST "https://sandbox.api.assinapi.com.br/v1/envelopes/ID/cancel" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"reason": "string"
}'POST/v1/envelopes/{id}/signers/{signerId}/link
Gera novo link de assinatura (revoga os anteriores)
curl -X POST "https://sandbox.api.assinapi.com.br/v1/envelopes/ID/signers/SIGNERID/link" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"notify": true
}'GET/v1/envelopes/{id}/audit
Trilha de auditoria com cadeia de hash verificada
curl -X GET "https://sandbox.api.assinapi.com.br/v1/envelopes/ID/audit" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"GET/v1/envelopes/{id}/evidence
Manifesto, assinatura do servidor, carimbo do tempo e URLs temporárias dos artefatos
curl -X GET "https://sandbox.api.assinapi.com.br/v1/envelopes/ID/evidence" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"Signature Requests (API simplificada)
POST/v1/signature-requests
Uma chamada: cria envelope + documento + signatário(s) e envia. Ideal para low-code/IA.
curl -X POST "https://sandbox.api.assinapi.com.br/v1/signature-requests" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"title": "Contrato de prestação de serviços",
"message": "string",
"documentId": "string",
"document": {
"contentBase64": "string"
}
}'GET/v1/signature-requests/{id}
Consulta uma signature request (sigreq_…): status, signatários e se as evidências estão prontas
curl -X GET "https://sandbox.api.assinapi.com.br/v1/signature-requests/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"Portal do signatário
GET/v1/sign/{token}
Abre o processo: dados mínimos para o signatário (registra DOCUMENT_ACCESSED)
curl -X GET "https://sandbox.api.assinapi.com.br/v1/sign/TOKEN_DO_LINK"GET/v1/sign/{token}/documents/{documentId}
PDF para visualização (registra DOCUMENT_VIEWED). variant=final após a conclusão.
curl -X GET "https://sandbox.api.assinapi.com.br/v1/sign/TOKEN_DO_LINK/documents/DOCUMENTID"POST/v1/sign/{token}/otp/request
Confirma identificação (CPF) e envia o código OTP
curl -X POST "https://sandbox.api.assinapi.com.br/v1/sign/TOKEN_DO_LINK/otp/request" \
-H "Content-Type: application/json"
-d '{
"cpf": "string"
}'POST/v1/sign/{token}/otp/verify
curl -X POST "https://sandbox.api.assinapi.com.br/v1/sign/TOKEN_DO_LINK/otp/verify" \
-H "Content-Type: application/json"
-d '{
"code": "123456"
}'POST/v1/sign/{token}/consent
Retorna a declaração exata (texto, versão, hash) que será aceita
curl -X POST "https://sandbox.api.assinapi.com.br/v1/sign/TOKEN_DO_LINK/consent"POST/v1/sign/{token}/sign
Assina. O servidor revalida sessão, identidade, ordem, hashes e consentimento.
curl -X POST "https://sandbox.api.assinapi.com.br/v1/sign/TOKEN_DO_LINK/sign" \
-H "Content-Type: application/json"
-d '{
"accepted": true,
"consentHash": "string",
"documentHashes": {}
}'POST/v1/sign/{token}/decline
curl -X POST "https://sandbox.api.assinapi.com.br/v1/sign/TOKEN_DO_LINK/decline" \
-H "Content-Type: application/json"
-d '{
"reason": "string"
}'Verificação pública
POST/v1/public/verify
Verifica um PDF (upload) e/ou código. Resultados: VALID, ALTERED, UNKNOWN, REVOKED, INVALID_EVIDENCE.
curl -X POST "https://sandbox.api.assinapi.com.br/v1/public/verify" \
-H "Content-Type: application/json"
-d '{
"file": "@contrato.pdf",
"code": "string"
}'GET/v1/public/keys
Chaves públicas para verificar manifestos offline
curl -X GET "https://sandbox.api.assinapi.com.br/v1/public/keys"Webhooks
POST/v1/webhooks
Cadastra endpoint. O secret (whsec_…) é exibido uma única vez.
curl -X POST "https://sandbox.api.assinapi.com.br/v1/webhooks" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"url": "https://cliente.com/webhooks/assinapi",
"events": [
"envelope.completed",
"signer.signed"
],
"description": "string"
}'GET/v1/webhooks
curl -X GET "https://sandbox.api.assinapi.com.br/v1/webhooks" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"DELETE/v1/webhooks/{id}
curl -X DELETE "https://sandbox.api.assinapi.com.br/v1/webhooks/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"POST/v1/webhooks/{id}/rotate-secret
curl -X POST "https://sandbox.api.assinapi.com.br/v1/webhooks/ID/rotate-secret" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)"POST/v1/webhooks/{id}/test
Envia evento de teste e retorna status, tempo e corpo da resposta
curl -X POST "https://sandbox.api.assinapi.com.br/v1/webhooks/ID/test" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"type": "envelope.created"
}'GET/v1/webhooks/{id}/deliveries
curl -X GET "https://sandbox.api.assinapi.com.br/v1/webhooks/ID/deliveries" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"POST/v1/webhooks/deliveries/{deliveryId}/retry
curl -X POST "https://sandbox.api.assinapi.com.br/v1/webhooks/deliveries/DELIVERYID/retry" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)"Templates
POST/v1/templates
curl -X POST "https://sandbox.api.assinapi.com.br/v1/templates" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json"
-d '{
"name": "Contrato padrão",
"signatureLevel": "SIMPLE",
"authenticationMethod": "EMAIL_OTP",
"signingOrderEnabled": true
}'GET/v1/templates
curl -X GET "https://sandbox.api.assinapi.com.br/v1/templates" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"GET/v1/templates/{id}
curl -X GET "https://sandbox.api.assinapi.com.br/v1/templates/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"PATCH/v1/templates/{id}
curl -X PATCH "https://sandbox.api.assinapi.com.br/v1/templates/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY" \
-H "Content-Type: application/json"
-d '{
"name": "Contrato padrão",
"signatureLevel": "SIMPLE",
"authenticationMethod": "EMAIL_OTP",
"signingOrderEnabled": true
}'DELETE/v1/templates/{id}
curl -X DELETE "https://sandbox.api.assinapi.com.br/v1/templates/ID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"Developer portal
GET/v1/dashboard/stats
curl -X GET "https://sandbox.api.assinapi.com.br/v1/dashboard/stats" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"GET/v1/billing/usage
curl -X GET "https://sandbox.api.assinapi.com.br/v1/billing/usage" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"GET/v1/logs
Logs sanitizados das chamadas à API (sem secrets/PII)
curl -X GET "https://sandbox.api.assinapi.com.br/v1/logs" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"GET/v1/logs/{requestId}
Request inspector: headers e payloads sanitizados
curl -X GET "https://sandbox.api.assinapi.com.br/v1/logs/REQUESTID" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"Sandbox
GET/v1/sandbox/identities
CPFs de teste e OTP fixo (apenas com credenciais de Sandbox)
curl -X GET "https://sandbox.api.assinapi.com.br/v1/sandbox/identities" \
-H "Authorization: Bearer $ASSINAPI_SECRET_KEY"