Account purchase and transaction fields
Each read operation returns the fields listed for it. Do not assume stored values are converted to another type unless a conversion is stated. Monetary scale and timestamp timezone remain unspecified. Distinguish stored activity, provider result, membership and content permission.
Purchase list item
Used by GET user/purchases. Each item represents a joined purchase/transaction/resource record for the current member, across resources.
| Field | Type / presence | Meaning |
|---|---|---|
id, item_id | integer | Local purchase and selected item IDs. |
item_type, item_key | string | Item category; resolved content key for content, string item_id otherwise. |
price, discount | integer | Recorded price and promotion deduction. |
sub_total | integer | This projection copies the stored discount into sub_total. Do not display it as the payable subtotal. |
currency | string | Recorded currency. |
renewal | boolean | Recorded renewal flag. |
created_at | timestamp string | Purchase creation time. |
processing_fee_wallkit, processing_fee_payment, processing_vat | stored numeric / nullable | Recorded fee/VAT amounts. |
processing_taxes_json_data | decoded JSON / stored value / null | Tax data; stored strings decode after fetch only when neither empty nor "0". Empty strings and the string "0" remain unchanged. Not a universal tax schema. |
relation_model, relation_id | stored string / numeric, nullable | Applied relationship category/ID when recorded. |
transaction | object | Ordinary transaction fields, without purchases. No wrapper recursion. |
user | object | Base global user, not resource-aware membership additions. |
content | object, conditional | For a resolvable content item, content with term arrays. Lookup is not passed the request resource here. |
subscription | object, conditional | For a resolvable Pricing, Pricing with full Plan. |
bundle | object, conditional | For a resolvable bundle, bundle with items. |
item | object / null | Same conditional base payment purchase item. |
relation | object / null | Membership or sponsored relationship. |
No transaction_id field is added at the top level in this projection; use transaction.id. No active-successful-transaction filter is implied by being returned.
Pricing with full Plan
General Pricing, with its nested compact plan replaced, when resolved, by the full catalog Plan. Other conditional Pricing relations and admin-only fields keep their general projection meanings.
Bundle with items
| Field | Type / presence | Meaning |
|---|---|---|
id, price | integer after fetch | Bundle ID and stored price. |
title, currency, created_at | stored text / timestamp, nullable where stored | Display title, currency and creation time. |
items.content | array | Attached base content, without classification-array expansion. |
items.subscriptions | array | Attached Pricing with full Plan. |
This describes recorded bundle content; it does not promise that the checkout tax path supports a new bundle payment.
Account transaction
Used at top level by transaction detail and inside items[] by transaction list.
| Field | Type / presence | Meaning |
|---|---|---|
id | integer | Local Wallkit transaction ID. |
status, error | stored string / nullable | Recorded local outcome/error; no complete status enum. succeeded/free/manual are treated as successful; requires_source_action is incomplete authentication. |
customer_id | unspecified presence/type | Name selected by this serializer but no declared transaction model property; do not depend on it as a valid provider identifier. |
payment_method_id | stored numeric / null | Local saved method ID. |
data, json_data, processing_taxes_json_data | decoded JSON / stored value / null | Provider answer, internal calculated items and tax data respectively. Same save/fetch encoding rules, not a closed provider schema. |
pay_system, currency, transaction_id | stored string / nullable | Provider label, currency and provider transaction/intent ID; transaction_id differs from local id. |
amount, amount_refunded, fee | integer | Recorded amounts, scale unspecified. |
connect_fee, processing_fee_wallkit, processing_fee_payment, processing_vat | stored numeric / nullable | Recorded fees/VAT. |
livemode, custom | boolean | Recorded provider mode and custom-record flag. |
created_at | stored timestamp | Local creation time. |
user | object / null | When a user ID exists: id (stored numeric), email/first_name/last_name (stored text/null). It is not a full profile. |
card | object / null | When saved card exists: id (stored numeric), card_brand/card_country/card_last4 (stored text/null), default (stored flag), expiration_date (stored text/null), created_at (stored timestamp); pay_system appended if customer exists. No full card number. |
refunds | array | Empty unless amount_refunded > 0; records with type/reason/status/currency (stored text/null), amount (integer), created_at (timestamp). These are records, not a refund action/guarantee. |
purchases | array | Transaction purchase records; empty if none. |
receipt | object / null | Selected existing receipt; no automatic generation by this read. |
payment_source | object / null | Source summary; null if mapping cannot resolve. |
Transaction purchase
Includes expanded account purchase base fields, with these exact differences: no transaction_id, no renewal field, no currency/sub_total reinterpretation. amount is the stored purchase sub_total cast to integer. item/relation have the linked base definitions. Content can add item_title/extra; Pricing can add subscription_type, item_title, plan{id,title}, and subscription{subscription_start_date,subscription_end_date,autorenew} only if a current matching member/Pricing/Plan relationship exists. That current relationship can differ from historical purchase state. No full Pricing is added under subscription in this projection.
Ticket-pass records with a resolvable event add item_title and TiEvent/TiEventTicket/TiEventTicketPass using the existing event, ticket and base pass projections. Bundle can add item_title. Missing referenced records omit those additions. This transaction projection does not add full=true item-type expansions beyond the stated conditional fields.
Receipt record
| Field | Type / presence | Meaning |
|---|---|---|
id, transaction_id, count_downloads | stored integer / nullable (annotations) | Local receipt/transaction IDs and recorded download count; no explicit fetch conversion. |
original_name | stored string / nullable | Filename sent in attachment disposition. |
active | stored flag / nullable | Availability flag checked by download. |
created_at, updated_at | stored timestamps | Receipt record creation/update times. |
download_link | string | Existing hash-bearing download URL. Possession is the download credential; no lifetime promise. Use its supplied query values, not local transaction IDs. |
Payment source summary
| Field | Type / presence | Meaning |
|---|---|---|
source_type | string | payment-method or user-card in this mapper. Method mapping is preferred, card is fallback. |
default | boolean | Saved source's default flag. |
pay_system | string | Saved customer's provider label. |
customer_id | string / null | Provider customer identifier, distinct from Wallkit numeric customer record ID. |
user_card | object / null | id (integer), card_id (string/null provider ID), card_brand/card_country/card_last4/expiration_date (string/null). Populated for card-source branch. |
payment_method | object / null | id (stored numeric), payment_method_id (stored provider string), mode (live/test), type (stored string), data (object). Populated for method branch. |
Payment-method data contains card_brand/card_country/card_last4/expiration_date (stored text/null) when type is card and its card model exists; otherwise it contains email (decoded billing email or null). These summaries are read data, not payment-method provisioning instructions.