| Method | Path | Summary |
|---|---|---|
| GET | /workspaces/{workspaceId}/read-consents | List read consents granted to access banking data |
| POST | /workspaces/{workspaceId}/read-consents | Create a new read consent with a banking provider |
| POST | /workspaces/{workspaceId}/read-consents/{consentId}/finalize | Finalize a read consent after the provider authorization step |
| POST | /workspaces/{workspaceId}/read-consents/{consentId}/renew | Renew an expiring or expired read consent |
| POST | /workspaces/{workspaceId}/read-consents/{consentId}/revoke | Revoke an active read consent |
| POST | /workspaces/{workspaceId}/read-consents/{consentId}/solve | Solve a pending read consent issue requiring user action |
| POST | /workspaces/{workspaceId}/write-consents | Create a write consent to enable initiating payments |
GET endpoints need consents:read, the others consents:write.
The ReadConsent object
firestoreIdstringrequiredID of the read consent.
expirationDateTimestringdate-timeauthorizationStatusobjectrequiredShow 2 child fields
statusstringrequiredValuespendingauthorisedrejectedrevokedconsumedexpired
updateDateTimestringdate-timerequiredproductsstring[]requiredBanking product, a group of bank services that a consent can cover.
Show 15 values
identityIdentity of the account holder.
read_consentsConsents that give read access to account data.
write_consentsConsents that allow payments.
accountsBank accounts and their details.
beneficiariesPayees saved at the bank.
balancesBalances of the accounts.
transactionsTransactions of the accounts.
statementsStatements of the accounts.
cardsPayment cards of the accounts.
variable_recurring_paymentsRecurring payments with variable amounts.
direct_debitsDirect debits of the accounts.
draft_paymentsPayments submitted to the bank and approved by the account holder in e-banking.
single_paymentsOne-time payments that the bank executes.
scheduled_paymentsPayments that the bank executes at a later date.
standing_order_paymentsStanding orders, recurring payments of a fixed amount.
featuresstring[]requiredBanking feature, a capability of the banking product named before the dot.
Show 44 values
identity.detailsReads the identity details of the account holder.
read_consents.multiple_consents_allowedAllows several read consents at the bank, each for its own accounts.
read_consents.single_consent_allowedAllows one read consent at the bank; a new consent replaces the previous one.
read_consents.redirectAuthorises read consents on the website or app of the bank.
read_consents.embeddedAuthorises read consents without leaving Sway.
write_consents.redirectAuthorises payment consents on the website or app of the bank.
write_consents.embeddedAuthorises payment consents without leaving Sway.
accounts.listLists the bank accounts.
accounts.detailsReads the details of a bank account.
beneficiaries.listLists the payees saved at the bank.
beneficiaries.detailsReads the details of a saved payee.
balances.intradayReads the balance during the day.
balances.closingReads the closing balance of each day.
transactions.intradayReads the transactions of the current day.
transactions.historyReads the past transactions.
statements.listLists the account statements.
statements.iso_camt053_xmlProvides account statements as ISO 20022 camt.053 XML files.
statements.pdfProvides account statements as PDF files.
direct_debits.listLists the direct debits.
direct_debits.detailsReads the details of a direct debit.
draft_payments.revolut_csvSubmits payments as a CSV file in the Revolut format.
draft_payments.iso_pain001_ch_xmlSubmits payments as an ISO 20022 pain.001 XML file in the Swiss variant.
draft_payments.iso_pain001_xmlSubmits payments as an ISO 20022 pain.001 XML file.
draft_payments.domesticSubmits domestic payments.
draft_payments.internationalSubmits international payments.
draft_payments.bulkSubmits several payments at once.
draft_payments.listLists the submitted payments.
draft_payments.detailsReads the details of a submitted payment.
single_payments.domesticExecutes domestic one-time payments.
single_payments.internationalExecutes international one-time payments.
single_payments.instantExecutes domestic instant payments.
single_payments.bulkExecutes several one-time payments at once.
single_payments.listLists the one-time payments.
single_payments.detailsReads the details of a one-time payment.
scheduled_payments.domesticSchedules domestic payments.
scheduled_payments.internationalSchedules international payments.
scheduled_payments.bulkSchedules several payments at once.
scheduled_payments.listLists the scheduled payments.
scheduled_payments.detailsReads the details of a scheduled payment.
standing_order_payments.domesticSets up domestic standing orders.
standing_order_payments.internationalSets up international standing orders.
standing_order_payments.bulkSets up several standing orders at once.
standing_order_payments.listLists the standing orders.
standing_order_payments.detailsReads the details of a standing order.
rangeobjectShow 2 child fields
fromDateTimestringdate-timetoDateTimestringdate-timereferencestringrequiredShow all 11 fieldsHide the field list
serviceProviderIdstringrequiredID of the service provider.
workspaceIdstringrequiredID of the workspace.
creationobjectrequiredWhen and by whom the resource was created.
Show 2 child fields
creationDateTimestringdate-timerequiredDate and time when the resource was created.
createdBystringID of the user who created the resource, when recorded.
solvedbooleanrequired{
"firestoreId": "rcons_UkVBRC0wMDQy",
"expirationDateTime": "2026-03-02T09:30:00.000Z",
"authorizationStatus": {
"status": "pending",
"updateDateTime": "2026-03-02T09:30:00.000Z"
},
"products": [
"identity"
],
"features": [
"identity.details"
],
"range": {
"fromDateTime": "2026-03-02T09:30:00.000Z",
"toDateTime": "2026-03-02T09:30:00.000Z"
},
"reference": "string",
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"solved": true
}/workspaces/{workspaceId}/read-consentsList read consents granted to access banking data
Scopeconsents:read
Path parameters
workspaceIdstringrequiredID of the workspace.
Query parameters
limitintegerMaximum number of items to return, from 1 to 100. A missing, invalid or non-positive value falls back to 20, and a larger value to 100.
Default20
startAfterstringCursor of the page to return: the nextCursor of the previous page.
fieldsstringComma-separated property paths to include in the response, or in each item of a list. Use dots for nested paths.
idsstring[]Comma-separated IDs of the items to return, up to 30. When set, limit, startAfter and the filters are ignored.
Returns
List of items
Items of the page, in list order.
limitintegerrequiredPage size of the request, or the number of requested ids.
nextCursorstringCursor of the next page, to pass as startAfter. Absent when the page holds fewer items than limit; a full last page still has one, and the page it points to is empty.
curl 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents' \
-H "Authorization: Bearer $SWAY_API_KEY"const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents', {
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
},
});
console.log(await response.json());import os
import requests
response = requests.get(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
)
print(response.json()){
"data": [
{
"firestoreId": "rcons_UkVBRC0wMDQy",
"expirationDateTime": "2026-03-02T09:30:00.000Z",
"authorizationStatus": {
"status": "pending",
"updateDateTime": "2026-03-02T09:30:00.000Z"
},
"products": [
"identity"
],
"features": [
"identity.details"
],
"range": {
"fromDateTime": "2026-03-02T09:30:00.000Z",
"toDateTime": "2026-03-02T09:30:00.000Z"
},
"reference": "string",
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"solved": true
}
],
"limit": 0,
"nextCursor": "string"
}{
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}/workspaces/{workspaceId}/read-consentsCreate a new read consent with a banking provider
Scopeconsents:write
Path parameters
workspaceIdstringrequiredID of the workspace.
Query parameters
fieldsstringComma-separated property paths to include in the response, or in each item of a list. Use dots for nested paths.
Request body
serviceProviderIdstringrequiredID of the service provider.
referencestringrequiredconsentIdstringID of an earlier read consent to revoke and replace; the new consent keeps its reference.
Returns
Successful response
curl -X POST 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents' \
-H "Authorization: Bearer $SWAY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"reference": "string",
"consentId": "rcons_UkVBRC0wMDQy"
}'const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"reference": "string",
"consentId": "rcons_UkVBRC0wMDQy"
}),
});
console.log(await response.json());import os
import requests
response = requests.post(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
json={
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"reference": "string",
"consentId": "rcons_UkVBRC0wMDQy",
},
)
print(response.json()){
"data": {
"firestoreId": "rcons_UkVBRC0wMDQy",
"expirationDateTime": "2026-03-02T09:30:00.000Z",
"authorizationStatus": {
"status": "pending",
"updateDateTime": "2026-03-02T09:30:00.000Z"
},
"products": [
"identity"
],
"features": [
"identity.details"
],
"range": {
"fromDateTime": "2026-03-02T09:30:00.000Z",
"toDateTime": "2026-03-02T09:30:00.000Z"
},
"reference": "string",
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"solved": true
}
}{
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}/workspaces/{workspaceId}/read-consents/{consentId}/finalizeFinalize a read consent after the provider authorization step
Scopeconsents:write
Path parameters
workspaceIdstringrequiredID of the workspace.
consentIdstringrequiredID of the read consent.
Query parameters
fieldsstringComma-separated property paths to include in the response, or in each item of a list. Use dots for nested paths.
Returns
Successful response
curl -X POST 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/finalize' \
-H "Authorization: Bearer $SWAY_API_KEY"const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/finalize', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
},
});
console.log(await response.json());import os
import requests
response = requests.post(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/finalize",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
)
print(response.json()){
"data": {
"firestoreId": "rcons_UkVBRC0wMDQy",
"expirationDateTime": "2026-03-02T09:30:00.000Z",
"authorizationStatus": {
"status": "pending",
"updateDateTime": "2026-03-02T09:30:00.000Z"
},
"products": [
"identity"
],
"features": [
"identity.details"
],
"range": {
"fromDateTime": "2026-03-02T09:30:00.000Z",
"toDateTime": "2026-03-02T09:30:00.000Z"
},
"reference": "string",
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"solved": true
}
}{
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}/workspaces/{workspaceId}/read-consents/{consentId}/renewRenew an expiring or expired read consent
Scopeconsents:write
Path parameters
workspaceIdstringrequiredID of the workspace.
consentIdstringrequiredID of the read consent.
Query parameters
fieldsstringComma-separated property paths to include in the response, or in each item of a list. Use dots for nested paths.
Request body
serviceProviderIdstringrequiredID of the service provider.
referencestringrequiredReturns
Successful response
curl -X POST 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/renew' \
-H "Authorization: Bearer $SWAY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"reference": "string"
}'const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/renew', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"reference": "string"
}),
});
console.log(await response.json());import os
import requests
response = requests.post(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/renew",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
json={
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"reference": "string",
},
)
print(response.json()){
"data": {
"firestoreId": "rcons_UkVBRC0wMDQy",
"expirationDateTime": "2026-03-02T09:30:00.000Z",
"authorizationStatus": {
"status": "pending",
"updateDateTime": "2026-03-02T09:30:00.000Z"
},
"products": [
"identity"
],
"features": [
"identity.details"
],
"range": {
"fromDateTime": "2026-03-02T09:30:00.000Z",
"toDateTime": "2026-03-02T09:30:00.000Z"
},
"reference": "string",
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"solved": true
}
}{
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}/workspaces/{workspaceId}/read-consents/{consentId}/revokeRevoke an active read consent
Scopeconsents:write
Path parameters
workspaceIdstringrequiredID of the workspace.
consentIdstringrequiredID of the read consent.
Returns
No content
curl -X POST 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/revoke' \
-H "Authorization: Bearer $SWAY_API_KEY"const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/revoke', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
},
});
console.log(response.status);import os
import requests
response = requests.post(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/revoke",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
)
print(response.status_code){
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}/workspaces/{workspaceId}/read-consents/{consentId}/solveSolve a pending read consent issue requiring user action
Scopeconsents:write
Path parameters
workspaceIdstringrequiredID of the workspace.
consentIdstringrequiredID of the read consent.
Returns
No content
curl -X POST 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/solve' \
-H "Authorization: Bearer $SWAY_API_KEY"const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/solve', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
},
});
console.log(response.status);import os
import requests
response = requests.post(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/read-consents/rcons_UkVBRC0wMDQy/solve",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
)
print(response.status_code){
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}/workspaces/{workspaceId}/write-consentsCreate a write consent to enable initiating payments
Scopeconsents:write
Path parameters
workspaceIdstringrequiredID of the workspace.
Query parameters
fieldsstringComma-separated property paths to include in the response, or in each item of a list. Use dots for nested paths.
Request body
serviceProviderIdstringrequiredID of the service provider.
paymentDataobjectrequiredShow 11 child fields
scopestring | nullScope of the payment, which depends on the countries and currencies of the debtor and creditor accounts.
domesticA GBP payment between two accounts in the United Kingdom, or a EUR payment between two accounts in SEPA countries.
internationalAny other payment, which needs the BIC of the creditor bank.
idempotencyIdstring | nullexecutionDatestringrequiredamountnumberrequiredAmount of the payment, in currency.
currencystringrequiredreferencestring | nullcommunicationstring | nullinvoiceIdstring | nullID of the invoice.
chargeBearerstring | nullValuesCREDDEBTSHARSLEV
debtorobjectrequiredShow 4 child fields
bankAccountIdstringrequiredID of the bank account.
namestringrequiredaccountIdentificationsobject[]requiredShow 2 child fields
typestringrequiredKind of identifier of a bank account or of its bank.
Show 14 values
bicBank Identifier Code of the bank.
sortCodeSix-digit code of a bank and branch in the United Kingdom.
ibanInternational Bank Account Number.
bbanBasic Bank Account Number, the country-specific format of an account number.
accountNumberAccount number that the bank assigns, unique within the bank or the branch.
panPrimary Account Number, the number of a credit or debit card.
emailEmail address that identifies the account.
msisdnMobile phone number that identifies the account.
virtualAccountIdIdentifier of a virtual sub-account of a main account.
globalWalletIdentifier of a digital wallet that holds and pays in several currencies.
clabeCLABE, the 18-digit standardized bank code of a Mexican bank account.
bitcoinAddressSingle Bitcoin address, the only address the account tracks.
bitcoinXpubBitcoin extended public key (xpub, ypub or zpub), from which the addresses of the wallet are derived.
otherAnother kind of identifier.
valuestringrequiredValue of the identifier, for example the IBAN or the BIC.
currencystringrequiredcreditorobjectrequiredShow 6 child fields
counterpartyIdstringrequiredID of the counterparty.
counterpartyCashAccountIdstringrequirednamestringrequiredaccountIdentificationsobject[]requiredShow 2 child fields
typestringrequiredKind of identifier of a bank account or of its bank.
Show 14 values
bicBank Identifier Code of the bank.
sortCodeSix-digit code of a bank and branch in the United Kingdom.
ibanInternational Bank Account Number.
bbanBasic Bank Account Number, the country-specific format of an account number.
accountNumberAccount number that the bank assigns, unique within the bank or the branch.
panPrimary Account Number, the number of a credit or debit card.
emailEmail address that identifies the account.
msisdnMobile phone number that identifies the account.
virtualAccountIdIdentifier of a virtual sub-account of a main account.
globalWalletIdentifier of a digital wallet that holds and pays in several currencies.
clabeCLABE, the 18-digit standardized bank code of a Mexican bank account.
bitcoinAddressSingle Bitcoin address, the only address the account tracks.
bitcoinXpubBitcoin extended public key (xpub, ypub or zpub), from which the addresses of the wallet are derived.
otherAnother kind of identifier.
valuestringrequiredValue of the identifier, for example the IBAN or the BIC.
currencystringrequiredaddressobjectShow 12 child fields
countrystringISO 3166-1 alpha-2 country code
postCodestringPost code of the address.
townNamestringName of the town or city.
streetNamestringName of the street.
buildingNumberstringNumber of the building in the street.
namestringName of the building or place.
sortingCodestringAdditional sorting code of the postal service, used in a few countries such as France.
postBoxstringPost office box.
administrativeAreastringRegion of the country, such as a canton or a state.
recipientsstring[]Names of the people the address is for.
organizationstringName of the organization at the address.
sourcestring[]Text the address was read from, one item per line.
callbackParamsRecord<string, string | number | boolean>Returns
Successful response
dataWriteConsentrequiredShow 12 child fields
firestoreIdstringrequiredID of the write consent.
expirationDateTimestringdate-timeauthorizationStatusobjectrequiredShow 2 child fields
statusstringrequiredValuespendingauthorisedrejectedrevokedconsumedexpired
updateDateTimestringdate-timerequiredauthorizationUristringuriproductsstring[]requiredBanking product, a group of bank services that a consent can cover.
Show 15 values
identityIdentity of the account holder.
read_consentsConsents that give read access to account data.
write_consentsConsents that allow payments.
accountsBank accounts and their details.
beneficiariesPayees saved at the bank.
balancesBalances of the accounts.
transactionsTransactions of the accounts.
statementsStatements of the accounts.
cardsPayment cards of the accounts.
variable_recurring_paymentsRecurring payments with variable amounts.
direct_debitsDirect debits of the accounts.
draft_paymentsPayments submitted to the bank and approved by the account holder in e-banking.
single_paymentsOne-time payments that the bank executes.
scheduled_paymentsPayments that the bank executes at a later date.
standing_order_paymentsStanding orders, recurring payments of a fixed amount.
featuresstring[]requiredBanking feature, a capability of the banking product named before the dot.
Show 44 values
identity.detailsReads the identity details of the account holder.
read_consents.multiple_consents_allowedAllows several read consents at the bank, each for its own accounts.
read_consents.single_consent_allowedAllows one read consent at the bank; a new consent replaces the previous one.
read_consents.redirectAuthorises read consents on the website or app of the bank.
read_consents.embeddedAuthorises read consents without leaving Sway.
write_consents.redirectAuthorises payment consents on the website or app of the bank.
write_consents.embeddedAuthorises payment consents without leaving Sway.
accounts.listLists the bank accounts.
accounts.detailsReads the details of a bank account.
beneficiaries.listLists the payees saved at the bank.
beneficiaries.detailsReads the details of a saved payee.
balances.intradayReads the balance during the day.
balances.closingReads the closing balance of each day.
transactions.intradayReads the transactions of the current day.
transactions.historyReads the past transactions.
statements.listLists the account statements.
statements.iso_camt053_xmlProvides account statements as ISO 20022 camt.053 XML files.
statements.pdfProvides account statements as PDF files.
direct_debits.listLists the direct debits.
direct_debits.detailsReads the details of a direct debit.
draft_payments.revolut_csvSubmits payments as a CSV file in the Revolut format.
draft_payments.iso_pain001_ch_xmlSubmits payments as an ISO 20022 pain.001 XML file in the Swiss variant.
draft_payments.iso_pain001_xmlSubmits payments as an ISO 20022 pain.001 XML file.
draft_payments.domesticSubmits domestic payments.
draft_payments.internationalSubmits international payments.
draft_payments.bulkSubmits several payments at once.
draft_payments.listLists the submitted payments.
draft_payments.detailsReads the details of a submitted payment.
single_payments.domesticExecutes domestic one-time payments.
single_payments.internationalExecutes international one-time payments.
single_payments.instantExecutes domestic instant payments.
single_payments.bulkExecutes several one-time payments at once.
single_payments.listLists the one-time payments.
single_payments.detailsReads the details of a one-time payment.
scheduled_payments.domesticSchedules domestic payments.
scheduled_payments.internationalSchedules international payments.
scheduled_payments.bulkSchedules several payments at once.
scheduled_payments.listLists the scheduled payments.
scheduled_payments.detailsReads the details of a scheduled payment.
standing_order_payments.domesticSets up domestic standing orders.
standing_order_payments.internationalSets up international standing orders.
standing_order_payments.bulkSets up several standing orders at once.
standing_order_payments.listLists the standing orders.
standing_order_payments.detailsReads the details of a standing order.
rangeobjectShow 2 child fields
fromDateTimestringdate-timetoDateTimestringdate-timereferencestringserviceProviderIdstringrequiredID of the service provider.
workspaceIdstringrequiredID of the workspace.
creationobjectrequiredWhen and by whom the resource was created.
Show 2 child fields
creationDateTimestringdate-timerequiredDate and time when the resource was created.
createdBystringID of the user who created the resource, when recorded.
paymentDataobjectrequiredShow 11 child fields
scopestringScope of the payment, which depends on the countries and currencies of the debtor and creditor accounts.
domesticA GBP payment between two accounts in the United Kingdom, or a EUR payment between two accounts in SEPA countries.
internationalAny other payment, which needs the BIC of the creditor bank.
idempotencyIdstringexecutionDatestringrequiredamountnumberrequiredcurrencystringrequiredreferencestringcommunicationstringinvoiceIdstringID of the invoice.
chargeBearerstringValuesCREDDEBTSHARSLEV
debtorobjectrequiredShow 4 child fields
bankAccountIdstringrequiredID of the bank account.
namestringrequiredaccountIdentificationsobject[]requiredShow 2 child fields
typestringrequiredKind of identifier of a bank account or of its bank.
Show 14 values
bicBank Identifier Code of the bank.
sortCodeSix-digit code of a bank and branch in the United Kingdom.
ibanInternational Bank Account Number.
bbanBasic Bank Account Number, the country-specific format of an account number.
accountNumberAccount number that the bank assigns, unique within the bank or the branch.
panPrimary Account Number, the number of a credit or debit card.
emailEmail address that identifies the account.
msisdnMobile phone number that identifies the account.
virtualAccountIdIdentifier of a virtual sub-account of a main account.
globalWalletIdentifier of a digital wallet that holds and pays in several currencies.
clabeCLABE, the 18-digit standardized bank code of a Mexican bank account.
bitcoinAddressSingle Bitcoin address, the only address the account tracks.
bitcoinXpubBitcoin extended public key (xpub, ypub or zpub), from which the addresses of the wallet are derived.
otherAnother kind of identifier.
valuestringrequiredValue of the identifier, for example the IBAN or the BIC.
currencystringrequiredcreditorobjectrequiredShow 6 child fields
counterpartyIdstringrequiredID of the counterparty.
counterpartyCashAccountIdstringrequirednamestringrequiredaccountIdentificationsobject[]requiredShow 2 child fields
typestringrequiredKind of identifier of a bank account or of its bank.
Show 14 values
bicBank Identifier Code of the bank.
sortCodeSix-digit code of a bank and branch in the United Kingdom.
ibanInternational Bank Account Number.
bbanBasic Bank Account Number, the country-specific format of an account number.
accountNumberAccount number that the bank assigns, unique within the bank or the branch.
panPrimary Account Number, the number of a credit or debit card.
emailEmail address that identifies the account.
msisdnMobile phone number that identifies the account.
virtualAccountIdIdentifier of a virtual sub-account of a main account.
globalWalletIdentifier of a digital wallet that holds and pays in several currencies.
clabeCLABE, the 18-digit standardized bank code of a Mexican bank account.
bitcoinAddressSingle Bitcoin address, the only address the account tracks.
bitcoinXpubBitcoin extended public key (xpub, ypub or zpub), from which the addresses of the wallet are derived.
otherAnother kind of identifier.
valuestringrequiredValue of the identifier, for example the IBAN or the BIC.
currencystringrequiredaddressobjectShow 12 child fields
countrystringISO 3166-1 alpha-2 country code
postCodestringPost code of the address.
townNamestringName of the town or city.
streetNamestringName of the street.
buildingNumberstringNumber of the building in the street.
namestringName of the building or place.
sortingCodestringAdditional sorting code of the postal service, used in a few countries such as France.
postBoxstringPost office box.
administrativeAreastringRegion of the country, such as a canton or a state.
recipientsstring[]Names of the people the address is for.
organizationstringName of the organization at the address.
sourcestring[]Text the address was read from, one item per line.
curl -X POST 'https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/write-consents' \
-H "Authorization: Bearer $SWAY_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"paymentData": {
"scope": "domestic",
"idempotencyId": "string",
"executionDate": "2026-03-02",
"amount": 0,
"currency": "string",
"reference": "string",
"communication": "string",
"invoiceId": "Iv5zP2nK7wRt3xMq9bLd",
"chargeBearer": "CRED",
"debtor": {
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"name": "string",
"accountIdentifications": [
{
"type": "bic",
"value": "string"
}
],
"currency": "string"
},
"creditor": {
"counterpartyId": "Cp2nG7vB4xLq9wRt5hMz",
"counterpartyCashAccountId": "string",
"name": "string",
"accountIdentifications": [
{
"type": "bic",
"value": "string"
}
],
"currency": "string",
"address": {
"country": "CH",
"postCode": "string",
"townName": "string",
"streetName": "string",
"buildingNumber": "string",
"name": "string",
"sortingCode": "string",
"postBox": "string",
"administrativeArea": "string",
"recipients": [
"string"
],
"organization": "string",
"source": [
"string"
]
}
}
},
"callbackParams": {
"key": "string"
}
}'const response = await fetch('https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/write-consents', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.SWAY_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"paymentData": {
"scope": "domestic",
"idempotencyId": "string",
"executionDate": "2026-03-02",
"amount": 0,
"currency": "string",
"reference": "string",
"communication": "string",
"invoiceId": "Iv5zP2nK7wRt3xMq9bLd",
"chargeBearer": "CRED",
"debtor": {
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"name": "string",
"accountIdentifications": [
{
"type": "bic",
"value": "string"
}
],
"currency": "string"
},
"creditor": {
"counterpartyId": "Cp2nG7vB4xLq9wRt5hMz",
"counterpartyCashAccountId": "string",
"name": "string",
"accountIdentifications": [
{
"type": "bic",
"value": "string"
}
],
"currency": "string",
"address": {
"country": "CH",
"postCode": "string",
"townName": "string",
"streetName": "string",
"buildingNumber": "string",
"name": "string",
"sortingCode": "string",
"postBox": "string",
"administrativeArea": "string",
"recipients": [
"string"
],
"organization": "string",
"source": [
"string"
]
}
}
},
"callbackParams": {
"key": "string"
}
}),
});
console.log(await response.json());import os
import requests
response = requests.post(
"https://api.business.swayapp.io/v1/workspaces/Wk7fQ2xR9bLm4tZp8sNv/write-consents",
headers={"Authorization": f"Bearer {os.environ['SWAY_API_KEY']}"},
json={
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"paymentData": {
"scope": "domestic",
"idempotencyId": "string",
"executionDate": "2026-03-02",
"amount": 0,
"currency": "string",
"reference": "string",
"communication": "string",
"invoiceId": "Iv5zP2nK7wRt3xMq9bLd",
"chargeBearer": "CRED",
"debtor": {
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"name": "string",
"accountIdentifications": [
{
"type": "bic",
"value": "string",
},
],
"currency": "string",
},
"creditor": {
"counterpartyId": "Cp2nG7vB4xLq9wRt5hMz",
"counterpartyCashAccountId": "string",
"name": "string",
"accountIdentifications": [
{
"type": "bic",
"value": "string",
},
],
"currency": "string",
"address": {
"country": "CH",
"postCode": "string",
"townName": "string",
"streetName": "string",
"buildingNumber": "string",
"name": "string",
"sortingCode": "string",
"postBox": "string",
"administrativeArea": "string",
"recipients": [
"string",
],
"organization": "string",
"source": [
"string",
],
},
},
},
"callbackParams": {
"key": "string",
},
},
)
print(response.json()){
"data": {
"firestoreId": "wcons_V1JJVEUtMDA0Mg",
"expirationDateTime": "2026-03-02T09:30:00.000Z",
"authorizationStatus": {
"status": "pending",
"updateDateTime": "2026-03-02T09:30:00.000Z"
},
"authorizationUri": "https://example.com",
"products": [
"identity"
],
"features": [
"identity.details"
],
"range": {
"fromDateTime": "2026-03-02T09:30:00.000Z",
"toDateTime": "2026-03-02T09:30:00.000Z"
},
"reference": "string",
"serviceProviderId": "sprov_SUlEUDAwMjMw",
"workspaceId": "Wk7fQ2xR9bLm4tZp8sNv",
"creation": {
"creationDateTime": "2026-03-02T09:15:00.000Z",
"createdBy": "Xq3vT9mB2kLpR7sN4wYc8dZf1aHj"
},
"paymentData": {
"scope": "domestic",
"idempotencyId": "string",
"executionDate": "2026-03-02",
"amount": 0,
"currency": "string",
"reference": "string",
"communication": "string",
"invoiceId": "Iv5zP2nK7wRt3xMq9bLd",
"chargeBearer": "CRED",
"debtor": {
"bankAccountId": "bacc_Q0gzMTA4NzY1NDM",
"name": "string",
"accountIdentifications": [
{
"type": "bic",
"value": "string"
}
],
"currency": "string"
},
"creditor": {
"counterpartyId": "Cp2nG7vB4xLq9wRt5hMz",
"counterpartyCashAccountId": "string",
"name": "string",
"accountIdentifications": [
{
"type": "bic",
"value": "string"
}
],
"currency": "string",
"address": {
"country": "CH",
"postCode": "8001",
"townName": "Zürich",
"streetName": "Bahnhofstrasse",
"buildingNumber": "10",
"name": "Haus zur Linde",
"sortingCode": "string",
"postBox": "Postfach 1234",
"administrativeArea": "Zürich",
"recipients": [
"Anna Meier"
],
"organization": "Muster AG",
"source": [
"Muster AG",
"Bahnhofstrasse 10",
"8001 Zürich"
]
}
}
}
}
}{
"error": {
"code": "invalid-argument",
"message": "Invalid request"
}
}{
"error": {
"code": "unauthenticated",
"message": "Invalid or expired credentials"
}
}{
"error": {
"code": "permission-denied",
"message": "Missing required scope: invoices:read"
}
}{
"error": {
"code": "not-found",
"message": "Resource not found"
}
}{
"error": {
"code": "internal",
"message": "An internal error occurred"
}
}