SwiftSign in 60 seconds.
SwiftSign ships as an MCP server and a REST API. Install the MCP once, then describe what to sign in plain English — Claude, Cursor, or any MCP-aware agent will handle the rest.
Install the MCP server
From any terminal with Node 18+ and Claude Code:
claude mcp add swiftsign -- npx -y swiftsign-mcpOr add it to .mcp.json directly:
{
"mcpServers": {
"swiftsign": {
"command": "npx",
"args": ["-y", "swiftsign-mcp"],
"env": { "SWIFTSIGN_API_KEY": "ss_live_…" }
}
}
}Send your first envelope
Once the MCP is connected, prompt the agent naturally:
> send the NDA at ~/contracts/mutual-nda.pdf to steve@acme.com for signatureSwiftSign reads the PDF, finds signature anchors, builds the envelope, and sends it. You'll get a webhook back when Steve signs.
MCP tools
| Tool | Purpose |
|---|---|
swiftsign_send_envelope | Send a document for signature |
swiftsign_status | Check status of any envelope |
swiftsign_cancel | Void an in-flight envelope |
swiftsign_list | List recent envelopes, filtered |
swiftsign_download | Fetch sealed PDF + certificate |
toolswiftsign_send_envelope
Primary tool. Accepts either explicit coordinates or anchor-based placement.
{
"document": "~/contracts/mutual-nda.pdf",
"recipients": [
{ "email": "steve@acme.com", "name": "Steve Park", "role": "signer" }
],
"fields": [
{ "type": "signature", "anchor": "Party B — Signature", "offset": { "y": -4 } },
{ "type": "date", "anchor": "Date:", "near": "prev" }
],
"subject": "Mutual NDA for countersignature",
"expires_in_days": 14
}REST API
All MCP tools are thin wrappers around the REST API. If you want to integrate from a non-agent environment — a cron job, a CI workflow, your own backend — hit the API directly.
Authentication
Bearer token in the Authorization header. Get yours from the dashboard.
curl https://api.swiftsign.dev/v1/envelopes \
-H "Authorization: Bearer ss_live_abc123..."Create an envelope
POST /v1/envelopes
Authorization: Bearer ss_live_…
Content-Type: application/json
{
"document_url": "https://…/mutual-nda.pdf",
"recipients": [{ "email": "steve@acme.com" }],
"anchor_tabs": [
{ "anchor": "_________", "type": "signature" }
]
}Response
{
"id": "env_3f8a9c21",
"status": "sent",
"recipients": [{ "email": "steve@acme.com", "status": "pending" }],
"created_at": "2026-03-14T16:02:11Z",
"expires_at": "2026-03-28T16:02:11Z"
}Webhooks
Register a URL once; receive signed events for the lifetime of every envelope.
| Event | When |
|---|---|
envelope.sent | Delivered to recipient's inbox |
envelope.viewed | Recipient opened the document |
envelope.signed | Recipient applied their signature |
envelope.completed | All recipients signed; sealed PDF ready |
envelope.declined | Recipient declined |
envelope.expired | Not signed before expiry |
Compliance
SwiftSign-sealed PDFs are compliant with the US ESIGN Act (2000) and UETA, and with Canada's PIPEDA. Each completed envelope produces a Certificate of Completion that records, per signer:
- SHA-256 of the original and sealed document
- UTC timestamp recorded in the audit trail
- IP address, user agent, and approximate location (country / city from request headers) of the signing session
- Signer name, email, and explicit ESIGN/UETA consent capture
SwiftSign does not currently provide RFC 3161 cryptographic timestamps, qualified eIDAS signatures, HIPAA BAAs, or a SOC 2 report — those are on the roadmap. If your use case requires them, email hello@swiftsign.ca.
SwiftSign is in private beta — request access to get an API key.
Request access