These endpoints enable you to make v2 single immediate payments and future dated payments using the redirect, embedded and decoupled flows.
Token.io's Open Banking API for TPPs
Token.io's Open Banking API
Token.io Support: support.token.io
The Token.io Open Banking API enables you to connect securely with banks for a range of services.
Using our API you can:
- provide authorized access to an authenticated user's account information
- get information on specific banks
- initiate authorization with a user-selected bank
- initate and track single immediate payments and future dated payments
- 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
- carry out settlements, payments and refunds using our settlement accounts
For more information see our developer documentation.
The tokenId represents the consent granted by the user (PSU).
The user's IP address if the user is currently logged in with the TPP. If the customer IP address is supplied (recommended), it is inferred that the user is present during the session (i.e., the request is user-initiated; adding a customer-initiated = true header makes this explicit). For AIS calls, if the customer's IP address is not provided in the request, the bank assumes it is a TPP-initiated request and may limit the TPP to four TPP-initiated access attempts within a given 24-hour period.
https://api.token.io/accounts
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://api.token.io/accounts \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'on-behalf-of: ta:3eYPU1BEKKunfmYgQuSKXFCeo851C5Y3XiZW3XA465TU:5zKtXEAq' \
-H 'token-customer-ip-address: 172.16.254.1'{ "accounts": [ { … } ] }
The tokenId represents the consent granted by the user (PSU).
The user's IP address if the user is currently logged in with the TPP. If the customer IP address is supplied (recommended), it is inferred that the user is present during the session (i.e., the request is user-initiated; adding a customer-initiated = true header makes this explicit). For AIS calls, if the customer's IP address is not provided in the request, the bank assumes it is a TPP-initiated request and may limit the TPP to 4 TPP-initiated access attempts within a given 24-hour period.
https://api.token.io/accounts/{accountId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://api.token.io/accounts/a:8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4:5zKcENpV \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'on-behalf-of: ta:3eYPU1BEKKunfmYgQuSKXFCeo851C5Y3XiZW3XA465TU:5zKtXEAq' \
-H 'token-customer-ip-address: 172.16.254.1'{ "account": { "accountDetails": { … }, "accountFeatures": { … }, "bankId": "ob-modelo", "id": "a:8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4:5zKcENpV", "isLocked": false, "name": "John A Smith" } }
A list of account ids for which you wish to retrieve account balances. Each accountId should be specified separately as accountId=a:xxx:xxx&accountId=a:yyy:yyy.
The tokenId represents the consent granted by the user (PSU).
The user's IP address if the user is currently logged in with the TPP. If the customer IP address is supplied (recommended), it is inferred that the user is present during the session (i.e., the request is user-initiated; adding a customer-initiated = true header makes this explicit). For AIS calls, if the customer's IP address is not provided in the request, the bank assumes it is a TPP-initiated request and may limit the TPP to 4 TPP-initiated access attempts within a given 24-hour period.
https://api.token.io/account-balance
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.token.io/account-balance?accountId=a%3A8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4%3A5zKcENpV%2Ca%3A9TFpwkcQmcsMbdjQcpdjfsEBosDw28503fAAGPEMF2MVF19hfk3nc%2Ca%3Artmv254gaskGLdkadQvdNesk2Y9ferbvpaom5mvepm0mv2nfGnaix' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'on-behalf-of: ta:3eYPU1BEKKunfmYgQuSKXFCeo851C5Y3XiZW3XA465TU:5zKtXEAq' \
-H 'token-customer-ip-address: 172.16.254.1'{ "response": [ { … } ] }
The tokenId represents the consent granted by the user (PSU).
The user's IP address if the user is currently logged in with the TPP. If the customer IP address is supplied (recommended), it is inferred that the user is present during the session (i.e., the request is user-initiated; adding a customer-initiated = true header makes this explicit). For AIS calls, if the customer's IP address is not provided in the request, the bank assumes it is a TPP-initiated request and may limit the TPP to 4 TPP-initiated access attempts within a given 24-hour period.
https://api.token.io/accounts/{accountId}/balance
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://api.token.io/accounts/a:8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4:5zKcENpV/balance \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'on-behalf-of: ta:3eYPU1BEKKunfmYgQuSKXFCeo851C5Y3XiZW3XA465TU:5zKtXEAq' \
-H 'token-customer-ip-address: 172.16.254.1'{ "balance": { "accountId": "a:8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4:5zKcENpV4", "available": { … }, "current": { … }, "otherBalances": [ … ] }, "status": "SUCCESSFUL_REQUEST" }
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.e. 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.
The offset is not visible to a user and should not be parsed and/or understood in any way.
The tokenId represents the consent granted by the user (PSU).
The user's IP address if the user is currently logged in with the TPP. If the customer IP address is supplied (recommended), it is inferred that the user is present during the session (i.e., the request is user-initiated; adding a customer-initiated = true header makes this explicit). For AIS calls, if the customer's IP address is not provided in the request, the bank assumes it is a TPP-initiated request and may limit the TPP to 4 TPP-initiated access attempts within a given 24-hour period.
https://api.token.io/accounts/{accountId}/standing-orders
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.token.io/accounts/a:8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4:5zKcENpV/standing-orders?page.offset=LerV6Jmex&page.limit=175' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'on-behalf-of: ta:3eYPU1BEKKunfmYgQuSKXFCeo851C5Y3XiZW3XA465TU:5zKtXEAq' \
-H 'token-customer-ip-address: 172.16.254.1'{ "offset": "LerV6Jmex", "standingOrders": [ { … } ], "status": "SUCCESSFUL_REQUEST" }
The system-generated, unique bank account id, which specifies the account for which the information is requested.
The tokenId represents the consent granted by the user (PSU).
The user's IP address if the user is currently logged in with the TPP. If the customer IP address is supplied (recommended), it is inferred that the user is present during the session (i.e., the request is user-initiated; adding a customer-initiated = true header makes this explicit). For AIS calls, if the customer's IP address is not provided in the request, the bank assumes it is a TPP-initiated request and may limit the TPP to 4 TPP-initiated access attempts within a given 24-hour period.
https://api.token.io/accounts/{accountId}/standing-orders/{standingOrderId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.token.io/accounts/a:8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4:5zKcENpV/standing-orders/{standingOrderId}' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'on-behalf-of: ta:3eYPU1BEKKunfmYgQuSKXFCeo851C5Y3XiZW3XA465TU:5zKtXEAq' \
-H 'token-customer-ip-address: 172.16.254.1'{ "standingOrder": { "createdAtMs": 1729212980771, "creditorEndpoint": { … }, "frequency": "WEEK", "id": "tt:83KiRJuXmEDV5m2b8ZvLGE91ELf7PPw5BaDab98kMguu:3VMczyq7r7b6HwC", "providerStandingOrderDetails": { … }, "status": "PROCESSING", "tokenId": "tt:8zK1dic95omjWb72gvc3z3ELKbTNfnGd89MbDnM73er4:ZhBVAJSH8DeU1", "tokenSubmissionId": "12345678" }, "status": "SUCCESSFUL_REQUEST" }
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.e. 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.
The offset is not visible to a user and should not be parsed and/or understood in any way.
The maximum number of records to return. This must be less than 200.
The earliest transaction date requested, in ISO 8601 format.
The tokenId represents the consent granted by the user (PSU).
The user's IP address if the user is currently logged in with the TPP. If the customer IP address is supplied (recommended), it is inferred that the user is present during the session (i.e., the request is user-initiated; adding a customer-initiated = true header makes this explicit). For AIS calls, if the customer's IP address is not provided in the request, the bank assumes it is a TPP-initiated request and may limit the TPP to 4 TPP-initiated access attempts within a given 24-hour period.
https://api.token.io/accounts/{accountId}/transactions
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://api.token.io/accounts/a:8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4:5zKcENpV/transactions?page.offset=LerV6Jmex&page.limit=175&startDate=2022-06-15&endDate=2022-11-30' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'on-behalf-of: ta:3eYPU1BEKKunfmYgQuSKXFCeo851C5Y3XiZW3XA465TU:5zKtXEAq' \
-H 'token-customer-ip-address: 172.16.254.1'{ "offset": "LerV6Jmex", "status": "SUCCESSFUL_REQUEST", "transactions": [ { … } ] }
The unique bank account id, which specifies the account for which the information is requested.
The tokenId represents the consent granted by the user (PSU).
The user's IP address if the user is currently logged in with the TPP. If the customer IP address is supplied (recommended), it is inferred that the user is present during the session (i.e., the request is user-initiated; adding a customer-initiated = true header makes this explicit). For AIS calls, if the customer's IP address is not provided in the request, the bank assumes it is a TPP-initiated request and may limit the TPP to 4 TPP-initiated access attempts within a given 24-hour period.
https://api.token.io/accounts/{accountId}/transaction/{transactionId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://api.token.io/accounts/a:8DbPteGnytmMbKXdnWTReeRB6cYWKXZ84JgLTBC7fKL4:5zKcENpV/transaction/42909b155d4942299c39017686b5dc36 \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'on-behalf-of: ta:3eYPU1BEKKunfmYgQuSKXFCeo851C5Y3XiZW3XA465TU:5zKtXEAq' \
-H 'token-customer-ip-address: 172.16.254.1'{ "status": "SUCCESSFUL_REQUEST", "transaction": { "amount": { … }, "bankTransactionCode": { … }, "bankTransactionId": "83KiRJuXmEDV5m2b8ZvLGE91ELf7PPw5BaDab98kMguu:3VMczyq7r7b6HwC", "createdAtMs": 1729212980771, "creditorEndpoint": { … }, "description": "Payment", "id": "tt:83KiRJuXmEDV5m2b8ZvLGE91ELf7PPw5BaDab98kMguu:3VMczyq7r7b6HwC", "metadata": { … }, "providerTransactionDetails": { … }, "status": "PROCESSING", "tokenId": "tt:8zK1dic95omjWb72gvc3z3ELKbTNfnGd89MbDnM73er4:ZhBVAJSH8DeU1", "tokenTransferId": "t:2UhwCZ3BMaEcAUK8bZdukor7NL4tH6TBuu6aJMp5KKfX:5zKcENpV", "type": "INVALID_TYPE" } }
Webhooks
These endpoints configure, retrieve and remove webhooks. See Webhooks for more details.