Developer API
REST API for envelopes, documents, and audit trails. Authenticate with a session cookie or Authorization: Bearer using an org API key (Settings → API keys) or server env key.
Quick Start
# Create an envelope
curl -X POST https://your-domain.com/api/v2/envelopes \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"title":"NDA","signers":[{"email":"signer@example.com","name":"Jane"}]}'
Endpoints
/api/v2/envelopesCreate an envelope with signersLive/api/v2/envelopes?id={id}Get one envelope by query idLive/api/v2/envelopesList envelopes (optional ?status=)Live/api/v2/envelopes/{id}Get envelope by path idLive/api/v2/envelopes/{id}Update title or signing orderLive/api/v2/envelopes/{id}Void an envelopeLive/api/v2/envelopes/{id}/documentsDownload PDF (?type=signed|certificate)Live/api/v2/envelopes/{id}/auditFull audit trailLive/api/envelopes/{id}/uploadUpload document PDFLive/api/envelopes/{id}/sendSend now, or schedule with { scheduledSendAt: ISO8601 }Live/api/envelopes/{id}/scheduleReschedule a scheduled envelope (session auth)Live/api/envelopes/{id}/scheduleCancel scheduled send — returns envelope to draftLive/api/v2/envelopes/{id}/scheduleReschedule via API key (scheduledSendAt in body)Live/api/v2/envelopes/{id}/scheduleCancel scheduled send via API keyLive/api/envelopes/{id}/voidVoid from dashboard sessionLive/api/envelopes/{id}/fieldsReplace fields on draft envelopeLive/api/envelopes/{id}/remindSend reminders to pending signersLive/api/envelopes/{id}/downloadDownload PDF or ZIP (?type=signed&format=zip)Live/api/envelopes/{id}/certificateDownload completion certificateLive/api/envelopes/{id}/previewSender preview — document, fields, and signers (session auth)Live/api/contactsList org address book contacts (session auth)Live/api/contactsCreate or update a contact (session auth)Live/api/contacts/importImport contacts from CSV file or { csv: text } (session auth)Live/api/envelopes/{id}/signers/{signerId}/reassignReassign a pending signer to a new name/email (session auth)Live/api/healthPlatform health checkLive/api/api-keysList org API keys (session auth)Live/api/api-keysCreate org API key (Business+)Live/api/api-keys/{id}Revoke an API key (session auth, Business+)Live/api/powerformsList PowerForms with public URLs (session auth, Business+)Live/api/powerformsCreate a PowerForm (session auth, Business+)Live/api/powerformsUpdate PowerForm name, active state, redirect, or SMS (session auth)Live/embed/sign/{token}Embedded signing UI (iframe-friendly)Live/api/v2/templatesCreate a template via APILive/api/v2/bulk-sendBulk send from template (optional scheduledSendAt)Live/api/f/{slug}Public PowerForm metadata — branding and fields (no auth)Live/api/f/{slug}Submit PowerForm — creates and sends envelope, returns signUrl (no auth)Live/api/webhooksList webhooks (session auth, Business+)Live/api/webhooksCreate webhook from dashboard (session auth)Live/api/webhooks/{id}Update webhook URL, events, or active (session auth)Live/api/webhooks/{id}Delete webhook (session auth)Live/api/webhooks/{id}/testSend test event to webhook (session auth)Live/api/webhooks/{id}/rotate-secretRotate webhook secret (session auth)Live/api/webhooks/deliveriesList recent webhook deliveries (session auth, last 50)Live/api/webhooks/deliveries/{id}/retryRetry a failed webhook delivery (session auth)Live/api/openapiOpenAPI 3.0 specification (JSON)Live/api/v2/webhooksRegister webhook endpointLive/api/v2/webhooksList registered webhooksLive/api/v2/webhooks/{id}Update webhook URL, events, or active stateLive/api/v2/webhooks/{id}Delete a webhook endpointLive/api/v2/webhooks/{id}/testSend a test ping event to the webhook URLLive/api/v2/webhooks/{id}/rotate-secretRotate webhook signing secretLiveOpenAPI
Import the machine-readable spec into Postman, Swagger UI, or your API client generator.
https://your-domain.com/api/openapiInteractive API explorer
Browse and try endpoints against your deployment. Use an API key from Settings → API keys with the Authorize button.
Webhooks
Configure outbound webhooks from the dashboard at /webhooks.
Events: envelope.sent, envelope.completed, envelope.voided, signer.signed, and more.
Manage webhooks via the v2 API (PATCH/DELETE/test) or from /webhooks in the dashboard.
Zapier, Make, and n8n: see automation recipes (webhook-based, no native app required).
Authentication
Logged-in dashboard requests use your session. Server-to-server calls use API_KEY in your environment as a Bearer token.
JavaScript example
const res = await fetch("https://your-domain.com/api/v2/envelopes", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
title: "Service Agreement",
signers: [{ name: "Jane Doe", email: "jane@example.com", role: "signer" }],
}),
});
const envelope = await res.json();
// Upload PDF (repeat for additional documents via POST .../documents)
const fd = new FormData();
fd.append("file", pdfFile);
await fetch(`${base}/api/envelopes/${envelope.id}/upload`, {
method: "POST",
headers: { Authorization: "Bearer YOUR_API_KEY" },
body: fd,
});
await fetch(`${base}/api/envelopes/${envelope.id}/send`, {
method: "POST",
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
// Or schedule for later:
await fetch(`${base}/api/envelopes/${envelope.id}/send`, {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ scheduledSendAt: "2026-07-10T09:00:00.000Z" }),
});Multi-document envelopes: upload the first PDF to /upload, then additional PDFs to /documents. Download merged PDF or ZIP via GET /api/envelopes/{id}/download?format=zip.
TypeScript SDK
Install the official client from the repo at packages/bindsignature-sdk or copy it into your project.
import { BindingSignatureClient } from "@bindsignature/sdk";
const client = new BindingSignatureClient({
baseUrl: "https://your-domain.com",
apiKey: process.env.BINDING_SIGNATURE_API_KEY!,
});
const envelope = await client.createEnvelope({
title: "NDA",
signers: [{ name: "Jane Doe", email: "jane@example.com" }],
});
await client.uploadDocument(envelope.id, pdfBlob, "nda.pdf");
await client.sendEnvelope(envelope.id);
const signed = await client.downloadDocument(envelope.id, { type: "signed" });