The SignMaster REST API
The SignMaster REST API lets your own software do what your team does in the app: send contracts from templates or PDFs, follow them to completion and read back what every signer filled in. It's JSON over HTTPS with a Bearer API key, on the Crew and Company plans.
Updated November 5, 2026 · 3 min read
On this page
Get a key
- 1
Create the key
In SignMaster, open Settings › Developers, create an API key, name it after the system that will use it and tick only the scopes it needs. Copy the key when it appears: it starts with sm_live_ and is shown once.
- 2
Make a first call
Send the key as a Bearer token in the Authorization header to https://www.usesignmaster.app/api/v1. GET /me is a good first call: it returns your company, your plan, the key's scopes and its rate limit.
- 3
Keep it on the server
Store the key in your server's secrets, never in a browser or a mobile app. If it leaks, revoke it on the same screen and its requests fail straight away.
What you can do
| Endpoint | What it does | Scope |
|---|---|---|
| GET /templates, GET /templates/:id | List templates; read one's roles and labeled fields, which are the keys you can prefill. | templates:read |
| POST /envelopes | Create from a template with prefilled values, or from a PDF by URL or base64 with your own fields or text tags. Send now or keep a draft. | envelopes:write |
| GET /envelopes, GET /envelopes/:id | List with filters for status, template, bulk send and dates; read one with its signers. | envelopes:read |
| POST /envelopes/:id/send, /remind, /void; DELETE /envelopes/:id | Send a draft, remind waiting signers, void with a reason, delete a draft. | envelopes:write |
| GET /envelopes/:id/data, /events, /signed-pdf | What signers filled in, the audit trail, and a download link that lasts 10 minutes. | envelopes:read |
| GET /templates/:id/responses | Every answer to a template, one row per envelope. | envelopes:read |
| POST /bulk-sends, GET /bulk-sends/:id | Send a template to many people at once and follow each row. | bulk:write, envelopes:read |
| /contacts | List, add, update and delete contacts. | contacts:read, contacts:write |
| /webhooks | Create, update, test and delete webhook endpoints. | webhooks:manage |
| POST /envelopes/:id/embedded-sessions | A single-use link for signing inside your own site or app. | embedded:create |
Built for real integrations
- Pagination: lists return data and next_cursor. Pass the cursor back for the next page, with a limit of up to 100.
- Idempotency: send an Idempotency-Key header on any POST that creates or sends. A retry with the same key within 24 hours replays the first response instead of sending twice.
- Errors: each error carries a plain-English error message and a code such as not_found, invalid_request, forbidden_scope, plan_limit or rate_limited.
- Rate limits: each key has a per-minute allowance, and the X-RateLimit-Limit and X-RateLimit-Remaining headers on every response show where you stand.
- Same rules as the app: sending, reminding and voiding run the same code and permission checks as SignMaster itself, and each change is recorded on the envelope's audit trail.
Example: send from a template
Read the template first to see its role labels and field labels. Then POST to /envelopes with the template_id, a recipients array giving each person's role_label, name and email, and a prefill object keyed by field label, such as Contract price or Job address. Set send to false to create a draft someone checks before it goes. The response returns the envelope_id and lists which prefill keys were applied and which matched nothing.
Rather than polling for a signature, subscribe a webhook to envelope.completed. It arrives with every field value and a link to the signed PDF.
Full reference
GET /api/v1/openapi.json returns an OpenAPI 3.1 description of every endpoint, request body and response, with no key needed, so you can load it into your API client or generate typed code from it. The developer guide walks through embedded signing step by step.
Plans
The API comes with webhooks on Crew, at $49 a month, and Company, at $99 a month, with no extra charge for calls. Keys created before this release keep the scopes they were given; create a new key to use the new ones. Compare plans.
Questions? Answers.
Is there a sandbox or test mode?
Not yet. Every key is live. Create drafts with send set to false, and send real test envelopes to your own email addresses.
Can I send a PDF that isn't a template?
Yes. POST /envelopes accepts a document by URL or as base64, with your recipients and either fields placed as fractions of the page or text tags written into the PDF.
How do I know when a contract is signed?
Subscribe a webhook to envelope.completed. Polling GET /envelopes/:id works too, within your rate limit.
Can the API see envelopes from other workspaces?
No. A key belongs to one company. Another company's envelope returns not found, exactly like an id that doesn't exist.
