API documentation for signature generation
Create handwritten signatures right from your code. A simple REST API, key authentication, PNG · SVG · JPG · PDF formats and clear per-plan limits.
⚡ Quick start
Three steps from sign-up to your first signature.
Get a key
Create your API key on the API page in your account. The full key is shown once.
Send a request
POST to /api/v1/signatures with a first and last name.
Get your signature
The response contains the signature in the chosen format (PNG, SVG, JPG or PDF) and its hash for re-rendering.
🔗 Base URL
All responses are JSON. On success: { "success": true, "data": {…}, "meta": {…} }; on error: { "success": false, "error": { "code", "message" } }.
https://onlinesignatures.net/api/v1
🔑 Authentication
Every request needs a Bearer token in the Authorization header. Create and manage keys on the API page in your account — the full key is shown only once.
curl https://onlinesignatures.net/api/v1/usage \ -H "Authorization: Bearer sk_live_your_token"
🎨 Output formats
By default the signature is returned as a transparent PNG. Add the format parameter to get another format — it does not use extra quota.
png
defaultTransparent background. Best for overlaying on documents.
svg
for webSignature wrapped in SVG — easy to scale and embed in HTML.
jpg
lightWhite background, smallest file size.
A ready-to-use PDF with the signature.
format_not_allowed (403) error.| Plan | Keys | Requests / month | Requests / minute | PNG | SVG | JPG | |
|---|---|---|---|---|---|---|---|
| API Start | 4 | 5 000 | 50 | ✓ | — | — | — |
| API Pro | 5 | 60 000 | 300 | ✓ | ✓ | ✓ | — |
| API Business | 15 | 250 000 | 5 000 | ✓ | ✓ | ✓ | ✓ |
| API Scale | 50 | 1 000 000 | 3 000 | ✓ | ✓ | ✓ | ✓ |
Keys = how many API keys you can create on this plan. Requests / month is the main quota; requests / minute is the burst limit.
🔍 Image quality
By default the signature is returned at standard quality (1×). Add the quality parameter to get a larger, sharper image — 2× is twice as large in pixels, 4× is four times. It does not use extra quota.
quality: 1
defaultStandard size. Fine for screens and web pages.
quality: 2
sharperTwice the pixels. Sharper in documents and on high-density screens.
quality: 4
maximumFour times the pixels. Best for print and large formats.
curl -X POST https://onlinesignatures.net/api/v1/signatures \ -H "Authorization: Bearer sk_live_..." \ -H "Content-Type: application/json" \ -d '{"first_name":"Signature", "last_name":"Generator", "format":"png", "quality":4}'
quality_not_allowed (403) error and does not count the request.The same signature at another quality
To get the very same signature at a different quality, save the hash from the response and request it again with POST /api/v1/signatures/replay. Each call is one request.
curl -X POST https://onlinesignatures.net/api/v1/signatures/replay \ -H "Authorization: Bearer sk_live_..." \ -H "Content-Type: application/json" \ -d '{"hash":"eyJpdiI6...", "format":"png", "quality":4}'
Generate a brand-new signature from a first and last name.
curl -X POST https://onlinesignatures.net/api/v1/signatures \ -H "Authorization: Bearer sk_live_..." \ -H "Content-Type: application/json" \ -d '{"first_name":"Signature", "last_name":"Generator"}'
curl -X POST https://onlinesignatures.net/api/v1/signatures \ -H "Authorization: Bearer sk_live_..." \ -H "Content-Type: application/json" \ -d '{"first_name":"Signature", "last_name":"Generator", "format":"pdf"}'
Parameters
{
"success": true,
"data": {
"id": 1842,
"hash": "eyJpdiI6...",
"format": "pdf",
"mime": "application/pdf",
"signature": "data:application/pdf;
base64,JVBER..."
},
"meta": { "quota": { "remaining":179 } }
}
{
"success": false,
"error": {
"code": "format_not_allowed",
"message": "The pdf format is
not available on
your plan."
}
}
Re-render a previously created signature by its hash. You can also set the format via ?format=.
curl "https://onlinesignatures.net/api/v1/signatures/{hash}?format=svg" \ -H "Authorization: Bearer sk_live_your_token"
Returns your plan, available formats, monthly limit, how much you have used and when it resets.
{
"success": true,
"data": {
"plan": "Business",
"formats": ["png", "svg", "jpg"],
"rate_per_minute": 1000,
"key": { "name": "Production", "masked": "sk_live_a1b2…8f9c" },
"quota": { "limit": 500, "used": 321, "remaining": 179 }
}
}
⏱️ Limits and quota
The monthly quota is the main limit and depends on your plan (see API Plans). A per-minute rate limit (also per plan) protects against bursts. Responses include X-Quota-Limit, X-Quota-Remaining and X-Quota-Reset headers so you can self-throttle. Changing format does not use extra quota: one generation = one request.
⚠️ Error codes
💬 Questions and answers
Does changing the format use extra quota?
No. One generation is one request, regardless of the output format.
Which formats are available?
PNG, SVG, JPG and PDF. The set of available formats depends on your plan.
What happens if I request a format not in my plan?
The API returns a format_not_allowed (403) error and does not count the request.
What does the quality parameter do?
Add "quality": 1, 2 or 4 to the request to get a sharper, more detailed signature. 1× is standard; 2× and 4× are crisper. Start includes 1×; Pro and higher plans include 1×, 2× and 4×. It does not use extra quota.
How do I get the same signature in 1× and 4×?
Create the signature once and save the hash from the response. Then send POST /api/v1/signatures/replay with that hash and quality 1, then 4 — the name and flourish stay identical, only the sharpness changes.