Docseal

Developer documentation

Docseal API and Gateway quickstart.

Create sealed records, verify received files, manage document lifecycle status and run hash-only workflows without sending document content to Docseal.

Issuer API keys are issued per pilot. Never expose them in browser code or public repositories.

Registry

Stores sealed records, receipts and events.

Verify

Compares the received file hash with the official sealed record.

POST /api/verify

Issuer API

Allows an authorized issuer to create a Seal ID.

POST /api/issuer/seals

Trust

Manages valid, revoked, replaced and expired states.

PATCH /api/issuer/seals/[sealId]/status

Gateway Local

Computes the hash locally on the issuer side.

node scripts/docseal-gateway-local.cjs

Create a seal

API_KEY="<issuer_api_key>"
HASH="$(sha256sum document.pdf | awk '{print $1}')"

curl -s -X POST https://docseal.app/api/issuer/seals \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "documentHash": "'$HASH'",
    "documentTypeSlug": "bank-statement",
    "documentTypeName": "Bank statement",
    "referenceLabel": "Statement May 2026",
    "visibilityPolicy": "hash_only"
  }'

Verify a hash

curl -s -X POST https://docseal.app/api/verify \
  -H "Content-Type: application/json" \
  -d '{
    "sealId": "DSL-...",
    "submittedHash": "<sha256-hex>"
  }'

Hash-only Gateway

node scripts/docseal-gateway-local.cjs seal document.pdf \
  --type-slug bank-statement \
  --type-name "Bank statement" \
  --label "Statement May 2026" \
  --visibility hash_only \
  --api-key-file /path/to/private-api-key