One movement on the portal wallet: what it was for, who caused it, and how much money it moved.
| Name | Type | Description | Notes |
|---|---|---|---|
| var_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 | str | 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] |
| description | str | 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] |
| details | str | 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] |
| service_unit | str | 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] |
| quantity | int | 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] |
| currency | str | 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] |
| credit | float | 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] |
| debit | float | The amount that was taken out of the wallet, 0 on a movement that put money in. |
[optional] |
| cost | float | 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] |
| participant_name | str | 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] |
| participant_display_name | str | 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] |
| source_type | str | 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] |
| source_title | str | 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] |
| source_id | str | The identifier of that thing, to look it up in the module it belongs to. Empty under the same conditions as sourceType. |
[optional] |
| token_usage | 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] |
from docspace_api_sdk.models.operation_dto import OperationDto
# TODO update the JSON string below
json = "{}"
# create an instance of OperationDto from a JSON string
operation_dto_instance = OperationDto.from_json(json)
# print the JSON string representation of the object
print(OperationDto.to_json())
# convert the object into a dict
operation_dto_dict = operation_dto_instance.to_dict()
# create an instance of OperationDto from a dict
operation_dto_from_dict = OperationDto.from_dict(operation_dto_dict)