Endpoints
Validate
Validate a license key against a product using POST /api/v1/validate.
POST
Validate a license
Send a
POST request to validate a license key. This is the primary endpoint you call each time your application needs to check whether a license is active and eligible to run.
Endpoint
Headers
Request body
The license key to validate. Must match a key issued under the product associated with your API key.
The version string of your application (e.g.
"2.1.0"). Required if you want the version_valid field populated. Only evaluated when the version module is enabled on the product.An arbitrary identifier for the device or machine making the request. Used for informational purposes; does not affect validation outcome.
Response fields
true if the license is currently valid and all checks passed. false for any failure, including business-state failures that return HTTP 200.Machine-readable result string. Use this as the source of truth in your application logic. See status values below.
ISO 8601 expiry timestamp for the license.
null for lifetime licenses or when the license was not found.Whether the calling IP was newly registered during this request.
null when the IP system is disabled or the license was invalid.Number of unique IPs currently registered to this license.
null when the license was not found or the IP system is disabled.Maximum number of unique IPs allowed for this license.
null when the IP system is disabled or the license was not found.The version string accepted or pinned for this license. Only populated when the version module is enabled on the product; otherwise
null.Whether the
version you submitted is permitted for this license. Only populated when the version module is enabled and a version was included in the request; otherwise null.Custom response payload defined by the product’s custom response module. Only populated when the module is enabled and the template resolves to a non-empty object; otherwise
null.Cryptographic signature of the response payload. Only populated when signed validation is enabled at both the product and organization level; otherwise
null.Examples
Status values
Most failures return HTTP 200 withvalid: false. Read the status field to determine the cause.
| Status | Meaning |
|---|---|
active | License is valid and all checks passed |
license_not_found | No license exists for the provided key under this product |
revoked | License has been manually revoked |
expired | License expiry date has passed |
ip_blocked | The calling IP is explicitly blocked |
ip_limit_reached | The license has already registered its maximum number of unique IPs |
ip_not_registered | IP system is in allow-list mode and this IP is not registered |
product_not_found | The product associated with your API key does not exist |
product_archived | The product has been archived and is no longer accepting validations |
product_disabled | The product has been disabled |
org_suspended | The organization account has been suspended |
billing_suspended | The organization’s billing is suspended |
invalid_api_key | The Authorization header is missing or the API key is not valid |
rate_limit_exceeded | The daily validation limit for this product has been exceeded |
HTTP status codes
| HTTP status | Meaning |
|---|---|
200 | Request was processed. Check valid and status for the outcome. |
401 | Missing or invalid product API key. |
429 | Daily product request limit exceeded. Check the Retry-After header. |
401 and 429 are the only HTTP error codes this endpoint returns. All other failure outcomes — including revoked, expired, and blocked licenses — come back as 200 with valid: false.Field population notes
signature— Only present when signed validation is enabled at both the product and organization level.custom— Only present when the product’s custom response module is enabled and the template or override resolves to a non-empty object.versionandversion_valid— Only present when the version module is enabled on the product.
Authorizations
Use your product API key in the Authorization header.
Body
application/json
Response
Validation processed.
- Option 1
- Option 2
Example:
true
Example:
"active"
Example:
"2027-01-01T00:00:00.000Z"
Example:
false
Example:
1
Example:
1
Example:
"2.1.0"
Example:
true
Example:
{ "tier": "pro", "exports": true }
Example:
null
