API Quickstart
Introduction to the LicenseSeat API.
Full API Docs — To see the full LicenseSeat API docs, together with the LicenseSeat OpenAPI spec, head to the LicenseSeat API Reference page. It also has an interactive experience with request testing, error codes, full schemas, and live examples.
Essentials
- Base URL:
https://licenseseat.com/api/v1 - Auth: Bearer token in
Authorizationheader - Format: JSON request/response bodies
- Errors: Structured format with
error.codeanderror.message
All license operations are product-scoped. The product slug is part of the URL path; the license key belongs in the bounded JSON request body so it does not leak through URL logs, browser history, proxy traces, or monitoring tools:
curl -X POST https://licenseseat.com/api/v1/products/my-app/licenses/validate \
-H "Authorization: Bearer pk_live_xxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"license_key":"XXXX-XXXX-XXXX-XXXX","fingerprint":"device-unique-id"}'
fingerprint is the canonical device-binding field. device_id remains accepted as a legacy alias for compatibility with older SDKs and integrations.
Create licenses from your backend
For custom stores and payment integrations, see Create a license.
This is a backend operation using a secret key with licenses:create; a publishable
key embedded in an app cannot issue licenses. The guide explains plan_key, request
format, delivery of the returned key, and retry handling.
Response Format
All responses include an object field identifying the type:
{
"object": "validation_result",
"valid": true,
"license": { ... },
"activation": { ... }
}
Rate Limits
| Plan | Requests/min | Requests/day |
|---|---|---|
| Free | 60 | 1,000 |
| Pro | 300 | 50,000 |
| Enterprise | Unlimited | Unlimited |
Rate limit headers included in all responses: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset