Validate a license key against a product using POST /api/v1/validate.
curl --request POST \
--url https://api.keyport.sbs/api/v1/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"license_key": "ABCD-EFGH-IJKL-MNOP"
}
'{
"valid": true,
"status": "active",
"expires": "2027-01-01T00:00:00.000Z",
"ip_registered": false,
"ip_count": 1,
"max_ips": 1,
"version": "2.1.0",
"version_valid": true,
"custom": {
"tier": "pro",
"exports": true
},
"signature": null
}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.
POST https://api.keyport.sbs/api/v1/validate
Authorization: Bearer kp_live_xxxxxxxxxxxxxxxxxxxxxxxxx
Content-Type: application/json
"2.1.0"). Required if you want the version_valid field populated. Only evaluated when the version module is enabled on the product.true if the license is currently valid and all checks passed. false for any failure, including business-state failures that return HTTP 200.null for lifetime licenses or when the license was not found.null when the IP system is disabled or the license was invalid.null when the license was not found or the IP system is disabled.null when the IP system is disabled or the license was not found.null.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.null.null.curl --request POST \
--url https://api.keyport.sbs/api/v1/validate \
--header 'Authorization: Bearer kp_live_xxxxxxxxxxxxxxxxxxxxxxxxx' \
--header 'Content-Type: application/json' \
--data '{
"license_key": "ABCD-EFGH-IJKL-MNOP",
"version": "2.1.0",
"device_id": "desktop-main"
}'
valid: 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 | 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.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.version and version_valid — Only present when the version module is enabled on the product.Use your product API key in the Authorization header.
Validation processed.
true
"active"
"2027-01-01T00:00:00.000Z"
false
1
1
"2.1.0"
true
{ "tier": "pro", "exports": true }
null
curl --request POST \
--url https://api.keyport.sbs/api/v1/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"license_key": "ABCD-EFGH-IJKL-MNOP"
}
'{
"valid": true,
"status": "active",
"expires": "2027-01-01T00:00:00.000Z",
"ip_registered": false,
"ip_count": 1,
"max_ips": 1,
"version": "2.1.0",
"version_valid": true,
"custom": {
"tier": "pro",
"exports": true
},
"signature": null
}