Product · Signature Collection

API for collecting signatures

Upload any PDF, declare who signs, call /send — signers receive a link, verify identity, and sign on any device. You receive a PKCS#7-sealed document via webhook. Works with any stack, any document type.

Start collecting signatures free →
Contracts and agreements
NDAs, service agreements, employment contracts — two-party or multi-party.
Onboarding workflows
Customer or employee onboarding with multiple forms sent in sequence.
Consent collection
Privacy consent, medical consent, research consent — with OTP identity verification.
Financial documents
Loan agreements, investment docs, and account opening forms.
HR and people ops
Offer letters, policy acknowledgments, and contractor agreements.
Custom workflows
Any document that needs a signature — your stack, your trigger, your webhook.

How signature collection works

1
Your app creates the document

Generate or upload any PDF — from your existing document generation stack or a static template.

2
Declare who signs and where

Pass signer details (name, email) and field coordinates (page, x, y, w, h) in the API request.

3
Call /send

One API call dispatches personalized signing links to each signer. GetSigned handles email delivery.

4
Signers complete on any device

Signers click their link, verify identity with OTP, and sign in any browser — no app, no account.

5
Your app receives the signed document

The envelope.completed webhook fires with the sealed PDF ready to download. No polling.

Collect signatures in 2 API calls

Create envelope + send — curl
# Create the envelope: upload PDF, declare signers, place fields
ENV=$(curl -s -X POST https://api.getsigned.app/v1/envelopes \
  -H "Authorization: Bearer $TOKEN" \
  -F "document=@contract.pdf;type=application/pdf" \
  -F 'signers=[
        {"name":"Alice","email":"alice@co.io","routing_order":1},
        {"name":"Bob",  "email":"bob@co.io",  "routing_order":2}
      ]' \
  -F 'fields=[
        {"type":"signature","signer_index":0,"page":1,"x":100,"y":600},
        {"type":"signature","signer_index":1,"page":1,"x":350,"y":600}
      ]' \
  | jq -r .id)

# Send — Alice gets her link first; Bob gets his after Alice completes
curl -X POST https://api.getsigned.app/v1/envelopes/$ENV/send \
  -H "Authorization: Bearer $TOKEN"

# Your webhook at /webhooks receives:
# { "event": "envelope.completed", "envelopeId": "env_..." }
# Then: GET /v1/envelopes/$ENV/document → sealed PDF

Frequently asked questions

What is an API for collecting signatures?

An API for collecting signatures is a web service that handles the entire signing workflow on your behalf: generating tokenized signing links, notifying signers by email, verifying signer identity, capturing the signed document, applying a cryptographic seal, and notifying your application when signing is complete. GetSigned exposes this as a standard REST API — you upload a PDF, declare signers and field positions, and call /send. The rest is handled by the service.

What types of signatures can be collected?

GetSigned collects electronic signatures — legally valid under ESIGN, UETA, and PIPEDA for most commercial documents. Signers can draw a signature, type their name, or upload a signature image. The signed field is flattened into the PDF. The completed document is sealed with a CA-issued PKCS#7 digital signature that proves document integrity. Per-signer PKI certificates (qualified electronic signatures for eIDAS Level 3) are not supported — they are not required for US and Canada commercial e-signatures.

Can I collect signatures from multiple people on the same document?

Yes. Declare multiple signers in the API request and assign each signature field to a specific signer. Use routing_order to control the sequence: set the same value for parallel signers (all sign simultaneously), or increment the value for sequential signing (each person gets their link only after the previous completes). Any combination of sequential and parallel routing is supported in a single envelope.

How do signers receive their signing link?

GetSigned sends each signer a personalized email with their unique, tokenized signing link when you call POST /v1/envelopes/{id}/send. The link is scoped to exactly one envelope and one signer, expires after a configurable TTL, and is single-use. Signers verify identity with an OTP before accessing the document. If you prefer to handle the notification yourself (in-app notification, SMS, custom email), you can retrieve the signing URL from the API and send it through your own channel.

How does my application know when signing is complete?

Register a webhook URL via POST /v1/webhooks. GetSigned fires an envelope.completed event to your endpoint when all signers finish. The webhook body includes the envelope ID, completion timestamp, and document hash. Your application downloads the sealed PDF from GET /v1/envelopes/{id}/document and updates its records. GetSigned also fires events for partial completion (signer.signed), declines, and expirations — so your app can react to every state change.

Related: Document signing API · Multi-signer guide · Webhook guide · Integration guide

Start collecting signatures today

Free tier — 25 envelopes per month. Full API access, no credit card.

Get free API keys →