Loading...
New: API Access + Custom Branding now available on Business. Upgrade now →
Loading...
Integrate e-signatures into your application with a single API call. Upload a document, attach a signature, get back a signed PDF.
One endpoint. Upload, sign, download.
API key auth. TLS encryption. Audit trail.
PDF, PNG, JPG. Draw, type, or upload sigs.
All API requests require a Bearer token. Get your API key from the dashboard. Business plan required.
Authorization: Bearer sb_live_your_key_here/api/v1/sign| Field | Type | Required | Description |
|---|---|---|---|
| file | File | Yes | PDF, PNG, or JPG file to sign |
| signature | String | Yes* | Base64 data URI of signature image |
| mode | String | No | draw, type, or upload (default: draw) |
| typedName | String | Yes* | Name for type signatures |
| positions | JSON | No | Array of {x, y, page, width, height} |
| sigColor | String | No | Hex color (default: #1e3a8a) |
* signature is required for draw/upload mode. typedName is required for type mode.
Positions use percentages of the page dimensions. Origin (0,0) is top-left.
// Place signature at center-bottom of page 1
{
"x": 50, // 50% from left
"y": 85, // 85% from top
"page": 0, // First page (zero-indexed)
"width": 25 // 25% of page width
}
// Multiple signatures
[
{"x": 25, "y": 90, "page": 0, "width": 20},
{"x": 75, "y": 90, "page": 0, "width": 20},
{"x": 50, "y": 85, "page": 2, "width": 30}
]curl -X POST https://signbolt.store/api/v1/sign \
-H "Authorization: Bearer sb_live_your_key_here" \
-F "file=@contract.pdf" \
-F "mode=type" \
-F "typedName=John Smith" \
-F 'positions=[{"x":50,"y":85,"page":0,"width":25}]' \
-o signed-contract.pdfconst form = new FormData();
form.append('file', fs.createReadStream('contract.pdf'));
form.append('mode', 'type');
form.append('typedName', 'John Smith');
form.append('positions', JSON.stringify([
{ x: 50, y: 85, page: 0, width: 25 }
]));
const res = await fetch('https://signbolt.store/api/v1/sign', {
method: 'POST',
headers: { 'Authorization': 'Bearer sb_live_your_key_here' },
body: form,
});
const signedPdf = await res.arrayBuffer();
fs.writeFileSync('signed.pdf', Buffer.from(signedPdf));
console.log('Audit ID:', res.headers.get('X-Audit-Id'));import requests, json
files = {'file': open('contract.pdf', 'rb')}
data = {
'mode': 'type',
'typedName': 'John Smith',
'positions': json.dumps([{"x": 50, "y": 85, "page": 0, "width": 25}])
}
r = requests.post(
'https://signbolt.store/api/v1/sign',
headers={'Authorization': 'Bearer sb_live_your_key_here'},
files=files,
data=data
)
with open('signed.pdf', 'wb') as f:
f.write(r.content)
print('Audit ID:', r.headers['X-Audit-Id'])200 — Success
Returns the signed PDF as application/pdf. Check response headers for:
X-Audit-Id — Unique audit trail identifier (e.g., SB-XXXX-XXXX-XXXX)X-Signed-At — ISO timestamp of signingError Responses
401 — Invalid or missing API key 403 — Document limit reached / Not a Business plan 400 — Missing required fields 500 — Processing error
| Method | Endpoint | Description | Auth |
|---|---|---|---|
| POST | /api/v1/sign | Sign a document with a signature | Bearer token |
| GET | /api/v1/sign | Get API documentation and field descriptions | None |
| GET | /api/keys | List your API keys | Cookie (dashboard) |
| POST | /api/keys | Create a new API key | Cookie (dashboard) |
| DELETE | /api/keys | Revoke an API key | Cookie (dashboard) |
Business Plan ($24/mo): Unlimited documents, unlimited API calls.
File size limit: 25MB per document.
Supported formats: PDF, PNG, JPG, JPEG.