Get started
SignEnvoy developer docs
The REST API for sending, tracking, and downloading sealed signature
requests. API version 1.7.0-m9.
Base URL and authentication
All endpoints live under https://app-staging.signenvoy.com/v1. Authenticate resource
requests with an API key in the Authorization header:
Authorization: Bearer senv_live_...
Keys come in two modes. senv_live_ keys send real, legally
binding envelopes, and each one that completes is billed.
senv_test_ keys make watermarked, non-binding envelopes that
are never counted or billed. Every workspace starts with a test key, and
you can copy a test key again from Settings, API keys whenever you need
it. A live key is shown once, when it is created. Create and revoke keys
there, or with the /v1/keys endpoints. Every workspace has API
access; live keys work once the workspace has gone live.
Errors
API errors returned by the gateway are application/problem+json documents (RFC
9457) with a stable type of the form
/problems/<slug> and a docs_url member that
links the page for that slug. Switch on type, never on
title or detail, which are human-readable and may
change. The error reference lists every slug.
A request malformed enough that our network edge refuses it before it
reaches the API, such as a path containing an encoded NUL
(%00), gets a plain 400 with an HTML body
instead. Check that Content-Type is
application/problem+json before you parse an error body, and
treat any other error as an HTTP status with no type:
if (!res.ok) {
const type = res.headers.get("content-type") ?? "";
const problem = type.startsWith("application/problem+json")
? await res.json()
: null;
throw new Error(problem?.type ?? `HTTP ${res.status}`);
}
Response headers and retries
Rate headers appear after authentication and entitlement checks pass. The usage header appears on responses from resource handlers; early refusals and idempotent replays omit it. Health, OpenAPI, and device-flow responses omit these headers, except device rate-limit refusals carry rate headers. Proxy failures and interrupted streams may not have a problem body.
X-SignEnvoy-Envelopes-This-Period |
Live envelopes completed this calendar month (UTC), the number the bill is priced from. It counts up and is never a limit. An envelope counts when everyone has signed, not when it is sent, so one you have sent is not in it until it completes. Test envelopes are never counted. |
|---|---|
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset |
Fair-use rate limit state. A 429 carries Retry-After. |
X-SignEnvoy-Warning |
Present while a subscription is past due: the request succeeded, but billing needs attention. |
Idempotency-Key (request) |
Send one on authenticated resource POST requests to make retries safe for 24 hours. Device-flow requests are excluded. A replay returns the stored response with Idempotency-Replayed: true. |
Where to go
- Quickstart: seven curl commands from a key to a sealed PDF.
- API reference: every operation and schema, rendered from the OpenAPI document.
- Webhook events and verifying signatures.
- Event stream: tail events live over SSE while you develop a handler.
- Device-flow sign-in: how a terminal obtains an API key a person approves.
- Templates: roles and fields placed once, prefills by field name, versions, and templates as code.
- Folders and search: organize envelopes without touching them, and find them by title, recipient, or template.
- Recipient authentication: the signing link alone, or the link plus a one-time code; what the certificate records.
- Bulk send: one template, many rows, validated whole and tracked per row.
- Signing links: get each recipient's ceremony URL, choose who delivers it, and redirect to the signing page from your own app.
- Your account: reset a password, change your address, recover a workspace, transfer ownership, export, and delete.
- Embedding the signing page: run the ceremony inside your own web or mobile app from a single-use embed session, and react to its events.
- The CLI: install
senvand every command it offers. - Error reference: every problem type, with what to do about each.
The specification
The API is described by an OpenAPI 3.1 document served at
https://app-staging.signenvoy.com/v1/openapi.json and mirrored at
/openapi.json. It is the contract:
the official clients are generated from it, and its operation set is pinned
by a test in the app repository so it cannot drift.