跳到主要内容

OperationDto

One movement on the portal wallet: what it was for, who caused it, and how much money it moved.

NameTypeDescriptionNotes
dateApiDateTimeWhen 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]
serviceStringThe 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]
descriptionStringA 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]
detailsStringThe 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]
serviceUnitStringWhat 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]
quantityInteger (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]
currencyStringThe 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]
creditDouble (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]
debitDouble (double)The amount that was taken out of the wallet, 0 on a movement that put money in.[optional] [example: 99.99]
costDouble (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]
participantNameStringWho 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]
participantDisplayNameStringThe 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]
sourceTypeStringWhat 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]
sourceTitleStringThe 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]
sourceIdStringThe 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]
tokenUsageOperationTokenUsageDtoThe 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]
typeOperationTypeWhat 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]