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.

REST · JSON Bearer token Four formats Plan-based limits

⚡ Quick start

Three steps from sign-up to your first signature.

1

Get a key

Create your API key on the API page in your account. The full key is shown once.

2

Send a request

POST to /api/v1/signatures with a first and last name.

3

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" } }.

Base URL
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
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

png

default

Transparent background. Best for overlaying on documents.

SVG

svg

for web

Signature wrapped in SVG — easy to scale and embed in HTML.

JPG

jpg

light

White background, smallest file size.

PDF

pdf

document

A ready-to-use PDF with the signature.

ℹ️Available formats depend on your plan — see the API Plans page. Requesting a format you do not have returns a format_not_allowed (403) error.
Plan Keys Requests / month Requests / minute PNG SVG JPG PDF
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.

1×

quality: 1

default

Standard size. Fine for screens and web pages.

2×

quality: 2

sharper

Twice the pixels. Sharper in documents and on high-density screens.

4×

quality: 4

maximum

Four times the pixels. Best for print and large formats.

PNG · 4×
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}'
ℹ️Start includes 1×; Pro, Business and Scale include 1×, 2× and 4×. Asking for a quality above your plan returns a quality_not_allowed (403) error and does not count the request.
ℹ️SVG is a vector and stays sharp at any size, so the quality parameter does not change it — it applies to PNG, JPG and PDF. A very wide signature may be rendered slightly below 4× to stay within size limits.

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.

PNG · 1× → 4×
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}'
POST/api/v1/signatures

Generate a brand-new signature from a first and last name.

PNG (default)
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"}'
PDF
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

first_nameoptional string, up to 60 characters
last_nameoptional string, up to 60 characters
middle_nameoptional string, up to 60 characters
formatoptional png (default), svg, jpg, pdf — within your plan
qualityoptional 1 (default), 2, 4 — within your plan
ℹ️Provide at least one field — a first name or a last name (a single word, an initial, or a full name).
Success 201
{
  "success": true,
  "data": {
    "id": 1842,
    "hash": "eyJpdiI6...",
    "format": "pdf",
    "mime": "application/pdf",
    "signature": "data:application/pdf;
       base64,JVBER..."
  },
  "meta": { "quota": { "remaining":179 } }
}
Error 403
{
  "success": false,
  "error": {
    "code": "format_not_allowed",
    "message": "The pdf format is
      not available on
      your plan."
  }
}
GET/api/v1/signatures/{hash}

Re-render a previously created signature by its hash. You can also set the format via ?format=.

cURL
curl "https://onlinesignatures.net/api/v1/signatures/{hash}?format=svg" \
  -H "Authorization: Bearer sk_live_your_token"
GET/api/v1/usage

Returns your plan, available formats, monthly limit, how much you have used and when it resets.

Success 200
{
  "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

401 · invalid_api_keyThe key is missing or invalid
403 · key_disabled / plan_requiredKey disabled or plan without API
403 · format_not_allowedFormat not available on your plan
403 · quality_not_allowedQuality not available on your plan
422 · validation_errorInvalid request fields (including an unknown format)
429 · rate_limitedPer-minute rate exceeded — pause and retry
429 · quota_exceededMonthly plan quota used up
503 · render_unavailableRendering temporarily unavailable, try again later

💬 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.