Applies the uploaded transactions, extends the session lease, and returns a signed receipt carrying a refreshed license.
const url = 'https://example.com/api/v1/provision/operational/usage/offline/ingest';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"meta":{"schemaVersion":1,"nonce":"example","requestedAt":"2026-04-15T12:00:00Z","sdkVersion":"example"},"body":{"currentLicense":{"licenseToken":"example","version":1,"description":"example","licenseTermsUrl":"example","activatedFeatures":[{"id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","featureCode":"example","productId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","moduleName":"example","name":"example","metricName":"example","units":"example","description":"example","value":"example","isEnabled":true,"isAvailableDuringTrialPeriod":true,"isAvailableDuringGracePeriod":true,"isPaidFeature":true,"isDenied":true,"featureExpiration":"2026-04-15T12:00:00Z"}],"products":[{"id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","productCode":"example","productVersion":"example","name":"example","propertyValues":{"additionalProperty":{"key":"example","value":"example","metadata":[{"key":"example","value":"example"}],"visibility":"Private"}}}],"meters":[{"metricName":"example","unit":"example"}]},"transactions":[{"transactionId":1,"sessionId":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","apiVersion":1,"creationDateTime":"2026-04-15T12:00:00Z","eventName":"example","eventData":"example"}]}}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/v1/provision/operational/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, "description": "example", "licenseTermsUrl": "example", "activatedFeatures": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "featureCode": "example", "productId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "moduleName": "example", "name": "example", "metricName": "example", "units": "example", "description": "example", "value": "example", "isEnabled": true, "isAvailableDuringTrialPeriod": true, "isAvailableDuringGracePeriod": true, "isPaidFeature": true, "isDenied": true, "featureExpiration": "2026-04-15T12:00:00Z" } ], "products": [ { "id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "productCode": "example", "productVersion": "example", "name": "example", "propertyValues": { "additionalProperty": { "key": "example", "value": "example", "metadata": [ { "key": "example", "value": "example" } ], "visibility": "Private" } } } ], "meters": [ { "metricName": "example", "unit": "example" } ] }, "transactions": [ { "transactionId": 1, "sessionId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "apiVersion": 1, "creationDateTime": "2026-04-15T12:00:00Z", "eventName": "example", "eventData": "example" } ] } }'Request Bodyrequired
Section titled “Request Bodyrequired”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
Request-instance metadata. Same shape as the activation flow’s OfflineActivationRequestMeta — the schema is intentionally shared.
object
Wire-format major version. Currently always 1. The server refuses unknown versions to fail
fast rather than silently mis-parse.
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.
UTC timestamp at which the SDK produced the request. Used by the server as part of the idempotency cache key.
Version of the SDK assembly that produced the request. Diagnostic only; never load-bearing.
Payload — current license + accumulated transactions.
object
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
The signed license JWT the SDK validates offline against the provider’s public key.
Link to the license terms (EULA) the license was issued under: an absolute https URL, or null when the entitlement has none. Unsigned display metadata, read from the entitlement at every issue and refresh.
A feature as activated on an end-user license: the granted value, enablement, trial/grace availability, and optional per-feature expiration.
object
The metric a metered feature’s usage is recorded under, resolved by the issuer. A feature code
and its metric name are deliberately different strings (MIRAGE.IMAGE.RENDERS against
mirage.image.renders) and the server matches a meter by exact metric name, so this is the
only name usage may be reported under. Null for a feature that has no meter, or when the issuer
did not resolve one.
What the feature’s value is counted in (GB, seats, calls), read from the vendor’s catalog at every issue, for showing beside the value. Null for a Boolean feature, or when the catalog names none. Unsigned display metadata, like string? ActivatedFeatureDto.Name.
When true, the feature is withheld for the duration of a trial even if enabled.
The issuer’s verdict that this license explicitly does not grant the feature. Validation treats it as final, while the feature stays present for display — a locked capability can still be shown, and reaching for it is counted as a denied check.
A product covered by the license, with the custom properties the vendor marked Public. Display/catalog metadata carried on the unsigned EndUserLicenseDto envelope, like feature names and descriptions, so it must never gate functionality. The product code and version are also in the signed token (SignedProductDto); gate on that copy.
object
The version of the product the license was issued for, for display; empty when the product has none.
object
A custom key/value property (e.g. on a product) with optional metadata entries.
object
A key/value metadata entry attached to a PropertyValueDto.
object
Whether a custom property is sent to the application with its license.
The license’s meters, one per metric name, with the unit each counts in.
A meter of the license: the metric name its usage is recorded and limited under (the key in the
signed usage_limits claim) and the unit it counts in. Display metadata carried on the unsigned
EndUserLicenseDto envelope, read from the same record as the customer API’s meter
(string MyMonitoredAssetDto.Unit), so both report the same unit. A meter of a feature the
license withholds is left out, as the feature is.
object
What the meter counts, e.g. renders or minutes; null when the meter names none.
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.
One usage event in the SDK’s client-side transaction log, uploaded (online or via the offline transaction-ingest flow) for server-side processing.
object
Monotonically increasing id assigned by the local transaction store; the server acknowledges the highest processed id.
Type name of the event object serialized into string ClientTransactionRecord.EventData.
The event payload as JSON.
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
Request-instance metadata. Same shape as the activation flow’s OfflineActivationRequestMeta — the schema is intentionally shared.
object
Wire-format major version. Currently always 1. The server refuses unknown versions to fail
fast rather than silently mis-parse.
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.
UTC timestamp at which the SDK produced the request. Used by the server as part of the idempotency cache key.
Version of the SDK assembly that produced the request. Diagnostic only; never load-bearing.
Payload — current license + accumulated transactions.
object
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
The signed license JWT the SDK validates offline against the provider’s public key.
Link to the license terms (EULA) the license was issued under: an absolute https URL, or null when the entitlement has none. Unsigned display metadata, read from the entitlement at every issue and refresh.
A feature as activated on an end-user license: the granted value, enablement, trial/grace availability, and optional per-feature expiration.
object
The metric a metered feature’s usage is recorded under, resolved by the issuer. A feature code
and its metric name are deliberately different strings (MIRAGE.IMAGE.RENDERS against
mirage.image.renders) and the server matches a meter by exact metric name, so this is the
only name usage may be reported under. Null for a feature that has no meter, or when the issuer
did not resolve one.
What the feature’s value is counted in (GB, seats, calls), read from the vendor’s catalog at every issue, for showing beside the value. Null for a Boolean feature, or when the catalog names none. Unsigned display metadata, like string? ActivatedFeatureDto.Name.
When true, the feature is withheld for the duration of a trial even if enabled.
The issuer’s verdict that this license explicitly does not grant the feature. Validation treats it as final, while the feature stays present for display — a locked capability can still be shown, and reaching for it is counted as a denied check.
A product covered by the license, with the custom properties the vendor marked Public. Display/catalog metadata carried on the unsigned EndUserLicenseDto envelope, like feature names and descriptions, so it must never gate functionality. The product code and version are also in the signed token (SignedProductDto); gate on that copy.
object
The version of the product the license was issued for, for display; empty when the product has none.
object
A custom key/value property (e.g. on a product) with optional metadata entries.
object
A key/value metadata entry attached to a PropertyValueDto.
object
Whether a custom property is sent to the application with its license.
The license’s meters, one per metric name, with the unit each counts in.
A meter of the license: the metric name its usage is recorded and limited under (the key in the
signed usage_limits claim) and the unit it counts in. Display metadata carried on the unsigned
EndUserLicenseDto envelope, read from the same record as the customer API’s meter
(string MyMonitoredAssetDto.Unit), so both report the same unit. A meter of a feature the
license withholds is left out, as the feature is.
object
What the meter counts, e.g. renders or minutes; null when the meter names none.
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.
One usage event in the SDK’s client-side transaction log, uploaded (online or via the offline transaction-ingest flow) for server-side processing.
object
Monotonically increasing id assigned by the local transaction store; the server acknowledges the highest processed id.
Type name of the event object serialized into string ClientTransactionRecord.EventData.
The event payload as JSON.
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
Request-instance metadata. Same shape as the activation flow’s OfflineActivationRequestMeta — the schema is intentionally shared.
object
Wire-format major version. Currently always 1. The server refuses unknown versions to fail
fast rather than silently mis-parse.
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.
UTC timestamp at which the SDK produced the request. Used by the server as part of the idempotency cache key.
Version of the SDK assembly that produced the request. Diagnostic only; never load-bearing.
Payload — current license + accumulated transactions.
object
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
The signed license JWT the SDK validates offline against the provider’s public key.
Link to the license terms (EULA) the license was issued under: an absolute https URL, or null when the entitlement has none. Unsigned display metadata, read from the entitlement at every issue and refresh.
A feature as activated on an end-user license: the granted value, enablement, trial/grace availability, and optional per-feature expiration.
object
The metric a metered feature’s usage is recorded under, resolved by the issuer. A feature code
and its metric name are deliberately different strings (MIRAGE.IMAGE.RENDERS against
mirage.image.renders) and the server matches a meter by exact metric name, so this is the
only name usage may be reported under. Null for a feature that has no meter, or when the issuer
did not resolve one.
What the feature’s value is counted in (GB, seats, calls), read from the vendor’s catalog at every issue, for showing beside the value. Null for a Boolean feature, or when the catalog names none. Unsigned display metadata, like string? ActivatedFeatureDto.Name.
When true, the feature is withheld for the duration of a trial even if enabled.
The issuer’s verdict that this license explicitly does not grant the feature. Validation treats it as final, while the feature stays present for display — a locked capability can still be shown, and reaching for it is counted as a denied check.
A product covered by the license, with the custom properties the vendor marked Public. Display/catalog metadata carried on the unsigned EndUserLicenseDto envelope, like feature names and descriptions, so it must never gate functionality. The product code and version are also in the signed token (SignedProductDto); gate on that copy.
object
The version of the product the license was issued for, for display; empty when the product has none.
object
A custom key/value property (e.g. on a product) with optional metadata entries.
object
A key/value metadata entry attached to a PropertyValueDto.
object
Whether a custom property is sent to the application with its license.
The license’s meters, one per metric name, with the unit each counts in.
A meter of the license: the metric name its usage is recorded and limited under (the key in the
signed usage_limits claim) and the unit it counts in. Display metadata carried on the unsigned
EndUserLicenseDto envelope, read from the same record as the customer API’s meter
(string MyMonitoredAssetDto.Unit), so both report the same unit. A meter of a feature the
license withholds is left out, as the feature is.
object
What the meter counts, e.g. renders or minutes; null when the meter names none.
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.
One usage event in the SDK’s client-side transaction log, uploaded (online or via the offline transaction-ingest flow) for server-side processing.
object
Monotonically increasing id assigned by the local transaction store; the server acknowledges the highest processed id.
Type name of the event object serialized into string ClientTransactionRecord.EventData.
The event payload as JSON.
Responses
Section titled “Responses”Receipt issued successfully.
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
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.
Base64-encoded RSA-SHA256 (PKCS#1 v1.5) signature over the raw bytes inside string OfflineTransactionReceipt.SignedPayload.
Examplegenerated
{ "signedPayload": "example", "signature": "example"}Invalid request (schema mismatch, JWT validation failure, session mismatch).
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Caller lacks the operational entitlement scope, or your plan does not include usage metering (license.usage_metering_not_licensed).
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Session not found.
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Another request ingested the same transactions or activated the same license at the same time (license.operation_pending). Upload the same bundle again: usage already recorded is not counted twice.
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}