For developers and their agents
The dashboard is just another API client.
Every customer, invoice, envelope, template and webhook is a resource on /v1. The same actions are MCP tools, so an AI agent can list your templates, create an envelope and send it, through OAuth 2.1 consent and with nothing destructive exposed.
REST
Four lines to the first signature.
Customers, invoices, envelopes, templates and webhooks are resources on /v1. The OpenAPI spec is published, every write is idempotent, and the dashboard uses the same endpoints you do.
- POST /v1/invoices — create and send an invoice
- POST /v1/envelopes — documents, signers, fields, one call
- POST /v1/envelopes/{id}/signing_sessions — embedded signing
- GET /v1/envelopes/{id}/audit_trail — hash-chained history
const envelope = await anysign.envelopes.create({
title: "Consulting agreement",
signers: [{ name: "Ada Chen", email: "[email protected]" }],
documents: [{ name: "agreement.pdf", content_base64: pdf }],
fields: [{
document_id: "0", signer_id: "0",
kind: "signature", page: 4,
x: 0.12, y: 0.68,
}],
});
await anysign.envelopes.send(envelope.id);
// → Ada gets a tokenized signing link. You get a webhook.MCP
Let the agent send it.
AnySign runs a streamable-HTTP MCP server. A user authorizes a host once through OAuth 2.1 with PKCE; after that Claude, ChatGPT or Cursor can work the envelopes inside the scopes they were granted. The tool set is deliberately read-and-send only.
- list_envelopes — filter by status, tag or free text
- get_envelope — who has signed, who is pending, who declined
- list_templates — the documents and fields prepared in the dashboard
- create_envelope — a draft, usually from a template
- send_envelope — signers are emailed their links
# Claude Desktop, Cursor, or any MCP host
{
"mcpServers": {
"anysign": { "url": "https://api.anysignhq.com/mcp" }
}
}
# The host opens AnySign's consent screen once (OAuth 2.1, PKCE).
# Then:
> Which consulting agreements are still waiting on a signer?
→ list_envelopes { "status": "sent", "query": "consulting" }
← { "envelopes": [ { "id": "env_8f14e2",
"title": "Consulting agreement",
"signer_count": 2, "status": "sent" } ] }WEBHOOKS
Know the second the deal closes.
Every delivery carries an Anysign-Signature header: a timestamp and an HMAC over the body, computed with your endpoint secret. Retries are idempotent, so a replayed event never double-processes.
- envelope.viewed / envelope.completed / envelope.declined
- invoice.sent / invoice.viewed / invoice.paid
- Anysign-Signature: t=<unix>,v1=<hmac-sha256>
POST https://yourapp.com/hooks/anysign
Anysign-Signature: t=1760358000,v1=5f8a…
{
"type": "envelope.completed",
"data": {
"id": "env_8f14e2",
"title": "Consulting agreement",
"status": "completed",
"documents": [{
"id": "doc_a41c9d",
"executed_sha256": "9b74c9897bac…"
}]
}
}BORING WHERE IT COUNTS
Predictable under retry, replay and review.
The API is built for the things that go wrong in production: a client that retries, a webhook that arrives twice, an auditor who asks what happened. Every one of those has a plain answer.
- Idempotent writes: the same request twice never creates two envelopes
- Anysign-Signature on every webhook: timestamp plus HMAC over the body
- OAuth 2.1 with PKCE for third-party apps and MCP hosts, scoped per grant
- OpenAPI spec published at /openapi.yaml for typed clients in any language
Developer questions.
Which hosts can talk to the MCP server?
Any MCP client that speaks streamable HTTP and OAuth 2.1 with PKCE: Claude, ChatGPT, Cursor and the like. The user authorizes once on the consent screen; the agent then acts inside the scopes granted.
What can an agent actually do?
List and fetch envelopes, list templates, create a draft envelope (usually from a template) and send it. Voiding, deleting and payment actions are deliberately not exposed as tools.
How do I know a webhook is really from AnySign?
Every delivery carries an Anysign-Signature header with a timestamp and an HMAC over the body. Verify it with your endpoint secret; retries are idempotent so a replay never double-processes.
Is there an SDK?
The OpenAPI spec is published at /openapi.yaml, so you can generate a typed client in any language, and npm i @anysign/sdk gives you a maintained TypeScript client.
Does the API cost extra?
The API and MCP server are included on every plan and draw on the same monthly quota as the dashboard. Everything else is on the pricing page.