Skip to content

Applies the uploaded transactions, extends the session lease, and returns a signed receipt carrying a refreshed license.

POST
/api/v1/provision/admin/usage/offline/ingest
curl --request POST \
--url https://example.com/api/v1/provision/admin/usage/offline/ingest \
--header 'Content-Type: application/json' \
--data '{ "meta": { "schemaVersion": 1, "nonce": "example", "requestedAt": "2026-04-15T12:00:00Z", "sdkVersion": "example" }, "body": { "currentLicense": { "licenseToken": "example", "version": 1, "legalNotice": "example", "copyright": "example", "providerUrl": "example", "providerEmail": "example", "description": "example", "licensedProducts": [ "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0" ], "activatedFeatures": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "featureCode": "example", "productId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "moduleName": "example", "featurePath": "example", "name": "example", "description": "example", "value": "example", "version": "example", "isEnabled": true, "isAvailableDuringTrialPeriod": true, "isAvailableDuringGracePeriod": true, "featureExpiration": "2026-04-15T12:00:00Z" } ] }, "transactions": [ { "transactionId": 1, "sessionId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "apiVersion": 1, "creationDateTime": "2026-04-15T12:00:00Z", "eventName": "example", "eventData": "example" } ] } }'

Request artifact for the offline transaction-ingest flow. Carries the SDK’s accumulated usage transactions plus the EndUserLicenseDto the SDK is currently operating under — the embedded license JWT provides server-side provenance that the request actually came from a licensed SDK for the claimed session.

object
meta

Request-instance metadata. Same shape as the activation flow’s OfflineActivationRequestMeta — the schema is intentionally shared.

object
schemaVersion

Wire-format major version. Currently always 1. The server refuses unknown versions to fail fast rather than silently mis-parse.

integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
nonce

Client-generated request correlation id, populated by the SDK builder as 32 random bytes encoded as base64url without padding. Echoed by the server in the matching response for audit / correlation; has no security property in v1 — the SDK does not currently track outstanding nonces. The real defences are the JWT exp/aud claims and the response signature.

string
requestedAt

UTC timestamp at which the SDK produced the request. Used by the server as part of the idempotency cache key.

string format: date-time
sdkVersion

Version of the SDK assembly that produced the request. Diagnostic only; never load-bearing.

string
body

Payload — current license + accumulated transactions.

object
currentLicense

The license the SDK is currently operating under. The server validates the JWT’s signature using its own public key, extracts the jti (session id) and aud (fingerprint) claims, and uses them to bind the request to a specific session. Required; the JWT must verify.

object
licenseToken
string
version
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
legalNotice
string
copyright
string
providerUrl
string
providerEmail
string
description
string
licensedProducts
Array<string>
activatedFeatures
Array<object>
object
id
string format: uuid
featureCode
string
productId
string format: uuid
moduleName
null | string
featurePath
null | string
name
null | string
description
null | string
value
null | string
version
null | string
isEnabled
boolean
isAvailableDuringTrialPeriod
boolean
isAvailableDuringGracePeriod
boolean
featureExpiration
null | string format: date-time
transactions

Accumulated usage transactions awaiting server processing. Every record’s Guid ClientTransactionRecord.SessionId must match the session id in EndUserLicenseDto OfflineTransactionRequestBody.CurrentLicense; mismatched records cause the entire batch to be refused. May be empty — treated as a ping-to-renew-lease, in which case the receipt still carries a refreshed license.

Array<object>
object
transactionId
integer | string format: int64
/^-?(?:0|[1-9]\d*)$/
sessionId
string format: uuid
apiVersion
integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
creationDateTime
string format: date-time
eventName
string
eventData
string
Example generated
{
"meta": {
"schemaVersion": 1,
"nonce": "example",
"requestedAt": "2026-04-15T12:00:00Z",
"sdkVersion": "example"
},
"body": {
"currentLicense": {
"licenseToken": "example",
"version": 1,
"legalNotice": "example",
"copyright": "example",
"providerUrl": "example",
"providerEmail": "example",
"description": "example",
"licensedProducts": [
"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0"
],
"activatedFeatures": [
{
"id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"featureCode": "example",
"productId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"moduleName": "example",
"featurePath": "example",
"name": "example",
"description": "example",
"value": "example",
"version": "example",
"isEnabled": true,
"isAvailableDuringTrialPeriod": true,
"isAvailableDuringGracePeriod": true,
"featureExpiration": "2026-04-15T12:00:00Z"
}
]
},
"transactions": [
{
"transactionId": 1,
"sessionId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0",
"apiVersion": 1,
"creationDateTime": "2026-04-15T12:00:00Z",
"eventName": "example",
"eventData": "example"
}
]
}
}

Receipt issued successfully.

Media type application/json

Server-issued signed receipt for the offline transaction-ingest flow. Wire format is structurally identical to OfflineActivationResponse (same JWS-flattened-JSON detached-payload envelope, same RSA-SHA256 PKCS#1 v1.5 signature). The inner signed payload identifies itself via protected.artifactType = "offline-transaction-receipt-v1" so SDK importers fail fast if an activation response is mis-fed here or vice versa.

object
signedPayload

Base64url-encoded UTF-8 JSON bytes of an OfflineTransactionReceiptSignedPayload. The importer treats this string as opaque — it is base64url-decoded and verified, never re-serialized.

string
signature

Base64-encoded RSA-SHA256 (PKCS#1 v1.5) signature over the raw bytes inside string OfflineTransactionReceipt.SignedPayload.

string
Example generated
{
"signedPayload": "example",
"signature": "example"
}

Invalid request (schema mismatch, JWT validation failure, session mismatch).

Media type application/json
object
type
null | string
title
null | string
status
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
detail
null | string
instance
null | string
Example generated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Caller is not an admin.

Media type application/json
object
type
null | string
title
null | string
status
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
detail
null | string
instance
null | string
Example generated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}

Session not found.

Media type application/json
object
type
null | string
title
null | string
status
null | integer | string format: int32
/^-?(?:0|[1-9]\d*)$/
detail
null | string
instance
null | string
Example generated
{
"type": "example",
"title": "example",
"status": 1,
"detail": "example",
"instance": "example"
}