Relaystation logo Relaystation

E-sign

Send a document for signature from an API call — no signing-platform account, no per-seat plan. Your agent posts a PDF and a recipient list, each signer gets a hosted signing link, and you pull the completed, signed PDF back through the same API. Built on the open-source Documenso signing engine; priced per envelope, not per month.

curl -X POST https://api.relaystation.ai/v1/esigndoc/envelopes \
  -H 'Authorization: Bearer rs_live_<key>' \
  -H 'Idempotency-Key: offer-letter-jane-20260611' \
  -H 'Content-Type: application/json' \
  -d '{
    "pdf": { "inline": "<base64 pdf>" },
    "title": "Offer letter — Jane Doe",
    "recipients": [ { "email": "jane@example.com", "name": "Jane Doe" } ],
    "autoPlaceSignature": true
  }'

The response carries the envelopeId, the envelope status, and — once sent — a signingUrl per recipient to hand to the human signer.

The envelope lifecycle

An envelope moves through eight states: DRAFT → SENT → VIEWED → SIGNED → COMPLETED, with REJECTED, EXPIRED, and CANCELLED as terminal exits. Create a draft for free, add or adjust signature fields, then send; or create-and-send in one call with autoPlaceSignature or explicit fields. GET …/status re-polls the signing engine live (authoritative, self-healing); registered webhooks deliver envelope.sent / viewed / signed / completed / rejected / expired / cancelled as they happen.

Billing — charged only when it sends

One price: $0.10 per envelope sent (esign.envelope). Drafts are free; reads, status polls, cancels, resends, and the signed-document download are free. The charge lands at the moment an envelope is distributed — create-with-send, an explicit send of a draft, or a from-template instantiation with sendImmediately — and a sent envelope’s charge stands (the work — distribution to signers — is done). If a send fails before anything is distributed, the charge is reversed. Every billable call requires an Idempotency-Key; a same-key retry returns the cached result without re-charging.

The API

PDFs ride the shared input convention: { "inline": "<base64>" } up to 4 MB, or { "inputKey": "..." } from POST /v1/cputools/upload-url up to 50 MB. The signed document comes back the same way (inline when small, presigned URL when large).

RouteWhat it doesPrice
POST /v1/esigndoc/envelopesCreate an envelope from a PDF + recipients; sends immediately when fields/autoPlaceSignature are supplied, else stays DRAFT$0.10 when it sends; free as a draft
POST /v1/esigndoc/envelopes/{id}/sendDistribute a DRAFT (DRAFT→SENT)$0.10
POST /v1/esigndoc/envelopes/from-templateInstantiate from a stored template; optional sendImmediately$0.10 when it sends
GET /v1/esigndoc/envelopesList your envelopes (paginated, status filter)free
GET /v1/esigndoc/envelopes/{id}Fetch the cached envelopefree
GET /v1/esigndoc/envelopes/{id}/statusLive status from the signing engine (authoritative)free
GET /v1/esigndoc/envelopes/{id}/signed-documentThe signed (or original) PDF as the uniform output envelopefree
GET /v1/esigndoc/envelopes/{id}/downloadThe PDF as raw binaryfree
POST /v1/esigndoc/envelopes/{id}/resendChase recipients who haven’t signedfree
POST /v1/esigndoc/envelopes/{id}/fields · DELETE …/fields/{fid}Add / remove signature fields on a DRAFTfree
DELETE /v1/esigndoc/envelopes/{id}Cancel (any state → CANCELLED)free
POST · GET /v1/esigndoc/templates · GET · PUT · DELETE …/templates/{id}Manage reusable templatesfree

E-sign’s verification half lives in cputools: POST /v1/pdf/verify-signatures inspects any signed PDF’s digital signatures — structural verification + digest intactness, signer identity surfaced (certificate-chain trust is not evaluated — no CA store).

MCP tools

The same surface is callable over MCP at https://api.relaystation.ai/mcp: esigndoc_create, esigndoc_send, and esigndoc_get_signed_document are directly invocable; esigndoc_from_template, esigndoc_get, esigndoc_status, esigndoc_list, esigndoc_cancel, esigndoc_resend, and esigndoc_list_templates round out the roster. Same auth, same prices as the HTTP routes.

Agent-native by design

The originating side is fully programmatic — an agent with an API key (or an x402 wallet) can draft, field, send, poll, and file the signed PDF without a human in its own loop. The signing side is deliberately human: each recipient gets a hosted signing URL. A common pattern is an agent that prepares the envelope, hands the signingUrl to its human (or the counterparty’s), watches envelope.completed arrive on a webhook, and files the signed document — one balance, no signing-platform seat.

Next

Quickstart · Authentication · Webhooks · x402 wire format · API reference