For the complete documentation index, see llms.txt. This page is also available as Markdown.

Activate License (Offline Method)

Currently we support trial, perpetual and consumption license types for offline activation purposes

Endpoint

  • Method: POST

  • Path: /api/v4/activate_offline

  • Description: Activates a license using the offline activation flow (base64 payload).

Authentication

See License API Authorization.

Required headers

  • Date (string) — RFC7231 GMT date string

  • Authorization (string) — signature or bearer token

  • Accept: application/json

Request

Body

The request body is a base64-encoded, stringified JSON object.

Schema

The request body is a string representing a base64-encoded JSON object containing all the required activation data.

Request body schema (TypeScript + JSON Schema)

TypeScript

JSON Schema

Signature

The request signature is constructed and signed with HMAC-SHA256 using the company shared key (or client secret for OAuth). Steps to construct the signing string:

1

Build the signing string — part 1

Start with:

  • The literal string: licenseSpring

  • Then a newline

2

Build the signing string — part 2

Append:

  • The string "date: " plus the date value from the license payload, then a newline

3

Build the signing string — part 3

Append:

  • Either the license_key or username value from the payload (whichever is present), then a newline

4

Build the signing string — part 4

Append:

  • The hardware_id value from the payload, then a newline

5

Build the signing string — part 5

Append:

  • The api_key (or client_id) value from the payload

Encrypt the complete string using HMAC-SHA256 with the signing key (Shared Key for API key auth, Client Secret for OAuth). Example (Node.js):

Finalized payload

Stringify the activation object and encode it to base64.

Examples

Send the base64 payload as the request body. Set the Date and Authorization headers.

Response

Response schema (TypeScript + JSON Schema)

TypeScript

JSON Schema

Response signatures

The response contains two digital signatures:

  • license_signature: HMAC-SHA256 signature explained in Response Signature.

  • offline_signature: HMAC-SHA256 signature specific to this endpoint, constructed identically to the request signature generation but using the response date value.

Errors

If an error occurs, the response will have an HTTP status code of 400 or higher, and the response body will contain an error description in the following format:

JSON Schema

List of exceptions

missing_headers (400): some headers are missing

  • When missing authorization or date headers

missing_parameters (400): some parameters are missing in the request

  • When no request body at all or no file found in request body

authorization_missing_params (400): some parameters are missing in authorization

  • when request body is not properly base64 encoded

  • when file is missing in request body (multipart case)

  • when license_key or hardware_id body parameters are missing

  • when data body parameter is missing

  • when api_key parameter is missing

tpm_not_enabled (400): This license doesn't have TPM licensing enabled, and tpm_enrollment is being sent in the request

tpm_enrollment_required (400): This license has TPM licensing enabled, but tpm_enrollment is not being sent in the request

tpm_invalid_public_key (400): The TPM public key sent is not valid

tpm_signature_required (400): The TPM signature is missing from the body/license file and TPM usage is enforced

tpm_signature_missmatch (400): The TPM signature/algorithm is not ES256 and the signature can't be verified against the TPM public key

If you want to use this API endpoint directly, instead of using an SDK (which does most of the heavy lifting for you), please contact us for additional instructions.

Guide on offline licensing

If any aspect of the offline licensing model remains unclear or raises questions, see: Offline License Activation.

Last updated

Was this helpful?