Everything you need to sign documents and integrate with the SignerAuthority API.
SignerAuthority lets you create, sign, and verify documents with cryptographic proof. Here's how it works:
From the Create page, you can:
When you create a document, each signer receives an email with a unique signing link. The document creator is automatically added as a signer.
A SHA-256 hash of the document content is generated at creation time. This hash is used to verify that the document has not been tampered with after signing.
Signers do not need an account. They click their unique link and:
Each signature is recorded with a timestamp, IP address, user agent, and HMAC-SHA256 cryptographic signature for tamper detection.
| Status | Description |
|---|---|
pending | Document created, no signatures yet |
partial | At least one signer has signed, others pending |
completed | All signers have signed. PDF generated. |
The Dashboard organizes your documents into three tabs:
Click any document title to open the detail modal with content preview, signer status, and full audit trail.
Every action on a document is recorded in an immutable audit trail:
Each entry records the user, timestamp, IP address, and user agent.
Completed documents can be verified in two ways:
mirassertions.org/verify/{hash}.SignerAuthority integrates with MIR (My Internet Reputation) in two ways:
Every completed document is automatically asserted to MIR Assertions with a cryptographic proof. This creates a permanent, verifiable record that the document existed and was signed.
Optionally link your account to MIR from the Account page to build cross-platform reputation. Signing events are recorded (using only your opaque user ID — no personal information is shared).
The SignerAuthority REST API lets you create, sign, and verify documents programmatically.
Base URL: https://signerauthority.com/api/v1
All API requests (except public PDF/certificate downloads) require an API key sent in the Authorization header:
Authorization: Bearer sa_your_api_key_here
Manage your API keys from the Account page or via the API:
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/keys | Create a new API key (session auth required) |
| GET | /api/v1/keys | List your API keys |
| DELETE | /api/v1/keys/:id | Revoke an API key |
curl -X POST https://signerauthority.com/api/v1/keys \
-H "Content-Type: application/json" \
-b "session_cookie" \
-d '{"name": "My App"}'
The full key is returned only once. Store it securely.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/v1/envelopes | Create an envelope |
| GET | /api/v1/envelopes | List envelopes |
| GET | /api/v1/envelopes/:id | Get envelope details |
curl -X POST https://signerauthority.com/api/v1/envelopes \
-H "Authorization: Bearer sa_your_key" \
-H "Content-Type: application/json" \
-d '{
"title": "Service Agreement",
"content": "<p>Agreement content here...</p>",
"signers": [
{"id": "signer-1", "name": "Alice Smith", "email": "alice@example.com"},
{"id": "signer-2", "name": "Bob Jones", "email": "bob@example.com"}
]
}'
curl https://signerauthority.com/api/v1/envelopes?status=completed&limit=10&offset=0 \
-H "Authorization: Bearer sa_your_key"
Query params: status (pending, partial, completed), limit (1–100, default 25), offset (default 0).
curl -X POST https://signerauthority.com/api/v1/envelopes/:id/sign \
-H "Authorization: Bearer sa_your_key" \
-H "Content-Type: application/json" \
-d '{
"signerId": "signer-1",
"signatureData": "Alice Smith",
"signatureType": "typed",
"consentVersion": "1.0",
"consentedAt": "2026-02-22T12:00:00Z"
}'
| Field | Required | Description |
|---|---|---|
signerId | Yes | The signer's ID (from envelope creation) |
signatureData | Yes | Typed name, drawn canvas data URL, or uploaded image data URL |
signatureType | No | typed (default), drawn, or image |
consentVersion | Yes | Version of consent text the signer agreed to |
consentedAt | No | ISO 8601 timestamp of consent |
curl -X POST https://signerauthority.com/api/v1/envelopes/:id/verify \
-H "Authorization: Bearer sa_your_key"
Returns content hash verification, individual signature HMAC checks, and overall integrity status.
curl -X POST https://signerauthority.com/api/v1/envelopes/:id/reassert \
-H "Authorization: Bearer sa_your_key"
Re-triggers MIR assertion for a completed envelope. Returns the assertion ID.
These endpoints are public (no API key required). The envelope ID serves as the access token.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/envelopes/:id/pdf | Download signed PDF |
| GET | /api/v1/envelopes/:id/certificate | Download signing certificate |
Append ?download=1 to force a file download instead of inline display.
curl https://signerauthority.com/api/v1/envelopes/:id/audit \
-H "Authorization: Bearer sa_your_key"
Returns the full audit trail with action, user, timestamp, IP address, and signature hashes.
Register webhook URLs to receive real-time notifications when document events occur.
| Event | Fired When |
|---|---|
document.created | A new envelope is created |
document.signed | A signer signs the document |
document.completed | All signers have signed |
document.verified | Document integrity is verified |
curl -X POST https://signerauthority.com/api/v1/webhooks \
-H "Authorization: Bearer sa_your_key" \
-H "Content-Type: application/json" \
-d '{
"url": "https://yourapp.com/webhooks/signer",
"events": ["document.completed", "document.signed"]
}'
The webhook secret is returned only once. Use it to verify webhook signatures.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1/webhooks | List webhooks |
| GET | /api/v1/webhooks/:id | Get webhook details |
| PATCH | /api/v1/webhooks/:id | Update webhook (url, events, active) |
| DELETE | /api/v1/webhooks/:id | Delete webhook |
| GET | /api/v1/webhooks/:id/logs | View delivery logs |
All errors follow a consistent format:
{
"error": {
"type": "invalid_request_error",
"message": "Title is required.",
"param": "title"
}
}
| Type | HTTP Status | Meaning |
|---|---|---|
authentication_error | 401 | Missing or invalid API key |
invalid_request_error | 400 | Invalid parameters |
not_found_error | 404 | Resource not found |
rate_limit_error | 429 | Too many requests |
api_error | 500 | Internal server error |