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.
Contains the details for obtaining the requested token.
Contains the financial details of the transfer.
If true, sufficient funds available for transfer are confirmed.
The ISO 4217 three letter currency code.
Specifies the execution date for the transfer (in ISO 8601 format).
Contains the transfer instructions for each payment.
Information governing or otherwise related to the transfer instructions.
Contains information about the payer account.
The beneficiary account specifying the transfer destination, i.e., TPP/merchant/creditor bank account.
- sepa
- sepaInstant
- fasterPayments
- elixir
- euDomesticNonEuro
- euDomesticNonEuroInstant
- bankgiro
- plusgiro
- token
- virtualAccount
The beneficiary account specifying the transfer destination, i.e. TPP/merchant/creditor bank.
The total amount, with up to four digits after the decimal point, transferred over the life of the token.
The creditor's reference for matching an entry with the items that the transfer is intended to settle, such as commercial invoices in an accounts receivable system.
Requests that a refund account be returned in the response of GET transfers for any amounts refunded.
Specifies another party for whom the token was created 'on behalf of'.
The developer-specified string allowing the state to be persisted between the request and callback phases of the flow; used for the signature in a GET /token-requests/{tokenRequestId}/token-request-result call, in which the signing payload for the signature is a combination of state and tokenId, and validates the tokenId against the callbackstate originally sent in the request.
Note: The value of callbackState is added to the redirect URL and appended to the hash of the CSRF token.
Specifies the destination country or countries, using the two-letter country code in upper case (ISO 3166-1 alpha-2). This is used to limit the number of countries displayed in the Hosted Pages for user selection.
Description of the payment with the following qualifiers:
- must comply with the constraint imposed by the bank
- length must be no greater than 255 characters
- description in a subsequent call must match description in originating request
- description omitted in originating request must also be omitted in subsequent calls
- description omitted in subsequent call will be replaced with
refId - the description field maps to
descriptionin the bank'sconsentRequestpresented to the user
This field determines whether a payment can been converted from a single immediate payment to a future dated payment. If set to false, payments can be converted.
This URL redirects the user after bank authentication.
The TPP-generated reference identifier for the token. This is not to be confused with the requestId. The refId maps to the tppRefId in the bank's consentRequest. This is needed to match/verify the originating token request with the bank's consent request.
We recommend that the refId should not contain special characters (the allowed characters are the 26-letter Latin alphabet, the numerical digits from 0-9 and the hyphen '-'). This field should not exceed 18 characters in length.
Contains information identifying the Token.io member.
https://api.token.io/token-requests
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://api.token.io/token-requests \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"requestOptions": {
"bankId": "ob-modelo",
"from": {
"alias": {
"realmId": "m:vHZUAMFt6s64vn6aDyMiwBYbPDN:5zKtXEAq",
"type": "EMAIL",
"value": "e-sales@token.io"
},
"id": "m:nP4w3u5y8ddrxDJkjimgSX9e4fZ:5zKtXEAq"
},
"psuId": "a:TASDo3124fcsmF0vsmdv4mf4mklsdwls3mcixz14fkasdv5",
"receiptRequested": false,
"tokenInternal": {
"redirectUrl": "http://psu-redirect.com",
"usingWebApp": false
}
},
"requestPayload": {
"actingAs": {
"displayName": "The Great Baking Co.",
"refId": "9htio4a1sp2akdr1aa",
"secondaryName": "jane.doe@company.com"
},
"callbackState": "6242e45e-3063-4c42-8376",
"countries": [
"DE",
"IT",
"RO"
],
"description": "A regular payment",
"disableFutureDatedPaymentConversion": false,
"redirectUrl": "http://psu-redirect.com",
"refId": "9htio4a1sp2akdr1aa",
"to": {
"alias": {
"realmId": "m:vHZUAMFt6s64vn6aDyMiwBYbPDN:5zKtXEAq",
"type": "EMAIL",
"value": "e-sales@token.io"
},
"id": "m:nP4w3u5y8ddrxDJkjimgSX9e4fZ:5zKtXEAq"
},
"userRefId": "3jdaWmcewrj3MX0CDS",
"transferBody": {
"confirmFunds": false,
"currency": "EUR",
"executionDate": "2023-02-28",
"instructions": {
"metadata": {
"chargeBearer": "CRED",
"providerTransferMetadata": {
"cma9TransferMetadata": {
"endToEndIdentification": "string",
"instructionIdentification": "string",
"risk": {
"deliveryAddress": {
"addressLine": [
"Flat 2, The Red Lodge, 1 High Street"
],
"addressType": "BUSINESS",
"buildingNumber": "1",
"country": "GB",
"countrySubDivision": [
"North Yorkshire"
],
"department": "1",
"postCode": "YO62 5JB",
"streetName": "High Street",
"subDepartment": "Flat 2",
"townName": "York"
},
"merchantCustomerIdentification": "0000789123",
"paymentContextCode": "PISP_PAYEE",
"paymentPurposeCode": "DVPM",
"beneficiaryAccountType": "BUSINESS",
"contractPresentIndicator": "true",
"beneficiaryPrepopulatedIndicator": "true"
}
}
},
"purposeCode": "DVPM",
"ultimateCreditor": "ACME GmbH",
"ultimateDebtor": "John Smith"
},
"source": {
"accountIdentifier": {
"bankgiro": {
"bankgiroNumber": "56781234"
}
},
"bankId": "ob-modelo",
"bic": "BOFIIE2D",
"customerData": {
"address": {
"city": "Berlin",
"conscriptionNumber": "2831",
"country": "DE",
"district": "Friedrichshain",
"flats": "21A - 21C",
"full": "Fifth house on the left after the village oak, Smalltown, Smallcountry",
"hamlet": "Botzowviertel",
"houseName": "Grossen Blauen Haus",
"houseNumber": "123",
"place": "Arnswalder Platz",
"postCode": "10243",
"province": "BC",
"state": "CA",
"street": "Hans-Otto-Strasse",
"subdistrict": "Friedrichshain Nord",
"suburb": "Altona Meadows Suburb"
},
"legalNames": "Mr John Arthur Smith"
}
},
"transferDestinations": [
{
"customerData": {
"address": {
"city": "Berlin",
"conscriptionNumber": "2831",
"country": "DE",
"district": "Friedrichshain",
"flats": "21A - 21C",
"full": "Fifth house on the left after the village oak, Smalltown, Smallcountry",
"hamlet": "Botzowviertel",
"houseName": "Grossen Blauen Haus",
"houseNumber": "123",
"place": "Arnswalder Platz",
"postCode": "10243",
"province": "BC",
"state": "CA",
"street": "Hans-Otto-Strasse",
"subdistrict": "Friedrichshain Nord",
"suburb": "Altona Meadows Suburb"
},
"legalNames": "Mr John Arthur Smith"
},
"type": "BUSINESS",
"sepa": {
"iban": "GB29NWBK60161331926819",
"bic": "BOFIIE2D"
}
}
]
},
"lifetimeAmount": "10000.00",
"remittanceReference": "MFt6s64vn6aDyMiwBA3",
"returnRefundAccount": false,
"setTransferDestinationsUrl": "string"
}
}
}'{ "tokenRequest": { "id": "rq:ej5ACWNwi1EcqBeuDPc4Z8C4Bgc:5zKtXEAq", "requestOptions": { … }, "requestPayload": { … } } }
https://api.token.io/token-requests/{requestId}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://api.token.io/token-requests/rq:ej5ACWNwi1EcqBeuDPc4Z8C4Bgc:5zKtXEAq \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'{ "tokenRequest": { "id": "rq:ej5ACWNwi1EcqBeuDPc4Z8C4Bgc:5zKtXEAq", "requestOptions": { … }, "requestPayload": { … } } }
Request
The GET /token-requests/{tokenRequestId}/result endpoint checks whether a token request result is available. This endpoint will return a PENDING status while the result is not available. The status will become PROCESSED once the result is available. If the request is rejected by the bank, the status will become REJECTED. The status will become EXPIRED if the request is not processed or rejected before the token request expiration.
https://api.token.io/token-requests/{tokenRequestId}/result
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://api.token.io/token-requests/rq:ej5ACWNwi1EcqBeuDPc4Z8C4Bgc:5zKtXEAq/result \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Successful response
Contains the details of the transfer response.
The id of the transfer sent in the POST /transfers response and/or included in a respective GET /transfers response. This is populated for transfer token requests only, it is present if a transfer resource is created.
Identifies a unique authorization token for a transfer, standing order or account information access.
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).
The current result of the token request. This field is always populated.
- PENDING - consent is not authorized by the user.
- PROCESSED - consent was successfully authorized by the user.
- REJECTED - consent has been rejected (the reason usually can be found in the
statusReasonInformationfield). - EXPIRED - the token request has expired and cannot be used anymore (consent can be in any state - authorized/not authorized yet/rejected - at this point).
A human-readable description of the reason for the reported status, which may include a message from the bank, This value should not exceed 256 characters in length.
{ "transferId": "t:2UhwCZ3BMaEcAUK8bZdukor7NL4tH6TBuu6aJMp5KKfX:5zKcENpV", "tokenId": "tt:8zK1dic95omjWb72gvc3z3ELKbTNfnGd89MbDnM73er4:ZhBVAJSH8DeU1", "signature": { "keyId": "CqSTHPvWY_dgVh-f", "memberId": "m:nP4w3u5y8ddrxDJkjimgSX9e4fZ:5zKtXEAq", "signature": "ODRWmM0xMRM7CKmK3bNl4e2Kb2btavTbZssCsrHsu8yopoKxBzouBrD9q5-E63tgdV1DpB7i31vwNDKywA0CAE" }, "status": "PROCESSED", "statusReasonInformation": "The token request is processing.", "bankId": "ob-modelo" }
Webhooks
These endpoints configure, retrieve and remove webhooks. See Webhooks for more details.