Before you start
You need API credentials. Sign up for the console,
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.
curl -s -X POST https://api.getsigned.ca/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"
{
"access_token": "eyJhbGci...",
"token_type": "Bearer",
"expires_in": 3600
}
Set the token in your shell for the rest of this guide:
Step 2 — Create an envelope
Upload a PDF and define one signer with a signature field.
curl -s -X POST https://api.getsigned.ca/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"
}
]
}'
{
"id": "env_01HX...",
"status": "draft",
"tenantId": "acme-corp",
"subject": "Service Agreement"
}
Save the envelope ID:
ENVELOPE_ID="env_01HX..."
Step 3 — Upload the PDF
curl -s -X POST https://api.getsigned.ca/v1/envelopes/$ENVELOPE_ID/document \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/octet-stream" \
--data-binary @agreement.pdf
{
"documentId": "doc_01HX...",
"sha256": "a3f2...",
"pageCount": 3
}
Step 4 — Place a signature field
Tell GetSigned where on the page Jane should sign. Coordinates are in PDF points (1/72 inch),
origin at the bottom-left of the page.
curl -s -X POST https://api.getsigned.ca/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
}'
Use the drag-drop field placer in the console (/envelopes/{id}/place) to position fields
visually without calculating coordinates manually.
Step 5 — Send
Dispatch signing invites. Jane receives an email with her tokenized signing link.
curl -s -X POST https://api.getsigned.ca/v1/envelopes/$ENVELOPE_ID/send \
-H "Authorization: Bearer $TOKEN"
{
"status": "sent",
"signers": [
{
"id": "sgn_01HX...",
"email": "jane@example.com",
"signingUrl": "https://sign.getsigned.ca/sign/eyJ..."
}
]
}
Step 6 — Receive the webhook
When Jane completes signing, GetSigned sends a POST to your configured webhook endpoint:
{
"event": "envelope.completed",
"envelopeId": "env_01HX...",
"completedAt": "2026-06-19T14:32:00Z",
"documentUrl": "https://api.getsigned.ca/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
Configure webhooks
Set up your endpoint and verify signatures
Multi-signer routing
Route documents through multiple signers in sequence