> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thesignproof.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Create your first signed, sealed PDF in under 5 minutes.

## Before you start

You need API credentials. [Sign up for the console](https://console.thesignproof.com/signup),
create an application, and copy your `client_id` and `client_secret`.

***

## Step 1 — Get a token

Exchange your credentials for a bearer token. Tokens expire after 1 hour.

```bash theme={null}
curl -s -X POST https://api.thesignproof.com/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET"
```

```json Response theme={null}
{
  "access_token": "eyJhbGci...",
  "token_type": "Bearer",
  "expires_in": 3600
}
```

Set the token in your shell for the rest of this guide:

```bash theme={null}
TOKEN="eyJhbGci..."
```

***

## Step 2 — Create an envelope

Upload a PDF and define one signer with a signature field.

```bash theme={null}
curl -s -X POST https://api.thesignproof.com/v1/envelopes \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "tenantId": "acme-corp",
    "subject": "Service Agreement",
    "createdBy": "your-user-id",
    "signers": [
      {
        "name": "Jane Smith",
        "email": "jane@example.com",
        "routingOrder": 1,
        "authMethod": "email_otp"
      }
    ]
  }'
```

```json Response theme={null}
{
  "id": "env_01HX...",
  "status": "draft",
  "tenantId": "acme-corp",
  "subject": "Service Agreement"
}
```

Save the envelope ID:

```bash theme={null}
ENVELOPE_ID="env_01HX..."
```

***

## Step 3 — Upload the PDF

```bash theme={null}
curl -s -X POST https://api.thesignproof.com/v1/envelopes/$ENVELOPE_ID/document \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @agreement.pdf
```

```json Response theme={null}
{
  "documentId": "doc_01HX...",
  "sha256": "a3f2...",
  "pageCount": 3
}
```

***

## Step 4 — Place a signature field

Tell SignProof where on the page Jane should sign. Coordinates are in PDF points (1/72 inch),
origin at the bottom-left of the page.

```bash theme={null}
curl -s -X POST https://api.thesignproof.com/v1/envelopes/$ENVELOPE_ID/fields \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "documentId": "doc_01HX...",
    "signerId": "sgn_01HX...",
    "type": "signature",
    "page": 1,
    "x": 72,
    "y": 72,
    "w": 200,
    "h": 60,
    "required": true
  }'
```

<Tip>
  Use the drag-drop field placer in the console (`/envelopes/{id}/place`) to position fields
  visually without calculating coordinates manually.
</Tip>

***

## Step 5 — Send

Dispatch signing invites. Jane receives an email with her tokenized signing link.

```bash theme={null}
curl -s -X POST https://api.thesignproof.com/v1/envelopes/$ENVELOPE_ID/send \
  -H "Authorization: Bearer $TOKEN"
```

```json Response theme={null}
{
  "status": "sent",
  "signers": [
    {
      "id": "sgn_01HX...",
      "email": "jane@example.com",
      "signingUrl": "https://sign.thesignproof.com/sign/eyJ..."
    }
  ]
}
```

***

## Step 6 — Receive the webhook

When Jane completes signing, SignProof sends a `POST` to your configured webhook endpoint:

```json theme={null}
{
  "event": "envelope.completed",
  "envelopeId": "env_01HX...",
  "completedAt": "2026-06-19T14:32:00Z",
  "documentUrl": "https://api.thesignproof.com/v1/envelopes/env_01HX.../document"
}
```

Download the sealed PDF from `documentUrl` using your bearer token and store it in your system.

***

## What you get

The downloaded PDF:

* Contains all signed fields flattened into the document
* Has a PKCS#7 digital signature covering every byte (verifiable in Adobe Acrobat)
* Has an audit certificate page at the end listing every event with timestamps and IPs
* Is hash-chained in your audit log — tamper-detectable even with direct database access

***

## Next steps

<CardGroup cols={2}>
  <Card title="Configure webhooks" icon="webhook" href="/guides/webhooks">
    Set up your endpoint and verify signatures
  </Card>

  <Card title="Multi-signer routing" icon="users" href="/guides/envelopes">
    Route documents through multiple signers in sequence
  </Card>
</CardGroup>
