Reports usage for one metered dimension of a subscription and relays Microsoft's verdict. This is a billing action: accepted usage lands on the customer's Azure invoice.
Idempotency. Microsoft accepts one usage event per subscription, dimension and hour (the hour of effectiveStartTime). WeTransact applies the same rule before calling Microsoft, but only against reports Microsoft has accepted, so a failed attempt never blocks its own retry.
Safe retry recipe. Store the effectiveStartTime you send. After a timeout, 429 or 502, resend the identical request. You will get 200 (landed now) or 409 (had already landed, with the original ids), never a double charge. Every error body from this endpoint says whether a retry is safe (Retryable on 409/422/502, retryable on 400/404); the 429 from the concurrency limiter has no body.
| HTTP | Meaning | Retry? |
|---|---|---|
| 200 | Microsoft accepted the usage event | No |
| 400 | Invalid input | Fix first |
| 404 | Subscription or dimension unknown | Fix first |
| 409 | Already reported for this hour (ours or Microsoft Duplicate) | No |
| 422 | Microsoft rejected the event, see Microsoft.Status | Fix first |
| 429 | Too many concurrent charges | Yes, same effectiveStartTime |
| 502 | Microsoft unreachable, timed out or 5xx; outcome unknown | Yes, same effectiveStartTime |
- Mock serverhttps://apidocs.wetransact.io/_mock/openapi/api/v1.0/subscriptions/{subscriptionId}/actions/charge
- WeTransact Publisher API Base URLhttps://<yoursubdomain>.wetransact.io/api/v1.0/subscriptions/{subscriptionId}/actions/charge
curl -i -X POST \
'https://apidocs.wetransact.io/_mock/openapi/api/v1.0/subscriptions/aa930163-2330-45c2-a17c-dd325f9f2d44/actions/charge?dimensionId=transaction_tier_1&quantity=5&effectiveStartTime=2026-09-07T10%3A00%3A00Z' \
-H 'x-api-key: YOUR_API_KEY_HERE'Microsoft accepted the usage event.
WeTransact's record of this report. Quote it to support when a charge is disputed.
The usage hour that was reported, UTC. Resend the same value when retrying.
True only when Microsoft was unreachable or answered 5xx (HTTP 502). Never true on 2xx, 409 or 422.
Set on an accepted charge when the caller is doing something that will hurt them later. Today: effectiveStartTime was omitted, so a retry after the hour boundary would be a new, billable event. Null when there is nothing to warn about.
{ "Timestamp": "2026-09-07T10:42:11Z", "MeterId": "transaction_tier_1", "MeterName": "Transactions tier 1", "Unit": "transaction", "Quantity": 5, "Success": true, "Message": "Success", "UsageReportEventId": "2b7f0c3a-5e1d-4a9b-9c2e-7d8f1a2b3c4d", "EffectiveStartTime": "2026-09-07T10:00:00Z", "Retryable": false, "Microsoft": { "StatusCode": 200, "Status": "Accepted", "UsageEventId": "6f8b3c1e-9a2d-4b7e-8c1f-2d3e4f5a6b7c", "Message": null } }