Submits a batch of usage transactions captured against a license session.
const url = 'https://example.com/api/v1/provision/usage/sessions/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/transactions';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '[{"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/usage/sessions/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/transactions \ --header 'Content-Type: application/json' \ --data '[ { "transactionId": 1, "sessionId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "apiVersion": 1, "creationDateTime": "2026-04-15T12:00:00Z", "eventName": "example", "eventData": "example" } ]'Requires the license token issued for this session — not a user or service bearer. The token is bound to the session it was issued for, so a bearer that authenticates successfully but was issued for a different session, or for a user, is refused with 403. Send no bearer and the request is 401.
SDK callers get this automatically: the client captures the license token during activation through its authentication provider, so the first upload already carries it.
The response states what the server did with the batch: the highest transaction id it now holds for the session (records up to it may be purged client-side), how many records were newly acknowledged, and whether the session’s entitlement resolved at all — when it did not, nothing was recorded and the client must keep the batch.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Active license session. Must be the session the bearer token was issued for.
Request Bodyrequired
Section titled “Request Bodyrequired”Batch of client-side usage records.
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.
Examplegenerated
[ { "transactionId": 1, "sessionId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "apiVersion": 1, "creationDateTime": "2026-04-15T12:00:00Z", "eventName": "example", "eventData": "example" }]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.
Examplegenerated
[ { "transactionId": 1, "sessionId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "apiVersion": 1, "creationDateTime": "2026-04-15T12:00:00Z", "eventName": "example", "eventData": "example" }]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.
Examplegenerated
[ { "transactionId": 1, "sessionId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "apiVersion": 1, "creationDateTime": "2026-04-15T12:00:00Z", "eventName": "example", "eventData": "example" }]Responses
Section titled “Responses”OK
What a session usage upload actually did with the batch. A bare 200 cannot distinguish “every record was ingested” from “every record was skipped as already ingested” from “the session’s entitlement no longer resolves, nothing was recorded”; the client purges its local copy on the first and must retain it on the last, so the server states which it was.
object
The highest transaction id the server has recorded for the session after this upload; records up to and including it may be purged locally.
How many records of this batch were newly recorded (the rest were already ingested).
False when the session’s entitlement could not be resolved and nothing was recorded; the client must retain the batch. Null when the server did not state the outcome, which the client reads as accepted, like a bodyless answer.
What a session usage upload actually did with the batch. A bare 200 cannot distinguish “every record was ingested” from “every record was skipped as already ingested” from “the session’s entitlement no longer resolves, nothing was recorded”; the client purges its local copy on the first and must retain it on the last, so the server states which it was.
object
The highest transaction id the server has recorded for the session after this upload; records up to and including it may be purged locally.
How many records of this batch were newly recorded (the rest were already ingested).
False when the session’s entitlement could not be resolved and nothing was recorded; the client must retain the batch. Null when the server did not state the outcome, which the client reads as accepted, like a bodyless answer.
Examplegenerated
{ "lastAcceptedTransactionId": 1, "transactionsAccepted": 1, "entitlementResolved": true}What a session usage upload actually did with the batch. A bare 200 cannot distinguish “every record was ingested” from “every record was skipped as already ingested” from “the session’s entitlement no longer resolves, nothing was recorded”; the client purges its local copy on the first and must retain it on the last, so the server states which it was.
object
The highest transaction id the server has recorded for the session after this upload; records up to and including it may be purged locally.
How many records of this batch were newly recorded (the rest were already ingested).
False when the session’s entitlement could not be resolved and nothing was recorded; the client must retain the batch. Null when the server did not state the outcome, which the client reads as accepted, like a bodyless answer.
Examplegenerated
{ "lastAcceptedTransactionId": 1, "transactionsAccepted": 1, "entitlementResolved": true}Unauthorized
object
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}Forbidden
object
object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}object
Examplegenerated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "instance": "example"}