# wesign.now API > wesign.now is a Swiss-made e-signature platform. Its v1 REST API sends a PDF, or a document made from a locked template, to one or more signers by email — optionally with a per-signer SMS code, for an advanced electronic signature (AES) — seals the signed PDF (PAdES) and time-stamps it (RFC 3161), and reports each step through HMAC-signed webhooks. The base URL is https://api.wesign.now/v1. Every call sends `Authorization: Bearer ` with a workspace API key: `wsk_live_…`, or `lsk_live_…` for keys minted before September 2026, which are accepted forever. `/v1` is the only version: additive changes ship without notice, and a change that can break a working call is announced at least 90 days ahead. Exceptions take effect at once and are still flagged `breaking`: refusing input that never had an effect, and fixes that make the API do what the docs said (https://www.wesign.now/docs/versioning). The OpenAPI document's `info.version` is its release date; every change is listed with a stable `id` in the machine-readable changelog. Notes for assistants: - The current OpenAPI spec is https://www.wesign.now/openapi.json (info.version 2026-10-22). Errors are JSON `{ error, code, meta? }`: branch on `code`, never on the message. - The docs are in English. Every page below is also in https://www.wesign.now/llms-full.txt as plain Markdown, generated from the same source when this deployment was built. - An API key and webhooks come with every plan, with a monthly cap on the documents created through the API (Free: 10 documents a month, the plan's own cap; Branded: 100 documents a month through the API; Enterprise: no cap). To get a key: (1) Sign up free. (2) Settings → Company → Developer settings → Turn on (on a personal account: Settings → Profile). (3) Settings → Developers → Create API key. (4) Call `GET /v1/me` with the key. It sends nothing and shows the key works. Template sends (instantiate, generate, confirm) and embedded signing need Enterprise. `GET /v1/me` reports what the key's workspace may use (`capabilities`) and its monthly SMS allowance. - Start here: `GET /v1/me` checks the key. Send a PDF with `POST /v1/signing-requests`, or fill a locked template: `GET /v1/templates/{id}` (its input contract) → `POST /v1/templates/{id}/instantiate` with `"validate_only": true` → the same body without it (https://www.wesign.now/docs/prepare-a-fill). Send an `Idempotency-Key` on both creates. - Languages: give `locale` per signer (`signers[].locale`; `recipients[].locale` on instantiate) to choose the language of that signer's email, SMS code and signing page. It is optional, and a call without any language is never refused. Without one, we use the request's `locale`, then the language this person signed in last time with the workspace, then the workspace language, then English, and the signing page follows the signer's browser language. A signer who has their own wesign account with a language set always gets that language; responses and webhooks show the language that was asked for (https://www.wesign.now/docs/signing-requests#language-per-signer). - There is no sandbox and no test key yet: every key is live, and every call creates real documents and sends real email and SMS. Test with `validate_only`, with `review: true` plus `POST /v1/documents/{id}/discard`, with `send_emails: false`, and with addresses you control. - Webhooks: register once with `POST /v1/hooks` (`"payload": "minimal"` for identifiers only; the `secret` is returned only in that response). Verify `X-WeSign-Signature`, deduplicate on `event_id`, do not rely on delivery order, and answer 2xx within 10 s (https://www.wesign.now/docs/webhooks). - There is no SDK: generate a client from the OpenAPI spec, or call the REST API directly. - MCP server: an AI agent connects to https://www.wesign.now/api/mcp (Streamable HTTP, `Authorization: Bearer ` on every request) and sends documents for signature, tracks them, reminds and withdraws through its tools, on the REST API's caps, rate limit and error codes. It never signs: every signer signs themselves (https://www.wesign.now/docs/mcp). - Questions the docs do not answer: support@wesign.now — what to include is in the Integrator FAQ (https://www.wesign.now/docs/integrator-faq). ## Overview - [API documentation](https://www.wesign.now/docs): Send a PDF or a filled template for signature over one REST API. The wesign.now API reference, guides, errors and support. ## Guides - [Quickstart](https://www.wesign.now/docs/quickstart): From zero to a signed PDF in under five minutes — terminal-only, no SDK. - [Template quickstart](https://www.wesign.now/docs/template-quickstart): From zero to a sealed PDF made from a template. A one-signer rich-text letter, or a two-signer PDF your system fills and two people sign in order. - [Prepare a fill in your app](https://www.wesign.now/docs/prepare-a-fill): Read a template's contract, ask your user for what it needs, dry-run, then send. Required fields, missing_optional and standard field names. - [Integrator FAQ](https://www.wesign.now/docs/integrator-faq): Short answers an integrating app, or its AI assistant, can quote — where to start, the sandbox, SDK and the MCP server, signing-link hosts, observers, AES by SMS, the SMS allowance, checking phone numbers, languages, signer names, parallel signing, field keys and dates, webhooks and key scopes, and how to reach us. - [MCP server](https://www.wesign.now/docs/mcp): Let an AI agent send documents for signature and track them — Claude Code, Claude Desktop, Cursor, VS Code or your own agent, with your API key. The agent sends and tracks; every signer signs themselves. ## Reference - [API overview](https://www.wesign.now/docs/api-overview): Base URL, authentication, versioning policy, and the full map of v1 resources. - [OpenAPI spec](https://www.wesign.now/docs/openapi): The machine-readable v1 contract — import it into Postman, Insomnia or a client generator. - [Authentication](https://www.wesign.now/docs/authentication): Bearer API keys — minting, rotating, revoking. The keys are workspace-scoped — no tenant header needed. - [Signing requests](https://www.wesign.now/docs/signing-requests): Create, read, correct the phone, remind, and withdraw — the endpoints around the signing_request resource. - [Placement modes](https://www.wesign.now/docs/placement-modes): Where signature fields land on the PDF — anchors, auto-append, explicit. Visualised, with when-to-use guidance. Manual placement is retired. - [Anchor placeholders](https://www.wesign.now/docs/anchor-placeholders): The [[ls:KIND:ROLE]] marker syntax used by placement="anchors". - [SMS verification](https://www.wesign.now/docs/sms-verification): The SMS second factor end to end — the fields, the two gate modes, what the invitation and the page show before the code, the signer's side, the monthly allowance, and the events you receive. - [Observers](https://www.wesign.now/docs/observers): CC-style spectators on a signing request — notified when it goes out and when every signer has signed. They never sign. - [Documents](https://www.wesign.now/docs/documents): Holistic doc + signers, the signed PDF, the audit-trail PDF, and how to retrieve both after document.completed. - [Embedded signing](https://www.wesign.now/docs/embedded): Mint a short-lived, single-signer session and render the signing view inside your own page — iframe or mobile webview, your branding, postMessage events, no API key in the browser. - [Fields & placeholders](https://www.wesign.now/docs/fields-placeholders): The two ways content gets filled — positioned fields and inline merge placeholders — who fills each value, line-item collections and standard field names. - [Templates](https://www.wesign.now/docs/templates): List and read templates, instantiate a locked one with field_values, dry-run, review before sending, generate without a signature. - [Webhooks](https://www.wesign.now/docs/webhooks): Real-time signer events delivered to your URL with HMAC-SHA256 signatures, full or minimal payloads, exponential-backoff retries and a delivery log with redelivery. - [Errors](https://www.wesign.now/docs/errors): Stable error codes mapped to HTTP statuses. Pin your error handling to the code, not the human-readable message. ## Concepts - [Idempotency](https://www.wesign.now/docs/idempotency): Safely retry network blips without double-sending. Stripe-style Idempotency-Key with a pending lock for concurrent retries. - [Rate limits](https://www.wesign.now/docs/rate-limits): 60 requests per minute per API key, counted on a shared counter. RateLimit-* headers on every successful response and every per-key 429, Retry-After on every 429. - [Security](https://www.wesign.now/docs/security): How wesign.now protects documents at rest, in transit, and over their lifetime — with the trade-offs called out. - [How verification works](https://www.wesign.now/docs/verification): What /verify actually does when you drop a PDF — hash lookup, PAdES validation, eIDAS QES detection, the lot. - [Versioning](https://www.wesign.now/docs/versioning): What may change inside /v1 and how you hear about it — notice periods, deprecation signals, dated spec snapshots and the machine-readable changelog. ## Help - [Recipes](https://www.wesign.now/docs/recipes): End-to-end integration patterns — Portant, a two-signer template, invitations from your own email provider (Resend, Postmark, SendGrid, Amazon SES), Zapier, agent-generated PDFs, CRM sync. - [Support](https://www.wesign.now/docs/support): Response times, contact channels, status, common gotchas, security disclosure. - [Changelog](https://www.wesign.now/docs/changelog): Public API changes. Reverse-chronological. Breaking changes flagged. ## Machine-readable - [OpenAPI spec, current](https://www.wesign.now/openapi.json): OpenAPI 3.1, info.version 2026-10-22. Every /v1 path, request and response schema, error code per status and webhook event. - [OpenAPI spec, frozen 2026-10-22](https://www.wesign.now/openapi/2026-10-22.json): the spec of the 2026-10-22 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-21](https://www.wesign.now/openapi/2026-10-21.json): the spec of the 2026-10-21 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-20](https://www.wesign.now/openapi/2026-10-20.json): the spec of the 2026-10-20 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-19](https://www.wesign.now/openapi/2026-10-19.json): the spec of the 2026-10-19 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-17](https://www.wesign.now/openapi/2026-10-17.json): the spec of the 2026-10-17 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-16](https://www.wesign.now/openapi/2026-10-16.json): the spec of the 2026-10-16 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-15](https://www.wesign.now/openapi/2026-10-15.json): the spec of the 2026-10-15 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-14](https://www.wesign.now/openapi/2026-10-14.json): the spec of the 2026-10-14 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-13](https://www.wesign.now/openapi/2026-10-13.json): the spec of the 2026-10-13 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-12](https://www.wesign.now/openapi/2026-10-12.json): the spec of the 2026-10-12 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-11](https://www.wesign.now/openapi/2026-10-11.json): the spec of the 2026-10-11 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-10](https://www.wesign.now/openapi/2026-10-10.json): the spec of the 2026-10-10 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-09](https://www.wesign.now/openapi/2026-10-09.json): the spec of the 2026-10-09 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-08](https://www.wesign.now/openapi/2026-10-08.json): the spec of the 2026-10-08 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-07](https://www.wesign.now/openapi/2026-10-07.json): the spec of the 2026-10-07 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-06](https://www.wesign.now/openapi/2026-10-06.json): the spec of the 2026-10-06 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-05](https://www.wesign.now/openapi/2026-10-05.json): the spec of the 2026-10-05 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-04](https://www.wesign.now/openapi/2026-10-04.json): the spec of the 2026-10-04 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-03](https://www.wesign.now/openapi/2026-10-03.json): the spec of the 2026-10-03 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-02](https://www.wesign.now/openapi/2026-10-02.json): the spec of the 2026-10-02 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-10-01](https://www.wesign.now/openapi/2026-10-01.json): the spec of the 2026-10-01 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-09-25](https://www.wesign.now/openapi/2026-09-25.json): the spec of the 2026-09-25 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [OpenAPI spec, frozen 2026-09-24](https://www.wesign.now/openapi/2026-09-24.json): the spec of the 2026-09-24 release. Each release's spec is kept at `/openapi/.json`, so two releases can be diffed. - [API changelog, JSON](https://www.wesign.now/api-changelog.json): every visible API change, newest first — a stable id, type, breaking flag, effective date and the action an integrator must take. - [All docs in one file](https://www.wesign.now/llms-full.txt): every page listed above as plain Markdown, in this order.