openapi: 3.0.1
info:
title: Token.io's Open Banking API for TPPs Account on File Transfers - for Payments v1 API
description: '<b>Token.io''s Open Banking API</b><br/><br/>Token.io Support: <a href="https://support.token.io" target="_blank">support.token.io</a><br/><br/>The Token.io Open Banking API enables you to connect securely with banks for a range of services.<br/><br/> Using our API you can: <ul><li>provide authorized access to an authenticated user''s account information</li><li>get information on specific banks</li><li>initiate authorization with a user-selected bank</li><li>initate and track single immediate payments and future dated payments</li><li>use variable recurring payments (VRP) to grant long-held consents to Payment Initiation Service Providers (PISPs) to initiate series of payments from users'' bank accounts</li><li>carry out settlements, payments and refunds using our settlement accounts</li></ul><br/>For more information see our <a href="https://developer.token.io/token_rest_api_doc/content/e-rest/dashboard-intro.htm" target="_blank">developer documentation</a>.'
version: ''
servers:
- url: https://api.token.io
tags:
- name: Transfers - for Payments v1
description: These endpoints relate to transfers, which are requests to move money between accounts.
paths:
/transfers:
post:
tags:
- Transfers - for Payments v1
summary: Redeem a transfer token
description: The `POST /transfers` endpoint is only required when you explicitly redeem the request token, <i>i.e.</i>, auto-redeem is not enabled.
operationId: GatewayService.CreateTransfer
x-internal: true
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTransferRequest'
required: true
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/CreateTransferResponse'
'400':
description: The client specified an invalid argument
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_400'
'401':
description: The authorization information is missing or invalid
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_401'
'403':
description: Permission to access this endpoint is denied
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_403'
'404':
description: The requested entity, such as a payment, was not found
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_404'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_429'
'500':
description: An unexpected or internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_500'
'501':
description: The operation was not implemented
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_501'
'503':
description: Service is unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_503'
'504':
description: Gateway has timed out
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_504'
deprecated: false
security:
- Bearer: []
- BasicAuth: []
x-hideTryItPanel: true
get:
tags:
- Transfers - for Payments v1
summary: Get transfers
description: The `GET /transfers` endpoint retrieves information for all transfers.
operationId: GatewayService.GetTransfers
parameters:
- name: tokenId
in: query
description: Identifies the authorization token for the request.
required: false
style: form
explode: true
schema:
type: string
example: rq:ej5ACWNwi1EcqBeuDPc4Z8C4Bgc:5zKtXEAq
- name: page.offset
in: query
description: The offset for the current page. If the offset has been provided in the request, this offset will be equal to the provided one. But if no offset was provided in the request (<i>i.e.</i> this is the first page) and the page is not empty, this field will be populated with a non-empty string. This may be helpful for loading the same page again, which might not always be possible with an empty offset due to a dynamic nature of the data. <br/>The offset is not visible to a user and should not be parsed and/or understood in any way.
required: false
style: form
explode: true
schema:
type: string
example: LerV6Jmex
- name: page.limit
in: query
description: The maximum number of records to return. This must be less than 200.
required: true
style: form
explode: true
schema:
type: integer
format: int32
example: 175
default: 1
- name: filter.tokenId
in: query
description: Filters by the authorization token id.
required: false
style: form
explode: true
schema:
type: string
example: tt:3kFGtpEKHu8S2fJuEkb6YPnHZ4bJ2oUrYPCsJop68vCH:5zKcENpV
- name: filter.startTimeMs
in: query
description: Filtered list start time boundary in milliseconds, 1 day (24 hours) = 8640000000, 1 hour = 36000000, and 1 minute = 60000.
required: false
style: form
explode: true
schema:
type: string
format: string
example: 72799
- name: filter.endTimeMs
in: query
description: Filtered list end time boundary in milliseconds, 1 day (24 hours) = 8640000000, 1 hour = 36000000, and 1 minute = 60000.
required: false
style: form
explode: true
schema:
type: string
format: string
example: 3341983424
- name: filter.transactionStatus
in: query
description: Filters by transaction status. <ul> <li><b>PROCESSING</b> – This status indicates that the transaction is in process and that the final status has not been received from the bank.</li><li><b>SUCCESS</b> – This status indicates that successful payment initiation has been received from the bank. Settlement might not be complete.</li> <li><b>INITIATED</b> – This status is set when the previous status has remained as `PROCESSING` for 30 days and cannot be updated. The transaction has been initiated but the result is unknown. This is the final status and will not get updated later because Token.io has stopped polling the bank.<br/> This status is also returned in a two-step payment flow in the event that a user’s request has been authorized at the bank but the payment confirmation has subsequently failed.</li><li><b>PENDING_EXTERNAL_AUTHORIZATION</b> – This status indicates that the user has been sent to the bank to complete the authorization process. If not completed within the allowed timeframe (usually around 15 mins, but there are variations between banks) the transaction will expire and transition to `FAILURE_EXPIRED`. This status is only relevant for 1-step payment flows.</li> <li><b>FAILURE_GENERIC</b> – This status usually indicates a technical failure. Possibly, a failure callback was received from the bank, with no transaction status and no further information.</li> <li><b>FAILURE_PERMISSION_DENIED</b> – This status indicates that the user has been denied authorization at the bank This status is only relevant for two-step payment flows.</li> <li><b>FAILURE_CANCELED</b> – This status indicates that the payment initiation has been canceled before execution.</li> <li><b>FAILURE_EXPIRED</b> – This status indicates that the user did not complete the authorization process within the allowed timeframe (usually around 15 mins, but there are variations between banks) and the payment has expired.</li> <li><b>FAILURE_INSUFFICIENT_FUNDS</b> – This status indicates that the payment initiation request has been rejected due to insufficient funds.</li> <li><b>FAILURE_DECLINED</b> – This status indicates that the payment initiation has been rejected by the bank.</li> <li><b>SETTLEMENT_IN_PROGRESS</b> – This status is provided when a Token.io settlement account is used as the beneficiary for the payment, and replaces the payment initiation status. Token.io is waiting for the payment to reach the payee bank. No action is required; await the next step, <i>e.g.</i>, Token.io sends a webhook with the status update, or a polling call. The status will change to `SETTLEMENT_IN_PROGRESS` soon after Token.io receives the final status from the debtor bank.</li> <li><b>SETTLEMENT_COMPLETED</b> – This status is provided when a Token.io settlement account is used as the beneficiary for the payment, and replaces the payment initiation status. The payment has reached the payee bank and Token.io has matched the transaction in the TPP’s settlement account to the initiated payment. For instant payments, `SETTLEMENT_COMPLETED` will be achieved within 30-45 minutes from payment initiation, at the latest. For non-instant payments, the time to reach `SETTLEMENT_COMPLETED` will depend on the clearing period for the payment.</li><li><b>SETTLEMENT_INCOMPLETE</b> – This status is provided when a Token.io settlement account is used as the beneficiary for the payment, and replaces the payment initiation status. Reconciliation has failed. This happens when Token.io doesn't find the corresponding transaction in the TPP’s settlement account automatically.</li></ul><br/>During settlement of a settlement accounts payment, the status update job will run first for up to 30 days. Payment will then enter into a 'final' status, normally `SUCCESS`.<br/>Once the status update job has run, the reconciliation job looks for matching inbound payments.For SEPA payments:<ul><li>if a matching inbound payment is found within 15 days of the final payment status update -> `SETTLEMENT_COMPLETED`</li><li>if no matching inbound payment is found within 15 days of the final payment status update -> `SETTLEMENT_INCOMPLETE`</li></ul>For SEPA Instant payments:<ul><li>if a matching inbound payment is found within 1 day of the final payment status update -> `SETTLEMENT_COMPLETED`</li><li>if no matching inbound payment is found within 1 day of the final payment status update -> `SETTLEMENT_INCOMPLETE`</li></ul>
required: false
style: form
explode: true
schema:
title: filter.transactionStatus
type: string
example: SUCCESS
enum:
- PROCESSING
- SUCCESS
- INITIATED
- PENDING
- PENDING_EXTERNAL_AUTHORIZATION
- FAILURE GENERIC
- FAILURE_PERMISSION_DENIED
- FAILURE_CANCELED
- FAILURE_EXPIRED
- FAILURE_INSUFFICIENT_FUNDS
- FAILURE_DECLINED
- SETTLEMENT_IN_PROGRESS
- SETTLEMENT_COMPLETED
- SETTLEMENT_INCOMPLETE
- name: filter.role
in: query
description: Filters list by the account holder role.
required: false
style: form
explode: true
schema:
type: string
example: PAYER
enum:
- ANY
- PAYER
- PAYEE
- name: filter.actingAsRefId
in: query
description: Filters the list by the sub-TPP identifier generated by Token.io once a TPP has been onboarded.
required: false
style: form
explode: true
schema:
type: string
example: 4kwl35c9sp3fwp4xq
- name: filter.refId
in: query
description: Filters list by `refID`.
required: false
style: form
explode: true
schema:
type: string
example: 9htio4a1sp2akdr1aa
- name: filter.transferRefundStatus
in: query
description: Filters list by refund status.
required: false
style: form
explode: true
schema:
type: string
example: PARTIAL
enum:
- UNSET
- NONE
- PARTIAL
- FULL
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/GetTransfersResponse'
'400':
description: The client specified an invalid argument
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_400'
'401':
description: The authorization information is missing or invalid
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_401'
'403':
description: Permission to access this endpoint is denied
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_403'
'404':
description: The requested entity, such as a payment, was not found
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_404'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_429'
'500':
description: An unexpected or internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_500'
'501':
description: The operation was not implemented
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_501'
'503':
description: Service is unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_503'
'504':
description: Gateway has timed out
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_504'
deprecated: false
security:
- Bearer: []
- BasicAuth: []
x-hideTryItPanel: true
/transfers/{transferId}:
get:
tags:
- Transfers - for Payments v1
summary: Get a transfer
description: The `GET /transfers/{transferId}` endpoint retrieves information about a specific transfer in a given account.
operationId: GatewayService.GetTransfer
parameters:
- name: transferId
in: path
description: The unique id of the transfer sent in the `POST /transfers` response and/or included in a respective `GET /transfers` response.
required: true
style: simple
explode: false
schema:
type: string
- name: skipTransferUpdate
in: query
description: If `skipTransferUpdate` is false, the request will call the bank for a status update. If set to true, the cached result will be returned instead.
required: false
style: form
explode: true
schema:
type: boolean
format: boolean
example: false
default: false
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/GetTransferResponse'
'400':
description: The client specified an invalid argument
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_400'
'401':
description: The authorization information is missing or invalid
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_401'
'403':
description: Permission to access this endpoint is denied
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_403'
'404':
description: The requested entity, such as a payment, was not found
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_404'
'429':
description: Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_429'
'500':
description: An unexpected or internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_500'
'501':
description: The operation was not implemented
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_501'
'503':
description: Service is unavailable
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_503'
'504':
description: Gateway has timed out
content:
application/json:
schema:
$ref: '#/components/schemas/inline_response_504'
deprecated: false
security:
- Bearer: []
- BasicAuth: []
x-hideTryItPanel: true
components:
schemas:
inline_response_500:
properties:
error:
allOf:
- type: object
properties:
errorCode:
type: string
description: This is a textual error code categorising the error.
example: InternalServerError
- $ref: '#/components/schemas/ServerError'
Signature:
type: object
properties:
keyId:
type: string
description: The id of the public key used to verify the signature. This is only present if a `tokenId` is present. It can be used to validate that the provided `tokenId` corresponds to the token request (this is needed for Hosted Pages flows only).
example: CqSTHPvWY_dgVh-f
memberId:
type: string
description: The Token.io member id of the signing member.
example: m:nP4w3u5y8ddrxDJkjimgSX9e4fZ:5zKtXEAq
signature:
type: string
description: The Base64url-encoded ciphertext signature.
example: ODRWmM0xMRM7CKmK3bNl4e2Kb2btavTbZssCsrHsu8yopoKxBzouBrD9q5-E63tgdV1DpB7i31vwNDKywA0CAE
description: Contains information about the signing party. This is only present if a `tokenId` is present. It can be used to validate that the provided `tokenId` corresponds to the token request (this is needed for the Hosted Pages flows only).
TransferRefund:
type: object
properties:
remainingRefundAmount:
allOf:
- description: The currency and value of the original amount minus the total amount refunded (includes items in processing).
- $ref: '#/components/schemas/Money'
settledRefundAmount:
allOf:
- description: The currency and value of the amount successfully refunded.
- $ref: '#/components/schemas/Money'
transferRefundStatus:
$ref: '#/components/schemas/TransferRefundStatus'
description: Contains details of the refunded amount settled, the transfer balance remaining, and whether initiated.
MoneyRequest:
type: object
properties:
currency:
type: string
description: The <a href="https://www.iso.org/iso-4217-currency-codes.html" target="_blank">ISO 4217</a> three letter currency code.
example: EUR
value:
type: string
description: The transaction amount with up to four digits after the decimal point.
example: '10.23'
description: The balance currency and value.
GetTransferResponse:
type: object
properties:
transfer:
$ref: '#/components/schemas/Transfer'
inline_response_400:
type: object
properties:
error:
$ref: '#/components/schemas/Error'
AccountIdentifierPlusgiro:
type: object
properties:
plusgiroNumber:
type: string
description: The account number (minimum 2 and maximum 8 digits) for a PlusGiro account. The clearing code is not used.
example: '987654'
description: The domestic transaction clearing system in Sweden. The credit transfer function, which is part of <a href="https://www.nordea.com" target="blank">Nordea</a>, and used for mediating payments between accounts held by companies and individuals.
TransferPayload:
type: object
required:
- tokenId
- refId
- amount
properties:
amount:
allOf:
- description: The transaction currency and value.
- $ref: '#/components/schemas/MoneyRequest'
confirmFunds:
type: boolean
description: Requests confirmation that sufficient funds are available.
format: boolean
example: false
default: false
description:
type: string
description: A description of the transfer.
metadata:
$ref: '#/components/schemas/Metadata'
refId:
$ref: '#/components/schemas/refId'
tokenId:
type: string
description: Identifies the authorization token for the transfer.
example: tt:8zK1dic95omjWb72gvc3z3ELKbTNfnGd89MbDnM73er4:ZhBVAJSH8DeU1
transferDestinations:
title: transferDestinations
type: array
description: The beneficiary account specifying the transfer destination; <i>i.e.</i>, TPP/merchant/creditor.
items:
$ref: '#/components/schemas/TransferDestination'
description: Contains the financial details of the transfer.
TransactionStatus:
title: TransactionStatus
type: string
example: PROCESSING
description: Filters by transaction status. <ul> <li><b>PROCESSING</b> – This status indicates that the transaction is in process and that the final status has not been received from the bank.</li> <li><b>SUCCESS</b> – This status indicates that successful payment initiation has been received from the bank. Settlement might not be complete.</li> <li><b>INITIATED</b> – This status is set when the previous status has remained as `PROCESSING` for 30 days and cannot be updated. The transaction has been initiated but the result is unknown. This is the final status and will not get updated later because Token.io has stopped polling the bank.<br/> This status is also returned in a two-step payment flow in the event that a user’s request has been authorized at the bank but the payment confirmation has subsequently failed.</li> <li><b>PENDING</b> – This status indicates that the user has successfully completed the authorization process at the bank and the transfer is pending redemption. This status is only relevant for two-step payment flows.</li> <li><b>PENDING_EXTERNAL_AUTHORIZATION</b> – This status indicates that the user has been sent to the bank to complete the authorization process. If not completed within the allowed timeframe (usually around 15 mins, but there are variations between banks) the transaction will expire and transition to `FAILURE_EXPIRED`. This status is only relevant for 1-step payment flows.</li> <li><b>FAILURE_GENERIC</b> – This status usually indicates a technical failure. Possibly, a failure callback was received from the bank, with no transaction status and no further information.</li> <li><b>FAILURE_PERMISSION_DENIED</b> – This status indicates that the user has been denied authorization at the bank This status is only relevant for two-step payment flows.</li> <li><b>FAILURE_CANCELED</b> – This status indicates that the payment initiation has been cancelled before execution.</li> <li><b>FAILURE_EXPIRED</b> – This status indicates that the user did not complete the authorization process within the allowed timeframe (usually around 15 mins, but there are variations between banks) and the payment has expired.</li> <li><b>FAILURE_INSUFFICIENT_FUNDS</b> – This status indicates that the payment initiation request has been rejected due to insufficient funds.</li> <li><b>FAILURE_DECLINED</b> – This status indicates that the payment initiation has been rejected by the bank.</li> <li><b>SETTLEMENT_IN_PROGRESS</b> – This status is provided when a Token.io settlement account is used as the beneficiary for the payment, and replaces the payment initiation status. Token.io is waiting for the payment to reach the payee bank. No action is required; await the next step, <i>e.g.</i>, Token.io sends a webhook with the status update, or a polling call. The status will change to `SETTLEMENT_IN_PROGRESS` soon after Token.io receives the final status from the debtor bank.</li> <li><b>SETTLEMENT_COMPLETED</b> – This status is provided when a Token.io settlement account is used as the beneficiary for the payment, and replaces the payment initiation status. The payment has reached the payee bank and Token.io has matched the transaction in the TPP’s settlement account to the initiated payment. For instant payments, `SETTLEMENT_COMPLETED` will be achieved within 30-45 minutes from payment initiation, at the latest. For non-instant payments, the time to reach `SETTLEMENT_COMPLETED` will depend on the clearing period for the payment.</li> <li><b>SETTLEMENT_INCOMPLETE</b> – This status is provided when a Token.io settlement account is used as the beneficiary for the payment, and replaces the payment initiation status. Reconciliation has failed. This happens when Token.io doesn't find the corresponding transaction in the TPP’s settlement account automatically.</li></ul><br/>During settlement of a settlement accounts payment, the status update job will run first for up to 30 days. Payment will then enter into a 'final' status, normally `SUCCESS`.<br/>Once the status update job has run, the reconciliation job looks for matching inbound payments.<br/>For SEPA payments:<ul><li>if a matching inbound payment is found within 15 days of the final payment status update -> `SETTLEMENT_COMPLETED`</li><li>if no matching inbound payment is found within 15 days of the final payment status update -> `SETTLEMENT_INCOMPLETE`</li></ul>For SEPA Instant payments:<ul><li>if a matching inbound payment is found within 1 day of the final payment status update -> `SETTLEMENT_COMPLETED`</li><li>if no matching inbound payment is found within 1 day of the final payment status update -> `SETTLEMENT_INCOMPLETE`</li></ul>
enum:
- PROCESSING
- SUCCESS
- INITIATED
- PENDING
- PENDING_EXTERNAL_AUTHORIZATION
- FAILURE_GENERIC
- FAILURE_PERMISSION_DENIED
- FAILURE_CANCELED
- FAILURE_EXPIRED
- FAILURE_INSUFFICIENT_FUNDS
- FAILURE_DECLINED
- SETTLEMENT_IN_PROGRESS
- SETTLEMENT_COMPLETED
- SETTLEMENT_INCOMPLETE
AccountIdentifierMsisdn:
type: object
properties:
msisdn:
type: string
description: The MSISDN is composed of the country code and the national destination code. Ensure you remove the + sign and any 0 before the mobile number.
example: '447949123456'
description: The Mobile Station International Subscriber Director Number (MSISDN) is the user's mobile phone number, used as a unique identifier to enable routing of voice and SMS traffic to and from a specific subscription/device on a wireless/mobile network.
ActingAs:
type: object
properties:
displayName:
type: string
description: The name of the recipient shown to the user; required when specifying `actingAs`, optional otherwise.
example: The Great Baking Co.
refId:
$ref: '#/components/schemas/refId'
secondaryName:
type: string
description: The domain or email address of the recipient shown to the user along with the `displayName`.
example: jane.doe@company.com
description: Specifies another party for whom the token was created 'on behalf of'.
ChargeBearer:
type: string
description: The bearer of the charge, if any, for international transfers. <ul><li><b>CRED</b> - all charges are borne by the creditor.</li> <li><b>DEBT</b> - all charges are borne by the debtor.</li> <li><b>SHAR</b> - the parties share the charges.</li> <li><b>SLEV</b> - each party bears its own charges, recommended on SEPA payments.</li></ul>
example: CRED
default: INVALID_CHARGE_BEARER
enum:
- INVALID_CHARGE_BEARER
- CRED
- DEBT
- SHAR
- SLEV
TransferDebtorEndpointResponse:
type: object
required:
- accountIdentifier
properties:
accountIdentifier:
$ref: '#/components/schemas/AccountIdentifier'
bankId:
$ref: '#/components/schemas/bankId'
bic:
type: string
description: The Business Identifier Code (BIC), <a href="https://www.iso.org/standard/84108.html" target="_blank">ISO 9362</a>, is the SWIFT Address assigned to a bank in order to send automated payments quickly and accurately to the banks concerned. It uniquely identifies the name and country, (and sometimes the branch) of the bank involved. BICs are often called SWIFT Codes and can be either 8 or 11 characters long.
example: BOFIIE2D
customerData:
$ref: '#/components/schemas/CustomerDataDebtorResponse'
description: Contains information about the payer account.
inline_response_429:
required:
- error
type: object
properties:
error:
$ref: '#/components/schemas/ResourceExhaustedError'
TransferDestinationSepaInstant:
title: sepaInstant
allOf:
- description: SEPA Instant Credit, the instant payment processing system with funds made available immediately for the recipient.
- $ref: '#/components/schemas/SepaInstantAccount'
AccountIdentifierPan:
type: object
properties:
pan:
type: string
description: The 14, 15, or 16 digit number generated as a unique identifier for a primary account.
example: '4658552288550023'
description: The Primary Account Number (PAN). The card identifier found on payment cards, such as credit cards and debit cards, as well as stored-value cards, gift cards and other similar card, sometimes referred to as a bank card number.
TransferRefundStatus:
type: string
description: Indicates the status of the initiated refund payout.
example: PARTIAL
default: UNSET
enum:
- UNSET
- NONE
- PARTIAL
- FULL
AccountIdentifierBban:
type: object
properties:
bban:
type: string
description: Represents a country-specific bank account number. The BBAN is the last part of the IBAN when used for international funds transfers. Every country has its own specific BBAN format and length. At present, there is no common EU or other standard unifying the BBAN. This is why IBAN was introduced to standardise international bank transfers.
example: NWBK60161331926819
clearingNumber:
type: string
description: The bank clearing number or BC number is a number used for the identification of financial institutions in Switzerland and Liechtenstein. Bank clearing numbers are connected to the Swiss Interbank Clearing and the EuroSIC system.
example: 87654321
NotImplementedError:
require
# --- truncated at 32 KB (92 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/token-io/refs/heads/main/openapi/token-io-transfers-for-payments-v1-api-openapi.yml