SafeSign API

Embed e‑signature
into your application.

SafeSign's integration API lets your app fill any document template with your own data, confirm it in your own UI, and send it for signature — customers sign on SafeSign, your users never leave your product.

See how it works Request an API key

What you can do

One API, any template. You bring the data; SafeSign handles the documents, signing, and audit trail.

Fill any template

Send values by field name to any template — no per‑template code. New templates work automatically.

Confirm before sending

Create pre‑filled drafts and render them in your UI so a user can review every document before it goes out.

Batch documents

Prepare a whole packet (e.g. 5 documents) from a single call and send them together.

Your UI, start to finish

Your team stays in your app. Only the signer visits SafeSign to sign.

Legally binding

ESIGN/UETA‑compliant signatures with a tamper‑evident audit trail and certificate of completion.

Completion webhooks

Get notified when a document is signed so your app can update status automatically.

How it works

Discover → fill → preview → send.

1
Discover the mappable fields

GET /send/templates/{id}/fields tells your app exactly which field names to supply (the prefillable ones). Do this once per template.

2
Create pre‑filled drafts

POST /send/batch with your data + the signer. SafeSign fills the template(s) and returns drafts — no email is sent yet.

3
Preview & confirm in your UI

Show the filled document(s) to your user via GET /send/preview/{id} (a rendered PDF) — a safe preview with nothing sent. They review and approve.

4
Send for signature

POST /send/confirm dispatches the signing request to the customer. They sign on SafeSign; you receive a completion webhook.

API reference

Base URL https://safesign.work/send. Authenticate every request with a bearer key.

Authorization: Bearer <YOUR_API_KEY>
POST/send/batch

Fill one or more templates with your data and create drafts (no email sent). Returns a submission_id and preview_url per document, plus any unmapped_data_keys.

curl -X POST https://safesign.work/send/batch \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" -d '{
    "sender_name": "Jane Rep",
    "signers": { "Customer": { "name": "Sam Homeowner", "email": "sam@example.com" } },
    "documents": [
      { "template": "Install Agreement",
        "data": { "totalSystemSize": "14.2 kW", "StreetAddress": "456 Solar Rd" } }
    ]
  }'
GET/send/preview/{submission_id}

Preview a document before sending. Returns the filled document as a PDF. Fetch it right after /send/batch to render a review screen — the signer is NOT emailed until you call /send/confirm, so this is a safe, no‑send preview.

POST/send/confirm

Dispatch the signing request(s) to the signer(s), after the user confirms. Body: { "submission_ids": [6,7,8] }.

GET/send/templates/{id}/fields

Discover which fields to map. Returns every field on a template. The ones with "prefillable": true are exactly the values your app supplies in the data object of /send/batch (keyed by name). Fields owned by a signer role are filled by that signer at signing time, not by your app.

GET https://safesign.work/send/templates/42/fields

{
  "template": "Install Agreement",
  "roles": ["Brighthouse Representative", "Customer", "HIS Signer"],
  "fields": [
    { "name": "totalSystemSize", "type": "text",   "required": true,  "prefillable": true,  "role": "Brighthouse Representative" },
    { "name": "batteryCost",     "type": "number", "required": false, "prefillable": true,  "role": "Brighthouse Representative" },
    { "name": "Customer Signature","type":"signature","required": true,"prefillable": false, "role": "Customer" }
  ]
}
// -> your app maps the two prefillable fields into /send/batch "data"; "Customer Signature" is signed, not mapped.
GET/send/templates

List all available templates: [{ id, name, roles }] — use the id with the fields endpoint above.

Typical integration order: 1) GET /send/templates/{id}/fields to learn the mappable keys → 2) POST /send/batch with your data → 3) GET /send/preview/{id} to confirm → 4) POST /send/confirm to send. Your API key authorizes a single application; SafeSign's signing credentials remain server‑side and are never exposed to client apps.

Get access

Integration API keys are issued per application. Contact the SafeSign administrator to request a key and your completion‑webhook setup.

Request an API key Go to SafeSign