OperationDto
One movement on the portal wallet: what it was for, who caused it, and how much money it moved.
| Name | Type | Description | Notes |
|---|---|---|---|
| date | ApiDateTime | When the movement was booked, in the portal time zone - the same zone the startDate and endDate filters are read in, so the two do line up here. | [optional] |
| service | String | The wallet service the movement belongs to, by its stable key. It is what the serviceName filter matches on, and it is empty for a movement that belongs to no service, such as a top-up. | [optional] [example: disk-storage] [nullable] |
| description | String | A one-line summary of the movement in the portal language, already composed from the service and the quantity - meant to be printed as it is rather than parsed. | [optional] [example: Storage quota increase] [nullable] |
| details | String | The longer explanation of the same movement, where the service recorded one. It is empty for a movement that has nothing to add to description. | [optional] [example: Increased storage from 50GB to 100GB] [nullable] |
| serviceUnit | String | What quantity counts for this service, in the portal language. AI consumption is reported in tokens here rather than in the AI credits the service is sold in. | [optional] [example: GB] [nullable] |
| quantity | Integer (int32) | How many units the movement covers, in the unit named by serviceUnit. It is 0 for a movement that moves money without consuming a service. | [optional] [example: 1] |
| currency | String | The currency credit and debit are expressed in, as a three-letter ISO 4217 code. It is the accounting currency of the wallet, which need not be the currency the subscription is priced in. | [optional] [example: USD] [nullable] |
| credit | Double (double) | The amount that went into the wallet. It is 0 on a movement that only took money out, so the pair of credit and debit is what shows which way the money went; the credit and debit filters of the operation select the two directions by exactly this. | [optional] [example: 99.99] |
| debit | Double (double) | The amount that was taken out of the wallet, 0 on a movement that put money in. | [optional] [example: 99.99] |
| cost | Double (double) | What the AI provider charged for the whole quantity of an AI tools or AI search charge, as the billing service recorded it - the provider's side of the same operation debit bills the portal for. It is null on any other movement, and on an AI charge recorded without a provider cost. | [optional] [example: 0.007] [nullable] |
| participantName | String | Who caused the movement, as the billing service records them - an internal name, which is what the participantName filter matches on. Show participantDisplayName instead. | [optional] [example: john.doe@example.com] [nullable] |
| participantDisplayName | String | The same person as their portal display name. It falls back to participantName when the name belongs to no portal account, so it is never empty while participantName is filled. | [optional] [example: John Doe] [nullable] |
| sourceType | String | What kind of thing an AI operation was run on - an agent, a file, a folder, a room or a form. It is empty on any movement that is not an AI charge. | [optional] [example: Agent] [nullable] |
| sourceTitle | String | The title that thing had when the operation ran, kept as recorded, so it does not follow a later rename. Empty under the same conditions as sourceType. | [optional] [example: My AI Agent] [nullable] |
| sourceId | String | The identifier of that thing, to look it up in the module it belongs to. Empty under the same conditions as sourceType. | [optional] [example: 123] [nullable] |
| tokenUsage | OperationTokenUsageDto | The tokens an AI operation consumed, broken down by kind - prompt, completion, cache reads and writes, reasoning, images. It is null on any movement that is not an AI charge, and on an AI charge the billing service recorded without token counts. | [optional] |
| type | OperationType | What kind of movement this is - a payment, a charge, a refund, a correction. It is what the type filter matches on, and Unknown covers a movement the billing service reported under a kind this build does not recognise. | [optional] [enum: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] |