---
title: "Validate a software license"
method: POST
path: "/license/validate"
tags: ["Licensing"]
---

# Validate a software license

`POST /license/validate`

Validates an existing activation and refreshes its last-check timestamp. A valid response includes a short-lived Ed25519-signed offline token for temporary use when the API cannot be reached.

## Request body

- LicenseValidationRequest
  - `license_key` string, required
  - `instance` string, required
  - `domain` string, nullable
  - `installation_path` string, nullable
  - `application_version` string, nullable

## Response `200`

Validation completed. Inspect the `valid` and `reason` properties.

- LicenseValidationResponse
  - `success` true, required
  - `valid` boolean, required
  - `status` 'active' | 'reissued' | 'suspended' | 'expired' | 'revoked', required
  - `reason` 'license_reissued' | 'license_suspended' | 'license_expired' | 'license_revoked' | 'activation_not_found' | 'installation_mismatch' | 'null', nullable, required
  - `activations_used` integer, required
  - `activation_limit` integer, nullable, required
  - `offline_token` string, nullable, required — Ed25519-signed compact offline validation token; only returned when valid.
  - `offline_public_key` string, nullable, required — Base64url-encoded Ed25519 public key.
  - `offline_expires_at` integer, nullable, required — Unix timestamp at which the offline token expires.

## Other responses

- `404` — License key not found
- `422` — Request validation failed
- `429` — Rate limit exceeded

---

[API](https://skmtc.net/b-cdn/apis/billingserv-api-v2.md) · [All operations](https://skmtc.net/b-cdn/apis/billingserv-api-v2/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/b-cdn/billingserv-api-v2/revisions/76cfbed5eb40/schema)
