{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/atlar/main/json-schema/atlar-transaction-schema.json", "title": "Transaction", "x-generated": "2026-10-14", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/atlar-api-v2-openapi.yml#/components/schemas/Transaction", "type": "object", "properties": { "id": { "$ref": "#/$defs/ResourceID" }, "organizationId": { "$ref": "#/$defs/OrganizationID" }, "accountId": { "type": "string", "description": "The ID of the account which the transaction is booked on.", "readOnly": true }, "date": { "description": "Booking date of the transaction on your account. This is a local date with no timezone from your account's point-of-view.", "$ref": "#/$defs/Date", "readOnly": true }, "amount": { "$ref": "#/$defs/Amount", "readOnly": true }, "reference": { "type": "string", "description": "Transaction reference. (This type of reference is sometimes also referred to as remittance information.)", "readOnly": true }, "references": { "$ref": "#/$defs/TransactionReferences", "readOnly": true }, "reconciliationStatus": { "$ref": "#/$defs/TransactionReconciliationStatus", "readOnly": true }, "counterparty": { "$ref": "#/$defs/CounterpartyDetails", "readOnly": true }, "description": { "type": "string", "description": "In most cases, the description will contain the same value (text) as the remittance information.\nIf the remittance information lacks clarity or meaning, the description can be derived from\nthe bank transaction code instead. This description field is intended solely for displaying\na meaningful description to users.", "readOnly": true }, "instructedAmount": { "description": "The amount that the initiator of the transaction instructed.", "$ref": "#/$defs/Amount", "readOnly": true }, "bankTransactionCode": { "$ref": "#/$defs/BankTransactionCode", "readOnly": true }, "valueDate": { "description": "Value date of the transaction on your account. This is a local date with no timezone from your account's point-of-view.", "$ref": "#/$defs/Date", "readOnly": true }, "returned": { "type": "boolean", "description": "Whether or not the transaction is considered a return or reversal.", "readOnly": true }, "returnReason": { "description": "Populated if the transaction is a return transaction, e.g. a payment reversal/return.", "$ref": "#/$defs/ReturnReason", "readOnly": true }, "currencyExchange": { "description": "If any currency conversion happened at the bank holding the account, conversion details may be present here.", "$ref": "#/$defs/CurrencyExchange", "readOnly": true }, "charges": { "description": "Charges associated with the transaction, as reported by the bank.", "type": "array", "items": { "$ref": "#/$defs/TransactionCharge" }, "readOnly": true, "x-omitempty": true }, "virtualAccount": { "description": "If a virtual account was used for the transaction the details of that virtual account may be present here.", "$ref": "#/$defs/TransactionVirtualAccount", "readOnly": true }, "batchInformation": { "description": "Information about the batch that the transaction belongs to.", "$ref": "#/$defs/BatchInformation", "readOnly": true }, "attachedTransactables": { "type": "array", "items": { "$ref": "#/$defs/AttachedTransactableRef" }, "readOnly": true }, "internalTransfer": { "description": "Set when this transaction is one leg of an `InternalTransfer` — populated as soon as either leg of the\nunderlying movement is observed by the detector (the `InternalTransfer` may still be `PENDING` with the\ncounterpart transaction id empty). Populated asynchronously, so a transaction may initially be returned\nwithout this field and later carry it after a `Transaction UPDATED` event.\n", "$ref": "#/$defs/InternalTransferRef", "readOnly": true }, "created": { "$ref": "#/$defs/CreatedTimestamp" }, "updated": { "$ref": "#/$defs/UpdatedTimestamp" }, "version": { "$ref": "#/$defs/ResourceVersion" }, "etag": { "$ref": "#/$defs/ETag" }, "metadata": { "$ref": "#/$defs/Metadata", "readOnly": true } }, "required": [ "id", "organizationId", "accountId", "date", "amount", "reconciliationStatus", "description", "created", "updated", "version", "etag", "attachedTransactables", "returned" ], "$defs": { "AccountIdentifier": { "type": "object", "properties": { "type": { "$ref": "#/$defs/AccountIdentifierType" }, "market": { "$ref": "#/$defs/MarketCode", "description": "The market of the `AccountIdentifier` specifies in which market-context the identifier should be treated.\n\nA `NUMBER` from Sweden does not look and does not validate in the same way as a `NUMBER` from GB. The market\ncode is, in most cases, the same as where the account itself is domiciled, but not necessarily. An examples\nof this discrepancy is Jersey which may have domiciled accounts with market `JE`, but the account identifier\nwould be an `IBAN` with country code `GB`." }, "number": { "type": "string", "description": "The unformatted identifier itself. For type `NUMBER` the structure of the account number is country-specific.", "minLength": 1, "maxLength": 255 }, "invalid": { "type": "boolean", "description": "Will be `true` if the account identifier is invalid according to Atlar account identifier validation rules.", "readOnly": true } }, "required": [ "type", "market", "number" ] }, "AccountIdentifierType": { "type": "string", "enum": [ "IBAN", "NUMBER", "ADYEN", "AU_BPAY_BILLER_CODE", "DK_FIK", "INVESTMENT_NUMBER", "NATIONAL_ID_NUMBER", "PAYPAL", "PROPRIETARY", "SE_BANKGIRO", "SE_PLUSGIRO", "SOLDO", "WALLET_ADYEN_BALANCE_PLATFORM", "WALLET_AIRWALLEX", "WALLET_AIRWALLEX_NUMBER", "WALLET_CURRENCYCLOUD", "WALLET_FLASH_PAYMENTS", "WALLET_FREEMARKET", "WALLET_HYPERWALLET", "WALLET_INPAY", "WALLET_LEAD", "WALLET_MERCURY", "WALLET_MONEYCORP", "WALLET_PAYHAWK", "WALLET_REVOLUT", "WALLET_SKRILL", "WALLET_STRIPE", "WALLET_SWISSQUOTE", "WALLET_UNIT" ], "description": "Account Identifier type. Choose among:\n
IBAN — IBANNUMBER — Account numberADYEN — Adyen identifierAU_BPAY_BILLER_CODE — Australian BPAY Biller CodeDK_FIK — FIK creditor numberINVESTMENT_NUMBER — Investment numberNATIONAL_ID_NUMBER — National Identification NumberPAYPAL — PayPal wallet identifierPROPRIETARY — Proprietary identifierSE_BANKGIRO — Bankgiro numberSE_PLUSGIRO — Plusgiro numberSOLDO — Soldo entity identifierWALLET_ADYEN_BALANCE_PLATFORM — Adyen balance platform wallet identifierWALLET_AIRWALLEX — Airwallex wallet identifierWALLET_AIRWALLEX_NUMBER — Airwallex account numberWALLET_CURRENCYCLOUD — Currencycloud wallet identifierWALLET_FLASH_PAYMENTS — Flash Payments wallet identifierWALLET_FREEMARKET — Freemarket wallet identifierWALLET_HYPERWALLET — Hyperwallet wallet identifierWALLET_INPAY — Inpay account identifierWALLET_LEAD — Lead wallet identifierWALLET_MERCURY — Mercury wallet identifierWALLET_MONEYCORP — Moneycorp wallet identifierWALLET_PAYHAWK — Payhawk wallet identifierWALLET_REVOLUT — Revolut wallet identifierWALLET_SKRILL — Skrill wallet identifierWALLET_STRIPE — Stripe wallet identifierWALLET_SWISSQUOTE — Swissquote wallet identifierWALLET_UNIT — Unit wallet identifier