gen-plate.com API

License plate generation API. JSON over HTTPS. Keys are issued in gw_<48hex> format.

Overview

Base URL
https://gen-plate.com/v1
TLS
Valid certificate, no flags needed
Content-Type
application/json for all POST requests
Body limit
up to 100 MB
Timeouts
upstream up to 650 s (for large batches)

Authentication

Every request (except /health) requires an API key. Two header forms are accepted:

Authorization: Bearer gw_<48hex>
X-API-Key: gw_<48hex>

Each key is bound to a plan and (optionally) an IP allowlist. The plan determines per-minute, per-day and burst quotas. Call GET /v1/me to see the exact limits for your key.

Response format

All responses share a single envelope:

{"success": true,  "data":  { ... }}
{"success": false, "error": "..."}

Errors

CodeMeaning
400Invalid request (e.g. missing required field)
401Missing or invalid API key
403Key disabled or IP not allowed
404Unknown path
413Body larger than 100 MB
429Plan limit exceeded (rate / daily / burst)
5xxUpstream error — see error field for details

Meta

GET /v1/health no auth

Liveness probe.

Response

{"status":"ok"}
GET /v1/me auth

Information about the current key: name, plan, limits, usage.

Response

{
  "success": true,
  "data": {
    "name": "your-account",
    "enabled": true,
    "limits": { "rate": 60, "daily": 1000, "burst": 10 },
    "usage":  { "today": 0, "total": 0 }
  }
}

For numeric limit fields, 0 means no cap.

GET /v1/usage auth

Daily usage breakdown for the current key.


Plates

License plate generation. Supported countries: at, be, bg, ch, de, dk, fin, fr, it, pl, tr, uk.

GET /v1/plates/countries auth

Response

{
  "success": true,
  "data": {
    "countries": ["at","be","bg","ch","de","dk","fin","fr","it","pl","tr","uk"]
  }
}
POST /v1/plates/{country}/generate auth

Generate a license plate. The request body is forwarded to the plate engine as-is.

Path parameters

NameTypeDescription
countrystringISO code, lowercase. See list above.

Body (minimum)

{
  "plate": "B AB 1234",
  "size":  "520x110"
}

Exact field set depends on the country. Optional fields include background/text color, font, padding, design version, etc.

Response

{
  "success": true,
  "data": { ... plate engine response ... }
}

Errors

  • 400unsupported country: xx
POST /v1/plates/{country}/side2 auth

Generate the second side of a plate (where the country supports it).


Examples — curl

KEY=gw_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

curl https://gen-plate.com/v1/me \
  -H "Authorization: Bearer $KEY"

curl https://gen-plate.com/v1/plates/countries \
  -H "Authorization: Bearer $KEY"

curl -X POST https://gen-plate.com/v1/plates/at/generate \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"plate":"W 12345 A"}'

curl -X POST https://gen-plate.com/v1/plates/de/side2 \
  -H "Authorization: Bearer $KEY" \
  -H "Content-Type: application/json" \
  -d '{"plate":"B AB 1234"}'

Examples — Python

import requests

KEY  = "gw_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
BASE = "https://gen-plate.com/v1"
H    = {"Authorization": f"Bearer {KEY}"}

# 1) who am I
print(requests.get(f"{BASE}/me", headers=H).json())

# 2) supported countries
print(requests.get(f"{BASE}/plates/countries", headers=H).json())

# 3) German plate (front)
r = requests.post(
    f"{BASE}/plates/de/generate",
    headers=H,
    json={"plate": "B AB 1234", "size": "520x110"},
)
print(r.json())

# 4) second side
r = requests.post(
    f"{BASE}/plates/de/side2",
    headers=H,
    json={"plate": "B AB 1234"},
)
print(r.json())

© gen-plate.com