SignFox

SignFox API

A simple REST API for e-signatures: upload a PDF as a template, place fields, send envelopes, track signing, and download the completed, cryptographically signed document. The full machine-readable spec is at /openapi.json (OpenAPI 3.0).

Base URL and authentication

All endpoints live under https://signfox.co/api/v1. Create an API key in Settings → API keys and pass it as a Bearer token on every request:

Authorization: Bearer sfk_xxxxxxxxxxxx_...

Keys are scoped to your organization and shown once at creation. Requests are rate-limited to 120 per minute per key; exceeding it returns 429.

Idempotency

POST /templates and POST /envelopes accept an optional Idempotency-Key header (max 200 characters). The first successful response for a key is stored and replayed verbatim on retries — with an Idempotency-Replayed: true response header — so a timed-out request can be retried without creating a duplicate. Failed requests are not cached and may safely be retried with the same key.

Quickstart

Create a template, activate it, and send it for signature:

# 1. Create a template from a PDF
curl -s https://signfox.co/api/v1/templates \
  -H "Authorization: Bearer $SIGNFOX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: tmpl-nda-001" \
  -d '{"name": "NDA", "pdfBase64": "'"$(base64 < nda.pdf)"'"}'
# => {"id": 12, "name": "NDA", "status": "DRAFT", "pageCount": 3}

# 2. Place a signature field (fractions of the page, 0..1)
curl -s -X PUT https://signfox.co/api/v1/templates/12/fields \
  -H "Authorization: Bearer $SIGNFOX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fields": [{"recipientRole": "signer1", "type": "SIGNATURE",
       "page": 1, "x": 0.1, "y": 0.75, "width": 0.25, "height": 0.08}]}'

# 3. Activate it
curl -s -X POST https://signfox.co/api/v1/templates/12/activate \
  -H "Authorization: Bearer $SIGNFOX_API_KEY"

# 4. Send an envelope
curl -s https://signfox.co/api/v1/envelopes \
  -H "Authorization: Bearer $SIGNFOX_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: env-nda-jo-001" \
  -d '{"templateId": 12, "subject": "Please sign the NDA",
       "recipients": [{"name": "Jo", "email": "jo@example.com",
                       "role": "signer1", "order": 1}]}'
# => {"id": 34, "status": "SENT", "recipients": [...]}

Recipients sign in ascending order; recipients sharing the same order form a parallel group and may sign in any sequence. Set "kind": "CC" on a recipient to send them the completed document without asking for a signature.

Endpoints

MethodPathDescription
GET/envelopesList envelopes (pagination + q/status/from/to filters)
POST/envelopesCreate and optionally send an envelope (idempotent)
GET/envelopes/{id}Get an envelope with recipient statuses
PATCH/envelopes/{id}Update subject/message while DRAFT or SENT
POST/envelopes/{id}/voidVoid an envelope
GET/envelopes/{id}/signed-pdfDownload the completed, signed PDF
GET/templatesList templates (pagination)
POST/templatesCreate a template from a base64 PDF (idempotent)
GET/templates/{id}Get a template with its fields
PUT/templates/{id}/fieldsReplace the template's field set
POST/templates/{id}/activateActivate a draft template
DELETE/templates/{id}/activateArchive a template

Errors use a consistent shape: {"error": "message", "ref": "a1b2c3d4"} — include the ref when contacting support. See the OpenAPI spec for full request and response schemas.

← Back to SignFox · OpenAPI spec · hello@signfox.co