API REST v1 do SignSpry
URL base https://signspry.com/api/v1 · entrada e saída em JSON · erros retornam {"error": "…"} com 4xx/5xx.
Autenticação
Crie uma chave no console do desenvolvedor e envie-a em todas as solicitações:
curl https://signspry.com/api/v1/account \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Uma chave tem apenas os escopos marcados quando foi criada — envelopes:read (listar, status, trilha de auditoria, PDF selado), envelopes:write (criar, enviar, lembrar, anular, links de assinatura e de incorporação), templates:read, account:read. Uma chamada fora dos escopos da chave retorna 403 indicando o escopo que falta. As chaves expiram (30 dias, 90 dias, um ano ou nunca — você recebe um e-mail uma semana antes) e retornam 401 depois disso, e podem ser restritas a uma lista de IPs permitidos (endereços ou intervalos CIDR), retornando 403 de qualquer outro lugar. Dê a cada integração sua própria chave com os escopos mínimos necessários, para que revogar uma nunca quebre outra.
Criar e enviar um envelope
Uma única chamada envia os documentos (PDFs em base64), adiciona destinatários e campos e envia o envelope. As coordenadas são frações da página (0–1) a partir do canto superior esquerdo; recipient é um índice do array de destinatários; status: "sent" envia os convites por e-mail imediatamente (omita para manter como rascunho).
curl -X POST https://signspry.com/api/v1/envelopes \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Service Agreement",
"message": "Please sign by Friday.",
"expires_days": 15,
"reminder_days": 2,
"status": "sent",
"documents": [{"name": "agreement.pdf", "content_b64": "'"$(base64 -w0 agreement.pdf)"'"}],
"recipients": [
{"name": "Asha Vendor", "email": "asha@vendor.in", "routing_order": 1},
{"name": "Manu Shekhar", "email": "manu@signspry.com", "routing_order": 2},
{"name": "Accounts", "email": "accounts@signspry.com", "role": "cc"}
],
"fields": [
{"recipient": 0, "type": "signature", "page": 0, "x": 0.10, "y": 0.72, "w": 0.25, "h": 0.05},
{"recipient": 0, "type": "text", "page": 0, "x": 0.10, "y": 0.60, "w": 0.20, "h": 0.04,
"label": "PAN", "validation": {"type": "pan"}},
{"recipient": 1, "type": "signature", "page": 1, "x": 0.10, "y": 0.72, "w": 0.25, "h": 0.05}
]
}'
Tipos de campo: signature initials text date checkbox dropdown (com options) radio (com group_name) formula. Validações: email numbers letters date phone_in pincode pan gstin {"type":"custom","regex":"…"}.
Assinatura incorporada
Em vez de convites por e-mail (ou além deles), obtenha uma URL de assinatura e abra-a no seu próprio app — em iframe ou por redirecionamento. Quando o signatário termina, ele é enviado para sua return_url com ?envelope=…&event=signed (ou declined).
curl -X POST https://signspry.com/api/v1/envelopes/ENV_ID/recipients/RECIPIENT_ID/signing-link \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"return_url": "https://yourapp.com/signing-done"}'
# {"url": "https://signspry.com/sign/…", "recipient": {…}}
Os IDs de destinatário vêm das respostas de criação/detalhe. Cada chamada gera um novo link e invalida os antigos desse destinatário. A ordem de assinatura continua valendo — um signatário bloqueado vê uma página “aguardando os outros”.
Webhooks
Adicione um endpoint no console; cada evento correspondente faz um POST de JSON para ele:
POST https://yourapp.com/webhooks/signet
X-Signet-Event: envelope.completed
X-Signet-Signature: sha256=<hex HMAC-SHA256 of raw body, keyed with your whsec_… secret>
{"id":"…","event":"envelope.completed","created_at":1787480000.1,
"data":{"envelope":{"id":"…","title":"…","status":"completed","recipients":[…]}}}
Verificar (Python): hmac.new(secret, raw_body, hashlib.sha256).hexdigest() == header.split("sha256=")[1]. Entregas com falha são tentadas mais duas vezes; os resultados das entregas recentes aparecem no console. Eventos: envelope.sent recipient.viewed recipient.signed recipient.declined recipient.reassigned envelope.completed envelope.voided envelope.expired reminder.sent
Referência
| Endpoint | O que faz |
|---|---|
| GET /account | Dono da chave + uso. |
| POST /envelopes | Cria (e opcionalmente envia) um envelope. |
| GET /envelopes?status=&limit=&offset= | Lista seus envelopes. |
| GET /envelopes/:id | Detalhes completos, incl. destinatários + campos. |
| POST /envelopes/:id/send | Envia um rascunho. |
| POST /envelopes/:id/void | Anula com um motivo. |
| POST /envelopes/:id/remind | Lembra os signatários pendentes por e-mail. |
| POST /envelopes/:id/recipients/:rid/signing-link | URL de assinatura incorporada (+ return_url). |
| GET /envelopes/:id/document | Baixa o PDF assinado e selado. |
| GET /envelopes/:id/audit | Trilha de auditoria encadeada por hash, em JSON. |