openapi: 3.2.0 info: title: Global Api Accounts Transactions API version: 1.0.0 description: "## API idempotency \nEach `POST` request creating a resource (for example a transaction) requires to send a unique idempotency key. It is included in the `Idempotency-Key` HTTP header. Idempotency key helps prevent duplicates in your `POST` requests. We recommend using an **UUID** for the key, however you may use any other unique identifier you choose.\n\n#### Preventing duplicates \nIf we have already processed the request and you send a request using the same idempotency key, it will fail with an error, returning a ```409 Conflict``` response.\n\n## Case-sensitivity\nAll properties/keys within request's/response's payload are case-sensitive.\n\nHTTP headers' names are case-insensitive.\n\n## API base URL\n**Sandbox: [https://accounts.sandbox.volt.io]()**\n\n**Production: [https://accounts.volt.io]()**" contact: email: support@volt.io name: Volt Support url: https://www.volt.io/contact/ servers: - url: https://accounts.sandbox.volt.io description: Sandbox - url: https://accounts.volt.io description: Production security: - BearerAuth: [] tags: - name: Transactions description: Operations related to movement of funds, including payouts, settlements, and internal transactions. paths: /transactions: get: summary: List of transactions operationId: get-transactions tags: - Transactions parameters: - $ref: '#/components/parameters/XVoltApiVersion' - $ref: '#/components/parameters/LimitParam' - $ref: '#/components/parameters/PageParam' - in: query name: status[] description: Filter by transaction status (e.g. COMPLETED, REJECTED). schema: type: array items: $ref: '#/components/schemas/TransactionStatusEnum' example: - CREATED - in: query name: createdAt[gte] description: Filter for transactions created on or after this date. schema: type: string format: date-time description: ISO 8601 format (YYYY-MM-DDThh:mm:ssZ) example: '2025-07-01T10:00:00Z' - in: query name: operation[] description: Filter by operation direction (INCOMING or OUTGOING). schema: type: array items: $ref: '#/components/schemas/TransactionOperationEnum' example: - OUTGOING - in: query name: type[] description: Filter by transaction type. schema: type: array items: $ref: '#/components/schemas/TransactionTypeEnum' example: - PAYOUT - in: query name: accountId description: Filter by account. schema: type: string format: uuid example: 2f5e48b7-235a-4ba4-ad10-8aa981a73d03 - in: query name: sourceTransactionId description: Filter by source transaction id (e.g. for refunds). schema: type: string format: uuid example: 2f5e48b7-235a-4ba4-ad10-8aa981a73d03 - in: query name: aliasId description: Filter transactions by alias UUID. schema: type: string format: uuid example: f47ac10b-58cc-4372-a567-0e02b2c3d479 - in: query name: gatewayPaymentId description: Filter transactions by linked gateway payment UUID. schema: type: string format: uuid example: f47ac10b-58cc-4372-a567-0e02b2c3d479 - in: query name: iban description: Filter by exact IBAN. Matches the beneficiary, beneficiary alias or sender identification. schema: type: string example: DE07500105176551562526 - in: query name: accountNumber description: Filter by exact account number. Matches the beneficiary, beneficiary alias or sender identification. schema: type: string example: '12345678' - in: query name: order[createdAt] description: Sort order by createdAt field (desc by default). schema: allOf: - $ref: '#/components/schemas/SortOrder' responses: '200': description: Paginated list of transactions. headers: limit: $ref: '#/components/headers/PaginationLimit' page: $ref: '#/components/headers/PaginationPage' page-count: $ref: '#/components/headers/PaginationPageCount' total-items: $ref: '#/components/headers/PaginationTotalItems' content: application/json: schema: type: array items: $ref: '#/components/schemas/TransactionMinimalDetails' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '405': $ref: '#/components/responses/405' '406': $ref: '#/components/responses/406' '415': $ref: '#/components/responses/415' '422': $ref: '#/components/responses/422' '500': $ref: '#/components/responses/500' /transactions/{transactionId}: get: summary: Get transaction details operationId: get-transaction-details tags: - Transactions parameters: - $ref: '#/components/parameters/XVoltApiVersion' - name: transactionId in: path description: Unique UUID of the transaction. required: true schema: type: string format: uuid responses: '200': description: Full details of the specified transaction. content: application/json: schema: $ref: '#/components/schemas/TransactionDetails' examples: Outgoing: $ref: '#/components/examples/OutgoingResponseExample' Incoming: $ref: '#/components/examples/IncomingResponseExample' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '405': $ref: '#/components/responses/405' '406': $ref: '#/components/responses/406' '415': $ref: '#/components/responses/415' '422': $ref: '#/components/responses/422' '500': $ref: '#/components/responses/500' /accounts/{accountId}/transactions: post: summary: Create a transaction operationId: create-transaction tags: - Transactions parameters: - name: accountId in: path description: Unique identifier of the account. required: true schema: type: string format: uuid - $ref: '#/components/parameters/IdempotencyKey' - $ref: '#/components/parameters/XVoltApiVersion' - $ref: '#/components/parameters/XJWSSignature' - $ref: '#/components/parameters/XVoltTestingScenario' requestBody: required: true content: application/json: schema: required: - type properties: type: type: string description: The transaction type discriminator (PAYOUT, SETTLEMENT, INTERNAL, or REFUND). oneOf: - $ref: '#/components/schemas/SettlementTransactionRequest' - $ref: '#/components/schemas/PayoutTransactionRequest' - $ref: '#/components/schemas/InternalTransactionRequest' - $ref: '#/components/schemas/RefundTransactionRequest' discriminator: propertyName: type mapping: PAYOUT: '#/components/schemas/PayoutTransactionRequest' SETTLEMENT: '#/components/schemas/SettlementTransactionRequest' INTERNAL: '#/components/schemas/InternalTransactionRequest' REFUND: '#/components/schemas/RefundTransactionRequest' examples: payoutRequestEURExample: $ref: '#/components/examples/PayoutRequestEURExample' payoutRequestGBPExample: $ref: '#/components/examples/PayoutRequestGBPExample' settlementRequestEURExample: $ref: '#/components/examples/SettlementRequestEURExample' internalRequestEURExample: $ref: '#/components/examples/InternalRequestEURExample' refundRequestExample: $ref: '#/components/examples/RefundRequestExample' responses: '201': description: Transaction created successfully. headers: Location: schema: type: string format: uri description: Location of created transaction content: application/json: schema: type: object description: Response containing the identifier of the created transaction. properties: id: type: string format: uuid description: Unique ID of the transaction. '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' '403': $ref: '#/components/responses/403' '404': $ref: '#/components/responses/404' '405': $ref: '#/components/responses/405' '406': $ref: '#/components/responses/406' '409': $ref: '#/components/responses/409' '415': $ref: '#/components/responses/415' '422': $ref: '#/components/responses/422' '500': $ref: '#/components/responses/500' components: examples: PayoutRequestGBPExample: value: type: PAYOUT amount: 5000 currency: GBP paymentReference: UK-Payout internalReference: INT-101 beneficiary: name: John Doe country: GBP email: email@email.com accountIdentifiers: accountNumber: '12345678' sortCode: '123456' address: addressLine1: 123, Main Street addressLine2: '' city: London postalCode: '12332' country: GB communication: notifications: url: https://mywebsite.com/webhooks SettlementRequestEURExample: value: type: SETTLEMENT amount: 25000 currency: EUR paymentReference: Weekly-Settlement internalReference: SETTLE-01 beneficiary: trustedAccountId: efffed42-40f7-4bd2-840d-908aae9a33ad communication: notifications: url: https://mywebsite.com/webhooks InternalRequestEURExample: value: type: INTERNAL amount: 100 currency: EUR paymentReference: REBALANCE-EUR-01 internalReference: LIQUIDITY-MOVE-2025 beneficiary: accountId: 998275d3-70a9-4448-822a-ba1a38e0b715 communication: notifications: url: https://mywebsite.com/webhooks IncomingResponseExample: value: id: efffed42-40f7-4bd2-840d-908aae9a33ad status: COMPLETED failure: null operation: INCOMING type: MANUAL_CREDIT subtype: null createdAt: '2025-07-01T10:00:00Z' updatedAt: '2025-07-01T10:05:00Z' amount: 500 currency: EUR paymentReference: Payin paymentRail: SEPA beneficiary: name: Your Company Name country: DE customerId: 2f5e48b7-235a-4ba4-ad10-8aa981a73d03 accountId: 7523a8d3-70a9-4448-822a-ba1a38e0b715 alias: aliasId: f47ac10b-58cc-4372-a567-0e02b2c3d479 accountIdentifiers: iban: DE33500105173822933531 sender: name: John Doe country: LT accountIdentifiers: iban: DE07500105176551562526 swiftBic: '123456' address: addressLine1: 123, Main Street addressLine2: '' city: New York City postalCode: '12332' country: US _links: self: href: https://accounts.volt.io/transactions/efffed42-40f7-4bd2-840d-908aae9a33ad method: GET PayoutRequestEURExample: value: type: PAYOUT amount: 1000 currency: EUR paymentReference: Reconciliation-1 internalReference: INT-99 beneficiary: name: John Doe email: email@email.com accountIdentifiers: iban: DE07500105176551562526 swiftBic: '123456' address: addressLine1: 123, Main Street addressLine2: '' city: Berlin postalCode: '12332' country: DE communication: notifications: url: https://mywebsite.com/webhooks OutgoingResponseExample: value: id: efffed42-40f7-4bd2-840d-908aae9a33ad status: COMPLETED failure: null operation: OUTGOING type: PAYOUT subtype: OPEN_LOOP createdAt: '2019-08-24T14:15:22Z' updatedAt: '2019-08-25T14:15:22Z' amount: 500 currency: EUR paymentReference: Payout123456 internalReference: H35X48Y4FWOD6G3S paymentRail: SEPA beneficiary: name: John Doe country: GB email: email@email.com accountIdentifiers: iban: DE07500105176551562526 address: addressLine1: 123, Main Street addressLine2: '' city: London postalCode: '12332' country: GB sender: name: Account Holding customerId: efffed42-40f7-4bd2-840d-908aae9a33ad accountId: efffed42-40f7-4bd2-840d-908aae9a33ad accountIdentifiers: iban: DE07500105176551562526 swiftBic: '123456' initiatedBy: user: id: efffed42-40f7-4bd2-840d-908aae9a33ad name: Robert Robertson type: USER decisions: - user: id: efffed42-40f7-4bd2-840d-908aae9a33ad name: Robert Robertson type: USER type: APPROVED createdAt: '2019-08-24T14:15:22Z' _links: self: href: https://accounts.volt.io/transactions/efffed42-40f7-4bd2-840d-908aae9a33ad method: GET RefundRequestExample: value: type: REFUND sourceTransactionId: a1b2c3d4-e5f6-7890-abcd-ef1234567890 amount: 1000 currency: EUR paymentReference: Refund-Order-42 internalReference: REFUND-INT-01 communication: notifications: url: https://mywebsite.com/webhooks schemas: Error401Response: type: object description: Error response for HTTP 401 Unauthorized. properties: code: type: string description: Error code. enum: - UNAUTHORISED message: type: string description: Error message. required: - code - message Error403Response: type: object description: Error response for HTTP 403 Forbidden. properties: code: type: string description: Error code. enum: - ACCESS_DENIED message: type: string description: Error message. required: - code - message TransactionMinimalDetails: type: object properties: id: type: string format: uuid description: Unique UUID of the transaction generated by Volt. status: $ref: '#/components/schemas/TransactionStatusEnum' failure: $ref: '#/components/schemas/Failure' operation: $ref: '#/components/schemas/TransactionOperationEnum' type: $ref: '#/components/schemas/TransactionTypeEnum' subtype: $ref: '#/components/schemas/TransactionSubTypeEnum' createdAt: type: string format: date-time description: The timestamp when the transaction was initially created (ISO 8601). updatedAt: type: string format: date-time description: The timestamp of the last status update (ISO 8601). amount: $ref: accounts-common.yaml#/components/schemas/Amount currency: $ref: '#/components/schemas/CurrencyCode' paymentReference: $ref: '#/components/schemas/PaymentReference' internalReference: $ref: '#/components/schemas/InternalReference' paymentRail: type: - string - 'null' description: The specific infrastructure used to move the funds (e.g. SEPA_INSTANT, FPS). beneficiary: $ref: '#/components/schemas/Beneficiary' sender: $ref: '#/components/schemas/Sender' initiatedBy: $ref: '#/components/schemas/InitiatedBy' gatewayPaymentId: type: - string - 'null' format: uuid description: UUID of the linked gateway payment, if transaction was matched with a Volt Connect payment. sourceTransactionId: type: - string - 'null' format: uuid description: UUID of the source transaction (e.g. the original transaction being refunded, reversed, or returned). decisions: type: array items: $ref: '#/components/schemas/Decision' verifications: type: object description: Group of verification results. properties: accountHolderVerification: allOf: - $ref: '#/components/schemas/AccountHolderVerification' Failure: type: object description: Details regarding why a transaction was not successful. properties: code: type: string description: A standardized machine-readable error code indicating why the transaction failed. TransactionTypeEnum: type: string enum: - PAYOUT - SETTLEMENT - REFUND - INTERNAL - GATEWAY_PAYMENT - MANUAL_CREDIT - TOP_UP - BOUNCE_BACK - REVERSAL TransactionDetails: type: object allOf: - $ref: '#/components/schemas/TransactionMinimalDetails' - type: object properties: _links: $ref: '#/components/schemas/TransactionLinks' InternalTransactionRequest: type: object required: - type - amount - currency - beneficiary - paymentReference properties: type: type: string description: Must be set to INTERNAL. amount: $ref: accounts-common.yaml#/components/schemas/Amount currency: $ref: '#/components/schemas/CurrencyCode' paymentReference: $ref: '#/components/schemas/PaymentReference' internalReference: $ref: '#/components/schemas/InternalReference' beneficiary: type: object description: The unique UUID of the account receiving the funds. required: - accountId properties: accountId: type: string format: uuid description: Target internal account ID. communication: $ref: '#/components/schemas/Communication' AccountHolderVerification: type: object description: Account Holder Verification basic information. properties: id: type: string format: uuid description: Unique verification ID. result: $ref: '#/components/schemas/VerificationResult' executedAt: type: string format: date-time description: Timestamp of Account Holder Verification Execution. TransactionSubTypeEnum: type: string enum: - OPEN_LOOP - CLOSE_LOOP - VERIFIED - PARTIAL - FULL Performer: type: object properties: id: type: string format: uuid description: Unique UUID of the action's performer. name: type: string description: The full name of the performer. type: type: string description: The type of the performer. enum: - USER - API_CLIENT OutgoingTransactionRequestBeneficiary: type: object required: - name - accountIdentifiers properties: name: type: string description: The name of the beneficiary. minLength: 1 maxLength: 35 pattern: ^(?=.*\S)[a-zA-Z0-9\/\-?:().,'+ ]*$ email: type: string description: The email address of the beneficiary. format: email pattern: ^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$ accountIdentifiers: $ref: accounts-common.yaml#/components/schemas/AccountIdentifier address: type: object description: Optional additional address information required: - addressLine1 - city - country properties: addressLine1: type: string maxLength: 35 pattern: ^(?! *$)(?!.*\/\/)(?![:\-\/])[0-9A-Za-z\/\-?:().,'+_ ]+(?