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

# Validate a software license

`POST /license/validate`

## Request

- Base URL: `https://demo.onlinebillingform.com/api/v2`
- URL: `https://demo.onlinebillingform.com/api/v2/license/validate`
- Auth: none required
- TypeScript: <https://skmtc.dev/billingserv/apis/billingserv-api-v2/docs/license/validate/post.ts> (a function with typed inputs; its response is checked against the schema)

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

## Changes

- **2026-08-22** `6b9208b64456`: 2 info
  - added the optional property `code` to the response with the `422` status
  - added the optional property `request_id` to the response with the `422` status

[Operation history](https://skmtc.dev/billingserv/apis/billingserv-api-v2/changes/license/validate/post.md)

---

[API](https://skmtc.dev/billingserv/apis/billingserv-api-v2.md) - [All operations](https://skmtc.dev/billingserv/apis/billingserv-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/billingserv/apis/billingserv-api-v2/revisions/232ab5ca8413?raw)
