API REST SignSpry v1
URL de base https://signspry.com/api/v1 · JSON en entrée, JSON en sortie · les erreurs renvoient {"error": "…"} avec un code 4xx/5xx.
Authentification
Créez une clé dans la console développeur et envoyez-la avec chaque requête :
curl https://signspry.com/api/v1/account \ -H "Authorization: Bearer sk_live_YOUR_KEY"
Une clé ne dispose que des portées cochées lors de sa création — envelopes:read (liste, statut, journal d'audit, PDF scellé), envelopes:write (créer, envoyer, relancer, annuler, liens de signature et d'intégration), templates:read, account:read. Un appel hors des portées de la clé renvoie 403 en indiquant la portée manquante. Les clés expirent (30 jours, 90 jours, un an ou jamais — vous êtes prévenu par e-mail une semaine avant) et renvoient ensuite 401 ; elles peuvent aussi être limitées à une liste d'adresses IP autorisées (adresses ou plages CIDR) et renvoient 403 depuis toute autre adresse. Donnez à chaque intégration sa propre clé avec les portées les plus restreintes possible, afin que la révocation de l'une n'affecte jamais les autres.
Créer et envoyer une enveloppe
Un seul appel importe les documents (PDF en base64), ajoute les destinataires et les champs, puis envoie. Les coordonnées sont des fractions de la page (0–1) à partir du coin supérieur gauche ; recipient est un index dans le tableau des destinataires ; status: "sent" envoie immédiatement les invitations par e-mail (omettez-le pour conserver un brouillon).
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}
]
}'
Types de champs : signature initials text date checkbox dropdown (avec options) radio (avec group_name) formula. Validations : email numbers letters date phone_in pincode pan gstin {"type":"custom","regex":"…"}.
Signature intégrée
Au lieu des invitations par e-mail (ou en complément), récupérez une URL de signature et ouvrez-la dans votre propre application — en iframe ou par redirection. Lorsque le signataire a terminé, il est redirigé vers votre return_url avec ?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": {…}}
Les ID de destinataire proviennent des réponses de création et de détail. Chaque appel génère un nouveau lien et invalide les anciens pour ce destinataire. L'ordre de signature s'applique toujours — un signataire bloqué voit une page « en attente des autres ».
Webhooks
Ajoutez un point de terminaison dans la console ; chaque événement correspondant y envoie du JSON en POST :
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":[…]}}}
Vérification (Python) : hmac.new(secret, raw_body, hashlib.sha256).hexdigest() == header.split("sha256=")[1]. Les livraisons échouées sont retentées deux fois ; les résultats récents s'affichent dans la console. Événements : envelope.sent recipient.viewed recipient.signed recipient.declined recipient.reassigned envelope.completed envelope.voided envelope.expired reminder.sent
Référence
| Point de terminaison | Description |
|---|---|
| GET /account | Propriétaire de la clé + utilisation. |
| POST /envelopes | Créer (et éventuellement envoyer) une enveloppe. |
| GET /envelopes?status=&limit=&offset= | Lister vos enveloppes. |
| GET /envelopes/:id | Détail complet, destinataires et champs compris. |
| POST /envelopes/:id/send | Envoyer un brouillon. |
| POST /envelopes/:id/void | Annuler avec un motif. |
| POST /envelopes/:id/remind | Relancer par e-mail les signataires en attente. |
| POST /envelopes/:id/recipients/:rid/signing-link | URL de signature intégrée (+ return_url). |
| GET /envelopes/:id/document | Télécharger le PDF signé et scellé. |
| GET /envelopes/:id/audit | Journal d'audit chaîné par hachage, en JSON. |