AssinAPI

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"