1:I["8f048adc2ca3",[],"StyleSheetProvider",1] 2:I["911c8e14a321",[],"RevpressProvider",1] 3:I["b0b3943575f9",[],"Link",1] 6:I["98d563c3c055",[],"ToastProvider",1] 7:I["9ab2c8c971c4",[],"LayoutTopNav",1] 8:I["3c81c6443917",[],"LayoutMenu",1] 9:I["741b00e3790d",[],"AIToolbar",1] b:I["cc1bdf5ea256",[],"FloatingTableOfContents",1] 13:I["98d563c3c055",[],"Spacer",1] 14:I["34a8762a918d",[],"Feedback",1] 15:I["98d563c3c055",[],"Item",1] 16:I["52683481a7bd",[],"ItemContent",1] 17:I["52683481a7bd",[],"ItemTitle",1] 18:I["52683481a7bd",[],"ItemDescription",1] 19:I["7726099d401e",[],"LayoutFeed",1] 1a:I["cc1bdf5ea256",[],"TableOfContents",1] 1b:I["98d563c3c055",[],"ToastContainer",1] 1c:I["29504dfc1207",[],"ErrorBoundary",1] 1d:I["98d563c3c055",[],"Box",1] 1e:I["98d563c3c055",[],"StatusWidget",1] 1f:I["52683481a7bd",[],"StatusWidgetImage",1] 20:I["52683481a7bd",[],"StatusWidgetTitle",1] 21:I["52683481a7bd",[],"StatusWidgetDescription",1] 22:I["9083c63ad443",[],"CopyAnchor",1] 23:I["98d563c3c055",[],"Icon",1] 72:I["98d563c3c055",[],"Link",1] 73:I["8537fdff809d",[],"Expandable",1] 74:I["8ef6b74664e6",[],"Tabs",1] 75:I["8ef6b74664e6",[],"TabItem",1] a4:I["50460d952402",[],"ScrollArea",1] a6:I["669a0b877249",[],"CopyButton",1] :HL["/_assets/request-fV1VI2Mp.css","stylesheet"] :HL["https://storage.googleapis.com/revolut-prod-apps_cdn/Brand/Retail/Logos/Wordmark/Revolut_Black.svg","image"] :HL["https://storage.googleapis.com/revolut-prod-apps_cdn/Brand/Retail/Logos/Wordmark/Revolut_White.svg","image"] 0:{"root":["$","html",null,{"suppressHydrationWarning":true,"lang":"en","data-feature-web-density":"true","data-banner-id":"$undefined","children":[["$","head",null,{"children":[[["$","meta",null,{"charSet":"utf-8"}],["$","meta",null,{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta",null,{"name":"color-scheme","content":"light dark"}],["$","meta",null,{"name":"generator","content":"Revpress v0.8.1"}],["$","meta",null,{"property":"og:site_name","content":"Developer"}],["$","meta",null,{"property":"og:type","content":"website"}]],[["$","link","css:/_assets/request-fV1VI2Mp.css",{"rel":"stylesheet","precedence":"vite-rsc/importer-resources","href":"/_assets/request-fV1VI2Mp.css","data-rsc-css-href":"/_assets/request-fV1VI2Mp.css"}],"$undefined"],["$","script",null,{"src":"/_assets/theme-init-add2a6d7.js"}],[["$","link",null,{"rel":"apple-touch-icon","sizes":"180x180","href":"/_assets/favicons/apple-touch-icon.png"}],["$","link",null,{"rel":"icon","type":"image/png","sizes":"32x32","href":"/_assets/favicons/favicon-32x32.png"}],["$","link",null,{"rel":"icon","type":"image/png","sizes":"16x16","href":"/_assets/favicons/favicon-16x16.png"}],["$","link",null,{"rel":"icon","type":"image/png","sizes":"192x192","href":"/_assets/favicons/android-chrome-192x192.png"}],["$","link",null,{"rel":"icon","type":"image/png","sizes":"512x512","href":"/_assets/favicons/android-chrome-512x512.png"}],["$","link",null,{"rel":"shortcut icon","href":"/_assets/favicons/favicon.ico"}]]]}],["$","body",null,{"className":"pjjwra0","children":["$","$L1",null,{"children":["$","$L2",null,{"nav":[{"item":{"id":"Guides","title":"Guides","items":[{"id":"/docs/guides/merchant/introduction","title":"Merchant","use":"$3","to":"/docs/guides/merchant/introduction","scope":"/docs/guides/merchant","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/introduction","title":"Accept Revolut Pay payments","use":"$3","to":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/introduction","scope":"/docs/guides/merchant"},{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments/introduction","title":"Accept card payments","use":"$3","to":"/docs/guides/merchant/accept-payments/online-payments/card-payments/introduction","scope":"/docs/guides/merchant"},{"id":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/introduction","title":"Accept Apple Pay and Google Pay payments","use":"$3","to":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/introduction","scope":"/docs/guides/merchant"},{"id":"/docs/guides/merchant/accept-payments/online-payments/pay-by-bank/introduction","title":"Accept direct bank payments","use":"$3","to":"/docs/guides/merchant/accept-payments/online-payments/pay-by-bank/introduction","scope":"/docs/guides/merchant"},{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-checkout/introduction","title":"Accept payments with Revolut Checkout","use":"$3","to":"/docs/guides/merchant/accept-payments/online-payments/revolut-checkout/introduction","scope":"/docs/guides/merchant"},{"id":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/introduction","title":"Accept payments via Hosted Checkout Page","use":"$3","to":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/introduction","scope":"/docs/guides/merchant"},{"id":"/docs/guides/merchant/accept-payments/online-payments/sepa-direct-debit/introduction","title":"Accept payments via SEPA Direct Debit","use":"$3","to":"/docs/guides/merchant/accept-payments/online-payments/sepa-direct-debit/introduction","scope":"/docs/guides/merchant"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/introduction","title":"Plugins and integrations","use":"$3","to":"/docs/guides/merchant/accept-payments/no-code/plugins/introduction","scope":"/docs/guides/merchant"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/introduction","title":"In-person payments","use":"$3","to":"/docs/guides/merchant/accept-payments/in-person-payments/introduction","scope":"/docs/guides/merchant"}]},{"id":"/docs/guides/manage-accounts/introduction","title":"Business","use":"$3","to":"/docs/guides/manage-accounts/introduction","scope":"/docs/guides/manage-accounts","items":[{"id":"/docs/guides/manage-accounts/transfers/send-money","title":"Send money","use":"$3","to":"/docs/guides/manage-accounts/transfers/send-money","scope":"/docs/guides/manage-accounts"},{"id":"/docs/guides/manage-accounts/accounts-and-transactions/manage-your-accounts","title":"Manage your money","use":"$3","to":"/docs/guides/manage-accounts/accounts-and-transactions/manage-your-accounts","scope":"/docs/guides/manage-accounts"},{"id":"/docs/guides/manage-accounts/exchange-money","title":"Exchange currency","use":"$3","to":"/docs/guides/manage-accounts/exchange-money","scope":"/docs/guides/manage-accounts"},{"id":"/docs/guides/manage-accounts/cards/manage-cards","title":"Manage cards","use":"$3","to":"/docs/guides/manage-accounts/cards/manage-cards","scope":"/docs/guides/manage-accounts"},{"id":"/docs/guides/manage-accounts/teams/manage-team-members","title":"Manage your team","use":"$3","to":"/docs/guides/manage-accounts/teams/manage-team-members","scope":"/docs/guides/manage-accounts"}]},{"id":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api/introduction","title":"Open Banking","use":"$3","to":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api/introduction","scope":"/docs/guides/build-banking-apps","items":[{"id":"/docs/guides/build-banking-apps/tutorials/initiate-your-first-payment","title":"Make payments","use":"$3","to":"/docs/guides/build-banking-apps/tutorials/initiate-your-first-payment","scope":"/docs/guides/build-banking-apps"},{"id":"/docs/guides/build-banking-apps/tutorials/get-account-and-transaction-information","title":"Get account information","use":"$3","to":"/docs/guides/build-banking-apps/tutorials/get-account-and-transaction-information","scope":"/docs/guides/build-banking-apps"}]},{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/introduction-to-revolut-ramp","title":"Crypto Ramp","use":"$3","to":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/introduction-to-revolut-ramp","scope":"/docs/guides/crypto-ramp","items":[{"id":"/docs/guides/crypto-ramp/get-started/integrate-with-revolut-ramp","title":"Integrate with Revolut Ramp","use":"$3","to":"/docs/guides/crypto-ramp/get-started/integrate-with-revolut-ramp","scope":"/docs/guides/crypto-ramp"}]},{"id":"/docs/guides/revolut-wallet/introduction","title":"Revolut Wallet","use":"$3","to":"/docs/guides/revolut-wallet/introduction","scope":"/docs/guides/revolut-wallet","items":[{"id":"/docs/guides/revolut-wallet/get-started","title":"Get started","use":"$3","to":"/docs/guides/revolut-wallet/get-started","scope":"/docs/guides/revolut-wallet"},{"id":"/docs/guides/revolut-wallet/operations/create-pass","title":"Create a pass","use":"$3","to":"/docs/guides/revolut-wallet/operations/create-pass","scope":"/docs/guides/revolut-wallet"},{"id":"/docs/guides/revolut-wallet/operations/update-pass","title":"Update a pass","use":"$3","to":"/docs/guides/revolut-wallet/operations/update-pass","scope":"/docs/guides/revolut-wallet"},{"id":"/docs/guides/revolut-wallet/operations/transaction-results","title":"Transaction results","use":"$3","to":"/docs/guides/revolut-wallet/operations/transaction-results","scope":"/docs/guides/revolut-wallet"}]}]}},{"item":{"id":"APIs","title":"APIs","items":[{"id":"/docs/api/merchant","title":"Merchant API","use":"$3","to":"/docs/api/merchant","items":[{"id":"/docs/api/merchant#tag-orders","title":"Orders","use":"$3","to":"/docs/api/merchant#tag-orders"},{"id":"/docs/api/merchant#tag-customers","title":"Customers","use":"$3","to":"/docs/api/merchant#tag-customers"},{"id":"/docs/api/merchant#tag-payments","title":"Payments","use":"$3","to":"/docs/api/merchant#tag-payments"},{"id":"/docs/api/merchant#tag-subscriptions","title":"Subscriptions","use":"$3","to":"/docs/api/merchant#tag-subscriptions"},{"id":"/docs/api/merchant#tag-payouts","title":"Payouts","use":"$3","to":"/docs/api/merchant#tag-payouts"},{"id":"/docs/api/merchant#tag-disputes","title":"Disputes","use":"$3","to":"/docs/api/merchant#tag-disputes"},{"id":"/docs/api/merchant#tag-report-runs","title":"Report runs","use":"$3","to":"/docs/api/merchant#tag-report-runs"},{"id":"/docs/api/merchant#tag-webhooks","title":"Webhooks","use":"$3","to":"/docs/api/merchant#tag-webhooks"},{"id":"/docs/api/merchant#tag-locations","title":"Locations","use":"$3","to":"/docs/api/merchant#tag-locations"}]},{"id":"/docs/api/business","title":"Business API","use":"$3","to":"/docs/api/business","items":[{"id":"/docs/api/business#tag-accounting","title":"Accounting settings","use":"$3","to":"/docs/api/business#tag-accounting"},{"id":"/docs/api/business#tag-accounts","title":"Accounts","use":"$3","to":"/docs/api/business#tag-accounts"},{"id":"/docs/api/business#tag-cards","title":"Cards","use":"$3","to":"/docs/api/business#tag-cards"},{"id":"/docs/api/business#tag-counterparties","title":"Counterparties","use":"$3","to":"/docs/api/business#tag-counterparties"},{"id":"/docs/api/business#tag-expenses","title":"Expenses","use":"$3","to":"/docs/api/business#tag-expenses"},{"id":"/docs/api/business#tag-foreign-exchange","title":"Foreign exchange","use":"$3","to":"/docs/api/business#tag-foreign-exchange"},{"id":"/docs/api/business#tag-payment-drafts","title":"Payment drafts","use":"$3","to":"/docs/api/business#tag-payment-drafts"},{"id":"/docs/api/business#tag-payout-links","title":"Payout links","use":"$3","to":"/docs/api/business#tag-payout-links"},{"id":"/docs/api/business#tag-team-members","title":"Team members","use":"$3","to":"/docs/api/business#tag-team-members"},{"id":"/docs/api/business#tag-transactions","title":"Transactions","use":"$3","to":"/docs/api/business#tag-transactions"},{"id":"/docs/api/business#tag-transfers","title":"Transfers","use":"$3","to":"/docs/api/business#tag-transfers"},{"id":"/docs/api/business#tag-webhooks-v2","title":"Webhooks","use":"$3","to":"/docs/api/business#tag-webhooks-v2"}]},{"id":"/docs/api/open-banking","title":"Open Banking API","use":"$3","to":"/docs/api/open-banking","items":[{"id":"/docs/api/open-banking#tag-accounts","title":"Accounts","use":"$3","to":"/docs/api/open-banking#tag-accounts"},{"id":"/docs/api/open-banking#tag-applications","title":"Applications","use":"$3","to":"/docs/api/open-banking#tag-applications"},{"id":"/docs/api/open-banking#tag-domestic-payment","title":"Payments","use":"$3","to":"/docs/api/open-banking#tag-domestic-payment"},{"id":"/docs/api/open-banking#tag-transactions","title":"Transactions","use":"$3","to":"/docs/api/open-banking#tag-transactions"}]},{"id":"/docs/api/crypto-ramp","title":"Crypto Ramp API","use":"$3","to":"/docs/api/crypto-ramp","items":[{"id":"/docs/api/crypto-ramp#tag-partners","title":"Partners","use":"$3","to":"/docs/api/crypto-ramp#tag-partners"},{"id":"/docs/api/crypto-ramp#tag-webhooks","title":"Webhooks","use":"$3","to":"/docs/api/crypto-ramp#tag-webhooks"}]},{"id":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/exchange-fix-api","title":"Crypto Exchange APIs","use":"$3","to":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/exchange-fix-api","scope":"/docs/guides/exchange-fix-api","items":[{"id":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/exchange-fix-api","title":"Crypto Exchange FIX API","use":"$3","to":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/exchange-fix-api","scope":"/docs/guides/exchange-fix-api"},{"id":"/docs/api/revolut-x-crypto-exchange","title":"Crypto Exchange REST API","use":"$3","to":"/docs/api/revolut-x-crypto-exchange"}]},{"id":"/docs/api/revolut-wallet-partner","title":"Revolut Wallet APIs","use":"$3","to":"/docs/api/revolut-wallet-partner","items":[{"id":"/docs/api/revolut-wallet-partner","title":"Partner API","use":"$3","to":"/docs/api/revolut-wallet-partner"},{"id":"/docs/api/revolut-wallet-callbacks","title":"Partner callbacks API","use":"$3","to":"/docs/api/revolut-wallet-callbacks"}]}]}},{"item":{"id":"SDKs","title":"SDKs","items":[{"id":"/docs/sdks/merchant-web-sdk/introduction","title":"Merchant Web SDKs","use":"$3","to":"/docs/sdks/merchant-web-sdk/introduction","scope":"/docs/sdks/merchant-web-sdk","items":[{"id":"/docs/sdks/merchant-web-sdk/payment-methods/embedded-checkout","title":"Revolut Checkout","use":"$3","to":"/docs/sdks/merchant-web-sdk/payment-methods/embedded-checkout","scope":"/docs/sdks/merchant-web-sdk"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/revolut-pay","title":"Revolut Pay","use":"$3","to":"/docs/sdks/merchant-web-sdk/payment-methods/revolut-pay","scope":"/docs/sdks/merchant-web-sdk"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/apple-pay-google-pay","title":"Apple Pay and Google Pay","use":"$3","to":"/docs/sdks/merchant-web-sdk/payment-methods/apple-pay-google-pay","scope":"/docs/sdks/merchant-web-sdk"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/pay-by-bank","title":"Pay by Bank","use":"$3","to":"/docs/sdks/merchant-web-sdk/payment-methods/pay-by-bank","scope":"/docs/sdks/merchant-web-sdk"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/sepa-direct-debit","title":"SEPA Direct Debit","use":"$3","to":"/docs/sdks/merchant-web-sdk/payment-methods/sepa-direct-debit","scope":"/docs/sdks/merchant-web-sdk"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/card-field","title":"Card field","use":"$3","to":"/docs/sdks/merchant-web-sdk/payment-methods/card-field","scope":"/docs/sdks/merchant-web-sdk"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/pop-up","title":"Card pop-up","use":"$3","to":"/docs/sdks/merchant-web-sdk/payment-methods/pop-up","scope":"/docs/sdks/merchant-web-sdk"},{"id":"/docs/sdks/merchant-web-sdk/promotional-widgets/introduction","title":"Promotional widgets","use":"$3","to":"/docs/sdks/merchant-web-sdk/promotional-widgets/introduction","scope":"/docs/sdks/merchant-web-sdk"}]},{"id":"/docs/sdks/merchant-ios-sdk/introduction","title":"Merchant iOS SDKs","use":"$3","to":"/docs/sdks/merchant-ios-sdk/introduction","scope":"/docs/sdks/merchant-ios-sdk","items":[{"id":"/docs/sdks/merchant-ios-sdk/revolut-pay-ios-sdk/introduction","title":"Revolut Pay","use":"$3","to":"/docs/sdks/merchant-ios-sdk/revolut-pay-ios-sdk/introduction","scope":"/docs/sdks/merchant-ios-sdk"},{"id":"/docs/sdks/merchant-ios-sdk/apple-pay-ios-sdk/introduction","title":"Apple Pay","use":"$3","to":"/docs/sdks/merchant-ios-sdk/apple-pay-ios-sdk/introduction","scope":"/docs/sdks/merchant-ios-sdk"},{"id":"/docs/sdks/merchant-ios-sdk/tap-to-pay-sdk/introduction","title":"Tap to Pay","use":"$3","to":"/docs/sdks/merchant-ios-sdk/tap-to-pay-sdk/introduction","scope":"/docs/sdks/merchant-ios-sdk"},{"id":"/docs/sdks/merchant-ios-sdk/revolut-card-form-ios-sdk/introduction","title":"Card Form","use":"$3","to":"/docs/sdks/merchant-ios-sdk/revolut-card-form-ios-sdk/introduction","scope":"/docs/sdks/merchant-ios-sdk"}]},{"id":"/docs/sdks/merchant-android-sdk/introduction","title":"Merchant Android SDKs","use":"$3","to":"/docs/sdks/merchant-android-sdk/introduction","scope":"/docs/sdks/merchant-android-sdk","items":[{"id":"/docs/sdks/merchant-android-sdk/revolut-pay-android-sdk/introduction","title":"Revolut Pay","use":"$3","to":"/docs/sdks/merchant-android-sdk/revolut-pay-android-sdk/introduction","scope":"/docs/sdks/merchant-android-sdk"},{"id":"/docs/sdks/merchant-android-sdk/revolut-card-form-android-sdk/introduction","title":"Card Form","use":"$3","to":"/docs/sdks/merchant-android-sdk/revolut-card-form-android-sdk/introduction","scope":"/docs/sdks/merchant-android-sdk"}]}]}},{"item":{"id":"Resources","title":"Resources","items":[{"id":"/docs/resources/marketing-guidelines","title":"Revolut Pay marketing assets and guidelines","use":"$3","to":"/docs/resources/marketing-guidelines","scope":"/docs/resources"},{"id":"/docs/resources/revolut-pay-button-guidelines","title":"Revolut Pay button guidelines","use":"$3","to":"/docs/resources/revolut-pay-button-guidelines","scope":"/docs/resources"},{"id":"/docs/resources/open-banking-logo-guidelines","title":"Revolut Open Banking logo assets and guidelines","use":"$3","to":"/docs/resources/open-banking-logo-guidelines","scope":"/docs/resources"}]}},{"item":{"id":"More","title":"More","items":[{"id":"/blog","title":"Blog","use":"$3","to":"/blog","scope":"/blog"},{"id":"https://developer.revolut.com/portal/signup","title":"Developer Portal","use":"a","href":"https://developer.revolut.com/portal/signup","target":"_blank","rel":"noreferrer"}]}}],"menu":{"docs":[{"id":"/docs","title":"Docs","use":"$3","items":[{"id":"/docs/guides","title":"Guides","use":"$3","items":[]},{"id":"/docs/sdks","title":"Sdks","use":"$3","items":[]}]},{"id":"/docs/guides/build-banking-apps","title":"Build Banking Apps","use":"$3","root":true,"items":[{"id":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api","title":"Introduction to the Open Banking API","use":"$3","items":[{"id":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api/introduction","title":"Introduction","to":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api/introduction","use":"$3"},{"id":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api/who-can-access-the-api","title":"Who can access the API","to":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api/who-can-access-the-api","use":"$3"},{"id":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api/global-customer-access-controls","title":"Global customer access controls","to":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api/global-customer-access-controls","use":"$3"}]},{"id":"/docs/guides/build-banking-apps/get-started","title":"Get started","use":"$3","items":[{"id":"/docs/guides/build-banking-apps/get-started/register-your-application-in-the-developer-portal","title":"1. Register your application in the Developer Portal","to":"/docs/guides/build-banking-apps/get-started/register-your-application-in-the-developer-portal","use":"$3"},{"id":"/docs/guides/build-banking-apps/get-started/prepare-sandbox-environment","title":"2. Prepare your Sandbox environment","to":"/docs/guides/build-banking-apps/get-started/prepare-sandbox-environment","use":"$3"},{"id":"/docs/guides/build-banking-apps/get-started/setup-prod-environment","title":"3. Set up production environment","to":"/docs/guides/build-banking-apps/get-started/setup-prod-environment","use":"$3"},{"id":"/docs/guides/build-banking-apps/get-started/get-access-token","title":"4. Get the access token","to":"/docs/guides/build-banking-apps/get-started/get-access-token","use":"$3"}]},{"id":"/docs/guides/build-banking-apps/register-your-application-using-dcr","title":"Register your application using DCR","use":"$3","to":"/docs/guides/build-banking-apps/register-your-application-using-dcr","items":[{"id":"/docs/guides/build-banking-apps/register-your-application-using-dcr/get-the-jwks-url","title":"1. Get the JWKs URL","to":"/docs/guides/build-banking-apps/register-your-application-using-dcr/get-the-jwks-url","use":"$3"},{"id":"/docs/guides/build-banking-apps/register-your-application-using-dcr/get-the-software-statement","title":"2. Get the software statement","to":"/docs/guides/build-banking-apps/register-your-application-using-dcr/get-the-software-statement","use":"$3"},{"id":"/docs/guides/build-banking-apps/register-your-application-using-dcr/get-your-certificates-distinguished-name","title":"3. Get your certificate's distinguished name","to":"/docs/guides/build-banking-apps/register-your-application-using-dcr/get-your-certificates-distinguished-name","use":"$3"},{"id":"/docs/guides/build-banking-apps/register-your-application-using-dcr/create-a-jwt","title":"4. Create a JWT","to":"/docs/guides/build-banking-apps/register-your-application-using-dcr/create-a-jwt","use":"$3"},{"id":"/docs/guides/build-banking-apps/register-your-application-using-dcr/validate-your-jwt","title":"5. Validate your JWT","to":"/docs/guides/build-banking-apps/register-your-application-using-dcr/validate-your-jwt","use":"$3"},{"id":"/docs/guides/build-banking-apps/register-your-application-using-dcr/get-a-client-id","title":"6. Get a client ID","to":"/docs/guides/build-banking-apps/register-your-application-using-dcr/get-a-client-id","use":"$3"},{"id":"/docs/guides/build-banking-apps/register-your-application-using-dcr/open-id-configuration-urls","title":"Open ID configuration URLs","to":"/docs/guides/build-banking-apps/register-your-application-using-dcr/open-id-configuration-urls","use":"$3"}]},{"id":"/docs/guides/build-banking-apps/manage-your-applications","title":"Manage your applications","use":"$3","items":[{"id":"/docs/guides/build-banking-apps/manage-your-applications/get-an-application","title":"Retrieve application data","to":"/docs/guides/build-banking-apps/manage-your-applications/get-an-application","use":"$3"},{"id":"/docs/guides/build-banking-apps/manage-your-applications/update-an-application","title":"Update application data","to":"/docs/guides/build-banking-apps/manage-your-applications/update-an-application","use":"$3"},{"id":"/docs/guides/build-banking-apps/manage-your-applications/update-certificates","title":"Update application certificates","to":"/docs/guides/build-banking-apps/manage-your-applications/update-certificates","use":"$3"},{"id":"/docs/guides/build-banking-apps/manage-your-applications/delete-an-application","title":"Delete an application","to":"/docs/guides/build-banking-apps/manage-your-applications/delete-an-application","use":"$3"}]},{"id":"/docs/guides/build-banking-apps/tutorials","title":"Tutorials","use":"$3","items":[{"id":"/docs/guides/build-banking-apps/tutorials/get-account-and-transaction-information","title":"Get account and transaction information","to":"/docs/guides/build-banking-apps/tutorials/get-account-and-transaction-information","use":"$3"},{"id":"/docs/guides/build-banking-apps/tutorials/initiate-your-first-payment","title":"Initiate your first payment","to":"/docs/guides/build-banking-apps/tutorials/initiate-your-first-payment","use":"$3"},{"id":"/docs/guides/build-banking-apps/tutorials/test-with-postman","title":"Test with Postman","use":"$3","items":[{"id":"/docs/guides/build-banking-apps/tutorials/test-with-postman/set-up-postman","title":"Set up Postman","to":"/docs/guides/build-banking-apps/tutorials/test-with-postman/set-up-postman","use":"$3"},{"id":"/docs/guides/build-banking-apps/tutorials/test-with-postman/get-an-account-access-consent","title":"Get an account access consent","to":"/docs/guides/build-banking-apps/tutorials/test-with-postman/get-an-account-access-consent","use":"$3"},{"id":"/docs/guides/build-banking-apps/tutorials/test-with-postman/get-a-payment-consent","title":"Get a payment consent","to":"/docs/guides/build-banking-apps/tutorials/test-with-postman/get-a-payment-consent","use":"$3"}]},{"id":"/docs/guides/build-banking-apps/tutorials/create-a-file-payment","title":"Create a file payment","to":"/docs/guides/build-banking-apps/tutorials/create-a-file-payment","use":"$3"},{"id":"/docs/guides/build-banking-apps/tutorials/create-your-first-draft-payment","title":"Create your first draft payment","to":"/docs/guides/build-banking-apps/tutorials/create-your-first-draft-payment","use":"$3"},{"id":"/docs/guides/build-banking-apps/tutorials/work-with-draft-payments","title":"Work with draft payments","to":"/docs/guides/build-banking-apps/tutorials/work-with-draft-payments","use":"$3"},{"id":"/docs/guides/build-banking-apps/tutorials/work-with-json-web-tokens","title":"Work with JSON Web Tokens","to":"/docs/guides/build-banking-apps/tutorials/work-with-json-web-tokens","use":"$3"},{"id":"/docs/guides/build-banking-apps/tutorials/work-with-json-web-signatures","title":"Work with JSON Web Signatures","to":"/docs/guides/build-banking-apps/tutorials/work-with-json-web-signatures","use":"$3"}]},{"id":"/docs/guides/build-banking-apps/api-metrics","title":"API metrics","to":"/docs/guides/build-banking-apps/api-metrics","use":"$3"},{"id":"/docs/guides/build-banking-apps/usage-and-limits","title":"Usage and limits","to":"/docs/guides/build-banking-apps/usage-and-limits","use":"$3"},{"id":"/docs/guides/build-banking-apps/glossary","title":"Glossary","to":"/docs/guides/build-banking-apps/glossary","use":"$3"},{"id":"/docs/guides/build-banking-apps/faqs","title":"FAQs","to":"/docs/guides/build-banking-apps/faqs","use":"$3"},{"id":"/docs/guides/build-banking-apps/errors","title":"Errors","to":"/docs/guides/build-banking-apps/errors","use":"$3"}]},{"id":"/docs/guides/crypto-ramp","title":"Crypto Ramp","use":"$3","root":true,"items":[{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp","title":"Introduction to Revolut Ramp","use":"$3","items":[{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/introduction-to-revolut-ramp","title":"Introduction","to":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/introduction-to-revolut-ramp","use":"$3"},{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/partner-journey","title":"Partner journey","to":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/partner-journey","use":"$3"},{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/coverage-and-other-details","title":"Coverage and other details","use":"$3","items":[{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/coverage-and-other-details/crypto-tokens","title":"Tokens","to":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/coverage-and-other-details/crypto-tokens","use":"$3"},{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/coverage-and-other-details/currencies-and-regions","title":"Currencies and regions","to":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/coverage-and-other-details/currencies-and-regions","use":"$3"},{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/coverage-and-other-details/payment-options","title":"Payment options","to":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/coverage-and-other-details/payment-options","use":"$3"},{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/coverage-and-other-details/limits-and-fees","title":"Limits and fees","to":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/coverage-and-other-details/limits-and-fees","use":"$3"}]},{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/integration-options","title":"Integration with Revolut Ramp","to":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/integration-options","use":"$3"},{"id":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/configuration-options","title":"Configuration options","to":"/docs/guides/crypto-ramp/introduction-to-revolut-ramp/configuration-options","use":"$3"}]},{"id":"/docs/guides/crypto-ramp/get-started","title":"Get started","use":"$3","items":[{"id":"/docs/guides/crypto-ramp/get-started/integrate-with-revolut-ramp","title":"Integrate with Revolut Ramp","to":"/docs/guides/crypto-ramp/get-started/integrate-with-revolut-ramp","use":"$3"},{"id":"/docs/guides/crypto-ramp/get-started/initiate-transaction","title":"Initiate a transaction","to":"/docs/guides/crypto-ramp/get-started/initiate-transaction","use":"$3"},{"id":"/docs/guides/crypto-ramp/get-started/customer-perspective","title":"Create an order - customer's perspective","to":"/docs/guides/crypto-ramp/get-started/customer-perspective","use":"$3"}]},{"id":"/docs/guides/crypto-ramp/tutorials","title":"API usage and testing","use":"$3","items":[{"id":"/docs/guides/crypto-ramp/tutorials/test-the-integration","title":"Test the integration","to":"/docs/guides/crypto-ramp/tutorials/test-the-integration","use":"$3"},{"id":"/docs/guides/crypto-ramp/tutorials/use-the-api","title":"Leverage the Crypto Ramp API","to":"/docs/guides/crypto-ramp/tutorials/use-the-api","use":"$3"},{"id":"/docs/guides/crypto-ramp/tutorials/work-with-webhooks","title":"Work with webhooks","use":"$3","items":[{"id":"/docs/guides/crypto-ramp/tutorials/work-with-webhooks/use-webhooks","title":"Track order and payment lifecycle","to":"/docs/guides/crypto-ramp/tutorials/work-with-webhooks/use-webhooks","use":"$3"},{"id":"/docs/guides/crypto-ramp/tutorials/work-with-webhooks/verify-the-payload-signature","title":"Verify the payload signature","to":"/docs/guides/crypto-ramp/tutorials/work-with-webhooks/verify-the-payload-signature","use":"$3"}]}]},{"id":"/docs/guides/crypto-ramp/glossary","title":"Glossary","to":"/docs/guides/crypto-ramp/glossary","use":"$3"}]},{"id":"/docs/guides/exchange-fix-api","title":"Exchange FIX API","use":"$3","root":true,"items":[{"id":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api","title":"Introduction to the Revolut Exchange FIX API","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/exchange-fix-api","title":"Introduction","to":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/exchange-fix-api","use":"$3"},{"id":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/system-overview","title":"System overview","to":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/system-overview","use":"$3"},{"id":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/reading-instructions","title":"Reading instructions","to":"/docs/guides/exchange-fix-api/introduction-to-the-exchange-fix-api/reading-instructions","use":"$3"}]},{"id":"/docs/guides/exchange-fix-api/trading-fix-api","title":"Trading FIX API","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages","title":"Supported FIX messages","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/supported-fix-messages-trading-overview","title":"Overview","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/supported-fix-messages-trading-overview","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages","title":"Session level messages","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-A-logon","title":"A (Logon)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-A-logon","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-0-heartbeat","title":"0 (Heartbeat)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-0-heartbeat","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-1-test-request","title":"1 (Test request)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-1-test-request","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-2-resend-request","title":"2 (Resend request)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-2-resend-request","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-3-session-level-reject","title":"3 (Session level reject)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-3-session-level-reject","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-4-reset-sequence","title":"4 (Sequence reset)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-4-reset-sequence","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-5-logout","title":"5 (Logout)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-session-level-messages/message-5-logout","use":"$3"}]},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages","title":"Application level messages","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/standard-message-header","title":"Standard message header","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/standard-message-header","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/standard-message-trailer","title":"Standard message trailer","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/standard-message-trailer","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/order-state-transitions","title":"Order state transitions","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/order-state-transitions","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/currency-pairs","title":"Currency pairs","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/currency-pairs","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/order-rejection-codes","title":"Order rejection codes","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/order-rejection-codes","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-D-new-order-single","title":"D (New order - single)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-D-new-order-single","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-F-order-cancel-request","title":"F (Order cancel request)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-F-order-cancel-request","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-G-order-cancel-replace-request","title":"G (Order cancel/replace request)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-G-order-cancel-replace-request","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-H-order-status-request","title":"H (Order status request)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-H-order-status-request","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-q-order-mass-cancel-request","title":"q (Order mass cancel request)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-q-order-mass-cancel-request","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-8-execution-report","title":"8 (Execution report)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-8-execution-report","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-9-order-cancel-reject","title":"9 (Order cancel reject)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-9-order-cancel-reject","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-j-business-message-reject","title":"j (Business message reject)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-j-business-message-reject","use":"$3"},{"id":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-r-order-mass-cancel-report","title":"r (Order mass cancel report)","to":"/docs/guides/exchange-fix-api/trading-fix-api/supported-fix-messages/fix-application-level-messages/message-r-order-mass-cancel-report","use":"$3"}]}]}]},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api","title":"Market Data FIX API","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages","title":"Supported FIX messages","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/supported-fix-messages-market-data-overview","title":"Overview","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/supported-fix-messages-market-data-overview","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages","title":"Session level messages","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-A-logon","title":"A (Logon)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-A-logon","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-0-heartbeat","title":"0 (Heartbeat)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-0-heartbeat","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-1-test-request","title":"1 (Test request)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-1-test-request","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-2-resend-request","title":"2 (Resend request)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-2-resend-request","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-3-session-level-reject","title":"3 (Session level reject)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-3-session-level-reject","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-4-reset-sequence","title":"4 (Sequence reset)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-4-reset-sequence","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-5-logout","title":"5 (Logout)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-session-level-messages/message-5-logout","use":"$3"}]},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages","title":"Application level messages","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/standard-message-header","title":"Standard message header","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/standard-message-header","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/standard-message-trailer","title":"Standard message trailer","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/standard-message-trailer","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/currency-pairs","title":"Currency pairs","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/currency-pairs","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/message-v-market-data-request","title":"V (Market data request)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/message-v-market-data-request","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/message-w-full-refresh","title":"W (Market Data - Snapshot/Full refresh)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/message-w-full-refresh","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/message-x-incremental-refresh","title":"X (Market Data - Incremental Refresh)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/message-x-incremental-refresh","use":"$3"},{"id":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/message-y-market-data-request-reject","title":"Y (Market Data Request Reject)","to":"/docs/guides/exchange-fix-api/market-data-fix-api/supported-fix-messages/fix-application-level-messages/message-y-market-data-request-reject","use":"$3"}]}]}]},{"id":"/docs/guides/exchange-fix-api/fix-session-management","title":"FIX session management","use":"$3","items":[{"id":"/docs/guides/exchange-fix-api/fix-session-management/starting-session-and-authentication","title":"Starting session and authentication","to":"/docs/guides/exchange-fix-api/fix-session-management/starting-session-and-authentication","use":"$3"},{"id":"/docs/guides/exchange-fix-api/fix-session-management/session-termination","title":"Session termination","to":"/docs/guides/exchange-fix-api/fix-session-management/session-termination","use":"$3"},{"id":"/docs/guides/exchange-fix-api/fix-session-management/reject-handling","title":"Reject handling","to":"/docs/guides/exchange-fix-api/fix-session-management/reject-handling","use":"$3"}]}]},{"id":"/docs/guides/manage-accounts","title":"Manage Accounts","use":"$3","root":true,"items":[{"id":"/docs/guides/manage-accounts/introduction","title":"Introduction to the Business API","to":"/docs/guides/manage-accounts/introduction","use":"$3"},{"id":"/docs/guides/manage-accounts/use-cases","title":"Use cases","use":"$3","items":[{"id":"/docs/guides/manage-accounts/use-cases/accounts-and-transactions-syncing","title":"Accounts and transactions syncing","to":"/docs/guides/manage-accounts/use-cases/accounts-and-transactions-syncing","use":"$3"},{"id":"/docs/guides/manage-accounts/use-cases/expenses-and-receipts","title":"Expenses and receipts syncing","to":"/docs/guides/manage-accounts/use-cases/expenses-and-receipts","use":"$3"},{"id":"/docs/guides/manage-accounts/use-cases/payouts-automation","title":"Payouts automation","to":"/docs/guides/manage-accounts/use-cases/payouts-automation","use":"$3"}]},{"id":"/docs/guides/manage-accounts/get-started","title":"Get started","use":"$3","items":[{"id":"/docs/guides/manage-accounts/get-started/sign-up-for-revolut-business-account","title":"1. Sign up for Revolut Business account","to":"/docs/guides/manage-accounts/get-started/sign-up-for-revolut-business-account","use":"$3"},{"id":"/docs/guides/manage-accounts/get-started/prepare-sandbox-environment","title":"2. Set up a test environment with Revolut Sandbox","to":"/docs/guides/manage-accounts/get-started/prepare-sandbox-environment","use":"$3"},{"id":"/docs/guides/manage-accounts/get-started/make-your-first-api-request","title":"3. Make your first API request","to":"/docs/guides/manage-accounts/get-started/make-your-first-api-request","use":"$3"}]},{"id":"/docs/guides/manage-accounts/accounting","title":"Accounting settings","use":"$3","items":[{"id":"/docs/guides/manage-accounts/accounting/manage-accounting-settings","title":"Overview","to":"/docs/guides/manage-accounts/accounting/manage-accounting-settings","use":"$3"},{"id":"/docs/guides/manage-accounts/accounting/manage-accounting-categories","title":"Accounting categories","to":"/docs/guides/manage-accounts/accounting/manage-accounting-categories","use":"$3"},{"id":"/docs/guides/manage-accounts/accounting/manage-tax-rates","title":"Tax rates","to":"/docs/guides/manage-accounts/accounting/manage-tax-rates","use":"$3"},{"id":"/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups","title":"Labels and label groups","to":"/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups","use":"$3"}]},{"id":"/docs/guides/manage-accounts/accounts-and-transactions","title":"Accounts and transactions","use":"$3","items":[{"id":"/docs/guides/manage-accounts/accounts-and-transactions/manage-your-accounts","title":"Accounts","to":"/docs/guides/manage-accounts/accounts-and-transactions/manage-your-accounts","use":"$3"},{"id":"/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses","title":"Expenses","to":"/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses","use":"$3"},{"id":"/docs/guides/manage-accounts/accounts-and-transactions/retrieve-transactions","title":"Transactions","to":"/docs/guides/manage-accounts/accounts-and-transactions/retrieve-transactions","use":"$3"},{"id":"/docs/guides/manage-accounts/accounts-and-transactions/map-transaction-data","title":"Map transactions","to":"/docs/guides/manage-accounts/accounts-and-transactions/map-transaction-data","use":"$3"}]},{"id":"/docs/guides/manage-accounts/counterparties","title":"Counterparties","use":"$3","items":[{"id":"/docs/guides/manage-accounts/counterparties/create-a-counterparty","title":"Create a counterparty","to":"/docs/guides/manage-accounts/counterparties/create-a-counterparty","use":"$3"},{"id":"/docs/guides/manage-accounts/counterparties/retrieve-counterparties","title":"Retrieve counterparties","to":"/docs/guides/manage-accounts/counterparties/retrieve-counterparties","use":"$3"},{"id":"/docs/guides/manage-accounts/counterparties/update-counterparty-payment-method","title":"Update a counterparty's payment method","to":"/docs/guides/manage-accounts/counterparties/update-counterparty-payment-method","use":"$3"},{"id":"/docs/guides/manage-accounts/counterparties/confirmation-of-payee","title":"Confirmation of Payee (CoP)","to":"/docs/guides/manage-accounts/counterparties/confirmation-of-payee","use":"$3"}]},{"id":"/docs/guides/manage-accounts/transfers","title":"Transfers","use":"$3","items":[{"id":"/docs/guides/manage-accounts/transfers/send-money","title":"Send money","to":"/docs/guides/manage-accounts/transfers/send-money","use":"$3"},{"id":"/docs/guides/manage-accounts/transfers/bank-transfers","title":"Bank transfers","to":"/docs/guides/manage-accounts/transfers/bank-transfers","use":"$3"},{"id":"/docs/guides/manage-accounts/transfers/card-transfers","title":"Card transfers","to":"/docs/guides/manage-accounts/transfers/card-transfers","use":"$3"},{"id":"/docs/guides/manage-accounts/transfers/payout-links","title":"Payout links","to":"/docs/guides/manage-accounts/transfers/payout-links","use":"$3"},{"id":"/docs/guides/manage-accounts/transfers/payment-drafts","title":"Payment drafts","to":"/docs/guides/manage-accounts/transfers/payment-drafts","use":"$3"},{"id":"/docs/guides/manage-accounts/transfers/prepare-and-validate-transfers","title":"Prepare and validate transfers","to":"/docs/guides/manage-accounts/transfers/prepare-and-validate-transfers","use":"$3"}]},{"id":"/docs/guides/manage-accounts/exchange-money","title":"Foreign exchange","to":"/docs/guides/manage-accounts/exchange-money","use":"$3"},{"id":"/docs/guides/manage-accounts/cards","title":"Cards","use":"$3","items":[{"id":"/docs/guides/manage-accounts/cards/manage-cards","title":"Cards","to":"/docs/guides/manage-accounts/cards/manage-cards","use":"$3"},{"id":"/docs/guides/manage-accounts/cards/manage-card-invitations","title":"Card invitations","to":"/docs/guides/manage-accounts/cards/manage-card-invitations","use":"$3"}]},{"id":"/docs/guides/manage-accounts/teams","title":"Teams","use":"$3","items":[{"id":"/docs/guides/manage-accounts/teams/manage-team-members","title":"Members and roles","to":"/docs/guides/manage-accounts/teams/manage-team-members","use":"$3"}]},{"id":"/docs/guides/manage-accounts/webhooks","title":"Webhooks","use":"$3","items":[{"id":"/docs/guides/manage-accounts/webhooks/about-webhooks","title":"About webhooks","to":"/docs/guides/manage-accounts/webhooks/about-webhooks","use":"$3"},{"id":"/docs/guides/manage-accounts/webhooks/manage-webhooks","title":"Manage webhooks","to":"/docs/guides/manage-accounts/webhooks/manage-webhooks","use":"$3"},{"id":"/docs/guides/manage-accounts/webhooks/verify-the-payload-signature","title":"Verify the payload signature","to":"/docs/guides/manage-accounts/webhooks/verify-the-payload-signature","use":"$3"}]},{"id":"/docs/guides/manage-accounts/api-usage-and-testing","title":"API usage and testing","use":"$3","items":[{"id":"/docs/guides/manage-accounts/api-usage-and-testing/errors","title":"Errors","to":"/docs/guides/manage-accounts/api-usage-and-testing/errors","use":"$3"},{"id":"/docs/guides/manage-accounts/api-usage-and-testing/usage-and-limits","title":"Usage and limits","to":"/docs/guides/manage-accounts/api-usage-and-testing/usage-and-limits","use":"$3"},{"id":"/docs/guides/manage-accounts/api-usage-and-testing/test-flows-with-simulations","title":"Test your flows with simulations (Sandbox only)","to":"/docs/guides/manage-accounts/api-usage-and-testing/test-flows-with-simulations","use":"$3"}]}]},{"id":"/docs/guides/merchant","title":"Merchant","use":"$3","root":true,"items":[{"id":"/docs/guides/merchant/introduction","title":"Introduction","to":"/docs/guides/merchant/introduction","use":"$3"},{"id":"/docs/guides/merchant/get-started","title":"Get started","to":"/docs/guides/merchant/get-started","use":"$3"},{"id":"/docs/guides/merchant/test-and-go-live","title":"Test & go live","use":"$3","items":[{"id":"/docs/guides/merchant/test-and-go-live/set-up-sandbox","title":"Set up a test environment","to":"/docs/guides/merchant/test-and-go-live/set-up-sandbox","use":"$3"},{"id":"/docs/guides/merchant/test-and-go-live/testing","title":"Testing","use":"$3","items":[{"id":"/docs/guides/merchant/test-and-go-live/testing/implementation-checklists","title":"Implementation checklist","to":"/docs/guides/merchant/test-and-go-live/testing/implementation-checklists","use":"$3"},{"id":"/docs/guides/merchant/test-and-go-live/testing/test-flows","title":"Test payment flows","to":"/docs/guides/merchant/test-and-go-live/testing/test-flows","use":"$3"},{"id":"/docs/guides/merchant/test-and-go-live/testing/test-cards","title":"Test cards","to":"/docs/guides/merchant/test-and-go-live/testing/test-cards","use":"$3"}]}]},{"id":"/docs/guides/merchant/accept-payments","title":"Accept payments","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments","title":"Online payments","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-checkout","title":"Revolut Checkout","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-checkout/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/online-payments/revolut-checkout/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-checkout/web","title":"Web","to":"/docs/guides/merchant/accept-payments/online-payments/revolut-checkout/web","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay","title":"Revolut Pay","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/web","title":"Web","to":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/web","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/mobile","title":"Mobile","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/mobile/ios","title":"iOS","to":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/mobile/ios","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/mobile/android","title":"Android","to":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/mobile/android","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/mobile/react-native","title":"React Native","to":"/docs/guides/merchant/accept-payments/online-payments/revolut-pay/mobile/react-native","use":"$3"}]},{"id":"/docs/guides/merchant/optimise-checkout/fast-checkout","title":"Fast checkout","use":"$3","to":"/docs/guides/merchant/optimise-checkout/fast-checkout"}]},{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments","title":"Card payments","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/online-payments/card-payments/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments/web","title":"Web","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments/web/card-field","title":"Card field","to":"/docs/guides/merchant/accept-payments/online-payments/card-payments/web/card-field","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments/web/pop-up","title":"Card pop-up","to":"/docs/guides/merchant/accept-payments/online-payments/card-payments/web/pop-up","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments/mobile","title":"Mobile","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments/mobile/ios","title":"iOS","to":"/docs/guides/merchant/accept-payments/online-payments/card-payments/mobile/ios","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments/mobile/android","title":"Android","to":"/docs/guides/merchant/accept-payments/online-payments/card-payments/mobile/android","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/card-payments/mobile/react-native","title":"React Native","to":"/docs/guides/merchant/accept-payments/online-payments/card-payments/mobile/react-native","use":"$3"}]}]},{"id":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay","title":"Apple Pay and Google Pay","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/web","title":"Web","to":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/web","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/mobile","title":"Mobile","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/mobile/ios","title":"iOS","to":"/docs/guides/merchant/accept-payments/online-payments/apple-pay-google-pay/mobile/ios","use":"$3"}]}]},{"id":"/docs/guides/merchant/accept-payments/online-payments/pay-by-bank","title":"Pay by Bank","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/pay-by-bank/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/online-payments/pay-by-bank/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/pay-by-bank/web","title":"Web","to":"/docs/guides/merchant/accept-payments/online-payments/pay-by-bank/web","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/online-payments/sepa-direct-debit","title":"SEPA Direct Debit","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/sepa-direct-debit/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/online-payments/sepa-direct-debit/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/sepa-direct-debit/web","title":"Web","to":"/docs/guides/merchant/accept-payments/online-payments/sepa-direct-debit/web","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page","title":"Hosted Checkout Page","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/payment-link","title":"Payment link","to":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/payment-link","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/api","title":"API","to":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/api","use":"$3"}]}]},{"id":"/docs/guides/merchant/accept-payments/in-person-payments","title":"In-person payments","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/in-person-payments/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/in-person-payments/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos","title":"Revolut POS","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/get-started","title":"Get started","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/get-started","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app","title":"Web app","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/get-started","title":"Get started","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/get-started","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/product-management","title":"Product and catalogue management","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/product-management","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/settings","title":"Settings","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/settings","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/staff-management","title":"Staff management","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/staff-management","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/analytics-orders","title":"Analytics and orders","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/web-app/analytics-orders","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app","title":"iOS app","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/get-started","title":"Get started","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/get-started","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/order-management","title":"Order management","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/order-management","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/table-service","title":"Table service","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/table-service","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/catalogue","title":"Catalogue","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/catalogue","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/operational-settings","title":"Operational settings","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/operational-settings","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/hardware-settings","title":"Hardware settings","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/hardware-settings","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/reports","title":"Reports","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/ios-app/reports","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/order-pay","title":"Order and Pay","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/order-pay","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/support","title":"Support","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/support","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/pos/faq","title":"FAQs","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/faq","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/terminal","title":"Revolut Terminal","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/get-started","title":"Get started","to":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/get-started","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/manage-payments","title":"Manage payments","to":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/manage-payments","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/additional-features","title":"Additional features","to":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/additional-features","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/push-payments","title":"Push payments to Revolut Terminal","to":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/push-payments","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/pre-authorisation","title":"Pre-authorisation","to":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/pre-authorisation","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/support-warranty","title":"Support and warranty","to":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/support-warranty","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/reader","title":"Revolut Reader","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/in-person-payments/reader/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/in-person-payments/reader/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/reader/get-started","title":"Get started","to":"/docs/guides/merchant/accept-payments/in-person-payments/reader/get-started","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/reader/manage-payments","title":"Manage payments","to":"/docs/guides/merchant/accept-payments/in-person-payments/reader/manage-payments","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/reader/additional-features","title":"Additional features","to":"/docs/guides/merchant/accept-payments/in-person-payments/reader/additional-features","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/reader/support-warranty","title":"Support and warranty","to":"/docs/guides/merchant/accept-payments/in-person-payments/reader/support-warranty","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/reader/faq","title":"FAQs","to":"/docs/guides/merchant/accept-payments/in-person-payments/reader/faq","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/tap-to-pay","title":"Tap to Pay","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/in-person-payments/tap-to-pay/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/in-person-payments/tap-to-pay/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/tap-to-pay/get-started","title":"Get started","to":"/docs/guides/merchant/accept-payments/in-person-payments/tap-to-pay/get-started","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/in-person-payments/tap-to-pay/integration-guide","title":"Integration guide","to":"/docs/guides/merchant/accept-payments/in-person-payments/tap-to-pay/integration-guide","use":"$3"}]}]},{"id":"/docs/guides/merchant/accept-payments/no-code","title":"No-code integrations","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/plugins","title":"E-commerce plugins","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/no-code/plugins/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/woocommerce","title":"WooCommerce","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/woocommerce/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/no-code/plugins/woocommerce/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/woocommerce/installation","title":"Installation","to":"/docs/guides/merchant/accept-payments/no-code/plugins/woocommerce/installation","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/woocommerce/configuration","title":"Configuration","to":"/docs/guides/merchant/accept-payments/no-code/plugins/woocommerce/configuration","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/woocommerce/features","title":"Features and operations","to":"/docs/guides/merchant/accept-payments/no-code/plugins/woocommerce/features","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/prestashop","title":"PrestaShop","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/prestashop/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/no-code/plugins/prestashop/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/prestashop/installation","title":"Installation","to":"/docs/guides/merchant/accept-payments/no-code/plugins/prestashop/installation","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/prestashop/configuration","title":"Configuration","to":"/docs/guides/merchant/accept-payments/no-code/plugins/prestashop/configuration","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/prestashop/features","title":"Features and operations","to":"/docs/guides/merchant/accept-payments/no-code/plugins/prestashop/features","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/magento","title":"Adobe Commerce (Magento 2)","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/magento/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/no-code/plugins/magento/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/magento/installation","title":"Installation","to":"/docs/guides/merchant/accept-payments/no-code/plugins/magento/installation","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/magento/configuration","title":"Configuration","to":"/docs/guides/merchant/accept-payments/no-code/plugins/magento/configuration","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/magento/features","title":"Features and operations","to":"/docs/guides/merchant/accept-payments/no-code/plugins/magento/features","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/bigcommerce","title":"BigCommerce","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/bigcommerce/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/no-code/plugins/bigcommerce/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/bigcommerce/installation","title":"Installation","to":"/docs/guides/merchant/accept-payments/no-code/plugins/bigcommerce/installation","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/bigcommerce/configuration","title":"Configuration","to":"/docs/guides/merchant/accept-payments/no-code/plugins/bigcommerce/configuration","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/bigcommerce/features","title":"Features and operations","to":"/docs/guides/merchant/accept-payments/no-code/plugins/bigcommerce/features","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/shopify","title":"Shopify","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/shopify/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/no-code/plugins/shopify/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/shopify/installation","title":"Installation","to":"/docs/guides/merchant/accept-payments/no-code/plugins/shopify/installation","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/shopify/configuration","title":"Configuration","to":"/docs/guides/merchant/accept-payments/no-code/plugins/shopify/configuration","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/shopify/features","title":"Features and operations","to":"/docs/guides/merchant/accept-payments/no-code/plugins/shopify/features","use":"$3"}]},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/opencart","title":"OpenCart","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/opencart/introduction","title":"Introduction","to":"/docs/guides/merchant/accept-payments/no-code/plugins/opencart/introduction","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/opencart/installation","title":"Installation","to":"/docs/guides/merchant/accept-payments/no-code/plugins/opencart/installation","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/opencart/configuration","title":"Configuration","to":"/docs/guides/merchant/accept-payments/no-code/plugins/opencart/configuration","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/plugins/opencart/features","title":"Features and operations","to":"/docs/guides/merchant/accept-payments/no-code/plugins/opencart/features","use":"$3"}]}]},{"id":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/payment-link","title":"Payment links","use":"$3","to":"/docs/guides/merchant/accept-payments/online-payments/hosted-checkout-page/payment-link"},{"id":"/docs/guides/merchant/accept-payments/no-code/invoices","title":"Invoices","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/invoices/xero","title":"Xero invoices","use":"$3","items":[{"id":"/docs/guides/merchant/accept-payments/no-code/invoices/xero/configuration","title":"Configuration","to":"/docs/guides/merchant/accept-payments/no-code/invoices/xero/configuration","use":"$3"},{"id":"/docs/guides/merchant/accept-payments/no-code/invoices/xero/troubleshooting","title":"Troubleshooting","to":"/docs/guides/merchant/accept-payments/no-code/invoices/xero/troubleshooting","use":"$3"}]}]}]}]},{"id":"/docs/guides/merchant/operations","title":"Operations","use":"$3","items":[{"id":"/docs/guides/merchant/operations/capture-and-settlement","title":"Capture & settlement","use":"$3","items":[{"id":"/docs/guides/merchant/operations/capture-and-settlement/capture-later","title":"Authorise a payment to capture later","to":"/docs/guides/merchant/operations/capture-and-settlement/capture-later","use":"$3"},{"id":"/docs/guides/merchant/operations/capture-and-settlement/advanced-authorisation","title":"Advanced authorisation","use":"$3","items":[{"id":"/docs/guides/merchant/operations/capture-and-settlement/advanced-authorisation/introduction","title":"Introduction","to":"/docs/guides/merchant/operations/capture-and-settlement/advanced-authorisation/introduction","use":"$3"},{"id":"/docs/guides/merchant/operations/capture-and-settlement/advanced-authorisation/pre-authorisation","title":"Pre-authorisation","to":"/docs/guides/merchant/operations/capture-and-settlement/advanced-authorisation/pre-authorisation","use":"$3"},{"id":"/docs/guides/merchant/operations/capture-and-settlement/advanced-authorisation/incremental-authorisation","title":"Incremental authorisation","to":"/docs/guides/merchant/operations/capture-and-settlement/advanced-authorisation/incremental-authorisation","use":"$3"},{"id":"/docs/guides/merchant/operations/capture-and-settlement/advanced-authorisation/clearing-windows","title":"Clearing windows","to":"/docs/guides/merchant/operations/capture-and-settlement/advanced-authorisation/clearing-windows","use":"$3"}]}]},{"id":"/docs/guides/merchant/operations/refunds","title":"Refund payments","to":"/docs/guides/merchant/operations/refunds","use":"$3"}]},{"id":"/docs/guides/merchant/optimise-checkout","title":"Optimise checkout","use":"$3","items":[{"id":"/docs/guides/merchant/optimise-checkout/save-payment-methods","title":"Save and charge payment methods","use":"$3","items":[{"id":"/docs/guides/merchant/optimise-checkout/save-payment-methods/charge-saved-payment-method","title":"Charge a customer's saved payment method","to":"/docs/guides/merchant/optimise-checkout/save-payment-methods/charge-saved-payment-method","use":"$3"},{"id":"/docs/guides/merchant/optimise-checkout/save-payment-methods/checkout-with-saved-card","title":"Save cards and speed up checkout","to":"/docs/guides/merchant/optimise-checkout/save-payment-methods/checkout-with-saved-card","use":"$3"},{"id":"/docs/guides/merchant/optimise-checkout/save-payment-methods/subscription-management","title":"Manage subscriptions","to":"/docs/guides/merchant/optimise-checkout/save-payment-methods/subscription-management","use":"$3"}]},{"id":"/docs/guides/merchant/optimise-checkout/fast-checkout","title":"Fast checkout","to":"/docs/guides/merchant/optimise-checkout/fast-checkout","use":"$3"},{"id":"/docs/guides/merchant/optimise-checkout/promo-banners","title":"Add Promotional banner to your checkout page","to":"/docs/guides/merchant/optimise-checkout/promo-banners","use":"$3"}]},{"id":"/docs/guides/merchant/monitor-and-observe","title":"Monitor & observe","use":"$3","items":[{"id":"/docs/guides/merchant/monitor-and-observe/reports-reconciliation","title":"Create CSV reports of transactions","to":"/docs/guides/merchant/monitor-and-observe/reports-reconciliation","use":"$3"},{"id":"/docs/guides/merchant/monitor-and-observe/webhooks","title":"Work with webhooks","use":"$3","items":[{"id":"/docs/guides/merchant/monitor-and-observe/webhooks/using-webhooks","title":"Use webhooks to track order and payment lifecycle","to":"/docs/guides/merchant/monitor-and-observe/webhooks/using-webhooks","use":"$3"},{"id":"/docs/guides/merchant/monitor-and-observe/webhooks/verify-the-payload-signature","title":"Verify the payload signature","to":"/docs/guides/merchant/monitor-and-observe/webhooks/verify-the-payload-signature","use":"$3"}]}]},{"id":"/docs/guides/merchant/reference","title":"Reference","use":"$3","items":[{"id":"/docs/guides/merchant/reference/versioning","title":"Versioning","use":"$3","items":[{"id":"/docs/guides/merchant/reference/versioning/api-versions","title":"API versions","to":"/docs/guides/merchant/reference/versioning/api-versions","use":"$3"},{"id":"/docs/guides/merchant/reference/versioning/deprecation-policy","title":"Deprecation policy","to":"/docs/guides/merchant/reference/versioning/deprecation-policy","use":"$3"},{"id":"/docs/guides/merchant/reference/versioning/changelog","title":"Changelog","to":"/docs/guides/merchant/reference/versioning/changelog","use":"$3"}]},{"id":"/docs/api/merchant","title":"API","use":"$3","to":"/docs/api/merchant"},{"id":"/docs/guides/merchant/reference/sdks","title":"SDKs","use":"$3","items":[{"id":"/docs/sdks/merchant-web-sdk/introduction","title":"Web SDK","use":"$3","to":"/docs/sdks/merchant-web-sdk/introduction"},{"id":"/docs/sdks/merchant-ios-sdk/introduction","title":"iOS SDK","use":"$3","to":"/docs/sdks/merchant-ios-sdk/introduction"},{"id":"/docs/sdks/merchant-android-sdk/introduction","title":"Android SDK","use":"$3","to":"/docs/sdks/merchant-android-sdk/introduction"}]},{"id":"/docs/guides/merchant/reference/3d-secure","title":"3D Secure","to":"/docs/guides/merchant/reference/3d-secure","use":"$3"},{"id":"/docs/guides/merchant/reference/error-codes","title":"Errors","use":"$3","items":[{"id":"/docs/guides/merchant/reference/error-codes/http-response-errors","title":"HTTP response errors","to":"/docs/guides/merchant/reference/error-codes/http-response-errors","use":"$3"},{"id":"/docs/guides/merchant/reference/error-codes/decline-reasons","title":"Decline reasons","to":"/docs/guides/merchant/reference/error-codes/decline-reasons","use":"$3"}]},{"id":"/docs/guides/merchant/reference/order-lifecycle","title":"Order and payment lifecycle","to":"/docs/guides/merchant/reference/order-lifecycle","use":"$3"}]},{"id":"/blog","title":"Updates","use":"$3","to":"/blog"}]},{"id":"/docs/guides/revolut-wallet","title":"Revolut Wallet","use":"$3","root":true,"items":[{"id":"/docs/guides/revolut-wallet/introduction","title":"Introduction","to":"/docs/guides/revolut-wallet/introduction","use":"$3"},{"id":"/docs/guides/revolut-wallet/get-started","title":"Get started","to":"/docs/guides/revolut-wallet/get-started","use":"$3"},{"id":"/docs/guides/revolut-wallet/operations","title":"Operations","use":"$3","items":[{"id":"/docs/guides/revolut-wallet/operations/introduction","title":"Introduction","to":"/docs/guides/revolut-wallet/operations/introduction","use":"$3"},{"id":"/docs/guides/revolut-wallet/operations/create-pass","title":"Create a pass","to":"/docs/guides/revolut-wallet/operations/create-pass","use":"$3"},{"id":"/docs/guides/revolut-wallet/operations/update-pass","title":"Update a pass","to":"/docs/guides/revolut-wallet/operations/update-pass","use":"$3"},{"id":"/docs/guides/revolut-wallet/operations/transaction-results","title":"Transaction results","to":"/docs/guides/revolut-wallet/operations/transaction-results","use":"$3"}]}]},{"id":"/docs/resources","title":"Resources","use":"$3","root":true,"items":[{"id":"/docs/resources/marketing-guidelines","title":"Revolut Pay marketing assets and guidelines","to":"/docs/resources/marketing-guidelines","use":"$3"},{"id":"/docs/resources/revolut-pay-button-guidelines","title":"Revolut Pay button guidelines","to":"/docs/resources/revolut-pay-button-guidelines","use":"$3"},{"id":"/docs/resources/open-banking-logo-guidelines","title":"Revolut Open Banking logo assets and guidelines","to":"/docs/resources/open-banking-logo-guidelines","use":"$3"}]},{"id":"/docs/sdks/merchant-android-sdk","title":"Merchant Android SDK","use":"$3","root":true,"items":[{"id":"/docs/sdks/merchant-android-sdk/introduction","title":"Introduction","to":"/docs/sdks/merchant-android-sdk/introduction","use":"$3"},{"id":"/docs/sdks/merchant-android-sdk/revolut-pay-android-sdk","title":"Revolut Pay SDK","use":"$3","items":[{"id":"/docs/sdks/merchant-android-sdk/revolut-pay-android-sdk/introduction","title":"Introduction","to":"/docs/sdks/merchant-android-sdk/revolut-pay-android-sdk/introduction","use":"$3"},{"id":"/docs/sdks/merchant-android-sdk/revolut-pay-android-sdk/methods-parameters","title":"Methods and parameters","to":"/docs/sdks/merchant-android-sdk/revolut-pay-android-sdk/methods-parameters","use":"$3"}]},{"id":"/docs/sdks/merchant-android-sdk/revolut-card-form-android-sdk","title":"Revolut Card Form SDK","use":"$3","items":[{"id":"/docs/sdks/merchant-android-sdk/revolut-card-form-android-sdk/introduction","title":"Introduction","to":"/docs/sdks/merchant-android-sdk/revolut-card-form-android-sdk/introduction","use":"$3"},{"id":"/docs/sdks/merchant-android-sdk/revolut-card-form-android-sdk/methods-parameters","title":"Methods and parameters","to":"/docs/sdks/merchant-android-sdk/revolut-card-form-android-sdk/methods-parameters","use":"$3"}]}]},{"id":"/docs/sdks/merchant-ios-sdk","title":"Merchant iOS SDK","use":"$3","root":true,"items":[{"id":"/docs/sdks/merchant-ios-sdk/introduction","title":"Introduction","to":"/docs/sdks/merchant-ios-sdk/introduction","use":"$3"},{"id":"/docs/sdks/merchant-ios-sdk/revolut-pay-ios-sdk","title":"Revolut Pay SDK","use":"$3","items":[{"id":"/docs/sdks/merchant-ios-sdk/revolut-pay-ios-sdk/introduction","title":"Introduction","to":"/docs/sdks/merchant-ios-sdk/revolut-pay-ios-sdk/introduction","use":"$3"},{"id":"/docs/sdks/merchant-ios-sdk/revolut-pay-ios-sdk/methods-parameters","title":"Methods and parameters","to":"/docs/sdks/merchant-ios-sdk/revolut-pay-ios-sdk/methods-parameters","use":"$3"}]},{"id":"/docs/sdks/merchant-ios-sdk/apple-pay-ios-sdk","title":"Apple Pay SDK","use":"$3","items":[{"id":"/docs/sdks/merchant-ios-sdk/apple-pay-ios-sdk/introduction","title":"Introduction","to":"/docs/sdks/merchant-ios-sdk/apple-pay-ios-sdk/introduction","use":"$3"},{"id":"/docs/sdks/merchant-ios-sdk/apple-pay-ios-sdk/methods-parameters","title":"Methods and parameters","to":"/docs/sdks/merchant-ios-sdk/apple-pay-ios-sdk/methods-parameters","use":"$3"}]},{"id":"/docs/sdks/merchant-ios-sdk/tap-to-pay-sdk","title":"Tap to Pay SDK","use":"$3","items":[{"id":"/docs/sdks/merchant-ios-sdk/tap-to-pay-sdk/introduction","title":"Introduction","to":"/docs/sdks/merchant-ios-sdk/tap-to-pay-sdk/introduction","use":"$3"},{"id":"/docs/sdks/merchant-ios-sdk/tap-to-pay-sdk/methods-parameters","title":"Methods and parameters","to":"/docs/sdks/merchant-ios-sdk/tap-to-pay-sdk/methods-parameters","use":"$3"}]},{"id":"/docs/sdks/merchant-ios-sdk/revolut-card-form-ios-sdk","title":"Revolut Card Form SDK","use":"$3","items":[{"id":"/docs/sdks/merchant-ios-sdk/revolut-card-form-ios-sdk/introduction","title":"Introduction","to":"/docs/sdks/merchant-ios-sdk/revolut-card-form-ios-sdk/introduction","use":"$3"},{"id":"/docs/sdks/merchant-ios-sdk/revolut-card-form-ios-sdk/methods-parameters","title":"Methods and parameters","to":"/docs/sdks/merchant-ios-sdk/revolut-card-form-ios-sdk/methods-parameters","use":"$3"}]}]},{"id":"/docs/sdks/merchant-web-sdk","title":"Merchant Web SDK","use":"$3","root":true,"items":[{"id":"/docs/sdks/merchant-web-sdk/introduction","title":"Introduction","to":"/docs/sdks/merchant-web-sdk/introduction","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/get-started","title":"Get started","to":"/docs/sdks/merchant-web-sdk/get-started","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/initialisation","title":"Initialisation","use":"$3","items":[{"id":"/docs/sdks/merchant-web-sdk/initialisation/token-based","title":"Token-based initialisation","to":"/docs/sdks/merchant-web-sdk/initialisation/token-based","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/initialisation/direct","title":"Direct initialisation","to":"/docs/sdks/merchant-web-sdk/initialisation/direct","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/initialisation/payments-module","title":"Payments module initialisation","to":"/docs/sdks/merchant-web-sdk/initialisation/payments-module","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/initialisation/upsell-module","title":"Upsell module initialisation","to":"/docs/sdks/merchant-web-sdk/initialisation/upsell-module","use":"$3"}]},{"id":"/docs/sdks/merchant-web-sdk/payment-methods","title":"Payment methods","use":"$3","items":[{"id":"/docs/sdks/merchant-web-sdk/payment-methods/introduction","title":"Introduction","to":"/docs/sdks/merchant-web-sdk/payment-methods/introduction","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/embedded-checkout","title":"Embedded checkout","to":"/docs/sdks/merchant-web-sdk/payment-methods/embedded-checkout","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/revolut-pay","title":"Revolut Pay","to":"/docs/sdks/merchant-web-sdk/payment-methods/revolut-pay","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/apple-pay-google-pay","title":"Apple Pay / Google Pay","to":"/docs/sdks/merchant-web-sdk/payment-methods/apple-pay-google-pay","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/card-field","title":"Card field","to":"/docs/sdks/merchant-web-sdk/payment-methods/card-field","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/pop-up","title":"Card pop-up","to":"/docs/sdks/merchant-web-sdk/payment-methods/pop-up","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/pay-by-bank","title":"Pay by Bank","to":"/docs/sdks/merchant-web-sdk/payment-methods/pay-by-bank","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/payment-methods/sepa-direct-debit","title":"SEPA Direct Debit","to":"/docs/sdks/merchant-web-sdk/payment-methods/sepa-direct-debit","use":"$3"}]},{"id":"/docs/sdks/merchant-web-sdk/promotional-widgets","title":"Promotional widgets","use":"$3","items":[{"id":"/docs/sdks/merchant-web-sdk/promotional-widgets/introduction","title":"Introduction","to":"/docs/sdks/merchant-web-sdk/promotional-widgets/introduction","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/promotional-widgets/card-gateway-banner","title":"Card gateway banner","to":"/docs/sdks/merchant-web-sdk/promotional-widgets/card-gateway-banner","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/promotional-widgets/promotional-banner","title":"Promotional banner","to":"/docs/sdks/merchant-web-sdk/promotional-widgets/promotional-banner","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/promotional-widgets/enrollment-confirmation-banner","title":"Enrollment confirmation banner","to":"/docs/sdks/merchant-web-sdk/promotional-widgets/enrollment-confirmation-banner","use":"$3"}]},{"id":"/docs/sdks/merchant-web-sdk/types","title":"Types","use":"$3","items":[{"id":"/docs/sdks/merchant-web-sdk/types/introduction","title":"Introduction","to":"/docs/sdks/merchant-web-sdk/types/introduction","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/types/locale","title":"Locale","to":"/docs/sdks/merchant-web-sdk/types/locale","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/types/address","title":"Address","to":"/docs/sdks/merchant-web-sdk/types/address","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/types/customer-details","title":"CustomerDetails","to":"/docs/sdks/merchant-web-sdk/types/customer-details","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/types/revolut-checkout-error","title":"RevolutCheckoutError","to":"/docs/sdks/merchant-web-sdk/types/revolut-checkout-error","use":"$3"},{"id":"/docs/sdks/merchant-web-sdk/types/validation-error","title":"ValidationError","to":"/docs/sdks/merchant-web-sdk/types/validation-error","use":"$3"}]},{"id":"/docs/sdks/merchant-web-sdk/integration-examples","title":"Integration examples","to":"/docs/sdks/merchant-web-sdk/integration-examples","use":"$3"}]},{"id":"/docs/sdks/reverywhere-web-sdk","title":"RevEverywhere Web SDK","use":"$3","root":true,"items":[{"id":"/docs/sdks/reverywhere-web-sdk/introduction-and-setup","title":"Introduction and setup","to":"/docs/sdks/reverywhere-web-sdk/introduction-and-setup","use":"$3"}]},{"id":"/docs/sdks/revolut-id-sdk","title":"(BETA) Revolut ID SDK","use":"$3","root":true,"items":[{"id":"/docs/sdks/revolut-id-sdk/introduction","title":"Introduction","to":"/docs/sdks/revolut-id-sdk/introduction","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/web","title":"Web","use":"$3","items":[{"id":"/docs/sdks/revolut-id-sdk/web/introduction","title":"Introduction","to":"/docs/sdks/revolut-id-sdk/web/introduction","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/web/configure-client","title":"Configure client","to":"/docs/sdks/revolut-id-sdk/web/configure-client","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/web/integrate-sdk","title":"Integrate SDK","use":"$3","items":[{"id":"/docs/sdks/revolut-id-sdk/web/integrate-sdk/java-script","title":"JavaScript","to":"/docs/sdks/revolut-id-sdk/web/integrate-sdk/java-script","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/web/integrate-sdk/react","title":"React","to":"/docs/sdks/revolut-id-sdk/web/integrate-sdk/react","use":"$3"}]},{"id":"/docs/sdks/revolut-id-sdk/web/code-exchange","title":"Code exchange","to":"/docs/sdks/revolut-id-sdk/web/code-exchange","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/web/api-reference","title":"API reference","use":"$3","to":"/docs/sdks/revolut-id-sdk/web/api-reference","items":[{"id":"/docs/sdks/revolut-id-sdk/web/api-reference/revolut-id","title":"RevolutId","to":"/docs/sdks/revolut-id-sdk/web/api-reference/revolut-id","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/web/api-reference/revolutid-loader","title":"RevolutIdLoader","to":"/docs/sdks/revolut-id-sdk/web/api-reference/revolutid-loader","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/web/api-reference/button-client","title":"ButtonClient","to":"/docs/sdks/revolut-id-sdk/web/api-reference/button-client","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/web/api-reference/button-style","title":"ButtonStyle","to":"/docs/sdks/revolut-id-sdk/web/api-reference/button-style","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/web/api-reference/openid-configuration","title":"OIDC Configuration","to":"/docs/sdks/revolut-id-sdk/web/api-reference/openid-configuration","use":"$3"}]}]},{"id":"/docs/sdks/revolut-id-sdk/ios","title":"iOS","use":"$3","items":[{"id":"/docs/sdks/revolut-id-sdk/ios/introduction","title":"Introduction","to":"/docs/sdks/revolut-id-sdk/ios/introduction","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/ios/integration-guide","title":"Integration guide","to":"/docs/sdks/revolut-id-sdk/ios/integration-guide","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/ios/code-exchange","title":"Code exchange","to":"/docs/sdks/revolut-id-sdk/ios/code-exchange","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/ios/api-reference","title":"Methods and parameters","use":"$3","to":"/docs/sdks/revolut-id-sdk/ios/api-reference","items":[]}]},{"id":"/docs/sdks/revolut-id-sdk/android","title":"Android","use":"$3","items":[{"id":"/docs/sdks/revolut-id-sdk/android/introduction","title":"Introduction","to":"/docs/sdks/revolut-id-sdk/android/introduction","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/android/integration-guide","title":"Integration guide","to":"/docs/sdks/revolut-id-sdk/android/integration-guide","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/android/code-exchange","title":"Code exchange","to":"/docs/sdks/revolut-id-sdk/android/code-exchange","use":"$3"},{"id":"/docs/sdks/revolut-id-sdk/android/methods-parameters","title":"Methods and parameters","to":"/docs/sdks/revolut-id-sdk/android/methods-parameters","use":"$3"}]}]},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk","title":"UI Kit MiniApp Web SDK","use":"$3","root":true,"items":[{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/introduction","title":"Introduction","to":"/docs/sdks/ui-kit-miniapp-web-sdk/introduction","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components","title":"Components","use":"$3","items":[{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Action","title":"Action","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Action","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/ActionButton","title":"ActionButton","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/ActionButton","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Avatar","title":"Avatar","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Avatar","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Badge","title":"Badge","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Badge","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/BottomSheet","title":"BottomSheet","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/BottomSheet","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Button","title":"Button","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Button","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Calendar","title":"Calendar","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Calendar","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Cell","title":"Cell","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Cell","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/CellSkeleton","title":"CellSkeleton","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/CellSkeleton","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Checkbox","title":"Checkbox","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Checkbox","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/CompactInput","title":"CompactInput","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/CompactInput","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Copyable","title":"Copyable","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Copyable","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/DetailsCell","title":"DetailsCell","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/DetailsCell","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Dropdown","title":"Dropdown","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Dropdown","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/FilterButton","title":"FilterButton","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/FilterButton","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Footnote","title":"Footnote","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Footnote","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Group","title":"Group","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Group","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/HStack","title":"HStack","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/HStack","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Icon","title":"Icon","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Icon","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Image","title":"Image","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Image","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Input","title":"Input","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Input","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Link","title":"Link","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Link","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/List","title":"List","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/List","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/MessageBubble","title":"MessageBubble","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/MessageBubble","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Page","title":"Page","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Page","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Placeholder","title":"Placeholder","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Placeholder","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Popup","title":"Popup","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Popup","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/ProgressSteps","title":"ProgressSteps","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/ProgressSteps","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Radio","title":"Radio","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Radio","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/RootProvider","title":"RootProvider","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/RootProvider","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Search","title":"Search","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Search","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Spacer","title":"Spacer","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Spacer","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Subheader","title":"Subheader","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Subheader","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Switch","title":"Switch","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Switch","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/TabBar","title":"TabBar","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/TabBar","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Text","title":"Text","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Text","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/TextArea","title":"TextArea","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/TextArea","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/ToggleButton","title":"ToggleButton","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/ToggleButton","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Toast","title":"Toast","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/Toast","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/VStack","title":"VStack","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/VStack","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/components/VisuallyHidden","title":"VisuallyHidden","to":"/docs/sdks/ui-kit-miniapp-web-sdk/components/VisuallyHidden","use":"$3"}]},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/hooks","title":"Hooks","use":"$3","items":[{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/hooks/useStatusSheet","title":"useStatusSheet","to":"/docs/sdks/ui-kit-miniapp-web-sdk/hooks/useStatusSheet","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/hooks/useToast","title":"useToast","to":"/docs/sdks/ui-kit-miniapp-web-sdk/hooks/useToast","use":"$3"}]},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/constants","title":"Constants","use":"$3","items":[{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/constants/token","title":"Token","to":"/docs/sdks/ui-kit-miniapp-web-sdk/constants/token","use":"$3"}]},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/types","title":"Types","use":"$3","to":"/docs/sdks/ui-kit-miniapp-web-sdk/types","items":[{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/types/HTMLTag","title":"HTMLTag","to":"/docs/sdks/ui-kit-miniapp-web-sdk/types/HTMLTag","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/types/IconName","title":"IconName","to":"/docs/sdks/ui-kit-miniapp-web-sdk/types/IconName","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeButtonProps","title":"NativeButtonProps","to":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeButtonProps","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeDivProps","title":"NativeDivProps","to":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeDivProps","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeHeadingProps","title":"NativeHeadingProps","to":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeHeadingProps","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeMainProps","title":"NativeMainProps","to":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeMainProps","use":"$3"},{"id":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeSpanProps","title":"NativeSpanProps","to":"/docs/sdks/ui-kit-miniapp-web-sdk/types/NativeSpanProps","use":"$3"}]}]}],"blog":[{"id":"/blog/2026-07-14-tap-to-pay-sdk","title":"New: Tap to Pay SDK for iOS","use":"$3","to":"/blog/2026-07-14-tap-to-pay-sdk"},{"id":"/blog/2026-07-06-revolut-checkout-hide-customer-details","title":"Revolut Checkout: hide customer details with pre-fill","use":"$3","to":"/blog/2026-07-06-revolut-checkout-hide-customer-details"},{"id":"/blog/2026-06-02-react-native-merchant-sdks","title":"New: Revolut Pay and Card Form SDKs for React Native","use":"$3","to":"/blog/2026-06-02-react-native-merchant-sdks"},{"id":"/blog/2026-05-28-incremental-authorisation-sandbox","title":"Incremental Authorisation: Sandbox testing now available","use":"$3","to":"/blog/2026-05-28-incremental-authorisation-sandbox"},{"id":"/blog/2026-05-06-revolut-checkout-sdk-reference","title":"Revolut Checkout: full SDK reference and shipping options now documented","use":"$3","to":"/blog/2026-05-06-revolut-checkout-sdk-reference"},{"id":"/blog/2026-04-22-merchant-api-version-2026-04-20","title":"New Merchant API version: 2026-04-20","use":"$3","to":"/blog/2026-04-22-merchant-api-version-2026-04-20"},{"id":"/blog/2026-03-14-billing-address-card-payments","title":"Billing address is now required for card payments in the Web SDK","use":"$3","to":"/blog/2026-03-14-billing-address-card-payments"},{"id":"/blog/2026-03-01-hosted-checkout-page","title":"Merchant API: Hosted Checkout Page documentation restructuring","use":"$3","to":"/blog/2026-03-01-hosted-checkout-page"},{"id":"/blog/2026-02-05-incremental-authorisation","title":"New: Incremental Authorisation for card payments","use":"$3","to":"/blog/2026-02-05-incremental-authorisation"},{"id":"/blog/2026-02-01-revolut-checkout","title":"Release announcement: Revolut Checkout","use":"$3","to":"/blog/2026-02-01-revolut-checkout"},{"id":"/blog/2025-12-15-open-banking-minor-updates","title":"Open Banking API: Updates to OpenID config file, account subtype, and DCR scopes","use":"$3","to":"/blog/2025-12-15-open-banking-minor-updates"},{"id":"/blog/2025-12-01-push-payments-to-terminal","title":"Merchant API: Push payments to Revolut Terminal","use":"$3","to":"/blog/2025-12-01-push-payments-to-terminal"},{"id":"/blog/2025-08-15-pay-by-bank-example","title":"New Pay by Bank integration example on GitHub","use":"$3","to":"/blog/2025-08-15-pay-by-bank-example"},{"id":"/blog/2025-07-11-revolut-openapi-github-repository","title":"Revolut APIs: Public API Specs on GitHub","use":"$3","to":"/blog/2025-07-11-revolut-openapi-github-repository"},{"id":"/blog/2025-06-18-new-disputes-endpoints","title":"Merchant API: New Disputes endpoints","use":"$3","to":"/blog/2025-06-18-new-disputes-endpoints"},{"id":"/blog/2025-06-03-apple-pay-unregister","title":"Merchant API: New Apple Pay unregistration endpoint","use":"$3","to":"/blog/2025-06-03-apple-pay-unregister"},{"id":"/blog/2025-05-28-pay-by-bank","title":"Release announcement: Pay by Bank","use":"$3","to":"/blog/2025-05-28-pay-by-bank"},{"id":"/blog/2025-03-19-open-banking-refresh-tokens","title":"Open Banking API Refresh Tokens","use":"$3","to":"/blog/2025-03-19-open-banking-refresh-tokens"},{"id":"/blog/2025-03-04-open-banking-fapi1-advanced","title":"Financial-grade API 1.0 (FAPI 1) Advanced","use":"$3","to":"/blog/2025-03-04-open-banking-fapi1-advanced"},{"id":"/blog/2025-02-03-open-banking-accounts-endpoint","title":"Open Banking API SCA restrictions update","use":"$3","to":"/blog/2025-02-03-open-banking-accounts-endpoint"},{"id":"/blog/2024-09-16-open-banking-ais-restrictions","title":"Restrictions on AIS endpoints","use":"$3","to":"/blog/2024-09-16-open-banking-ais-restrictions"},{"id":"/blog/2024-09-14-open-banking-payment-status","title":"Payment Initiation status update","use":"$3","to":"/blog/2024-09-14-open-banking-payment-status"},{"id":"/blog/2024-08-16-open-banking-migration-of-swiss-users","title":"Migration of Swiss users","use":"$3","to":"/blog/2024-08-16-open-banking-migration-of-swiss-users"}],"openapiByPath":{"/docs/api/business":{"items":[{"id":"/docs/api/business#tag-accounting","title":"Accounting","use":"a","href":"#tag-accounting","items":[{"id":"/docs/api/business#create-accounting-category","title":"Create an accounting category","use":"a","href":"#create-accounting-category","options":{"method":"post"}},{"id":"/docs/api/business#get-accounting-categories","title":"Retrieve a list of accounting categories","use":"a","href":"#get-accounting-categories","options":{"method":"get"}},{"id":"/docs/api/business#get-accounting-category","title":"Retrieve accounting category details","use":"a","href":"#get-accounting-category","options":{"method":"get"}},{"id":"/docs/api/business#update-accounting-category","title":"Update accounting category settings","use":"a","href":"#update-accounting-category","options":{"method":"patch"}},{"id":"/docs/api/business#delete-accounting-category","title":"Delete an accounting category","use":"a","href":"#delete-accounting-category","options":{"method":"delete"}},{"id":"/docs/api/business#create-label-group","title":"Create a new label group","use":"a","href":"#create-label-group","options":{"method":"post"}},{"id":"/docs/api/business#get-label-groups","title":"Retrieve a list of label groups","use":"a","href":"#get-label-groups","options":{"method":"get"}},{"id":"/docs/api/business#get-label-group","title":"Retrieve label group details","use":"a","href":"#get-label-group","options":{"method":"get"}},{"id":"/docs/api/business#update-label-group","title":"Update label group settings","use":"a","href":"#update-label-group","options":{"method":"patch"}},{"id":"/docs/api/business#delete-label-group","title":"Delete a label group","use":"a","href":"#delete-label-group","options":{"method":"delete"}},{"id":"/docs/api/business#create-label","title":"Create a new label","use":"a","href":"#create-label","options":{"method":"post"}},{"id":"/docs/api/business#get-labels","title":"Retrieve a list of labels from a label group","use":"a","href":"#get-labels","options":{"method":"get"}},{"id":"/docs/api/business#update-label","title":"Update a label","use":"a","href":"#update-label","options":{"method":"patch"}},{"id":"/docs/api/business#delete-label","title":"Delete a label","use":"a","href":"#delete-label","options":{"method":"delete"}},{"id":"/docs/api/business#create-tax-rate","title":"Create a new tax rate","use":"a","href":"#create-tax-rate","options":{"method":"post"}},{"id":"/docs/api/business#get-tax-rates","title":"Retrieve a list of tax rates","use":"a","href":"#get-tax-rates","options":{"method":"get"}},{"id":"/docs/api/business#get-tax-rate","title":"Retrieve tax rate details","use":"a","href":"#get-tax-rate","options":{"method":"get"}},{"id":"/docs/api/business#update-tax-rate","title":"Update tax rate settings","use":"a","href":"#update-tax-rate","options":{"method":"patch"}},{"id":"/docs/api/business#delete-tax-rate","title":"Delete a tax rate","use":"a","href":"#delete-tax-rate","options":{"method":"delete"}}]},{"id":"/docs/api/business#tag-accounts","title":"Accounts","use":"a","href":"#tag-accounts","items":[{"id":"/docs/api/business#get-accounts","title":"Retrieve all accounts","use":"a","href":"#get-accounts","options":{"method":"get"}},{"id":"/docs/api/business#get-account","title":"Retrieve an account","use":"a","href":"#get-account","options":{"method":"get"}},{"id":"/docs/api/business#get-account-details","title":"Retrieve account's full bank details","use":"a","href":"#get-account-details","options":{"method":"get"}}]},{"id":"/docs/api/business#tag-cards","title":"Cards","use":"a","href":"#tag-cards","items":[{"id":"/docs/api/business#get-cards","title":"Retrieve a list of cards","use":"a","href":"#get-cards","options":{"method":"get"}},{"id":"/docs/api/business#create-card","title":"Create a card","use":"a","href":"#create-card","options":{"method":"post"}},{"id":"/docs/api/business#get-card","title":"Retrieve card details","use":"a","href":"#get-card","options":{"method":"get"}},{"id":"/docs/api/business#update-card","title":"Update card settings","use":"a","href":"#update-card","options":{"method":"patch"}},{"id":"/docs/api/business#delete-card","title":"Terminate a card","use":"a","href":"#delete-card","options":{"method":"delete"}},{"id":"/docs/api/business#update-card-contacts","title":"Update card contacts","use":"a","href":"#update-card-contacts","options":{"method":"put"}},{"id":"/docs/api/business#update-card-references","title":"Update card references","use":"a","href":"#update-card-references","options":{"method":"put"}},{"id":"/docs/api/business#freeze-card","title":"Freeze a card","use":"a","href":"#freeze-card","options":{"method":"post"}},{"id":"/docs/api/business#unfreeze-card","title":"Unfreeze a card","use":"a","href":"#unfreeze-card","options":{"method":"post"}},{"id":"/docs/api/business#lock-card","title":"Lock a card","use":"a","href":"#lock-card","options":{"method":"post"}},{"id":"/docs/api/business#unlock-card","title":"Unlock a card","use":"a","href":"#unlock-card","options":{"method":"post"}},{"id":"/docs/api/business#get-sensitive-card-details","title":"Retrieve sensitive card details","use":"a","href":"#get-sensitive-card-details","options":{"method":"get"}}]},{"id":"/docs/api/business#tag-card-invitations","title":"Card invitations","use":"a","href":"#tag-card-invitations","items":[{"id":"/docs/api/business#create-card-invitation","title":"Create a card invitation","use":"a","href":"#create-card-invitation","options":{"method":"post"}},{"id":"/docs/api/business#get-card-invitations","title":"Retrieve a list of card invitations","use":"a","href":"#get-card-invitations","options":{"method":"get"}},{"id":"/docs/api/business#get-card-invitation","title":"Retrieve card invitation details","use":"a","href":"#get-card-invitation","options":{"method":"get"}},{"id":"/docs/api/business#update-card-invitation","title":"Update card invitation settings","use":"a","href":"#update-card-invitation","options":{"method":"patch"}},{"id":"/docs/api/business#cancel-card-invitation","title":"Cancel a card invitation","use":"a","href":"#cancel-card-invitation","options":{"method":"post"}}]},{"id":"/docs/api/business#tag-counterparties","title":"Counterparties","use":"a","href":"#tag-counterparties","items":[{"id":"/docs/api/business#validate-account-name","title":"Validate an account name (CoP/VoP)","use":"a","href":"#validate-account-name","options":{"method":"post"}},{"id":"/docs/api/business#get-counterparties","title":"Retrieve a list of counterparties","use":"a","href":"#get-counterparties","options":{"method":"get"}},{"id":"/docs/api/business#add-counterparty","title":"Create a counterparty","use":"a","href":"#add-counterparty","options":{"method":"post"}},{"id":"/docs/api/business#get-counterparty-countries","title":"Check supported countries and currencies","use":"a","href":"#get-counterparty-countries","options":{"method":"get"}},{"id":"/docs/api/business#get-counterparty-requirements","title":"Check counterparty field requirements","use":"a","href":"#get-counterparty-requirements","options":{"method":"get"}},{"id":"/docs/api/business#get-counterparty","title":"Retrieve a counterparty","use":"a","href":"#get-counterparty","options":{"method":"get"}},{"id":"/docs/api/business#delete-counterparty","title":"Delete a counterparty","use":"a","href":"#delete-counterparty","options":{"method":"delete"}},{"id":"/docs/api/business#update-counterparty-payment-method","title":"Update a counterparty's payment method","use":"a","href":"#update-counterparty-payment-method","options":{"method":"patch"}}]},{"id":"/docs/api/business#tag-expenses","title":"Expenses","use":"a","href":"#tag-expenses","items":[{"id":"/docs/api/business#get-expenses","title":"Retrieve a list of expenses","use":"a","href":"#get-expenses","options":{"method":"get"}},{"id":"/docs/api/business#get-expense","title":"Retrieve an expense","use":"a","href":"#get-expense","options":{"method":"get"}},{"id":"/docs/api/business#get-expense-receipt","title":"Retrieve a receipt related to an expense","use":"a","href":"#get-expense-receipt","options":{"method":"get"}}]},{"id":"/docs/api/business#tag-foreign-exchange","title":"Foreign exchange","use":"a","href":"#tag-foreign-exchange","items":[{"id":"/docs/api/business#get-rate","title":"Get an exchange rate","use":"a","href":"#get-rate","options":{"method":"get"}},{"id":"/docs/api/business#exchange-money","title":"Exchange money","use":"a","href":"#exchange-money","options":{"method":"post"}},{"id":"/docs/api/business#get-exchange-reasons","title":"Get exchange reasons","use":"a","href":"#get-exchange-reasons","options":{"method":"get"}}]},{"id":"/docs/api/business#tag-payment-drafts","title":"Payment drafts","use":"a","href":"#tag-payment-drafts","items":[{"id":"/docs/api/business#get-payment-drafts","title":"Retrieve a list of payment drafts","use":"a","href":"#get-payment-drafts","options":{"method":"get"}},{"id":"/docs/api/business#create-payment-draft","title":"Create a payment draft","use":"a","href":"#create-payment-draft","options":{"method":"post"}},{"id":"/docs/api/business#get-payment-draft","title":"Retrieve a payment draft","use":"a","href":"#get-payment-draft","options":{"method":"get"}},{"id":"/docs/api/business#delete-payment-draft","title":"Delete a payment draft","use":"a","href":"#delete-payment-draft","options":{"method":"delete"}},{"id":"/docs/api/business#update-payment-draft","title":"Update a payment draft","use":"a","href":"#update-payment-draft","options":{"method":"patch"}},{"id":"/docs/api/business#add-payment-draft-payment","title":"Add a payment to a payment draft","use":"a","href":"#add-payment-draft-payment","options":{"method":"post"}},{"id":"/docs/api/business#update-payment-draft-payment","title":"Update a payment in a payment draft","use":"a","href":"#update-payment-draft-payment","options":{"method":"patch"}},{"id":"/docs/api/business#delete-payment-draft-payment","title":"Delete a payment from a payment draft","use":"a","href":"#delete-payment-draft-payment","options":{"method":"delete"}}]},{"id":"/docs/api/business#tag-payout-links","title":"Payout links","use":"a","href":"#tag-payout-links","items":[{"id":"/docs/api/business#create-payout-link","title":"Create a payout link","use":"a","href":"#create-payout-link","options":{"method":"post"}},{"id":"/docs/api/business#get-payout-links","title":"Retrieve a list of payout links","use":"a","href":"#get-payout-links","options":{"method":"get"}},{"id":"/docs/api/business#get-payout-link","title":"Retrieve a payout link","use":"a","href":"#get-payout-link","options":{"method":"get"}},{"id":"/docs/api/business#cancel-payout-link","title":"Cancel a payout link","use":"a","href":"#cancel-payout-link","options":{"method":"post"}}]},{"id":"/docs/api/business#tag-simulations","title":"Simulations","use":"a","href":"#tag-simulations","items":[{"id":"/docs/api/business#simulate-transfer-state-update","title":"Simulate a transfer state update (Sandbox only)","use":"a","href":"#simulate-transfer-state-update","options":{"method":"post"}},{"id":"/docs/api/business#simulate-top-up","title":"Simulate an account top-up (Sandbox only)","use":"a","href":"#simulate-top-up","options":{"method":"post"}}]},{"id":"/docs/api/business#tag-team-members","title":"Team members","use":"a","href":"#tag-team-members","items":[{"id":"/docs/api/business#get-team-members","title":"Retrieve a list of team members","use":"a","href":"#get-team-members","options":{"method":"get"}},{"id":"/docs/api/business#invite-team-member","title":"Invite a new member to your business","use":"a","href":"#invite-team-member","options":{"method":"post"}},{"id":"/docs/api/business#delete-team-member","title":"Delete a team member","use":"a","href":"#delete-team-member","options":{"method":"delete"}},{"id":"/docs/api/business#get-roles","title":"Retrieve team roles","use":"a","href":"#get-roles","options":{"method":"get"}}]},{"id":"/docs/api/business#tag-transactions","title":"Transactions","use":"a","href":"#tag-transactions","items":[{"id":"/docs/api/business#get-transactions","title":"Retrieve a list of transactions","use":"a","href":"#get-transactions","options":{"method":"get"}},{"id":"/docs/api/business#get-transaction","title":"Retrieve a transaction","use":"a","href":"#get-transaction","options":{"method":"get"}}]},{"id":"/docs/api/business#tag-transfers","title":"Transfers","use":"a","href":"#tag-transfers","items":[{"id":"/docs/api/business#create-payment","title":"Create a transfer to another account or card","use":"a","href":"#create-payment","options":{"method":"post"}},{"id":"/docs/api/business#get-indicative-quote","title":"Get an indicative quote for a transfer","use":"a","href":"#get-indicative-quote","options":{"method":"post"}},{"id":"/docs/api/business#get-payment-requirements","title":"Check transfer field requirements","use":"a","href":"#get-payment-requirements","options":{"method":"post"}},{"id":"/docs/api/business#create-transfer","title":"Move money between your accounts","use":"a","href":"#create-transfer","options":{"method":"post"}},{"id":"/docs/api/business#get-transfer-reasons","title":"Get transfer reasons","use":"a","href":"#get-transfer-reasons","options":{"method":"get"}}]},{"id":"/docs/api/business#tag-webhooks-v1-deprecated","title":"Webhooks (v1) (deprecated)","use":"a","href":"#tag-webhooks-v1-deprecated","items":[{"id":"/docs/api/business#get-webhook-v1","title":"Retrieve a webhook","use":"a","href":"#get-webhook-v1","options":{"method":"get"}},{"id":"/docs/api/business#set-up-webhook","title":"Set a webhook","use":"a","href":"#set-up-webhook","options":{"method":"post"}},{"id":"/docs/api/business#delete-webhook-v1","title":"Delete a webhook","use":"a","href":"#delete-webhook-v1","options":{"method":"delete"}}]},{"id":"/docs/api/business#tag-webhooks-v2","title":"Webhooks (v2)","use":"a","href":"#tag-webhooks-v2","items":[{"id":"/docs/api/business#create-webhook","title":"Create a new webhook","use":"a","href":"#create-webhook","options":{"method":"post"}},{"id":"/docs/api/business#get-webhooks","title":"Retrieve a list of webhooks","use":"a","href":"#get-webhooks","options":{"method":"get"}},{"id":"/docs/api/business#get-webhook","title":"Retrieve a webhook","use":"a","href":"#get-webhook","options":{"method":"get"}},{"id":"/docs/api/business#update-webhook","title":"Update a webhook","use":"a","href":"#update-webhook","options":{"method":"patch"}},{"id":"/docs/api/business#delete-webhook","title":"Delete a webhook","use":"a","href":"#delete-webhook","options":{"method":"delete"}},{"id":"/docs/api/business#rotate-webhook-signing-secret","title":"Rotate a webhook signing secret","use":"a","href":"#rotate-webhook-signing-secret","options":{"method":"post"}},{"id":"/docs/api/business#get-failed-webhook-events","title":"Retrieve a list of failed webhook events","use":"a","href":"#get-failed-webhook-events","options":{"method":"get"}}]}],"versions":"$undefined"},"/docs/api/crypto-ramp/2.0.0":{"items":[{"id":"/docs/api/crypto-ramp/2.0.0#tag-partners","title":"Partners","use":"a","href":"#tag-partners","items":[{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-configuration","title":"Retrieve buy configuration","use":"a","href":"#retrieve-configuration","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-an-order-quote","title":"Retrieve a buy order quote","use":"a","href":"#retrieve-an-order-quote","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-a-redirect-url","title":"Retrieve a buy redirect URL","use":"a","href":"#retrieve-a-redirect-url","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-an-order","title":"Retrieve a buy order","use":"a","href":"#retrieve-an-order","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-all-orders","title":"Retrieve all buy orders","use":"a","href":"#retrieve-all-orders","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-sell-configuration","title":"Retrieve sell configuration","use":"a","href":"#retrieve-sell-configuration","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-a-sell-order-quote","title":"Retrieve a sell order quote","use":"a","href":"#retrieve-a-sell-order-quote","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-a-sell-redirect-url","title":"Retrieve a sell redirect URL","use":"a","href":"#retrieve-a-sell-redirect-url","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-a-sell-order","title":"Retrieve a sell order","use":"a","href":"#retrieve-a-sell-order","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-all-sell-orders","title":"Retrieve all sell orders","use":"a","href":"#retrieve-all-sell-orders","options":{"method":"get"}}]},{"id":"/docs/api/crypto-ramp/2.0.0#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-a-webhook","title":"Retrieve a webhook","use":"a","href":"#retrieve-a-webhook","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#update-a-webhook","title":"Update a webhook","use":"a","href":"#update-a-webhook","options":{"method":"patch"}},{"id":"/docs/api/crypto-ramp/2.0.0#delete-a-webhook","title":"Delete a webhook","use":"a","href":"#delete-a-webhook","options":{"method":"delete"}},{"id":"/docs/api/crypto-ramp/2.0.0#retrieve-a-list-of-webhooks","title":"Retrieve a list of webhooks","use":"a","href":"#retrieve-a-list-of-webhooks","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/2.0.0#create-a-webhook","title":"Create a webhook","use":"a","href":"#create-a-webhook","options":{"method":"post"}}]}],"versions":[{"label":"2.0.0","path":"/docs/api/crypto-ramp","latest":true},{"label":"1.0.0","path":"/docs/api/crypto-ramp/1.0.0","latest":false}]},"/docs/api/crypto-ramp/1.0.0":{"items":[{"id":"/docs/api/crypto-ramp/1.0.0#tag-partners","title":"Partners","use":"a","href":"#tag-partners","items":[{"id":"/docs/api/crypto-ramp/1.0.0#retrieve-configuration","title":"Retrieve configuration","use":"a","href":"#retrieve-configuration","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/1.0.0#retrieve-an-order-quote","title":"Retrieve an order quote","use":"a","href":"#retrieve-an-order-quote","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/1.0.0#retrieve-a-redirect-url","title":"Retrieve a redirect URL","use":"a","href":"#retrieve-a-redirect-url","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/1.0.0#retrieve-an-order","title":"Retrieve an order","use":"a","href":"#retrieve-an-order","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/1.0.0#retrieve-all-orders","title":"Retrieve all orders","use":"a","href":"#retrieve-all-orders","options":{"method":"get"}}]},{"id":"/docs/api/crypto-ramp/1.0.0#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/crypto-ramp/1.0.0#retrieve-a-webhook","title":"Retrieve a webhook","use":"a","href":"#retrieve-a-webhook","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/1.0.0#update-a-webhook","title":"Update a webhook","use":"a","href":"#update-a-webhook","options":{"method":"patch"}},{"id":"/docs/api/crypto-ramp/1.0.0#delete-a-webhook","title":"Delete a webhook","use":"a","href":"#delete-a-webhook","options":{"method":"delete"}},{"id":"/docs/api/crypto-ramp/1.0.0#retrieve-a-list-of-webhooks","title":"Retrieve a list of webhooks","use":"a","href":"#retrieve-a-list-of-webhooks","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp/1.0.0#create-a-webhook","title":"Create a webhook","use":"a","href":"#create-a-webhook","options":{"method":"post"}}]}],"versions":[{"label":"2.0.0","path":"/docs/api/crypto-ramp","latest":true},{"label":"1.0.0","path":"/docs/api/crypto-ramp/1.0.0","latest":false}]},"/docs/api/crypto-ramp":{"items":[{"id":"/docs/api/crypto-ramp#tag-partners","title":"Partners","use":"a","href":"#tag-partners","items":[{"id":"/docs/api/crypto-ramp#retrieve-configuration","title":"Retrieve buy configuration","use":"a","href":"#retrieve-configuration","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#retrieve-an-order-quote","title":"Retrieve a buy order quote","use":"a","href":"#retrieve-an-order-quote","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#retrieve-a-redirect-url","title":"Retrieve a buy redirect URL","use":"a","href":"#retrieve-a-redirect-url","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#retrieve-an-order","title":"Retrieve a buy order","use":"a","href":"#retrieve-an-order","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#retrieve-all-orders","title":"Retrieve all buy orders","use":"a","href":"#retrieve-all-orders","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#retrieve-sell-configuration","title":"Retrieve sell configuration","use":"a","href":"#retrieve-sell-configuration","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#retrieve-a-sell-order-quote","title":"Retrieve a sell order quote","use":"a","href":"#retrieve-a-sell-order-quote","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#retrieve-a-sell-redirect-url","title":"Retrieve a sell redirect URL","use":"a","href":"#retrieve-a-sell-redirect-url","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#retrieve-a-sell-order","title":"Retrieve a sell order","use":"a","href":"#retrieve-a-sell-order","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#retrieve-all-sell-orders","title":"Retrieve all sell orders","use":"a","href":"#retrieve-all-sell-orders","options":{"method":"get"}}]},{"id":"/docs/api/crypto-ramp#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/crypto-ramp#retrieve-a-webhook","title":"Retrieve a webhook","use":"a","href":"#retrieve-a-webhook","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#update-a-webhook","title":"Update a webhook","use":"a","href":"#update-a-webhook","options":{"method":"patch"}},{"id":"/docs/api/crypto-ramp#delete-a-webhook","title":"Delete a webhook","use":"a","href":"#delete-a-webhook","options":{"method":"delete"}},{"id":"/docs/api/crypto-ramp#retrieve-a-list-of-webhooks","title":"Retrieve a list of webhooks","use":"a","href":"#retrieve-a-list-of-webhooks","options":{"method":"get"}},{"id":"/docs/api/crypto-ramp#create-a-webhook","title":"Create a webhook","use":"a","href":"#create-a-webhook","options":{"method":"post"}}]}],"versions":[{"label":"2.0.0","path":"/docs/api/crypto-ramp","latest":true},{"label":"1.0.0","path":"/docs/api/crypto-ramp/1.0.0","latest":false}]},"/docs/api/merchant/2026-04-20":{"items":[{"id":"/docs/api/merchant/2026-04-20#tag-orders","title":"Orders","use":"a","href":"#tag-orders","items":[{"id":"/docs/api/merchant/2026-04-20#create-order","title":"Create an order","use":"a","href":"#create-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-order-list","title":"Retrieve an order list","use":"a","href":"#retrieve-order-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-order","title":"Retrieve an order","use":"a","href":"#retrieve-order","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#update-order","title":"Update an order","use":"a","href":"#update-order","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-04-20#increment-authorisation","title":"Increment authorisation","use":"a","href":"#increment-authorisation","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#capture-order","title":"Capture an order","use":"a","href":"#capture-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#cancel-order","title":"Cancel an order","use":"a","href":"#cancel-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#refund-order","title":"Refund an order","use":"a","href":"#refund-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#pay-order","title":"Pay for an order","use":"a","href":"#pay-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-payment-list","title":"Retrieve payment list of an order","use":"a","href":"#retrieve-payment-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-customers","title":"Customers","use":"a","href":"#tag-customers","items":[{"id":"/docs/api/merchant/2026-04-20#create-customer","title":"Create a customer","use":"a","href":"#create-customer","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-customer-list","title":"Retrieve a customer list","use":"a","href":"#retrieve-customer-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-customer","title":"Retrieve a customer","use":"a","href":"#retrieve-customer","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#update-customer","title":"Update a customer","use":"a","href":"#update-customer","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-04-20#delete-customer","title":"Delete a customer","use":"a","href":"#delete-customer","options":{"method":"delete"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-payment-method-list","title":"Retrieve payment method list of a customer","use":"a","href":"#retrieve-payment-method-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-payment-method","title":"Retrieve a customer's payment method","use":"a","href":"#retrieve-payment-method","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#update-payment-method","title":"Update a customer's payment method","use":"a","href":"#update-payment-method","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-04-20#delete-payment-method","title":"Delete a customer's payment method","use":"a","href":"#delete-payment-method","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-payments","title":"Payments","use":"a","href":"#tag-payments","items":[{"id":"/docs/api/merchant/2026-04-20#retrieve-payment-details","title":"Retrieve payment details","use":"a","href":"#retrieve-payment-details","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-subscriptions","title":"Subscriptions","use":"a","href":"#tag-subscriptions","items":[{"id":"/docs/api/merchant/2026-04-20#create-subscription-plan","title":"Create a subscription plan","use":"a","href":"#create-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-subscription-plan-list","title":"Retrieve a subscription plan list","use":"a","href":"#retrieve-subscription-plan-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-subscription-plan","title":"Retrieve a subscription plan","use":"a","href":"#retrieve-subscription-plan","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#create-subscription","title":"Create a subscription","use":"a","href":"#create-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-subscription-list","title":"Retrieve a subscription list","use":"a","href":"#retrieve-subscription-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-subscription","title":"Retrieve a subscription","use":"a","href":"#retrieve-subscription","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#update-subscription","title":"Update a subscription","use":"a","href":"#update-subscription","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-04-20#change-subscription-plan","title":"Change a subscription plan","use":"a","href":"#change-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#update-subscription-renewal-date","title":"Update a subscription renewal date","use":"a","href":"#update-subscription-renewal-date","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#cancel-subscription","title":"Cancel a subscription","use":"a","href":"#cancel-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-subscription-cycle-list","title":"Retrieve a subscription cycle list","use":"a","href":"#retrieve-subscription-cycle-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-subscription-cycle","title":"Retrieve a subscription cycle","use":"a","href":"#retrieve-subscription-cycle","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#create-subscription-usage","title":"Create a subscription usage","use":"a","href":"#create-subscription-usage","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-subscription-usage-list","title":"Retrieve a subscription usage list","use":"a","href":"#retrieve-subscription-usage-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-subscription-usage","title":"Retrieve a subscription usage","use":"a","href":"#retrieve-subscription-usage","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#update-subscription-usage","title":"Update a subscription usage","use":"a","href":"#update-subscription-usage","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-04-20#delete-subscription-usage","title":"Delete a subscription usage","use":"a","href":"#delete-subscription-usage","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-payouts","title":"Payouts","use":"a","href":"#tag-payouts","items":[{"id":"/docs/api/merchant/2026-04-20#retrieve-payout-list","title":"Retrieve a payout list","use":"a","href":"#retrieve-payout-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-payout","title":"Retrieve a payout","use":"a","href":"#retrieve-payout","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-disputes","title":"Disputes","use":"a","href":"#tag-disputes","items":[{"id":"/docs/api/merchant/2026-04-20#retrieve-dispute-list","title":"Retrieve a dispute list","use":"a","href":"#retrieve-dispute-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-dispute","title":"Retrieve a dispute","use":"a","href":"#retrieve-dispute","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#accept-dispute","title":"Accept a dispute","use":"a","href":"#accept-dispute","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#upload-dispute-evidence","title":"Upload evidence for a dispute","use":"a","href":"#upload-dispute-evidence","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#challenge-dispute","title":"Challenge a dispute","use":"a","href":"#challenge-dispute","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-report-runs","title":"Report runs","use":"a","href":"#tag-report-runs","items":[{"id":"/docs/api/merchant/2026-04-20#create-report-run","title":"Create a report run","use":"a","href":"#create-report-run","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-report-run","title":"Retrieve a report run","use":"a","href":"#retrieve-report-run","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#download-report-file","title":"Download report file","use":"a","href":"#download-report-file","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/merchant/2026-04-20#create-webhook","title":"Create a webhook","use":"a","href":"#create-webhook","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-webhook-list","title":"Retrieve a webhook list","use":"a","href":"#retrieve-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-webhook","title":"Retrieve a webhook","use":"a","href":"#retrieve-webhook","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#update-webhook","title":"Update a webhook","use":"a","href":"#update-webhook","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-04-20#delete-webhook","title":"Delete a webhook","use":"a","href":"#delete-webhook","options":{"method":"delete"}},{"id":"/docs/api/merchant/2026-04-20#rotate-webhook-signing-secret","title":"Rotate a webhook signing secret","use":"a","href":"#rotate-webhook-signing-secret","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-locations","title":"Locations","use":"a","href":"#tag-locations","items":[{"id":"/docs/api/merchant/2026-04-20#create-location","title":"Create a location","use":"a","href":"#create-location","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-location-list","title":"Retrieve location list","use":"a","href":"#retrieve-location-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-location","title":"Retrieve a location","use":"a","href":"#retrieve-location","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#update-location","title":"Update a location","use":"a","href":"#update-location","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-04-20#delete-location","title":"Delete a location","use":"a","href":"#delete-location","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-terminals","title":"Terminals","use":"a","href":"#tag-terminals","items":[{"id":"/docs/api/merchant/2026-04-20#retrieve-terminal-list","title":"Retrieve terminal list","use":"a","href":"#retrieve-terminal-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-payment-intents","title":"Payment intents","use":"a","href":"#tag-payment-intents","items":[{"id":"/docs/api/merchant/2026-04-20#create-payment-intent","title":"Create a payment intent","use":"a","href":"#create-payment-intent","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-payment-intent","title":"Retrieve a payment intent","use":"a","href":"#retrieve-payment-intent","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#cancel-payment-intent","title":"Cancel a payment intent","use":"a","href":"#cancel-payment-intent","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-apple-pay-merchant-registration","title":"Apple Pay merchant registration","use":"a","href":"#tag-apple-pay-merchant-registration","items":[{"id":"/docs/api/merchant/2026-04-20#register-domain-apple-pay","title":"Register domain for Apple Pay","use":"a","href":"#register-domain-apple-pay","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#unregister-domain-apple-pay","title":"Unregister domain for Apple Pay","use":"a","href":"#unregister-domain-apple-pay","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2026-04-20#tag-other","title":"Other","use":"a","href":"#tag-other","items":[{"id":"/docs/api/merchant/2026-04-20#register-address-validation-endpoint","title":"Register address validation endpoint for Fast checkout","use":"a","href":"#register-address-validation-endpoint","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-04-20#retrieve-synchronous-webhook-list","title":"Retrieve a synchronous webhook list","use":"a","href":"#retrieve-synchronous-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-04-20#delete-synchronous-webhook","title":"Delete a synchronous webhook","use":"a","href":"#delete-synchronous-webhook","options":{"method":"delete"}}]}],"versions":[{"label":"2026-04-20","path":"/docs/api/merchant","latest":true},{"label":"2026-03-12","path":"/docs/api/merchant/2026-03-12","latest":false},{"label":"2025-12-04","path":"/docs/api/merchant/2025-12-04","latest":false},{"label":"2025-10-16","path":"/docs/api/merchant/2025-10-16","latest":false},{"label":"2024-09-01","path":"/docs/api/merchant/2024-09-01","latest":false},{"label":"2024-05-01","path":"/docs/api/merchant/2024-05-01","latest":false},{"label":"2023-09-01","path":"/docs/api/merchant/2023-09-01","latest":false},{"label":"Legacy","path":"/docs/api/merchant/Legacy","latest":false}]},"/docs/api/merchant/2026-03-12":{"items":[{"id":"/docs/api/merchant/2026-03-12#tag-orders","title":"Orders","use":"a","href":"#tag-orders","items":[{"id":"/docs/api/merchant/2026-03-12#create-order","title":"Create an order","use":"a","href":"#create-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-order-list","title":"Retrieve an order list","use":"a","href":"#retrieve-order-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-order","title":"Retrieve an order","use":"a","href":"#retrieve-order","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#update-order","title":"Update an order","use":"a","href":"#update-order","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-03-12#increment-authorisation","title":"Increment authorisation","use":"a","href":"#increment-authorisation","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#capture-order","title":"Capture an order","use":"a","href":"#capture-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#cancel-order","title":"Cancel an order","use":"a","href":"#cancel-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#refund-order","title":"Refund an order","use":"a","href":"#refund-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#pay-order","title":"Pay for an order","use":"a","href":"#pay-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-payment-list","title":"Retrieve payment list of an order","use":"a","href":"#retrieve-payment-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-customers","title":"Customers","use":"a","href":"#tag-customers","items":[{"id":"/docs/api/merchant/2026-03-12#create-customer","title":"Create a customer","use":"a","href":"#create-customer","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-customer-list","title":"Retrieve a customer list","use":"a","href":"#retrieve-customer-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-customer","title":"Retrieve a customer","use":"a","href":"#retrieve-customer","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#update-customer","title":"Update a customer","use":"a","href":"#update-customer","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-03-12#delete-customer","title":"Delete a customer","use":"a","href":"#delete-customer","options":{"method":"delete"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-payment-method-list","title":"Retrieve payment method list of a customer","use":"a","href":"#retrieve-payment-method-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-payment-method","title":"Retrieve a customer's payment method","use":"a","href":"#retrieve-payment-method","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#update-payment-method","title":"Update a customer's payment method","use":"a","href":"#update-payment-method","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-03-12#delete-payment-method","title":"Delete a customer's payment method","use":"a","href":"#delete-payment-method","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-payments","title":"Payments","use":"a","href":"#tag-payments","items":[{"id":"/docs/api/merchant/2026-03-12#retrieve-payment-details","title":"Retrieve payment details","use":"a","href":"#retrieve-payment-details","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-subscriptions","title":"Subscriptions","use":"a","href":"#tag-subscriptions","items":[{"id":"/docs/api/merchant/2026-03-12#create-subscription-plan","title":"Create a subscription plan","use":"a","href":"#create-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-subscription-plan-list","title":"Retrieve a subscription plan list","use":"a","href":"#retrieve-subscription-plan-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-subscription-plan","title":"Retrieve a subscription plan","use":"a","href":"#retrieve-subscription-plan","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#create-subscription","title":"Create a subscription","use":"a","href":"#create-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-subscription-list","title":"Retrieve a subscription list","use":"a","href":"#retrieve-subscription-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-subscription","title":"Retrieve a subscription","use":"a","href":"#retrieve-subscription","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#update-subscription","title":"Update a subscription","use":"a","href":"#update-subscription","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-03-12#change-subscription-plan","title":"Change a subscription plan","use":"a","href":"#change-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#update-subscription-renewal-date","title":"Update a subscription renewal date","use":"a","href":"#update-subscription-renewal-date","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#cancel-subscription","title":"Cancel a subscription","use":"a","href":"#cancel-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-subscription-cycle-list","title":"Retrieve a subscription cycle list","use":"a","href":"#retrieve-subscription-cycle-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-subscription-cycle","title":"Retrieve a subscription cycle","use":"a","href":"#retrieve-subscription-cycle","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#create-subscription-usage","title":"Create a subscription usage","use":"a","href":"#create-subscription-usage","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-subscription-usage-list","title":"Retrieve a subscription usage list","use":"a","href":"#retrieve-subscription-usage-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-subscription-usage","title":"Retrieve a subscription usage","use":"a","href":"#retrieve-subscription-usage","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#update-subscription-usage","title":"Update a subscription usage","use":"a","href":"#update-subscription-usage","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-03-12#delete-subscription-usage","title":"Delete a subscription usage","use":"a","href":"#delete-subscription-usage","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-payouts","title":"Payouts","use":"a","href":"#tag-payouts","items":[{"id":"/docs/api/merchant/2026-03-12#retrieve-payout-list","title":"Retrieve a payout list","use":"a","href":"#retrieve-payout-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-payout","title":"Retrieve a payout","use":"a","href":"#retrieve-payout","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-disputes","title":"Disputes","use":"a","href":"#tag-disputes","items":[{"id":"/docs/api/merchant/2026-03-12#retrieve-dispute-list","title":"Retrieve a dispute list","use":"a","href":"#retrieve-dispute-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-dispute","title":"Retrieve a dispute","use":"a","href":"#retrieve-dispute","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#accept-dispute","title":"Accept a dispute","use":"a","href":"#accept-dispute","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#upload-dispute-evidence","title":"Upload evidence for a dispute","use":"a","href":"#upload-dispute-evidence","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#challenge-dispute","title":"Challenge a dispute","use":"a","href":"#challenge-dispute","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-report-runs","title":"Report runs","use":"a","href":"#tag-report-runs","items":[{"id":"/docs/api/merchant/2026-03-12#create-report-run","title":"Create a report run","use":"a","href":"#create-report-run","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-report-run","title":"Retrieve a report run","use":"a","href":"#retrieve-report-run","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#download-report-file","title":"Download report file","use":"a","href":"#download-report-file","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/merchant/2026-03-12#create-webhook","title":"Create a webhook","use":"a","href":"#create-webhook","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-webhook-list","title":"Retrieve a webhook list","use":"a","href":"#retrieve-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-webhook","title":"Retrieve a webhook","use":"a","href":"#retrieve-webhook","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#update-webhook","title":"Update a webhook","use":"a","href":"#update-webhook","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-03-12#delete-webhook","title":"Delete a webhook","use":"a","href":"#delete-webhook","options":{"method":"delete"}},{"id":"/docs/api/merchant/2026-03-12#rotate-webhook-signing-secret","title":"Rotate a webhook signing secret","use":"a","href":"#rotate-webhook-signing-secret","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-locations","title":"Locations","use":"a","href":"#tag-locations","items":[{"id":"/docs/api/merchant/2026-03-12#create-location","title":"Create a location","use":"a","href":"#create-location","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-location-list","title":"Retrieve location list","use":"a","href":"#retrieve-location-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-location","title":"Retrieve a location","use":"a","href":"#retrieve-location","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#update-location","title":"Update a location","use":"a","href":"#update-location","options":{"method":"patch"}},{"id":"/docs/api/merchant/2026-03-12#delete-location","title":"Delete a location","use":"a","href":"#delete-location","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-terminals","title":"Terminals","use":"a","href":"#tag-terminals","items":[{"id":"/docs/api/merchant/2026-03-12#retrieve-terminal-list","title":"Retrieve terminal list","use":"a","href":"#retrieve-terminal-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-payment-intents","title":"Payment intents","use":"a","href":"#tag-payment-intents","items":[{"id":"/docs/api/merchant/2026-03-12#create-payment-intent","title":"Create a payment intent","use":"a","href":"#create-payment-intent","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-payment-intent","title":"Retrieve a payment intent","use":"a","href":"#retrieve-payment-intent","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#cancel-payment-intent","title":"Cancel a payment intent","use":"a","href":"#cancel-payment-intent","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-apple-pay-merchant-registration","title":"Apple Pay merchant registration","use":"a","href":"#tag-apple-pay-merchant-registration","items":[{"id":"/docs/api/merchant/2026-03-12#register-domain-apple-pay","title":"Register domain for Apple Pay","use":"a","href":"#register-domain-apple-pay","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#unregister-domain-apple-pay","title":"Unregister domain for Apple Pay","use":"a","href":"#unregister-domain-apple-pay","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2026-03-12#tag-other","title":"Other","use":"a","href":"#tag-other","items":[{"id":"/docs/api/merchant/2026-03-12#register-address-validation-endpoint","title":"Register address validation endpoint for Fast checkout","use":"a","href":"#register-address-validation-endpoint","options":{"method":"post"}},{"id":"/docs/api/merchant/2026-03-12#retrieve-synchronous-webhook-list","title":"Retrieve a synchronous webhook list","use":"a","href":"#retrieve-synchronous-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2026-03-12#delete-synchronous-webhook","title":"Delete a synchronous webhook","use":"a","href":"#delete-synchronous-webhook","options":{"method":"delete"}}]}],"versions":[{"label":"2026-04-20","path":"/docs/api/merchant","latest":true},{"label":"2026-03-12","path":"/docs/api/merchant/2026-03-12","latest":false},{"label":"2025-12-04","path":"/docs/api/merchant/2025-12-04","latest":false},{"label":"2025-10-16","path":"/docs/api/merchant/2025-10-16","latest":false},{"label":"2024-09-01","path":"/docs/api/merchant/2024-09-01","latest":false},{"label":"2024-05-01","path":"/docs/api/merchant/2024-05-01","latest":false},{"label":"2023-09-01","path":"/docs/api/merchant/2023-09-01","latest":false},{"label":"Legacy","path":"/docs/api/merchant/Legacy","latest":false}]},"/docs/api/merchant/2025-12-04":{"items":[{"id":"/docs/api/merchant/2025-12-04#tag-orders","title":"Orders","use":"a","href":"#tag-orders","items":[{"id":"/docs/api/merchant/2025-12-04#create-order","title":"Create an order","use":"a","href":"#create-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-order-list","title":"Retrieve an order list","use":"a","href":"#retrieve-order-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-order","title":"Retrieve an order","use":"a","href":"#retrieve-order","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#update-order","title":"Update an order","use":"a","href":"#update-order","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-12-04#increment-authorisation","title":"Increment authorisation","use":"a","href":"#increment-authorisation","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#capture-order","title":"Capture an order","use":"a","href":"#capture-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#cancel-order","title":"Cancel an order","use":"a","href":"#cancel-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#refund-order","title":"Refund an order","use":"a","href":"#refund-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#pay-order","title":"Pay for an order","use":"a","href":"#pay-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-payment-list","title":"Retrieve payment list of an order","use":"a","href":"#retrieve-payment-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-customers","title":"Customers","use":"a","href":"#tag-customers","items":[{"id":"/docs/api/merchant/2025-12-04#create-customer","title":"Create a customer","use":"a","href":"#create-customer","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-customer-list","title":"Retrieve a customer list","use":"a","href":"#retrieve-customer-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-customer","title":"Retrieve a customer","use":"a","href":"#retrieve-customer","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#update-customer","title":"Update a customer","use":"a","href":"#update-customer","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-12-04#delete-customer","title":"Delete a customer","use":"a","href":"#delete-customer","options":{"method":"delete"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-payment-method-list","title":"Retrieve payment method list of a customer","use":"a","href":"#retrieve-payment-method-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-payment-method","title":"Retrieve a customer's payment method","use":"a","href":"#retrieve-payment-method","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#update-payment-method","title":"Update a customer's payment method","use":"a","href":"#update-payment-method","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-12-04#delete-payment-method","title":"Delete a customer's payment method","use":"a","href":"#delete-payment-method","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-payments","title":"Payments","use":"a","href":"#tag-payments","items":[{"id":"/docs/api/merchant/2025-12-04#retrieve-payment-details","title":"Retrieve payment details","use":"a","href":"#retrieve-payment-details","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-subscriptions","title":"Subscriptions","use":"a","href":"#tag-subscriptions","items":[{"id":"/docs/api/merchant/2025-12-04#create-subscription-plan","title":"Create a subscription plan","use":"a","href":"#create-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-subscription-plan-list","title":"Retrieve a subscription plan list","use":"a","href":"#retrieve-subscription-plan-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-subscription-plan","title":"Retrieve a subscription plan","use":"a","href":"#retrieve-subscription-plan","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#create-subscription","title":"Create a subscription","use":"a","href":"#create-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-subscription-list","title":"Retrieve a subscription list","use":"a","href":"#retrieve-subscription-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-subscription","title":"Retrieve a subscription","use":"a","href":"#retrieve-subscription","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#update-subscription","title":"Update a subscription","use":"a","href":"#update-subscription","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-12-04#cancel-subscription","title":"Cancel a subscription","use":"a","href":"#cancel-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#change-subscription-plan","title":"Change a subscription plan","use":"a","href":"#change-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#update-subscription-renewal-date","title":"Update a subscription renewal date","use":"a","href":"#update-subscription-renewal-date","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-subscription-cycle-list","title":"Retrieve a subscription cycle list","use":"a","href":"#retrieve-subscription-cycle-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-subscription-cycle","title":"Retrieve a subscription cycle","use":"a","href":"#retrieve-subscription-cycle","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#create-subscription-usage","title":"Create a subscription usage","use":"a","href":"#create-subscription-usage","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-subscription-usage-list","title":"Retrieve a subscription usage list","use":"a","href":"#retrieve-subscription-usage-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-subscription-usage","title":"Retrieve a subscription usage","use":"a","href":"#retrieve-subscription-usage","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#update-subscription-usage","title":"Update a subscription usage","use":"a","href":"#update-subscription-usage","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-12-04#delete-subscription-usage","title":"Delete a subscription usage","use":"a","href":"#delete-subscription-usage","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-payouts","title":"Payouts","use":"a","href":"#tag-payouts","items":[{"id":"/docs/api/merchant/2025-12-04#retrieve-payout-list","title":"Retrieve a payout list","use":"a","href":"#retrieve-payout-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-payout","title":"Retrieve a payout","use":"a","href":"#retrieve-payout","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-disputes","title":"Disputes","use":"a","href":"#tag-disputes","items":[{"id":"/docs/api/merchant/2025-12-04#retrieve-dispute-list","title":"Retrieve a dispute list","use":"a","href":"#retrieve-dispute-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-dispute","title":"Retrieve a dispute","use":"a","href":"#retrieve-dispute","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#accept-dispute","title":"Accept a dispute","use":"a","href":"#accept-dispute","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#upload-dispute-evidence","title":"Upload evidence for a dispute","use":"a","href":"#upload-dispute-evidence","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#challenge-dispute","title":"Challenge a dispute","use":"a","href":"#challenge-dispute","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-report-runs","title":"Report runs","use":"a","href":"#tag-report-runs","items":[{"id":"/docs/api/merchant/2025-12-04#create-report-run","title":"Create a report run","use":"a","href":"#create-report-run","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-report-run","title":"Retrieve a report run","use":"a","href":"#retrieve-report-run","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#download-report-file","title":"Download report file","use":"a","href":"#download-report-file","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/merchant/2025-12-04#create-webhook","title":"Create a webhook","use":"a","href":"#create-webhook","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-webhook-list","title":"Retrieve a webhook list","use":"a","href":"#retrieve-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-webhook","title":"Retrieve a webhook","use":"a","href":"#retrieve-webhook","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#update-webhook","title":"Update a webhook","use":"a","href":"#update-webhook","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-12-04#delete-webhook","title":"Delete a webhook","use":"a","href":"#delete-webhook","options":{"method":"delete"}},{"id":"/docs/api/merchant/2025-12-04#rotate-webhook-signing-secret","title":"Rotate a webhook signing secret","use":"a","href":"#rotate-webhook-signing-secret","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-locations","title":"Locations","use":"a","href":"#tag-locations","items":[{"id":"/docs/api/merchant/2025-12-04#create-location","title":"Create a location","use":"a","href":"#create-location","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-location-list","title":"Retrieve location list","use":"a","href":"#retrieve-location-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-location","title":"Retrieve a location","use":"a","href":"#retrieve-location","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#update-location","title":"Update a location","use":"a","href":"#update-location","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-12-04#delete-location","title":"Delete a location","use":"a","href":"#delete-location","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-terminals","title":"Terminals","use":"a","href":"#tag-terminals","items":[{"id":"/docs/api/merchant/2025-12-04#retrieve-terminal-list","title":"Retrieve terminal list","use":"a","href":"#retrieve-terminal-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-payment-intents","title":"Payment intents","use":"a","href":"#tag-payment-intents","items":[{"id":"/docs/api/merchant/2025-12-04#create-payment-intent","title":"Create a payment intent","use":"a","href":"#create-payment-intent","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-payment-intent","title":"Retrieve a payment intent","use":"a","href":"#retrieve-payment-intent","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#cancel-payment-intent","title":"Cancel a payment intent","use":"a","href":"#cancel-payment-intent","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-apple-pay-merchant-registration","title":"Apple Pay merchant registration","use":"a","href":"#tag-apple-pay-merchant-registration","items":[{"id":"/docs/api/merchant/2025-12-04#register-domain-apple-pay","title":"Register domain for Apple Pay","use":"a","href":"#register-domain-apple-pay","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#unregister-domain-apple-pay","title":"Unregister domain for Apple Pay","use":"a","href":"#unregister-domain-apple-pay","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2025-12-04#tag-other","title":"Other","use":"a","href":"#tag-other","items":[{"id":"/docs/api/merchant/2025-12-04#register-address-validation-endpoint","title":"Register address validation endpoint for Fast checkout","use":"a","href":"#register-address-validation-endpoint","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-12-04#retrieve-synchronous-webhook-list","title":"Retrieve a synchronous webhook list","use":"a","href":"#retrieve-synchronous-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-12-04#delete-synchronous-webhook","title":"Delete a synchronous webhook","use":"a","href":"#delete-synchronous-webhook","options":{"method":"delete"}}]}],"versions":[{"label":"2026-04-20","path":"/docs/api/merchant","latest":true},{"label":"2026-03-12","path":"/docs/api/merchant/2026-03-12","latest":false},{"label":"2025-12-04","path":"/docs/api/merchant/2025-12-04","latest":false},{"label":"2025-10-16","path":"/docs/api/merchant/2025-10-16","latest":false},{"label":"2024-09-01","path":"/docs/api/merchant/2024-09-01","latest":false},{"label":"2024-05-01","path":"/docs/api/merchant/2024-05-01","latest":false},{"label":"2023-09-01","path":"/docs/api/merchant/2023-09-01","latest":false},{"label":"Legacy","path":"/docs/api/merchant/Legacy","latest":false}]},"/docs/api/merchant/2025-10-16":{"items":[{"id":"/docs/api/merchant/2025-10-16#tag-orders","title":"Orders","use":"a","href":"#tag-orders","items":[{"id":"/docs/api/merchant/2025-10-16#create-order","title":"Create an order","use":"a","href":"#create-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-order-list","title":"Retrieve an order list","use":"a","href":"#retrieve-order-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-order","title":"Retrieve an order","use":"a","href":"#retrieve-order","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#update-order","title":"Update an order","use":"a","href":"#update-order","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-10-16#increment-order-authorisation","title":"Increment authorisation","use":"a","href":"#increment-order-authorisation","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#capture-order","title":"Capture an order","use":"a","href":"#capture-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#cancel-order","title":"Cancel an order","use":"a","href":"#cancel-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#refund-order","title":"Refund an order","use":"a","href":"#refund-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#pay-order","title":"Pay for an order","use":"a","href":"#pay-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-payment-list","title":"Retrieve payment list of an order","use":"a","href":"#retrieve-payment-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-customers","title":"Customers","use":"a","href":"#tag-customers","items":[{"id":"/docs/api/merchant/2025-10-16#create-customer","title":"Create a customer","use":"a","href":"#create-customer","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-customer-list","title":"Retrieve a customer list","use":"a","href":"#retrieve-customer-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-customer","title":"Retrieve a customer","use":"a","href":"#retrieve-customer","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#update-customer","title":"Update a customer","use":"a","href":"#update-customer","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-10-16#delete-customer","title":"Delete a customer","use":"a","href":"#delete-customer","options":{"method":"delete"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-payment-method-list","title":"Retrieve payment method list of a customer","use":"a","href":"#retrieve-payment-method-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-payment-method","title":"Retrieve a customer's payment method","use":"a","href":"#retrieve-payment-method","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#update-payment-method","title":"Update a customer's payment method","use":"a","href":"#update-payment-method","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-10-16#delete-payment-method","title":"Delete a customer's payment method","use":"a","href":"#delete-payment-method","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-payments","title":"Payments","use":"a","href":"#tag-payments","items":[{"id":"/docs/api/merchant/2025-10-16#retrieve-payment-details","title":"Retrieve payment details","use":"a","href":"#retrieve-payment-details","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-subscriptions","title":"Subscriptions","use":"a","href":"#tag-subscriptions","items":[{"id":"/docs/api/merchant/2025-10-16#create-subscription-plan","title":"Create a subscription plan","use":"a","href":"#create-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-subscription-plan-list","title":"Retrieve a subscription plan list","use":"a","href":"#retrieve-subscription-plan-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-subscription-plan","title":"Retrieve a subscription plan","use":"a","href":"#retrieve-subscription-plan","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#create-subscription","title":"Create a subscription","use":"a","href":"#create-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-subscription-list","title":"Retrieve a subscription list","use":"a","href":"#retrieve-subscription-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-subscription","title":"Retrieve a subscription","use":"a","href":"#retrieve-subscription","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#update-subscription","title":"Update a subscription","use":"a","href":"#update-subscription","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-10-16#cancel-subscription","title":"Cancel a subscription","use":"a","href":"#cancel-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#change-subscription-plan","title":"Change a subscription plan","use":"a","href":"#change-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#update-subscription-renewal-date","title":"Update a subscription renewal date","use":"a","href":"#update-subscription-renewal-date","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-subscription-cycle-list","title":"Retrieve a subscription cycle list","use":"a","href":"#retrieve-subscription-cycle-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-subscription-cycle","title":"Retrieve a subscription cycle","use":"a","href":"#retrieve-subscription-cycle","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#create-subscription-usage","title":"Create a subscription usage","use":"a","href":"#create-subscription-usage","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-subscription-usage-list","title":"Retrieve a subscription usage list","use":"a","href":"#retrieve-subscription-usage-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-subscription-usage","title":"Retrieve a subscription usage","use":"a","href":"#retrieve-subscription-usage","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#update-subscription-usage","title":"Update a subscription usage","use":"a","href":"#update-subscription-usage","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-10-16#delete-subscription-usage","title":"Delete a subscription usage","use":"a","href":"#delete-subscription-usage","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-payouts","title":"Payouts","use":"a","href":"#tag-payouts","items":[{"id":"/docs/api/merchant/2025-10-16#retrieve-payout-list","title":"Retrieve a payout list","use":"a","href":"#retrieve-payout-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-payout","title":"Retrieve a payout","use":"a","href":"#retrieve-payout","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-disputes","title":"Disputes","use":"a","href":"#tag-disputes","items":[{"id":"/docs/api/merchant/2025-10-16#retrieve-dispute-list","title":"Retrieve a dispute list","use":"a","href":"#retrieve-dispute-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-dispute","title":"Retrieve a dispute","use":"a","href":"#retrieve-dispute","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#accept-dispute","title":"Accept a dispute","use":"a","href":"#accept-dispute","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#upload-dispute-evidence","title":"Upload evidence for a dispute","use":"a","href":"#upload-dispute-evidence","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#challenge-dispute","title":"Challenge a dispute","use":"a","href":"#challenge-dispute","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-report-runs","title":"Report runs","use":"a","href":"#tag-report-runs","items":[{"id":"/docs/api/merchant/2025-10-16#create-report-run","title":"Create a report run","use":"a","href":"#create-report-run","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-report-run","title":"Retrieve a report run","use":"a","href":"#retrieve-report-run","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#download-report-file","title":"Download report file","use":"a","href":"#download-report-file","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/merchant/2025-10-16#create-webhook","title":"Create a webhook","use":"a","href":"#create-webhook","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-webhook-list","title":"Retrieve a webhook list","use":"a","href":"#retrieve-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-webhook","title":"Retrieve a webhook","use":"a","href":"#retrieve-webhook","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#update-webhook","title":"Update a webhook","use":"a","href":"#update-webhook","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-10-16#delete-webhook","title":"Delete a webhook","use":"a","href":"#delete-webhook","options":{"method":"delete"}},{"id":"/docs/api/merchant/2025-10-16#rotate-webhook-signing-secret","title":"Rotate a webhook signing secret","use":"a","href":"#rotate-webhook-signing-secret","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-locations","title":"Locations","use":"a","href":"#tag-locations","items":[{"id":"/docs/api/merchant/2025-10-16#create-location","title":"Create a location","use":"a","href":"#create-location","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-location-list","title":"Retrieve location list","use":"a","href":"#retrieve-location-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-location","title":"Retrieve a location","use":"a","href":"#retrieve-location","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#update-location","title":"Update a location","use":"a","href":"#update-location","options":{"method":"patch"}},{"id":"/docs/api/merchant/2025-10-16#delete-location","title":"Delete a location","use":"a","href":"#delete-location","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-terminals","title":"Terminals","use":"a","href":"#tag-terminals","items":[{"id":"/docs/api/merchant/2025-10-16#retrieve-terminal-list","title":"Retrieve terminal list","use":"a","href":"#retrieve-terminal-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-payment-intents","title":"Payment intents","use":"a","href":"#tag-payment-intents","items":[{"id":"/docs/api/merchant/2025-10-16#create-payment-intent","title":"Create a payment intent","use":"a","href":"#create-payment-intent","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-payment-intent","title":"Retrieve a payment intent","use":"a","href":"#retrieve-payment-intent","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#cancel-payment-intent","title":"Cancel a payment intent","use":"a","href":"#cancel-payment-intent","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-apple-pay-merchant-registration","title":"Apple Pay merchant registration","use":"a","href":"#tag-apple-pay-merchant-registration","items":[{"id":"/docs/api/merchant/2025-10-16#register-domain-apple-pay","title":"Register domain for Apple Pay","use":"a","href":"#register-domain-apple-pay","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#unregister-domain-apple-pay","title":"Unregister domain for Apple Pay","use":"a","href":"#unregister-domain-apple-pay","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2025-10-16#tag-other","title":"Other","use":"a","href":"#tag-other","items":[{"id":"/docs/api/merchant/2025-10-16#register-address-validation-endpoint","title":"Register address validation endpoint for Fast checkout","use":"a","href":"#register-address-validation-endpoint","options":{"method":"post"}},{"id":"/docs/api/merchant/2025-10-16#retrieve-synchronous-webhook-list","title":"Retrieve a synchronous webhook list","use":"a","href":"#retrieve-synchronous-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2025-10-16#delete-synchronous-webhook","title":"Delete a synchronous webhook","use":"a","href":"#delete-synchronous-webhook","options":{"method":"delete"}}]}],"versions":[{"label":"2026-04-20","path":"/docs/api/merchant","latest":true},{"label":"2026-03-12","path":"/docs/api/merchant/2026-03-12","latest":false},{"label":"2025-12-04","path":"/docs/api/merchant/2025-12-04","latest":false},{"label":"2025-10-16","path":"/docs/api/merchant/2025-10-16","latest":false},{"label":"2024-09-01","path":"/docs/api/merchant/2024-09-01","latest":false},{"label":"2024-05-01","path":"/docs/api/merchant/2024-05-01","latest":false},{"label":"2023-09-01","path":"/docs/api/merchant/2023-09-01","latest":false},{"label":"Legacy","path":"/docs/api/merchant/Legacy","latest":false}]},"/docs/api/merchant/2024-09-01":{"items":[{"id":"/docs/api/merchant/2024-09-01#tag-orders","title":"Orders","use":"a","href":"#tag-orders","items":[{"id":"/docs/api/merchant/2024-09-01#create-order","title":"Create an order","use":"a","href":"#create-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-order-list","title":"Retrieve an order list","use":"a","href":"#retrieve-order-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-order","title":"Retrieve an order","use":"a","href":"#retrieve-order","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#update-order","title":"Update an order","use":"a","href":"#update-order","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-09-01#increment-order-authorisation","title":"Increment authorisation","use":"a","href":"#increment-order-authorisation","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#capture-order","title":"Capture an order","use":"a","href":"#capture-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#cancel-order","title":"Cancel an order","use":"a","href":"#cancel-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#refund-order","title":"Refund an order","use":"a","href":"#refund-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#pay-order","title":"Pay for an order","use":"a","href":"#pay-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-payment-list","title":"Retrieve payment list of an order","use":"a","href":"#retrieve-payment-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-customers","title":"Customers","use":"a","href":"#tag-customers","items":[{"id":"/docs/api/merchant/2024-09-01#create-customer","title":"Create a customer","use":"a","href":"#create-customer","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-customer-list","title":"Retrieve a customer list","use":"a","href":"#retrieve-customer-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-customer","title":"Retrieve a customer","use":"a","href":"#retrieve-customer","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#update-customer","title":"Update a customer","use":"a","href":"#update-customer","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-09-01#delete-customer","title":"Delete a customer","use":"a","href":"#delete-customer","options":{"method":"delete"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-payment-method-list","title":"Retrieve payment method list of a customer","use":"a","href":"#retrieve-payment-method-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-payment-method","title":"Retrieve a customer's payment method","use":"a","href":"#retrieve-payment-method","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#update-payment-method","title":"Update a customer's payment method","use":"a","href":"#update-payment-method","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-09-01#delete-payment-method","title":"Delete a customer's payment method","use":"a","href":"#delete-payment-method","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-payments","title":"Payments","use":"a","href":"#tag-payments","items":[{"id":"/docs/api/merchant/2024-09-01#retrieve-payment-details","title":"Retrieve payment details","use":"a","href":"#retrieve-payment-details","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-subscriptions","title":"Subscriptions","use":"a","href":"#tag-subscriptions","items":[{"id":"/docs/api/merchant/2024-09-01#create-subscription-plan","title":"Create a subscription plan","use":"a","href":"#create-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-subscription-plan-list","title":"Retrieve a subscription plan list","use":"a","href":"#retrieve-subscription-plan-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-subscription-plan","title":"Retrieve a subscription plan","use":"a","href":"#retrieve-subscription-plan","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#create-subscription","title":"Create a subscription","use":"a","href":"#create-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-subscription-list","title":"Retrieve a subscription list","use":"a","href":"#retrieve-subscription-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-subscription","title":"Retrieve a subscription","use":"a","href":"#retrieve-subscription","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#update-subscription","title":"Update a subscription","use":"a","href":"#update-subscription","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-09-01#cancel-subscription","title":"Cancel a subscription","use":"a","href":"#cancel-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#change-subscription-plan","title":"Change a subscription plan","use":"a","href":"#change-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#update-subscription-renewal-date","title":"Update a subscription renewal date","use":"a","href":"#update-subscription-renewal-date","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-subscription-cycle-list","title":"Retrieve a subscription cycle list","use":"a","href":"#retrieve-subscription-cycle-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-subscription-cycle","title":"Retrieve a subscription cycle","use":"a","href":"#retrieve-subscription-cycle","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#create-subscription-usage","title":"Create a subscription usage","use":"a","href":"#create-subscription-usage","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-subscription-usage-list","title":"Retrieve a subscription usage list","use":"a","href":"#retrieve-subscription-usage-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-subscription-usage","title":"Retrieve a subscription usage","use":"a","href":"#retrieve-subscription-usage","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#update-subscription-usage","title":"Update a subscription usage","use":"a","href":"#update-subscription-usage","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-09-01#delete-subscription-usage","title":"Delete a subscription usage","use":"a","href":"#delete-subscription-usage","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-payouts","title":"Payouts","use":"a","href":"#tag-payouts","items":[{"id":"/docs/api/merchant/2024-09-01#retrieve-payout-list","title":"Retrieve a payout list","use":"a","href":"#retrieve-payout-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-payout","title":"Retrieve a payout","use":"a","href":"#retrieve-payout","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-disputes","title":"Disputes","use":"a","href":"#tag-disputes","items":[{"id":"/docs/api/merchant/2024-09-01#retrieve-dispute-list","title":"Retrieve a dispute list","use":"a","href":"#retrieve-dispute-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-dispute","title":"Retrieve a dispute","use":"a","href":"#retrieve-dispute","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#accept-dispute","title":"Accept a dispute","use":"a","href":"#accept-dispute","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#upload-dispute-evidence","title":"Upload evidence for a dispute","use":"a","href":"#upload-dispute-evidence","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#challenge-dispute","title":"Challenge a dispute","use":"a","href":"#challenge-dispute","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-report-runs","title":"Report runs","use":"a","href":"#tag-report-runs","items":[{"id":"/docs/api/merchant/2024-09-01#create-report-run","title":"Create a report run","use":"a","href":"#create-report-run","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-report-run","title":"Retrieve a report run","use":"a","href":"#retrieve-report-run","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#download-report-file","title":"Download report file","use":"a","href":"#download-report-file","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/merchant/2024-09-01#create-webhook","title":"Create a webhook","use":"a","href":"#create-webhook","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-webhook-list","title":"Retrieve a webhook list","use":"a","href":"#retrieve-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-webhook","title":"Retrieve a webhook","use":"a","href":"#retrieve-webhook","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#update-webhook","title":"Update a webhook","use":"a","href":"#update-webhook","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-09-01#delete-webhook","title":"Delete a webhook","use":"a","href":"#delete-webhook","options":{"method":"delete"}},{"id":"/docs/api/merchant/2024-09-01#rotate-webhook-signing-secret","title":"Rotate a webhook signing secret","use":"a","href":"#rotate-webhook-signing-secret","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-locations","title":"Locations","use":"a","href":"#tag-locations","items":[{"id":"/docs/api/merchant/2024-09-01#create-location","title":"Create a location","use":"a","href":"#create-location","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-location-list","title":"Retrieve location list","use":"a","href":"#retrieve-location-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-location","title":"Retrieve a location","use":"a","href":"#retrieve-location","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#update-location","title":"Update a location","use":"a","href":"#update-location","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-09-01#delete-location","title":"Delete a location","use":"a","href":"#delete-location","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-terminals","title":"Terminals","use":"a","href":"#tag-terminals","items":[{"id":"/docs/api/merchant/2024-09-01#retrieve-terminal-list","title":"Retrieve terminal list","use":"a","href":"#retrieve-terminal-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-payment-intents","title":"Payment intents","use":"a","href":"#tag-payment-intents","items":[{"id":"/docs/api/merchant/2024-09-01#create-payment-intent","title":"Create a payment intent","use":"a","href":"#create-payment-intent","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-payment-intent","title":"Retrieve a payment intent","use":"a","href":"#retrieve-payment-intent","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#cancel-payment-intent","title":"Cancel a payment intent","use":"a","href":"#cancel-payment-intent","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-apple-pay-merchant-registration","title":"Apple Pay merchant registration","use":"a","href":"#tag-apple-pay-merchant-registration","items":[{"id":"/docs/api/merchant/2024-09-01#register-domain-apple-pay","title":"Register domain for Apple Pay","use":"a","href":"#register-domain-apple-pay","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#unregister-domain-apple-pay","title":"Unregister domain for Apple Pay","use":"a","href":"#unregister-domain-apple-pay","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2024-09-01#tag-other","title":"Other","use":"a","href":"#tag-other","items":[{"id":"/docs/api/merchant/2024-09-01#register-address-validation-endpoint","title":"Register address validation endpoint for Fast checkout","use":"a","href":"#register-address-validation-endpoint","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-09-01#retrieve-synchronous-webhook-list","title":"Retrieve a synchronous webhook list","use":"a","href":"#retrieve-synchronous-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-09-01#delete-synchronous-webhook","title":"Delete a synchronous webhook","use":"a","href":"#delete-synchronous-webhook","options":{"method":"delete"}}]}],"versions":[{"label":"2026-04-20","path":"/docs/api/merchant","latest":true},{"label":"2026-03-12","path":"/docs/api/merchant/2026-03-12","latest":false},{"label":"2025-12-04","path":"/docs/api/merchant/2025-12-04","latest":false},{"label":"2025-10-16","path":"/docs/api/merchant/2025-10-16","latest":false},{"label":"2024-09-01","path":"/docs/api/merchant/2024-09-01","latest":false},{"label":"2024-05-01","path":"/docs/api/merchant/2024-05-01","latest":false},{"label":"2023-09-01","path":"/docs/api/merchant/2023-09-01","latest":false},{"label":"Legacy","path":"/docs/api/merchant/Legacy","latest":false}]},"/docs/api/merchant/2024-05-01":{"items":[{"id":"/docs/api/merchant/2024-05-01#tag-orders","title":"Orders","use":"a","href":"#tag-orders","items":[{"id":"/docs/api/merchant/2024-05-01#create-order","title":"Create an order","use":"a","href":"#create-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-order","title":"Retrieve an order","use":"a","href":"#retrieve-order","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#update-order","title":"Update an order","use":"a","href":"#update-order","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-order-list","title":"Retrieve an order list","use":"a","href":"#retrieve-order-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#increment-order-authorisation","title":"Increment authorisation","use":"a","href":"#increment-order-authorisation","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#capture-order","title":"Capture an order","use":"a","href":"#capture-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#cancel-order","title":"Cancel an order","use":"a","href":"#cancel-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#refund-order-deprecated","title":"Refund an order (Deprecated)","use":"a","href":"#refund-order-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#pay-order","title":"Pay for an order","use":"a","href":"#pay-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-payment-list","title":"Retrieve payment list of an order","use":"a","href":"#retrieve-payment-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-customers","title":"Customers","use":"a","href":"#tag-customers","items":[{"id":"/docs/api/merchant/2024-05-01#create-customer-deprecated","title":"Create a customer (Deprecated)","use":"a","href":"#create-customer-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-all-customers-deprecated","title":"Retrieve a customer list (Deprecated)","use":"a","href":"#retrieve-all-customers-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-customer-deprecated","title":"Retrieve a customer (Deprecated)","use":"a","href":"#retrieve-customer-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#update-customer-deprecated","title":"Update a customer (Deprecated)","use":"a","href":"#update-customer-deprecated","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-05-01#delete-customer-deprecated","title":"Delete a customer (Deprecated)","use":"a","href":"#delete-customer-deprecated","options":{"method":"delete"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-all-payment-methods-deprecated","title":"Retrieve all payment methods of a customer (Deprecated)","use":"a","href":"#retrieve-all-payment-methods-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-payment-method-deprecated","title":"Retrieve a customer's payment method (Deprecated)","use":"a","href":"#retrieve-payment-method-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#update-payment-method-deprecated","title":"Update a customer's payment method (Deprecated)","use":"a","href":"#update-payment-method-deprecated","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-05-01#delete-payment-method-deprecated","title":"Delete a customer's payment method (Deprecated)","use":"a","href":"#delete-payment-method-deprecated","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-payments","title":"Payments","use":"a","href":"#tag-payments","items":[{"id":"/docs/api/merchant/2024-05-01#retrieve-payment-details","title":"Retrieve payment details","use":"a","href":"#retrieve-payment-details","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-payouts","title":"Payouts","use":"a","href":"#tag-payouts","items":[{"id":"/docs/api/merchant/2024-05-01#retrieve-payout-list","title":"Retrieve a payout list","use":"a","href":"#retrieve-payout-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-payout","title":"Retrieve a payout","use":"a","href":"#retrieve-payout","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-report-runs","title":"Report runs","use":"a","href":"#tag-report-runs","items":[{"id":"/docs/api/merchant/2024-05-01#create-report-run","title":"Create a report run","use":"a","href":"#create-report-run","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-report-run","title":"Retrieve a report run","use":"a","href":"#retrieve-report-run","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#download-report-file","title":"Download report file","use":"a","href":"#download-report-file","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/merchant/2024-05-01#create-webhook-deprecated","title":"Create a webhook (Deprecated)","use":"a","href":"#create-webhook-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-all-webhooks-deprecated","title":"Retrieve a webhook list (Deprecated)","use":"a","href":"#retrieve-all-webhooks-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-webhook-deprecated","title":"Retrieve a webhook (Deprecated)","use":"a","href":"#retrieve-webhook-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#update-webhook-deprecated","title":"Update a webhook (Deprecated)","use":"a","href":"#update-webhook-deprecated","options":{"method":"put"}},{"id":"/docs/api/merchant/2024-05-01#delete-webhook-deprecated","title":"Delete a webhook (Deprecated)","use":"a","href":"#delete-webhook-deprecated","options":{"method":"delete"}},{"id":"/docs/api/merchant/2024-05-01#rotate-webhook-signing-secret-deprecated","title":"Rotate a webhook signing secret (Deprecated)","use":"a","href":"#rotate-webhook-signing-secret-deprecated","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-locations","title":"Locations","use":"a","href":"#tag-locations","items":[{"id":"/docs/api/merchant/2024-05-01#create-location","title":"Create a location","use":"a","href":"#create-location","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-location-list","title":"Retrieve location list","use":"a","href":"#retrieve-location-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-location","title":"Retrieve a location","use":"a","href":"#retrieve-location","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#update-location","title":"Update a location","use":"a","href":"#update-location","options":{"method":"patch"}},{"id":"/docs/api/merchant/2024-05-01#delete-location","title":"Delete a location","use":"a","href":"#delete-location","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-terminals","title":"Terminals","use":"a","href":"#tag-terminals","items":[{"id":"/docs/api/merchant/2024-05-01#retrieve-terminal-list","title":"Retrieve terminal list","use":"a","href":"#retrieve-terminal-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-payment-intents","title":"Payment intents","use":"a","href":"#tag-payment-intents","items":[{"id":"/docs/api/merchant/2024-05-01#create-payment-intent","title":"Create a payment intent","use":"a","href":"#create-payment-intent","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-payment-intent","title":"Retrieve a payment intent","use":"a","href":"#retrieve-payment-intent","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#cancel-payment-intent","title":"Cancel a payment intent","use":"a","href":"#cancel-payment-intent","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-apple-pay-merchant-registration","title":"Apple Pay merchant registration","use":"a","href":"#tag-apple-pay-merchant-registration","items":[{"id":"/docs/api/merchant/2024-05-01#register-domain-apple-pay","title":"Register domain for Apple Pay","use":"a","href":"#register-domain-apple-pay","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#unregister-domain-apple-pay","title":"Unregister domain for Apple Pay","use":"a","href":"#unregister-domain-apple-pay","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2024-05-01#tag-other","title":"Other","use":"a","href":"#tag-other","items":[{"id":"/docs/api/merchant/2024-05-01#register-address-validation-endpoint","title":"Register address validation endpoint for Fast checkout","use":"a","href":"#register-address-validation-endpoint","options":{"method":"post"}},{"id":"/docs/api/merchant/2024-05-01#retrieve-synchronous-webhook-list","title":"Retrieve a synchronous webhook list","use":"a","href":"#retrieve-synchronous-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2024-05-01#delete-synchronous-webhook","title":"Delete a synchronous webhook","use":"a","href":"#delete-synchronous-webhook","options":{"method":"delete"}}]}],"versions":[{"label":"2026-04-20","path":"/docs/api/merchant","latest":true},{"label":"2026-03-12","path":"/docs/api/merchant/2026-03-12","latest":false},{"label":"2025-12-04","path":"/docs/api/merchant/2025-12-04","latest":false},{"label":"2025-10-16","path":"/docs/api/merchant/2025-10-16","latest":false},{"label":"2024-09-01","path":"/docs/api/merchant/2024-09-01","latest":false},{"label":"2024-05-01","path":"/docs/api/merchant/2024-05-01","latest":false},{"label":"2023-09-01","path":"/docs/api/merchant/2023-09-01","latest":false},{"label":"Legacy","path":"/docs/api/merchant/Legacy","latest":false}]},"/docs/api/merchant/2023-09-01":{"items":[{"id":"/docs/api/merchant/2023-09-01#tag-orders","title":"Orders","use":"a","href":"#tag-orders","items":[{"id":"/docs/api/merchant/2023-09-01#create-order","title":"Create an order","use":"a","href":"#create-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-order","title":"Retrieve an order","use":"a","href":"#retrieve-order","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#update-order","title":"Update an order","use":"a","href":"#update-order","options":{"method":"patch"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-order-list","title":"Retrieve an order list","use":"a","href":"#retrieve-order-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#capture-order","title":"Capture an order","use":"a","href":"#capture-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#cancel-order","title":"Cancel an order","use":"a","href":"#cancel-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#refund-order-deprecated","title":"Refund an order (Deprecated)","use":"a","href":"#refund-order-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#pay-order","title":"Pay for an order","use":"a","href":"#pay-order","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-payment-list","title":"Retrieve payment list of an order","use":"a","href":"#retrieve-payment-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-customers","title":"Customers","use":"a","href":"#tag-customers","items":[{"id":"/docs/api/merchant/2023-09-01#create-customer-deprecated","title":"Create a customer (Deprecated)","use":"a","href":"#create-customer-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-all-customers-deprecated","title":"Retrieve a customer list (Deprecated)","use":"a","href":"#retrieve-all-customers-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-customer-deprecated","title":"Retrieve a customer (Deprecated)","use":"a","href":"#retrieve-customer-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#update-customer-deprecated","title":"Update a customer (Deprecated)","use":"a","href":"#update-customer-deprecated","options":{"method":"patch"}},{"id":"/docs/api/merchant/2023-09-01#delete-customer-deprecated","title":"Delete a customer (Deprecated)","use":"a","href":"#delete-customer-deprecated","options":{"method":"delete"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-all-payment-methods-deprecated","title":"Retrieve all payment methods of a customer (Deprecated)","use":"a","href":"#retrieve-all-payment-methods-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-payment-method-deprecated","title":"Retrieve a customer's payment method (Deprecated)","use":"a","href":"#retrieve-payment-method-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#update-payment-method-deprecated","title":"Update a customer's payment method (Deprecated)","use":"a","href":"#update-payment-method-deprecated","options":{"method":"patch"}},{"id":"/docs/api/merchant/2023-09-01#delete-payment-method-deprecated","title":"Delete a customer's payment method (Deprecated)","use":"a","href":"#delete-payment-method-deprecated","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-payments","title":"Payments","use":"a","href":"#tag-payments","items":[{"id":"/docs/api/merchant/2023-09-01#retrieve-payment-details","title":"Retrieve payment details","use":"a","href":"#retrieve-payment-details","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-payouts","title":"Payouts","use":"a","href":"#tag-payouts","items":[{"id":"/docs/api/merchant/2023-09-01#retrieve-payout-list","title":"Retrieve a payout list","use":"a","href":"#retrieve-payout-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-payout","title":"Retrieve a payout","use":"a","href":"#retrieve-payout","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-report-runs","title":"Report runs","use":"a","href":"#tag-report-runs","items":[{"id":"/docs/api/merchant/2023-09-01#create-report-run","title":"Create a report run","use":"a","href":"#create-report-run","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-report-run","title":"Retrieve a report run","use":"a","href":"#retrieve-report-run","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#download-report-file","title":"Download report file","use":"a","href":"#download-report-file","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/merchant/2023-09-01#create-webhook-deprecated","title":"Create a webhook (Deprecated)","use":"a","href":"#create-webhook-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-all-webhooks-deprecated","title":"Retrieve a webhook list (Deprecated)","use":"a","href":"#retrieve-all-webhooks-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-webhook-deprecated","title":"Retrieve a webhook (Deprecated)","use":"a","href":"#retrieve-webhook-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#update-webhook-deprecated","title":"Update a webhook (Deprecated)","use":"a","href":"#update-webhook-deprecated","options":{"method":"put"}},{"id":"/docs/api/merchant/2023-09-01#delete-webhook-deprecated","title":"Delete a webhook (Deprecated)","use":"a","href":"#delete-webhook-deprecated","options":{"method":"delete"}},{"id":"/docs/api/merchant/2023-09-01#rotate-webhook-signing-secret-deprecated","title":"Rotate a webhook signing secret (Deprecated)","use":"a","href":"#rotate-webhook-signing-secret-deprecated","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-locations","title":"Locations","use":"a","href":"#tag-locations","items":[{"id":"/docs/api/merchant/2023-09-01#create-location","title":"Create a location","use":"a","href":"#create-location","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-location-list","title":"Retrieve location list","use":"a","href":"#retrieve-location-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-location","title":"Retrieve a location","use":"a","href":"#retrieve-location","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#update-location","title":"Update a location","use":"a","href":"#update-location","options":{"method":"patch"}},{"id":"/docs/api/merchant/2023-09-01#delete-location","title":"Delete a location","use":"a","href":"#delete-location","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-terminals","title":"Terminals","use":"a","href":"#tag-terminals","items":[{"id":"/docs/api/merchant/2023-09-01#retrieve-terminal-list","title":"Retrieve terminal list","use":"a","href":"#retrieve-terminal-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-payment-intents","title":"Payment intents","use":"a","href":"#tag-payment-intents","items":[{"id":"/docs/api/merchant/2023-09-01#create-payment-intent","title":"Create a payment intent","use":"a","href":"#create-payment-intent","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-payment-intent","title":"Retrieve a payment intent","use":"a","href":"#retrieve-payment-intent","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#cancel-payment-intent","title":"Cancel a payment intent","use":"a","href":"#cancel-payment-intent","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-apple-pay-merchant-registration","title":"Apple Pay merchant registration","use":"a","href":"#tag-apple-pay-merchant-registration","items":[{"id":"/docs/api/merchant/2023-09-01#register-domain-apple-pay","title":"Register domain for Apple Pay","use":"a","href":"#register-domain-apple-pay","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#unregister-domain-apple-pay","title":"Unregister domain for Apple Pay","use":"a","href":"#unregister-domain-apple-pay","options":{"method":"post"}}]},{"id":"/docs/api/merchant/2023-09-01#tag-other","title":"Other","use":"a","href":"#tag-other","items":[{"id":"/docs/api/merchant/2023-09-01#register-address-validation-endpoint","title":"Register address validation endpoint for Fast checkout","use":"a","href":"#register-address-validation-endpoint","options":{"method":"post"}},{"id":"/docs/api/merchant/2023-09-01#retrieve-synchronous-webhook-list","title":"Retrieve a synchronous webhook list","use":"a","href":"#retrieve-synchronous-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/2023-09-01#delete-synchronous-webhook","title":"Delete a synchronous webhook","use":"a","href":"#delete-synchronous-webhook","options":{"method":"delete"}}]}],"versions":[{"label":"2026-04-20","path":"/docs/api/merchant","latest":true},{"label":"2026-03-12","path":"/docs/api/merchant/2026-03-12","latest":false},{"label":"2025-12-04","path":"/docs/api/merchant/2025-12-04","latest":false},{"label":"2025-10-16","path":"/docs/api/merchant/2025-10-16","latest":false},{"label":"2024-09-01","path":"/docs/api/merchant/2024-09-01","latest":false},{"label":"2024-05-01","path":"/docs/api/merchant/2024-05-01","latest":false},{"label":"2023-09-01","path":"/docs/api/merchant/2023-09-01","latest":false},{"label":"Legacy","path":"/docs/api/merchant/Legacy","latest":false}]},"/docs/api/merchant/Legacy":{"items":[{"id":"/docs/api/merchant/Legacy#tag-orders","title":"Orders","use":"a","href":"#tag-orders","items":[{"id":"/docs/api/merchant/Legacy#create-order-deprecated","title":"Create an order (Deprecated)","use":"a","href":"#create-order-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#retrieve-order-list-deprecated","title":"Retrieve an order list (Deprecated)","use":"a","href":"#retrieve-order-list-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#retrieve-order-deprecated","title":"Retrieve an order (Deprecated)","use":"a","href":"#retrieve-order-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#update-order-deprecated","title":"Update an order (Deprecated)","use":"a","href":"#update-order-deprecated","options":{"method":"patch"}},{"id":"/docs/api/merchant/Legacy#capture-order-deprecated","title":"Capture an order (Deprecated)","use":"a","href":"#capture-order-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#cancel-order-deprecated","title":"Cancel an order (Deprecated)","use":"a","href":"#cancel-order-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#refund-order-deprecated","title":"Refund an order (Deprecated)","use":"a","href":"#refund-order-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#pay-order","title":"Pay for an order","use":"a","href":"#pay-order","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#retrieve-payment-list","title":"Retrieve payment list of an order","use":"a","href":"#retrieve-payment-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant/Legacy#tag-customers","title":"Customers","use":"a","href":"#tag-customers","items":[{"id":"/docs/api/merchant/Legacy#create-customer-deprecated","title":"Create a customer (Deprecated)","use":"a","href":"#create-customer-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#retrieve-all-customers-deprecated","title":"Retrieve a customer list (Deprecated)","use":"a","href":"#retrieve-all-customers-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#retrieve-customer-deprecated","title":"Retrieve a customer (Deprecated)","use":"a","href":"#retrieve-customer-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#update-customer-deprecated","title":"Update a customer (Deprecated)","use":"a","href":"#update-customer-deprecated","options":{"method":"patch"}},{"id":"/docs/api/merchant/Legacy#delete-customer-deprecated","title":"Delete a customer (Deprecated)","use":"a","href":"#delete-customer-deprecated","options":{"method":"delete"}},{"id":"/docs/api/merchant/Legacy#retrieve-all-payment-methods-deprecated","title":"Retrieve all payment methods of a customer (Deprecated)","use":"a","href":"#retrieve-all-payment-methods-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#retrieve-payment-method-deprecated","title":"Retrieve a customer's payment method (Deprecated)","use":"a","href":"#retrieve-payment-method-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#update-payment-method-deprecated","title":"Update a customer's payment method (Deprecated)","use":"a","href":"#update-payment-method-deprecated","options":{"method":"patch"}},{"id":"/docs/api/merchant/Legacy#delete-payment-method-deprecated","title":"Delete a customer's payment method (Deprecated)","use":"a","href":"#delete-payment-method-deprecated","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/Legacy#tag-payments","title":"Payments","use":"a","href":"#tag-payments","items":[{"id":"/docs/api/merchant/Legacy#retrieve-payment-details","title":"Retrieve payment details","use":"a","href":"#retrieve-payment-details","options":{"method":"get"}}]},{"id":"/docs/api/merchant/Legacy#tag-report-runs","title":"Report runs","use":"a","href":"#tag-report-runs","items":[{"id":"/docs/api/merchant/Legacy#create-report-run","title":"Create a report run","use":"a","href":"#create-report-run","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#retrieve-report-run","title":"Retrieve a report run","use":"a","href":"#retrieve-report-run","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#download-report-file","title":"Download report file","use":"a","href":"#download-report-file","options":{"method":"get"}}]},{"id":"/docs/api/merchant/Legacy#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/merchant/Legacy#create-webhook-deprecated","title":"Create a webhook (Deprecated)","use":"a","href":"#create-webhook-deprecated","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#retrieve-all-webhooks-deprecated","title":"Retrieve a webhook list (Deprecated)","use":"a","href":"#retrieve-all-webhooks-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#retrieve-webhook-deprecated","title":"Retrieve a webhook (Deprecated)","use":"a","href":"#retrieve-webhook-deprecated","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#update-webhook-deprecated","title":"Update a webhook (Deprecated)","use":"a","href":"#update-webhook-deprecated","options":{"method":"put"}},{"id":"/docs/api/merchant/Legacy#delete-webhook-deprecated","title":"Delete a webhook (Deprecated)","use":"a","href":"#delete-webhook-deprecated","options":{"method":"delete"}},{"id":"/docs/api/merchant/Legacy#rotate-webhook-signing-secret-deprecated","title":"Rotate a webhook signing secret (Deprecated)","use":"a","href":"#rotate-webhook-signing-secret-deprecated","options":{"method":"post"}}]},{"id":"/docs/api/merchant/Legacy#tag-locations","title":"Locations","use":"a","href":"#tag-locations","items":[{"id":"/docs/api/merchant/Legacy#create-location","title":"Create a location","use":"a","href":"#create-location","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#retrieve-location-list","title":"Retrieve location list","use":"a","href":"#retrieve-location-list","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#retrieve-location","title":"Retrieve a location","use":"a","href":"#retrieve-location","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#update-location","title":"Update a location","use":"a","href":"#update-location","options":{"method":"patch"}},{"id":"/docs/api/merchant/Legacy#delete-location","title":"Delete a location","use":"a","href":"#delete-location","options":{"method":"delete"}}]},{"id":"/docs/api/merchant/Legacy#tag-apple-pay-merchant-registration","title":"Apple Pay merchant registration","use":"a","href":"#tag-apple-pay-merchant-registration","items":[{"id":"/docs/api/merchant/Legacy#register-domain-apple-pay","title":"Register domain for Apple Pay","use":"a","href":"#register-domain-apple-pay","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#unregister-domain-apple-pay","title":"Unregister domain for Apple Pay","use":"a","href":"#unregister-domain-apple-pay","options":{"method":"post"}}]},{"id":"/docs/api/merchant/Legacy#tag-other","title":"Other","use":"a","href":"#tag-other","items":[{"id":"/docs/api/merchant/Legacy#register-address-validation-endpoint","title":"Register address validation endpoint for Fast checkout","use":"a","href":"#register-address-validation-endpoint","options":{"method":"post"}},{"id":"/docs/api/merchant/Legacy#retrieve-synchronous-webhook-list","title":"Retrieve a synchronous webhook list","use":"a","href":"#retrieve-synchronous-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant/Legacy#delete-synchronous-webhook","title":"Delete a synchronous webhook","use":"a","href":"#delete-synchronous-webhook","options":{"method":"delete"}}]}],"versions":[{"label":"2026-04-20","path":"/docs/api/merchant","latest":true},{"label":"2026-03-12","path":"/docs/api/merchant/2026-03-12","latest":false},{"label":"2025-12-04","path":"/docs/api/merchant/2025-12-04","latest":false},{"label":"2025-10-16","path":"/docs/api/merchant/2025-10-16","latest":false},{"label":"2024-09-01","path":"/docs/api/merchant/2024-09-01","latest":false},{"label":"2024-05-01","path":"/docs/api/merchant/2024-05-01","latest":false},{"label":"2023-09-01","path":"/docs/api/merchant/2023-09-01","latest":false},{"label":"Legacy","path":"/docs/api/merchant/Legacy","latest":false}]},"/docs/api/merchant":{"items":[{"id":"/docs/api/merchant#tag-orders","title":"Orders","use":"a","href":"#tag-orders","items":[{"id":"/docs/api/merchant#create-order","title":"Create an order","use":"a","href":"#create-order","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-order-list","title":"Retrieve an order list","use":"a","href":"#retrieve-order-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-order","title":"Retrieve an order","use":"a","href":"#retrieve-order","options":{"method":"get"}},{"id":"/docs/api/merchant#update-order","title":"Update an order","use":"a","href":"#update-order","options":{"method":"patch"}},{"id":"/docs/api/merchant#increment-authorisation","title":"Increment authorisation","use":"a","href":"#increment-authorisation","options":{"method":"post"}},{"id":"/docs/api/merchant#capture-order","title":"Capture an order","use":"a","href":"#capture-order","options":{"method":"post"}},{"id":"/docs/api/merchant#cancel-order","title":"Cancel an order","use":"a","href":"#cancel-order","options":{"method":"post"}},{"id":"/docs/api/merchant#refund-order","title":"Refund an order","use":"a","href":"#refund-order","options":{"method":"post"}},{"id":"/docs/api/merchant#pay-order","title":"Pay for an order","use":"a","href":"#pay-order","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-payment-list","title":"Retrieve payment list of an order","use":"a","href":"#retrieve-payment-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant#tag-customers","title":"Customers","use":"a","href":"#tag-customers","items":[{"id":"/docs/api/merchant#create-customer","title":"Create a customer","use":"a","href":"#create-customer","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-customer-list","title":"Retrieve a customer list","use":"a","href":"#retrieve-customer-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-customer","title":"Retrieve a customer","use":"a","href":"#retrieve-customer","options":{"method":"get"}},{"id":"/docs/api/merchant#update-customer","title":"Update a customer","use":"a","href":"#update-customer","options":{"method":"patch"}},{"id":"/docs/api/merchant#delete-customer","title":"Delete a customer","use":"a","href":"#delete-customer","options":{"method":"delete"}},{"id":"/docs/api/merchant#retrieve-payment-method-list","title":"Retrieve payment method list of a customer","use":"a","href":"#retrieve-payment-method-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-payment-method","title":"Retrieve a customer's payment method","use":"a","href":"#retrieve-payment-method","options":{"method":"get"}},{"id":"/docs/api/merchant#update-payment-method","title":"Update a customer's payment method","use":"a","href":"#update-payment-method","options":{"method":"patch"}},{"id":"/docs/api/merchant#delete-payment-method","title":"Delete a customer's payment method","use":"a","href":"#delete-payment-method","options":{"method":"delete"}}]},{"id":"/docs/api/merchant#tag-payments","title":"Payments","use":"a","href":"#tag-payments","items":[{"id":"/docs/api/merchant#retrieve-payment-details","title":"Retrieve payment details","use":"a","href":"#retrieve-payment-details","options":{"method":"get"}}]},{"id":"/docs/api/merchant#tag-subscriptions","title":"Subscriptions","use":"a","href":"#tag-subscriptions","items":[{"id":"/docs/api/merchant#create-subscription-plan","title":"Create a subscription plan","use":"a","href":"#create-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-subscription-plan-list","title":"Retrieve a subscription plan list","use":"a","href":"#retrieve-subscription-plan-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-subscription-plan","title":"Retrieve a subscription plan","use":"a","href":"#retrieve-subscription-plan","options":{"method":"get"}},{"id":"/docs/api/merchant#create-subscription","title":"Create a subscription","use":"a","href":"#create-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-subscription-list","title":"Retrieve a subscription list","use":"a","href":"#retrieve-subscription-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-subscription","title":"Retrieve a subscription","use":"a","href":"#retrieve-subscription","options":{"method":"get"}},{"id":"/docs/api/merchant#update-subscription","title":"Update a subscription","use":"a","href":"#update-subscription","options":{"method":"patch"}},{"id":"/docs/api/merchant#change-subscription-plan","title":"Change a subscription plan","use":"a","href":"#change-subscription-plan","options":{"method":"post"}},{"id":"/docs/api/merchant#update-subscription-renewal-date","title":"Update a subscription renewal date","use":"a","href":"#update-subscription-renewal-date","options":{"method":"post"}},{"id":"/docs/api/merchant#cancel-subscription","title":"Cancel a subscription","use":"a","href":"#cancel-subscription","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-subscription-cycle-list","title":"Retrieve a subscription cycle list","use":"a","href":"#retrieve-subscription-cycle-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-subscription-cycle","title":"Retrieve a subscription cycle","use":"a","href":"#retrieve-subscription-cycle","options":{"method":"get"}},{"id":"/docs/api/merchant#create-subscription-usage","title":"Create a subscription usage","use":"a","href":"#create-subscription-usage","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-subscription-usage-list","title":"Retrieve a subscription usage list","use":"a","href":"#retrieve-subscription-usage-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-subscription-usage","title":"Retrieve a subscription usage","use":"a","href":"#retrieve-subscription-usage","options":{"method":"get"}},{"id":"/docs/api/merchant#update-subscription-usage","title":"Update a subscription usage","use":"a","href":"#update-subscription-usage","options":{"method":"patch"}},{"id":"/docs/api/merchant#delete-subscription-usage","title":"Delete a subscription usage","use":"a","href":"#delete-subscription-usage","options":{"method":"delete"}}]},{"id":"/docs/api/merchant#tag-payouts","title":"Payouts","use":"a","href":"#tag-payouts","items":[{"id":"/docs/api/merchant#retrieve-payout-list","title":"Retrieve a payout list","use":"a","href":"#retrieve-payout-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-payout","title":"Retrieve a payout","use":"a","href":"#retrieve-payout","options":{"method":"get"}}]},{"id":"/docs/api/merchant#tag-disputes","title":"Disputes","use":"a","href":"#tag-disputes","items":[{"id":"/docs/api/merchant#retrieve-dispute-list","title":"Retrieve a dispute list","use":"a","href":"#retrieve-dispute-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-dispute","title":"Retrieve a dispute","use":"a","href":"#retrieve-dispute","options":{"method":"get"}},{"id":"/docs/api/merchant#accept-dispute","title":"Accept a dispute","use":"a","href":"#accept-dispute","options":{"method":"post"}},{"id":"/docs/api/merchant#upload-dispute-evidence","title":"Upload evidence for a dispute","use":"a","href":"#upload-dispute-evidence","options":{"method":"post"}},{"id":"/docs/api/merchant#challenge-dispute","title":"Challenge a dispute","use":"a","href":"#challenge-dispute","options":{"method":"post"}}]},{"id":"/docs/api/merchant#tag-report-runs","title":"Report runs","use":"a","href":"#tag-report-runs","items":[{"id":"/docs/api/merchant#create-report-run","title":"Create a report run","use":"a","href":"#create-report-run","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-report-run","title":"Retrieve a report run","use":"a","href":"#retrieve-report-run","options":{"method":"get"}},{"id":"/docs/api/merchant#download-report-file","title":"Download report file","use":"a","href":"#download-report-file","options":{"method":"get"}}]},{"id":"/docs/api/merchant#tag-webhooks","title":"Webhooks","use":"a","href":"#tag-webhooks","items":[{"id":"/docs/api/merchant#create-webhook","title":"Create a webhook","use":"a","href":"#create-webhook","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-webhook-list","title":"Retrieve a webhook list","use":"a","href":"#retrieve-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-webhook","title":"Retrieve a webhook","use":"a","href":"#retrieve-webhook","options":{"method":"get"}},{"id":"/docs/api/merchant#update-webhook","title":"Update a webhook","use":"a","href":"#update-webhook","options":{"method":"patch"}},{"id":"/docs/api/merchant#delete-webhook","title":"Delete a webhook","use":"a","href":"#delete-webhook","options":{"method":"delete"}},{"id":"/docs/api/merchant#rotate-webhook-signing-secret","title":"Rotate a webhook signing secret","use":"a","href":"#rotate-webhook-signing-secret","options":{"method":"post"}}]},{"id":"/docs/api/merchant#tag-locations","title":"Locations","use":"a","href":"#tag-locations","items":[{"id":"/docs/api/merchant#create-location","title":"Create a location","use":"a","href":"#create-location","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-location-list","title":"Retrieve location list","use":"a","href":"#retrieve-location-list","options":{"method":"get"}},{"id":"/docs/api/merchant#retrieve-location","title":"Retrieve a location","use":"a","href":"#retrieve-location","options":{"method":"get"}},{"id":"/docs/api/merchant#update-location","title":"Update a location","use":"a","href":"#update-location","options":{"method":"patch"}},{"id":"/docs/api/merchant#delete-location","title":"Delete a location","use":"a","href":"#delete-location","options":{"method":"delete"}}]},{"id":"/docs/api/merchant#tag-terminals","title":"Terminals","use":"a","href":"#tag-terminals","items":[{"id":"/docs/api/merchant#retrieve-terminal-list","title":"Retrieve terminal list","use":"a","href":"#retrieve-terminal-list","options":{"method":"get"}}]},{"id":"/docs/api/merchant#tag-payment-intents","title":"Payment intents","use":"a","href":"#tag-payment-intents","items":[{"id":"/docs/api/merchant#create-payment-intent","title":"Create a payment intent","use":"a","href":"#create-payment-intent","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-payment-intent","title":"Retrieve a payment intent","use":"a","href":"#retrieve-payment-intent","options":{"method":"get"}},{"id":"/docs/api/merchant#cancel-payment-intent","title":"Cancel a payment intent","use":"a","href":"#cancel-payment-intent","options":{"method":"post"}}]},{"id":"/docs/api/merchant#tag-apple-pay-merchant-registration","title":"Apple Pay merchant registration","use":"a","href":"#tag-apple-pay-merchant-registration","items":[{"id":"/docs/api/merchant#register-domain-apple-pay","title":"Register domain for Apple Pay","use":"a","href":"#register-domain-apple-pay","options":{"method":"post"}},{"id":"/docs/api/merchant#unregister-domain-apple-pay","title":"Unregister domain for Apple Pay","use":"a","href":"#unregister-domain-apple-pay","options":{"method":"post"}}]},{"id":"/docs/api/merchant#tag-other","title":"Other","use":"a","href":"#tag-other","items":[{"id":"/docs/api/merchant#register-address-validation-endpoint","title":"Register address validation endpoint for Fast checkout","use":"a","href":"#register-address-validation-endpoint","options":{"method":"post"}},{"id":"/docs/api/merchant#retrieve-synchronous-webhook-list","title":"Retrieve a synchronous webhook list","use":"a","href":"#retrieve-synchronous-webhook-list","options":{"method":"get"}},{"id":"/docs/api/merchant#delete-synchronous-webhook","title":"Delete a synchronous webhook","use":"a","href":"#delete-synchronous-webhook","options":{"method":"delete"}}]}],"versions":[{"label":"2026-04-20","path":"/docs/api/merchant","latest":true},{"label":"2026-03-12","path":"/docs/api/merchant/2026-03-12","latest":false},{"label":"2025-12-04","path":"/docs/api/merchant/2025-12-04","latest":false},{"label":"2025-10-16","path":"/docs/api/merchant/2025-10-16","latest":false},{"label":"2024-09-01","path":"/docs/api/merchant/2024-09-01","latest":false},{"label":"2024-05-01","path":"/docs/api/merchant/2024-05-01","latest":false},{"label":"2023-09-01","path":"/docs/api/merchant/2023-09-01","latest":false},{"label":"Legacy","path":"/docs/api/merchant/Legacy","latest":false}]},"/docs/api/open-banking":{"items":[{"id":"/docs/api/open-banking#tag-applications","title":"Applications","use":"a","href":"#tag-applications","items":[{"id":"/docs/api/open-banking#get-distinguished-name","title":"Get a distinguished name (DN)","use":"a","href":"#get-distinguished-name","options":{"method":"get"}},{"id":"/docs/api/open-banking#register-application","title":"Register an application","use":"a","href":"#register-application","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-application","title":"Get an application","use":"a","href":"#get-application","options":{"method":"get"}},{"id":"/docs/api/open-banking#update-application","title":"Update an application","use":"a","href":"#update-application","options":{"method":"put"}},{"id":"/docs/api/open-banking#delete-application","title":"Delete an application","use":"a","href":"#delete-application","options":{"method":"delete"}}]},{"id":"/docs/api/open-banking#tag-accounts","title":"Accounts","use":"a","href":"#tag-accounts","items":[{"id":"/docs/api/open-banking#create-account-access-consents","title":"Create an account access consent","use":"a","href":"#create-account-access-consents","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-account-access-consents-consent-id","title":"Retrieve an account access consent","use":"a","href":"#get-account-access-consents-consent-id","options":{"method":"get"}},{"id":"/docs/api/open-banking#delete-account-access-consents-consent-id","title":"Delete an account access consent","use":"a","href":"#delete-account-access-consents-consent-id","options":{"method":"delete"}},{"id":"/docs/api/open-banking#get-accounts","title":"Retrieve all accounts","use":"a","href":"#get-accounts","options":{"method":"get"}},{"id":"/docs/api/open-banking#get-accounts-account-id","title":"Retrieve an account","use":"a","href":"#get-accounts-account-id","options":{"method":"get"}},{"id":"/docs/api/open-banking#get-accounts-account-id-balances","title":"Retrieve an account balance","use":"a","href":"#get-accounts-account-id-balances","options":{"method":"get"}},{"id":"/docs/api/open-banking#get-accounts-account-id-beneficiaries","title":"Retrieve all account's beneficiaries","use":"a","href":"#get-accounts-account-id-beneficiaries","options":{"method":"get"}}]},{"id":"/docs/api/open-banking#tag-transactions","title":"Transactions","use":"a","href":"#tag-transactions","items":[{"id":"/docs/api/open-banking#get-accounts-account-id-direct-debits","title":"Retrieve all account's direct debits","use":"a","href":"#get-accounts-account-id-direct-debits","options":{"method":"get"}},{"id":"/docs/api/open-banking#get-accounts-account-id-standing-orders","title":"Retrieve all account's standing orders","use":"a","href":"#get-accounts-account-id-standing-orders","options":{"method":"get"}},{"id":"/docs/api/open-banking#get-accounts-account-id-transactions","title":"Retrieve all transactions","use":"a","href":"#get-accounts-account-id-transactions","options":{"method":"get"}}]},{"id":"/docs/api/open-banking#tag-domestic-payment","title":"Domestic payment","use":"a","href":"#tag-domestic-payment","items":[{"id":"/docs/api/open-banking#create-domestic-payment-consents","title":"Create a domestic payment consent","use":"a","href":"#create-domestic-payment-consents","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-domestic-payment-consents-consent-id","title":"Retrieve a domestic payment consent","use":"a","href":"#get-domestic-payment-consents-consent-id","options":{"method":"get"}},{"id":"/docs/api/open-banking#get-domestic-payment-consents-consent-id-funds-confirmation","title":"Get funds confirmation for a domestic payment consent","use":"a","href":"#get-domestic-payment-consents-consent-id-funds-confirmation","options":{"method":"get"}},{"id":"/docs/api/open-banking#create-domestic-payments","title":"Create a domestic payment","use":"a","href":"#create-domestic-payments","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-domestic-payments-domestic-payment-id","title":"Retrieve a domestic payment","use":"a","href":"#get-domestic-payments-domestic-payment-id","options":{"method":"get"}}]},{"id":"/docs/api/open-banking#tag-domestic-scheduled-payment","title":"Domestic scheduled payment","use":"a","href":"#tag-domestic-scheduled-payment","items":[{"id":"/docs/api/open-banking#create-domestic-scheduled-payment-consents","title":"Create a domestic scheduled payment consent","use":"a","href":"#create-domestic-scheduled-payment-consents","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-domestic-scheduled-payment-consents-consent-id","title":"Retrieve a domestic scheduled payment consent","use":"a","href":"#get-domestic-scheduled-payment-consents-consent-id","options":{"method":"get"}},{"id":"/docs/api/open-banking#create-domestic-scheduled-payments","title":"Create a domestic scheduled payment","use":"a","href":"#create-domestic-scheduled-payments","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-domestic-scheduled-payments-domestic-scheduled-payment-id","title":"Retrieve a domestic scheduled payment","use":"a","href":"#get-domestic-scheduled-payments-domestic-scheduled-payment-id","options":{"method":"get"}}]},{"id":"/docs/api/open-banking#tag-domestic-standing-order","title":"Domestic standing order","use":"a","href":"#tag-domestic-standing-order","items":[{"id":"/docs/api/open-banking#create-domestic-standing-order-consents","title":"Create a domestic standing order consent","use":"a","href":"#create-domestic-standing-order-consents","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-domestic-standing-order-consents-consent-id","title":"Retrieve a domestic standing order consent","use":"a","href":"#get-domestic-standing-order-consents-consent-id","options":{"method":"get"}},{"id":"/docs/api/open-banking#create-domestic-standing-orders","title":"Create a domestic standing order","use":"a","href":"#create-domestic-standing-orders","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-domestic-standing-orders-domestic-standing-order-id","title":"Retrieve a domestic standing order","use":"a","href":"#get-domestic-standing-orders-domestic-standing-order-id","options":{"method":"get"}}]},{"id":"/docs/api/open-banking#tag-file-payment","title":"File payment","use":"a","href":"#tag-file-payment","items":[{"id":"/docs/api/open-banking#create-file-payment-consents","title":"Create a file payment consent","use":"a","href":"#create-file-payment-consents","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-file-payment-consents-consent-id-file","title":"Retrieve an uploaded payment file","use":"a","href":"#get-file-payment-consents-consent-id-file","options":{"method":"get"}},{"id":"/docs/api/open-banking#create-file-payment-consents-consent-id-file","title":"Upload a payment file","use":"a","href":"#create-file-payment-consents-consent-id-file","options":{"method":"post"}},{"id":"/docs/api/open-banking#create-file-payments","title":"Create a file payment","use":"a","href":"#create-file-payments","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-file-payments-file-payment-id","title":"Retrieve a file payment","use":"a","href":"#get-file-payments-file-payment-id","options":{"method":"get"}},{"id":"/docs/api/open-banking#get-file-payments-file-payment-id-report-file","title":"Retrieve all payments of a file payment","use":"a","href":"#get-file-payments-file-payment-id-report-file","options":{"method":"get"}}]},{"id":"/docs/api/open-banking#tag-international-payment","title":"International payment","use":"a","href":"#tag-international-payment","items":[{"id":"/docs/api/open-banking#create-international-payment-consents","title":"Create an international payment consent","use":"a","href":"#create-international-payment-consents","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-international-payment-consents-consent-id","title":"Retrieve an international payment consent","use":"a","href":"#get-international-payment-consents-consent-id","options":{"method":"get"}},{"id":"/docs/api/open-banking#get-international-payment-consents-consent-id-funds-confirmation","title":"Get funds confirmation for an international payment consent","use":"a","href":"#get-international-payment-consents-consent-id-funds-confirmation","options":{"method":"get"}},{"id":"/docs/api/open-banking#create-international-payments","title":"Create an international payment","use":"a","href":"#create-international-payments","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-international-payments-international-payment-id","title":"Retrieve an international payment","use":"a","href":"#get-international-payments-international-payment-id","options":{"method":"get"}}]},{"id":"/docs/api/open-banking#tag-international-scheduled-payment","title":"International scheduled payment","use":"a","href":"#tag-international-scheduled-payment","items":[{"id":"/docs/api/open-banking#create-international-scheduled-payment-consents","title":"Create an international scheduled payment consent","use":"a","href":"#create-international-scheduled-payment-consents","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-international-scheduled-payment-consents-consent-id","title":"Retrieve an international scheduled payment consent","use":"a","href":"#get-international-scheduled-payment-consents-consent-id","options":{"method":"get"}},{"id":"/docs/api/open-banking#get-international-scheduled-payment-consents-consent-id-funds-confirmation","title":"Get funds confirmation for an international scheduled payment","use":"a","href":"#get-international-scheduled-payment-consents-consent-id-funds-confirmation","options":{"method":"get"}},{"id":"/docs/api/open-banking#create-international-scheduled-payments","title":"Create an international scheduled payment","use":"a","href":"#create-international-scheduled-payments","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-international-scheduled-payments-international-scheduled-payment-id","title":"Retrieve an international scheduled payment","use":"a","href":"#get-international-scheduled-payments-international-scheduled-payment-id","options":{"method":"get"}}]},{"id":"/docs/api/open-banking#tag-international-standing-order","title":"International standing order","use":"a","href":"#tag-international-standing-order","items":[{"id":"/docs/api/open-banking#create-international-standing-order-consents","title":"Create an international standing order consent","use":"a","href":"#create-international-standing-order-consents","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-international-standing-order-consents-consent-id","title":"Retrieve an international standing order consent","use":"a","href":"#get-international-standing-order-consents-consent-id","options":{"method":"get"}},{"id":"/docs/api/open-banking#create-international-standing-orders","title":"Create an international standing order","use":"a","href":"#create-international-standing-orders","options":{"method":"post"}},{"id":"/docs/api/open-banking#get-international-standing-orders-international-standing-order-id","title":"Retrieve an international standing order","use":"a","href":"#get-international-standing-orders-international-standing-order-id","options":{"method":"get"}}]},{"id":"/docs/api/open-banking#tag-draft-payment","title":"Draft payment","use":"a","href":"#tag-draft-payment","items":[{"id":"/docs/api/open-banking#list-draft-payment","title":"List draft payments","use":"a","href":"#list-draft-payment","options":{"method":"get"}},{"id":"/docs/api/open-banking#create-draft-payment","title":"Create a draft payment","use":"a","href":"#create-draft-payment","options":{"method":"post"}},{"id":"/docs/api/open-banking#delete-draft-payment-transfer","title":"Delete a draft payment transfer","use":"a","href":"#delete-draft-payment-transfer","options":{"method":"delete"}},{"id":"/docs/api/open-banking#find-draft-payment","title":"Retrieve a draft payment","use":"a","href":"#find-draft-payment","options":{"method":"get"}},{"id":"/docs/api/open-banking#delete-draft-payment","title":"Delete a draft payment","use":"a","href":"#delete-draft-payment","options":{"method":"delete"}}]},{"id":"/docs/api/open-banking#tag-untagged","title":"Untagged","use":"a","href":"#tag-untagged","items":[{"id":"/docs/api/open-banking#get-file-payment-consents-consent-id","title":"Retrieve a file payment consent","use":"a","href":"#get-file-payment-consents-consent-id","options":{"method":"get"}}]}],"versions":"$undefined"},"/docs/api/revolut-wallet-callbacks":{"items":[{"id":"/docs/api/revolut-wallet-callbacks#tag-transaction-outcomes","title":"Transaction outcomes","use":"a","href":"#tag-transaction-outcomes","items":[{"id":"/docs/api/revolut-wallet-callbacks#search-transaction-outcomes","title":"Fetch transaction outcomes for a transaction","use":"a","href":"#search-transaction-outcomes","options":{"method":"post"}}]},{"id":"/docs/api/revolut-wallet-callbacks#tag-passes","title":"Passes","use":"a","href":"#tag-passes","items":[{"id":"/docs/api/revolut-wallet-callbacks#fetch-pass","title":"Retrieve a pass","use":"a","href":"#fetch-pass","options":{"method":"get"}}]}],"versions":"$undefined"},"/docs/api/revolut-wallet-partner":{"items":[{"id":"/docs/api/revolut-wallet-partner#tag-passes","title":"Passes","use":"a","href":"#tag-passes","items":[{"id":"/docs/api/revolut-wallet-partner#create-pass","title":"Create a pass","use":"a","href":"#create-pass","options":{"method":"post"}},{"id":"/docs/api/revolut-wallet-partner#push-pass-update","title":"Update a pass","use":"a","href":"#push-pass-update","options":{"method":"put"}}]}],"versions":"$undefined"},"/docs/api/revolut-x-crypto-exchange":{"items":[{"id":"/docs/api/revolut-x-crypto-exchange#tag-public-market-data","title":"Public market data","use":"a","href":"#tag-public-market-data","items":[{"id":"/docs/api/revolut-x-crypto-exchange#get-order-book-public","title":"Get order book","use":"a","href":"#get-order-book-public","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-tickers-public","title":"Get tickers","use":"a","href":"#get-tickers-public","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-candles-public","title":"Get OHLCV candles","use":"a","href":"#get-candles-public","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-trade-history-public","title":"Get trade history","use":"a","href":"#get-trade-history-public","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-currencies-public","title":"Get currencies","use":"a","href":"#get-currencies-public","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-currency-pairs-public","title":"Get currency pairs","use":"a","href":"#get-currency-pairs-public","options":{"method":"get"}}]},{"id":"/docs/api/revolut-x-crypto-exchange#tag-market-data","title":"Market data","use":"a","href":"#tag-market-data","items":[{"id":"/docs/api/revolut-x-crypto-exchange#get-order-book","title":"Get order book","use":"a","href":"#get-order-book","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-tickers","title":"Get tickers","use":"a","href":"#get-tickers","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-candles","title":"Get OHLCV candles","use":"a","href":"#get-candles","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-trade-history","title":"Get trade history","use":"a","href":"#get-trade-history","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-currencies","title":"Get currencies","use":"a","href":"#get-currencies","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-currency-pairs","title":"Get currency pairs","use":"a","href":"#get-currency-pairs","options":{"method":"get"}}]},{"id":"/docs/api/revolut-x-crypto-exchange#tag-account-data","title":"Account data","use":"a","href":"#tag-account-data","items":[{"id":"/docs/api/revolut-x-crypto-exchange#get-all-balances","title":"Get balances","use":"a","href":"#get-all-balances","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-active-orders","title":"Get active orders","use":"a","href":"#get-active-orders","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-historical-orders","title":"Get historical orders","use":"a","href":"#get-historical-orders","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-order","title":"Get order by ID","use":"a","href":"#get-order","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-order-fills","title":"Get fills of order by ID","use":"a","href":"#get-order-fills","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-private-trades","title":"Get account trades","use":"a","href":"#get-private-trades","options":{"method":"get"}}]},{"id":"/docs/api/revolut-x-crypto-exchange#tag-trading","title":"Trading","use":"a","href":"#tag-trading","items":[{"id":"/docs/api/revolut-x-crypto-exchange#place-order","title":"Place order","use":"a","href":"#place-order","options":{"method":"post"}},{"id":"/docs/api/revolut-x-crypto-exchange#cancel-all-orders","title":"Cancel all active orders","use":"a","href":"#cancel-all-orders","options":{"method":"delete"}},{"id":"/docs/api/revolut-x-crypto-exchange#cancel-order","title":"Cancel order by ID","use":"a","href":"#cancel-order","options":{"method":"delete"}},{"id":"/docs/api/revolut-x-crypto-exchange#replace-order","title":"Replace order","use":"a","href":"#replace-order","options":{"method":"put"}}]},{"id":"/docs/api/revolut-x-crypto-exchange#tag-deprecated","title":"Deprecated","use":"a","href":"#tag-deprecated","items":[{"id":"/docs/api/revolut-x-crypto-exchange#get-last-trades-deprecated","title":"Get last trades (deprecated)","use":"a","href":"#get-last-trades-deprecated","options":{"method":"get"}},{"id":"/docs/api/revolut-x-crypto-exchange#get-public-order-book-deprecated","title":"Get order book (deprecated)","use":"a","href":"#get-public-order-book-deprecated","options":{"method":"get"}}]}],"versions":"$undefined"}},"alphaByPath":{}},"children":["$undefined","$L4","$L5"]}]}]}]]}]} 4:[["$","title",null,{"children":"Prepare and validate a transfer: full workflow | Developer"}],["$","meta",null,{"property":"og:title","content":"Prepare and validate a transfer: full workflow | Developer"}],"$undefined",["$","meta",null,{"name":"keywords","content":"prepare,validate,transfer,transfers,payment,payments,counterparties,counterparty fields,transfer fields,indicative quote,field requirements,conditionally available fields,supported countries,full flow,workflow"}],["$","meta",null,{"property":"og:url","content":"https://developer.revolut.com/docs/guides/manage-accounts/transfers/prepare-and-validate-transfers"}],[["$","meta",null,{"property":"og:image","content":"https://developer.revolut.com/_assets/og/docs/guides/manage-accounts/transfers/prepare-and-validate-transfers.png"}],["$","meta",null,{"property":"og:image:width","content":"1200"}],["$","meta",null,{"property":"og:image:height","content":"630"}],["$","meta",null,{"property":"og:image:type","content":"image/png"}],["$","meta",null,{"name":"twitter:card","content":"summary_large_image"}]],["$","$L6",null,{"children":["$","div",null,{"data-variant":"default","data-has-feed":true,"data-revpress":"layout","className":"wp3eky1","children":[["$","$L7",null,{"actions":"$undefined"}],["$","$L8",null,{}],[["$","main",null,{"data-variant":"$undefined","className":"_12jbm4g0","children":[["$","nav",null,{"className":"e43y4a0","data-event-key":"breadcrumbs","children":["$","ol",null,{"className":"e43y4a1","children":[["$","li","/-0",{"className":"e43y4a2","children":["$","$L3",null,{"className":"e43y4a3","to":"/","children":"Home"}]}],["$","li","Manage Accounts-1",{"className":"e43y4a2","children":"Manage Accounts"}],["$","li","Transfers-2",{"className":"e43y4a2","children":"Transfers"}],["$","li","Prepare and validate transfers-3",{"className":"e43y4a2","children":null}]]}]}],["$","div",null,{"className":"_10qzu533","children":[[["$","div",null,{"className":"nizrjz0","children":[["$","h1",null,{"className":"nizrjz2","children":"Prepare and validate a transfer: full workflow"}],["$","div",null,{"className":"nizrjz1","children":"$undefined"}]]}],["$","$L9",null,{"url":"/docs/guides/manage-accounts/transfers/prepare-and-validate-transfers.md"}],"$La"],["$","div",null,{"className":"_10qzu534","children":["$","$Lb",null,{"toc":[{"title":"Example use cases","titleParts":"$undefined","url":"#example-use-cases","depth":2},{"title":"The full flow","titleParts":"$undefined","url":"#the-full-flow","depth":2},{"title":"1. Check supported countries and currencies","titleParts":"$undefined","url":"#1-check-supported-countries-and-currencies","depth":2},{"title":"2. Check counterparty field requirements","titleParts":"$undefined","url":"#2-check-counterparty-field-requirements","depth":2},{"title":"3. Prepare a counterparty","titleParts":"$undefined","url":"#3-prepare-a-counterparty","depth":2},{"title":"Add a new counterparty","titleParts":"$undefined","url":"#add-a-new-counterparty","depth":3},{"title":"Retrieve an existing counterparty","titleParts":"$undefined","url":"#retrieve-an-existing-counterparty","depth":3},{"title":"Counterparty ID","titleParts":"$undefined","url":"#counterparty-id","depth":4},{"title":"Payment method ID","titleParts":"$undefined","url":"#payment-method-id","depth":4},{"title":"Update a counterparty's address","titleParts":"$undefined","url":"#update-a-counterpartys-address","depth":3},{"title":"4. Check transfer field requirements","titleParts":"$undefined","url":"#4-check-transfer-field-requirements","depth":2},{"title":"Build the request payload","titleParts":"$undefined","url":"#build-the-request-payload","depth":3},{"title":"Check the field requirements","titleParts":"$undefined","url":"#check-the-field-requirements","depth":3},{"title":"5. Get an indicative quote","titleParts":"$undefined","url":"#5-get-an-indicative-quote","depth":2},{"title":"6. Make the payment","titleParts":"$undefined","url":"#6-make-the-payment","depth":2},{"title":"Build the payment payload","titleParts":"$undefined","url":"#build-the-payment-payload","depth":3},{"title":"Make the payment","titleParts":"$undefined","url":"#make-the-payment","depth":3},{"title":"Automate the flow","titleParts":"$undefined","url":"#automate-the-flow","depth":2},{"title":"1. Create a new counterparty and make a transfer","titleParts":"$undefined","url":"#1-create-a-new-counterparty-and-make-a-transfer","depth":3},{"title":"2. Make a transfer to an existing counterparty","titleParts":"$undefined","url":"#2-make-a-transfer-to-an-existing-counterparty","depth":3},{"title":"3. Interactive: add or fetch a counterparty, then prepare, validate, and make a transfer","titleParts":"$undefined","url":"#3-interactive-add-or-fetch-a-counterparty-then-prepare-validate-and-make-a-transfer","depth":3},{"title":"What's next","titleParts":"$undefined","url":"#whats-next","depth":2}]}]}]]}],"$Lc","$Ld","$Le"]}],"$Lf"],"$L10"]}]}]] 5:["$","footer",null,{"className":"_19k157u0","children":["$","div",null,{"className":"_19k157u1","children":[["$","div",null,{"className":"_19k157u2","children":[["$","img",null,{"data-revpress-display":"light","className":"_19k157u8","src":"https://storage.googleapis.com/revolut-prod-apps_cdn/Brand/Retail/Logos/Wordmark/Revolut_Black.svg","alt":"Revolut"}],["$","img",null,{"data-revpress-display":"dark","className":"_19k157u8","src":"https://storage.googleapis.com/revolut-prod-apps_cdn/Brand/Retail/Logos/Wordmark/Revolut_White.svg","alt":"Revolut"}],[["$","div","0",{"className":"_19k157u4","children":[["$","span",null,{"className":"_19k157u3","children":"Company and products"}],[["$","$L3","0",{"className":"_19k157u5","to":"https://revolut.com/","children":"Discover Revolut"}],["$","$L3","1",{"className":"_19k157u5","to":"https://www.revolut.com/careers/","children":"Join the team!"}],["$","$L3","2",{"className":"_19k157u5","to":"mailto:api-requests@revolut.com","children":"Email us for API support"}]]]}],["$","div","1",{"className":"_19k157u4","children":[["$","span",null,{"className":"_19k157u3","children":"Build Banking Apps"}],[["$","$L3","0",{"className":"_19k157u5","to":"/docs/guides/build-banking-apps/introduction-to-the-open-banking-api/introduction","children":"Documentation"}],["$","$L3","1",{"className":"_19k157u5","to":"/docs/api/open-banking","children":"Open Banking API"}],["$","$L3","2",{"className":"_19k157u5","to":"/docs/guides/build-banking-apps/api-metrics","children":"API Status"}],["$","$L3","3",{"className":"_19k157u5","to":"https://developer.revolut.com/portal/signup","children":"Developer Portal"}],["$","$L3","4",{"className":"_19k157u5","to":"mailto:api-requests@revolut.com","children":"Request Sandbox access"}]]]}],["$","div","2",{"className":"_19k157u4","children":[["$","span",null,{"className":"_19k157u3","children":"Manage Accounts"}],[["$","$L3","0",{"className":"_19k157u5","to":"/docs/guides/manage-accounts/introduction","children":"Documentation"}],["$","$L3","1",{"className":"_19k157u5","to":"/docs/api/business","children":"Business API"}]]]}],["$","div","3",{"className":"_19k157u4","children":[["$","span",null,{"className":"_19k157u3","children":"Accept Payments"}],[["$","$L3","0",{"className":"_19k157u5","to":"/docs/guides/merchant/introduction","children":"Documentation"}],["$","$L3","1",{"className":"_19k157u5","to":"/docs/api/merchant","children":"Merchant API"}],["$","$L3","2",{"className":"_19k157u5","to":"/docs/sdks/merchant-web-sdk/introduction","children":"Merchant Web SDKs"}],["$","$L3","3",{"className":"_19k157u5","to":"/docs/sdks/merchant-ios-sdk/introduction","children":"Merchant iOS SDKs"}],["$","$L3","4",{"className":"_19k157u5","to":"/docs/sdks/merchant-android-sdk/introduction","children":"Merchant Android SDKs"}]]]}],["$","div","4",{"className":"_19k157u4","children":[["$","span",null,{"className":"_19k157u3","children":"In-person Payments"}],[["$","$L3","0",{"className":"_19k157u5","to":"/docs/guides/merchant/accept-payments/in-person-payments/introduction","children":"Documentation"}],["$","$L3","1",{"className":"_19k157u5","to":"/docs/guides/merchant/accept-payments/in-person-payments/pos/introduction","children":"Revolut POS"}],["$","$L3","2",{"className":"_19k157u5","to":"https://apps.apple.com/gb/app/revolut-pos/id1604861598","children":"Download the Revolut POS app"}],["$","$L3","3",{"className":"_19k157u5","to":"/docs/guides/merchant/accept-payments/in-person-payments/reader/introduction","children":"Revolut Reader"}],["$","$L3","4",{"className":"_19k157u5","to":"/docs/guides/merchant/accept-payments/in-person-payments/terminal/introduction","children":"Revolut Terminal"}]]]}]]]}],["$","div",null,{"data-has-links":true,"className":"_19k157u6","children":[["$","p",null,{"className":"_19k157u7","children":["© Revolut Ltd ",2026]}],[["$","p","0",{"className":"_19k157u7","children":"If you would like to find out more about which Revolut entity you receive services from, or if you have any other questions, please reach out to us via the in-app chat in the Revolut app. Revolut Ltd (No. 08804411) is authorised by the Financial Conduct Authority under the Electronic Money Regulations 2011 (Firm Reference 900562). Registered address: 30 South Colonnade, Canary Wharf, London, England, E14 5HX. Insurance related-products are arranged by Revolut Travel Ltd which is authorised by the Financial Conduct Authority to undertake insurance distribution activities (FCA No: 780586) and by Revolut Ltd, an Appointed Representative of Revolut Travel Ltd in relation to insurance distribution activities. Trading and investment products are provided by Revolut Trading Ltd (No. 832790) is wholly owned subsidiary of Revolut Ltd and is an appointed representative of Resolution Compliance Ltd which is authorised and regulated by the Financial Conduct Authority."}],"$L11","$L12"]]}]]}]}] c:["$","$L13",null,{}] d:["$","$L14","Prepare and validate a transfer: full workflow",{}] e:["$","div",null,{"className":"gdnlim0","role":"navigation","data-event-key":"bottom_nav","children":[["$","$L15",null,{"data-shortcut":"[","data-rtl":"$undefined","useIcon":"NavigationBack","use":"$3","to":"/docs/guides/manage-accounts/transfers/payment-drafts","className":"gdnlim1","children":["$","$L16",null,{"className":"gdnlim2","children":[["$","$L17",null,{"data-rtl":"$undefined","className":"gdnlim3","children":"Payment drafts"}],["$","$L18",null,{"children":"Previous"}]]}]}],["$","$L15",null,{"data-shortcut":"]","data-rtl":true,"useIcon":"NavigationForward","use":"$3","to":"/docs/guides/manage-accounts/exchange-money","className":"gdnlim1","children":["$","$L16",null,{"className":"gdnlim2","children":[["$","$L17",null,{"data-rtl":true,"className":"gdnlim3","children":"Foreign exchange"}],["$","$L18",null,{"children":"Next"}]]}]}]]}] f:["$","$L19",null,{"children":[["$","$L1a",null,{"toc":"$4:6:props:children:props:children:2:0:props:children:1:props:children:1:props:children:props:toc"}],false]}] 10:["$","div",null,{"className":"wp3eky0","children":["$","$L1b",null,{}]}] 11:["$","p","1",{"className":"_19k157u7","children":"We are also registered with the Financial Conduct Authority to offer cryptocurrency services under the Money Laundering, Terrorist Financing and Transfer of Funds (Information on the Payer) Regulations 2017."}] 12:["$","p","2",{"className":"_19k157u7","children":"Revolut's commodities service is not regulated by the FCA."}] a:["$","article",null,{"className":"_8qmzte0","children":["$","$L1c","docs/guides/manage-accounts/transfers/prepare-and-validate-transfers.md",{"fallback":["$","$L1d",null,{"my":"auto","mx":"auto","width":"100%","maxWidth":500,"children":["$","$L1e",null,{"children":[["$","$L1f",null,{"icon":"ExclamationTriangle"}],["$","$L20",null,{"children":"Content could not be rendered"}],["$","$L21",null,{"maxWidth":320,"children":[null,["$","div",null,{"children":"This content is unavailable."}]]}]]}]}],"children":[null,"\n",["$","p",null,{"children":"When making transfers to different countries, currencies, or recipient types (bank accounts, Revolut accounts, or cards), the fields you need to provide – both for creating counterparties and for making the payment itself – vary depending on the destination."}],"\n",["$","p",null,{"children":"Checking first, before you make the transfer, avoids errors and lets you preview costs and delivery time before committing.\nThis guide walks you through the full flow, linking to dedicated guides for endpoint details."}],"\n",["$","h2",null,{"id":"example-use-cases","children":["Example use cases",["$","$L22",null,{"id":"example-use-cases"}]]}],"\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":"Your business uses an internal dashboard to manage salary payments across regions, and needs to create counterparties with the right details before paying invoices"}],"\n",["$","li",null,{"children":"You build a vendor onboarding flow that validates recipient details and previews transfer costs before approval"}],"\n"]}],"\n",["$","h2",null,{"id":"the-full-flow","children":["The full flow",["$","$L22",null,{"id":"the-full-flow"}]]}],"\n",["$","p",null,{"children":["$","strong",null,{"children":"To prepare and validate a transfer, follow these steps:"}]}],"\n",["$","ol",null,{"children":["\n",["$","li",null,{"children":[["$","a",null,{"href":"#1-check-supported-countries-and-currencies","children":"Check supported countries and currencies"}],": Verify that the destination is supported."]}],"\n",["$","li",null,{"children":[["$","a",null,{"href":"#2-check-counterparty-field-requirements","children":"Check counterparty field requirements"}],": Discover which fields are available and required to create a counterparty."]}],"\n",["$","li",null,{"children":[["$","a",null,{"href":"#3-prepare-a-counterparty","children":"Prepare a counterparty"}],": Create or retrieve the counterparty."]}],"\n",["$","li",null,{"children":[["$","a",null,{"href":"#4-check-transfer-field-requirements","children":"Check transfer field requirements"}],": Discover which fields are available and required for the transfer."]}],"\n",["$","li",null,{"children":[["$","a",null,{"href":"#5-get-an-indicative-quote","children":"Get an indicative quote"}],": See the expected fees, exchange rate, and delivery time."]}],"\n",["$","li",null,{"children":[["$","a",null,{"href":"#6-make-the-payment","children":"Make the payment"}],": Execute the transfer."]}],"\n"]}],"\n",["$","div",null,{"data-type":"note","className":"_25vm6y0","children":[["$","div",null,{"className":"_25vm6y1","children":["$","$L23",null,{"name":"InfoOutline","color":"var(--rui-color-grey-tone-50)","inline":true}]}],["$","div",null,{"className":"_25vm6y2","children":"Examples in this guide"}],["$","div",null,{"className":"_25vm6y3","children":[["$","p",null,{"children":"We'll follow five examples throughout this guide:"}],["$","ul",null,{"children":["\n",["$","li",null,{"children":["🇬🇧 ",["$","strong",null,{"children":"GB/GBP"}],": A domestic transfer to a UK business bank account"]}],"\n",["$","li",null,{"children":["🇩🇪 ",["$","strong",null,{"children":"DE/EUR"}],": A cross-currency SWIFT transfer to a German business bank account"]}],"\n",["$","li",null,{"children":["🇺🇸 ",["$","strong",null,{"children":"US/USD"}],": A cross-currency transfer to a US business bank account"]}],"\n",["$","li",null,{"children":[["$","$L23",null,{"name":"LogoRevolut","inline":"true"}]," ",["$","strong",null,{"children":"Revolut"}],": A transfer to a Revolut business account (instant, no fees)"]}],"\n",["$","li",null,{"children":["💳 ",["$","strong",null,{"children":"Card"}],": A transfer to a saved card"]}],"\n"]}],["$","p",null,{"children":["In all examples, we're adding a ",["$","code",null,{"children":"business"}]," counterparty."]}]]}]]}],"\n","$L24","\n","$L25","\n","$L26","\n","$L27","\n","$L28","\n","$L29","\n","$L2a","\n","$L2b","\n","$L2c","\n","$L2d","\n","$L2e","\n","$L2f","\n","$L30","\n","$L31","\n","$L32","\n","$L33","\n","$L34","\n","$L35","\n","$L36","\n","$L37","\n","$L38","\n","$L39","\n","$L3a","\n","$L3b","\n","$L3c","\n","$L3d","\n","$L3e","\n","$L3f","\n","$L40","\n","$L41","\n","$L42","\n","$L43","\n","$L44","\n","$L45","\n","$L46","\n","$L47","\n","$L48","\n","$L49","\n","$L4a","\n","$L4b","\n","$L4c","\n","$L4d","\n","$L4e","\n","$L4f","\n","$L50","\n","$L51","\n","$L52","\n","$L53","\n","$L54","\n","$L55","\n","$L56","\n","$L57","\n","$L58","\n","$L59","\n","$L5a","\n","$L5b","\n","$L5c","\n","$L5d","\n","$L5e","\n","$L5f","\n","$L60","\n","$L61","\n","$L62","\n","$L63","\n","$L64","\n","$L65","\n","$L66","\n","$L67","\n","$L68","\n","$L69","\n","$L6a","\n","$L6b","\n","$L6c","\n","$L6d","\n","$L6e","\n","$L6f","\n","$L70","\n","$L71"]}]}] 24:["$","h2",null,{"id":"1-check-supported-countries-and-currencies","children":["1. Check supported countries and currencies",["$","$L22",null,{"id":"1-check-supported-countries-and-currencies"}]]}] 25:["$","div",null,{"data-type":"note","className":"_25vm6y0","children":[["$","div",null,{"className":"_25vm6y1","children":["$","$L23",null,{"name":"InfoOutline","color":"var(--rui-color-grey-tone-50)","inline":true}]}],null,["$","div",null,{"className":"_25vm6y3","children":["$","p",null,{"children":["This step applies to external bank account counterparties.\n",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/counterparties/create-a-counterparty#add-a-revolut-counterparty","children":"Revolut counterparties"}]," are added via Revtag and don't require a country or currency.\n",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/card-transfers","children":"Card counterparties"}]," are created via ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/payout-links","children":"payout link"}]," and don't require a country or currency either."]}]}]]}] 26:["$","p",null,{"children":["To check which bank countries and currencies are supported, make a ",["$","code",null,{"children":"GET"}]," request to the ",["$","code",null,{"children":"/counterparties/countries"}]," endpoint."]}] 27:["$","p",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparty-countries","children":"See the API reference: Check supported countries and currencies"}]}] 28:["$","p",null,{"children":"As a response, you get all bank countries and their available currencies supported for counterparty creation for your business:"}] 2a:["$","p",null,{"children":"Check if your desired country and currency combination is supported before proceeding."}] 2b:["$","h2",null,{"id":"2-check-counterparty-field-requirements","children":["2. Check counterparty field requirements",["$","$L22",null,{"id":"2-check-counterparty-field-requirements"}]]}] 2c:["$","p",null,{"children":["Make a ",["$","code",null,{"children":"GET"}]," request to the ",["$","code",null,{"children":"/counterparties/fields"}]," endpoint with the ",["$","strong",null,{"children":"country"}],", ",["$","strong",null,{"children":"currency"}],", and ",["$","strong",null,{"children":"recipient type"}]," (",["$","code",null,{"children":"personal"}]," or ",["$","code",null,{"children":"business"}],") as query parameters to discover which fields are needed to create a counterparty for that destination."]}] 2d:["$","p",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparty-requirements","children":"See the API reference: Check counterparty field requirements"}]}] 2e:["$","p",null,{"children":["As a response, you get a ",["$","code",null,{"children":"fields"}]," array where each item describes a conditionally available field – whether it's required or optional – along with its validation rules and allowed values.\nAlways required fields (",["$","code",null,{"children":"bank_country"}],", ",["$","code",null,{"children":"currency"}],", and ",["$","code",null,{"children":"profile_type"}],") are intentionally excluded from the response."]}] 2f:["$","$L73",null,{"title":"Field object properties","children":[["$","p",null,{"children":"Each field object contains:"}],"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",["$","div",null,{"className":"eowryt0","children":["$","table",null,{"className":"eowryt1","children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Property","className":"eowryt6","ref":"$undefined"}],["$","th",null,{"children":"Description","className":"eowryt6","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}],"className":"eowryt2","ref":"$undefined"}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"name"}],"className":"eowryt7","ref":"$undefined"}],["$","td",null,{"children":["The name of the given field, matching the ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#add-counterparty","children":"Create a counterparty"}]," endpoint request body."],"className":"eowryt7","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"required"}],"className":"eowryt7","ref":"$undefined"}],["$","td",null,{"children":"Whether the field must be provided when creating the counterparty.","className":"eowryt7","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"regex"}],"className":"eowryt7","ref":"$undefined"}],["$","td",null,{"children":["Validation rules with a ",["$","code",null,{"children":"pattern"}]," and, in some cases, a human-readable ",["$","code",null,{"children":"description"}],"."],"className":"eowryt7","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"options"}],"className":"eowryt7","ref":"$undefined"}],["$","td",null,{"children":["Allowed values for the field, if applicable. Each option has a ",["$","code",null,{"children":"value"}]," and an optional ",["$","code",null,{"children":"default"}]," flag."],"className":"eowryt7","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}]],"className":"eowryt3","ref":"$undefined"}]]}]}]]}] 30:["$","$L74",null,{"children":["\n",["$","$L75",null,{"label":"🇬🇧 UK / GBP","sync":"true","children":["\n",["$","p",null,{"children":["For a UK business counterparty (",["$","code",null,{"children":"country=GB"}],", ",["$","code",null,{"children":"currency=GBP"}],", ",["$","code",null,{"children":"recipient_type=business"}],"), the response looks like this:"]}],"\n","$L76","\n",["$","p",null,{"children":["This means that to create a UK business counterparty with GBP as the currency, you must provide a ",["$","code",null,{"children":"company_name"}]," (3–255 characters), a ",["$","code",null,{"children":"sort_code"}]," (a 6-digit number), an ",["$","code",null,{"children":"account_no"}]," (an 8-digit number), and an ",["$","code",null,{"children":"address"}],"."]}],"\n"]}],"\n",["$","$L75",null,{"label":"🇩🇪 DE / EUR","sync":"true","children":["\n",["$","p",null,{"children":["For a German business counterparty (",["$","code",null,{"children":"country=DE"}],", ",["$","code",null,{"children":"currency=EUR"}],", ",["$","code",null,{"children":"recipient_type=business"}],"), the response looks like this:"]}],"\n","$L77","\n",["$","p",null,{"children":["This means that to create a German business counterparty with EUR as the currency, you must provide a ",["$","code",null,{"children":"company_name"}]," (3–255 characters) and an ",["$","code",null,{"children":"iban"}]," (in IBAN format).\nYou can optionally provide a ",["$","code",null,{"children":"bic"}]," (in BIC format) and an ",["$","code",null,{"children":"address"}],"."]}],"\n"]}],"\n",["$","$L75",null,{"label":"🇺🇸 US / USD","sync":"true","children":["\n",["$","p",null,{"children":["For a US business counterparty (",["$","code",null,{"children":"country=US"}],", ",["$","code",null,{"children":"currency=USD"}],", ",["$","code",null,{"children":"recipient_type=business"}],"), the response looks like this:"]}],"\n","$L78","\n",["$","p",null,{"children":["This means that to create a US business counterparty with USD as the currency, you must provide a ",["$","code",null,{"children":"company_name"}]," (3–255 characters), a ",["$","code",null,{"children":"route"}]," (",["$","code",null,{"children":"ach"}],", ",["$","code",null,{"children":"fedwire"}],", or ",["$","code",null,{"children":"bic"}],"), a ",["$","code",null,{"children":"routing_number"}]," (a 9-digit number), an ",["$","code",null,{"children":"account_no"}]," (6 to 17 digits), and an ",["$","code",null,{"children":"address"}],"."]}],"\n"]}],"\n",["$","$L75",null,{"label":"Revolut","sync":"true","children":["\n",["$","p",null,{"children":["Not applicable.\n",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/counterparties/create-a-counterparty#add-a-revolut-counterparty","children":"Revolut counterparties"}]," are added via Revtag and don't require field checking."]}],"\n"]}],"\n",["$","$L75",null,{"label":"💳 Card","sync":"true","children":["\n",["$","p",null,{"children":["Not applicable.\n",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/card-transfers","children":"Card counterparties"}]," are created via ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/payout-links","children":"payout link"}]," and don't require field checking."]}],"\n"]}],"\n"]}] 31:["$","p",null,{"children":["For more details and additional examples, see ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/counterparties/create-a-counterparty#check-counterparty-field-requirements","children":"Create a counterparty"}],"."]}] 32:["$","h2",null,{"id":"3-prepare-a-counterparty","children":["3. Prepare a counterparty",["$","$L22",null,{"id":"3-prepare-a-counterparty"}]]}] 33:["$","div",null,{"data-type":"tip","className":"_25vm6y0","children":[["$","div",null,{"className":"_25vm6y1","children":["$","$L23",null,{"name":"Lightbulb","color":"var(--rui-color-success)","inline":true}]}],null,["$","div",null,{"className":"_25vm6y3","children":["$","p",null,{"children":["Before creating or using a counterparty, consider ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/counterparties/confirmation-of-payee","children":"validating the recipient's account name (CoP/VoP)"}]," to confirm the name matches the bank's records."]}]}]]}] 34:["$","h3",null,{"id":"add-a-new-counterparty","children":["Add a new counterparty",["$","$L22",null,{"id":"add-a-new-counterparty"}]]}] 35:["$","p",null,{"children":["Combine the conditionally available fields from the ",["$","a",null,{"href":"#2-check-counterparty-field-requirements","children":"field requirements response"}]," with the always required fields (",["$","code",null,{"children":"bank_country"}],", ",["$","code",null,{"children":"currency"}],", and ",["$","code",null,{"children":"profile_type"}],")."]}] 36:["$","$L74",null,{"children":["\n",["$","$L75",null,{"label":"🇬🇧 UK / GBP","sync":"true","children":["\n","$L79","\n"]}],"\n",["$","$L75",null,{"label":"🇩🇪 DE / EUR","sync":"true","children":["\n","$L7a","\n"]}],"\n",["$","$L75",null,{"label":"🇺🇸 US / USD","sync":"true","children":["\n","$L7b","\n"]}],"\n",["$","$L75",null,{"label":"Revolut","sync":"true","children":["\n",["$","p",null,{"children":["Revolut counterparties are added via ",["$","a",null,{"href":"https://help.revolut.com/help/transfers/internal-transfers/username-payments/revtags/","target":"_blank","rel":"noreferrer","children":"Revtag"}]," – no country, currency, or field requirements needed."]}],"\n","$L7c","\n"]}],"\n",["$","$L75",null,{"label":"💳 Card","sync":"true","children":["\n",["$","p",null,{"children":["Card counterparties are created when a recipient redeems a ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/payout-links","children":"payout link"}],".\nSee ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/card-transfers","children":"Card transfers"}]," for the full flow.\nOnce saved, the counterparty appears in your list with a ",["$","code",null,{"children":"cards"}]," array – retrieve it as described in ",["$","a",null,{"href":"#retrieve-an-existing-counterparty","children":"Retrieve an existing counterparty"}]," below."]}],"\n"]}],"\n"]}] 37:["$","p",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#add-counterparty","children":"See the API reference: Create a counterparty"}]}] 38:["$","p",null,{"children":["When you create or retrieve a counterparty, the response includes the counterparty ",["$","code",null,{"children":"id"}],", an ",["$","code",null,{"children":"accounts"}]," array and/or a ",["$","code",null,{"children":"cards"}]," array, if applicable.\nEach entry in these arrays is a ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/counterparties/update-counterparty-payment-method#what-is-a-payment-method","children":"payment method"}]," with its own ",["$","code",null,{"children":"id"}],"."]}] 39:["$","$L74",null,{"children":["\n",["$","$L75",null,{"label":"🇬🇧 UK / GBP","sync":"true","children":["\n","$L7d","\n",["$","p",null,{"children":["Save the counterparty ",["$","code",null,{"children":"id"}]," – you'll need it for the transfer."]}],"\n"]}],"\n",["$","$L75",null,{"label":"🇩🇪 DE / EUR","sync":"true","children":["\n","$L7e","\n",["$","p",null,{"children":["Save the counterparty ",["$","code",null,{"children":"id"}]," – you'll need it for the transfer."]}],"\n"]}],"\n",["$","$L75",null,{"label":"🇺🇸 US / USD","sync":"true","children":["\n","$L7f","\n",["$","p",null,{"children":["Save the counterparty ",["$","code",null,{"children":"id"}]," – you'll need it for the transfer."]}],"\n"]}],"\n",["$","$L75",null,{"label":"Revolut","sync":"true","children":["\n","$L80","\n",["$","p",null,{"children":["No ",["$","code",null,{"children":"accounts"}]," or ",["$","code",null,{"children":"cards"}]," array is returned – the ",["$","code",null,{"children":"counterparty_id"}]," alone is enough for the transfer."]}],"\n"]}],"\n",["$","$L75",null,{"label":"💳 Card","sync":"true","children":["\n",["$","p",null,{"children":["Not applicable – card counterparties are created via ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/payout-links","children":"payout link"}],".\nOnce the recipient redeems the link, the counterparty is saved automatically.\nRetrieve it as described in ",["$","a",null,{"href":"#retrieve-an-existing-counterparty","children":"Retrieve an existing counterparty"}]," below."]}],"\n"]}],"\n"]}] 3a:["$","h3",null,{"id":"retrieve-an-existing-counterparty","children":["Retrieve an existing counterparty",["$","$L22",null,{"id":"retrieve-an-existing-counterparty"}]]}] 3b:["$","h4",null,{"id":"counterparty-id","children":["Counterparty ID",["$","$L22",null,{"id":"counterparty-id"}]]}] 3c:["$","p",null,{"children":["You can ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/counterparties/retrieve-counterparties","children":"retrieve a list of your counterparties"}]," filtering by name and/or account number, and save the counterparty ",["$","code",null,{"children":"id"}]," from the response."]}] 3d:["$","h4",null,{"id":"payment-method-id","children":["Payment method ID",["$","$L22",null,{"id":"payment-method-id"}]]}] 3e:["$","p",null,{"children":["If the counterparty has multiple ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/counterparties/update-counterparty-payment-method#what-is-a-payment-method","children":"payment methods"}]," available (for example, 2 accounts, or 1 account and 1 card), you will also need the ID of the account or card to which you want to transfer the money in subsequent steps."]}] 3f:["$","ul",null,{"children":["\n",["$","li",null,{"children":["For ",["$","strong",null,{"children":"bank account"}]," and ",["$","strong",null,{"children":"Revolut"}]," counterparties, look in the ",["$","code",null,{"children":"accounts"}]," array for the account ",["$","code",null,{"children":"id"}],"."]}],"\n",["$","li",null,{"children":["For ",["$","strong",null,{"children":"card"}]," counterparties, look in the ",["$","code",null,{"children":"cards"}]," array for the card ",["$","code",null,{"children":"id"}],"."]}],"\n"]}] 40:["$","h3",null,{"id":"update-a-counterpartys-address","children":["Update a counterparty's address",["$","$L22",null,{"id":"update-a-counterpartys-address"}]]}] 41:["$","p",null,{"children":["Some payment rails may require a complete address for the recipient, including the ",["$","code",null,{"children":"region"}]," field.\nIf a counterparty was created without an address, or the address is incomplete, you can update the address for the specific ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/counterparties/update-counterparty-payment-method#what-is-a-payment-method","children":"payment method"}]," using the ",["$","code",null,{"children":"PATCH /counterparties/{counterparty_id}/payment-methods/{payment_method_id}"}]," endpoint."]}] 42:["$","div",null,{"data-type":"tip","className":"_25vm6y0","children":[["$","div",null,{"className":"_25vm6y1","children":["$","$L23",null,{"name":"Lightbulb","color":"var(--rui-color-success)","inline":true}]}],null,["$","div",null,{"className":"_25vm6y3","children":["$","p",null,{"children":["To get the ",["$","code",null,{"children":"payment_method_id"}],", ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparty","children":"retrieve the counterparty's details"}]," and find the ID of the relevant account or card in the response."]}]}]]}] 43:["$","$L74",null,{"children":["\n",["$","$L75",null,{"label":"🇬🇧 UK / GBP","sync":"true","children":["\n","$L81","\n"]}],"\n",["$","$L75",null,{"label":"🇩🇪 DE / EUR","sync":"true","children":["\n","$L82","\n"]}],"\n",["$","$L75",null,{"label":"🇺🇸 US / USD","sync":"true","children":["\n","$L83","\n"]}],"\n",["$","$L75",null,{"label":"Revolut","sync":"true","children":["\n",["$","p",null,{"children":"Not applicable – Revolut counterparties created via Revtag don't have a payment method ID to update."}],"\n"]}],"\n",["$","$L75",null,{"label":"💳 Card","sync":"true","children":["\n",["$","p",null,{"children":"Not applicable – the card payment method doesn't have an address."}],"\n"]}],"\n"]}] 44:["$","p",null,{"children":["The ",["$","code",null,{"children":"address"}]," object accepts the following fields: ",["$","code",null,{"children":"street_line1"}],", ",["$","code",null,{"children":"street_line2"}],", ",["$","code",null,{"children":"region"}],", ",["$","code",null,{"children":"city"}],", ",["$","code",null,{"children":"country"}],", and ",["$","code",null,{"children":"postcode"}],".\nThe ",["$","code",null,{"children":"country"}]," and ",["$","code",null,{"children":"postcode"}]," fields are required."]}] 45:["$","p",null,{"children":["A successful response returns ",["$","code",null,{"children":"204 No Content"}],", confirming the address was updated."]}] 46:["$","p",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#update-counterparty-payment-method","children":"See the API reference: Update a counterparty payment method"}]}] 47:["$","h2",null,{"id":"4-check-transfer-field-requirements","children":["4. Check transfer field requirements",["$","$L22",null,{"id":"4-check-transfer-field-requirements"}]]}] 48:["$","p",null,{"children":"Once you have your counterparty ID, check which fields are needed for the transfer to that destination."}] 49:["$","h3",null,{"id":"build-the-request-payload","children":["Build the request payload",["$","$L22",null,{"id":"build-the-request-payload"}]]}] 4a:["$","p",null,{"children":["To check transfer field requirements, you need your ",["$","strong",null,{"children":"account ID"}]," and the ",["$","strong",null,{"children":"counterparty ID"}]," (and the counterparty's ",["$","strong",null,{"children":"account ID"}]," or ",["$","strong",null,{"children":"card ID"}]," if they have multiple ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/counterparties/update-counterparty-payment-method#what-is-a-payment-method","children":"payment methods"}],")."]}] 4b:["$","div",null,{"data-type":"tip","className":"_25vm6y0","children":[["$","div",null,{"className":"_25vm6y1","children":["$","$L23",null,{"name":"Lightbulb","color":"var(--rui-color-success)","inline":true}]}],null,["$","div",null,{"className":"_25vm6y3","children":["$","ul",null,{"children":["\n",["$","li",null,{"children":["To find your account ID, ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-accounts","children":"retrieve your accounts"}]," and use the ",["$","code",null,{"children":"id"}]," from the response."]}],"\n",["$","li",null,{"children":["You can also ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-account-details","children":"retrieve your account's bank details"}]," to get the account name and address – useful for displaying a transfer summary before confirming the payment."]}],"\n"]}]}]]}] 4c:["$","$L74",null,{"children":["\n",["$","$L75",null,{"label":"🇬🇧 UK / GBP","sync":"true","children":["\n","$L84","\n"]}],"\n",["$","$L75",null,{"label":"🇩🇪 DE / EUR","sync":"true","children":["\n","$L85","\n"]}],"\n",["$","$L75",null,{"label":"🇺🇸 US / USD","sync":"true","children":["\n","$L86","\n"]}],"\n",["$","$L75",null,{"label":"Revolut","sync":"true","children":["\n","$L87","\n"]}],"\n",["$","$L75",null,{"label":"💳 Card","sync":"true","children":["\n","$L88","\n"]}],"\n"]}] 4d:["$","h3",null,{"id":"check-the-field-requirements","children":["Check the field requirements",["$","$L22",null,{"id":"check-the-field-requirements"}]]}] 4e:["$","p",null,{"children":["Make a ",["$","code",null,{"children":"POST"}]," request to the ",["$","code",null,{"children":"/pay/fields"}]," endpoint with the payload above."]}] 4f:["$","p",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-payment-requirements","children":"See the API reference: Check transfer field requirements"}]}] 50:["$","p",null,{"children":["As a response, you get a ",["$","code",null,{"children":"fields"}]," array where each item describes a conditionally available field for this transfer, indicating whether it's required or optional, along with its validation rules and allowed values."]}] 51:["$","$L73",null,{"title":"Field object properties","children":[["$","p",null,{"children":"Each field object contains:"}],"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",["$","div",null,{"className":"eowryt0","children":["$","table",null,{"className":"eowryt1","children":[["$","thead",null,{"children":["$","tr",null,{"children":[["$","th",null,{"children":"Property","className":"eowryt6","ref":"$undefined"}],["$","th",null,{"children":"Description","className":"eowryt6","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}],"className":"eowryt2","ref":"$undefined"}],["$","tbody",null,{"children":[["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"name"}],"className":"eowryt7","ref":"$undefined"}],["$","td",null,{"children":["The field name, matching the ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#create-payment","children":["$","code",null,{"children":"/pay"}]}]," endpoint request body."],"className":"eowryt7","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"required"}],"className":"eowryt7","ref":"$undefined"}],["$","td",null,{"children":"Whether the field must be provided for this transfer.","className":"eowryt7","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"validation"}],"className":"eowryt7","ref":"$undefined"}],["$","td",null,{"children":["Validation rules such as ",["$","code",null,{"children":"min_length"}],", ",["$","code",null,{"children":"max_length"}],", and ",["$","code",null,{"children":"regex"}]," constraints."],"className":"eowryt7","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}],["$","tr",null,{"children":[["$","td",null,{"children":["$","code",null,{"children":"options"}],"className":"eowryt7","ref":"$undefined"}],["$","td",null,{"children":["Allowed values for the field, if applicable. Each option has a ",["$","code",null,{"children":"value"}]," and an optional ",["$","code",null,{"children":"default"}]," flag."],"className":"eowryt7","ref":"$undefined"}]],"className":"eowryt5","ref":"$undefined"}]],"className":"eowryt3","ref":"$undefined"}]]}]}]]}] 52:["$","$L74",null,{"children":["\n",["$","$L75",null,{"label":"🇬🇧 UK / GBP","sync":"true","children":["\n","$L89","\n",["$","p",null,{"children":["For a domestic GBP transfer to a UK counterparty, you must provide a ",["$","code",null,{"children":"reference"}]," of up to 140 characters.\nYou can optionally provide a ",["$","code",null,{"children":"charge_bearer"}]," – the default is ",["$","code",null,{"children":"shared"}],", meaning fees are split between sender and receiver, but you can also set it to ",["$","code",null,{"children":"debtor"}]," to charge all fees to the sender."]}],"\n"]}],"\n",["$","$L75",null,{"label":"🇩🇪 DE / EUR","sync":"true","children":["\n",["$","p",null,{"children":"For a cross-currency SWIFT payment to Germany:"}],"\n","$L8a","\n",["$","p",null,{"children":["For a cross-currency SWIFT transfer to a German counterparty, you must provide a ",["$","code",null,{"children":"reference"}]," of up to 140 characters.\nYou can optionally provide a ",["$","code",null,{"children":"charge_bearer"}]," – the default is ",["$","code",null,{"children":"shared"}],", meaning fees are split between sender and receiver, but you can also set it to ",["$","code",null,{"children":"debtor"}]," to charge all fees to the sender."]}],"\n"]}],"\n",["$","$L75",null,{"label":"🇺🇸 US / USD","sync":"true","children":["\n",["$","p",null,{"children":"For a cross-currency transfer to a US counterparty:"}],"\n","$L8b","\n",["$","p",null,{"children":["For a cross-currency transfer to a US counterparty, you must provide a ",["$","code",null,{"children":"reference"}]," of up to 140 characters.\nYou can optionally provide a ",["$","code",null,{"children":"charge_bearer"}]," – the default is ",["$","code",null,{"children":"shared"}],", meaning fees are split between sender and receiver, but you can also set it to ",["$","code",null,{"children":"debtor"}]," to charge all fees to the sender."]}],"\n"]}],"\n",["$","$L75",null,{"label":"Revolut","sync":"true","children":["\n","$L8c","\n",["$","p",null,{"children":["For a transfer to a Revolut counterparty, you must provide a ",["$","code",null,{"children":"reference"}]," of up to 140 characters."]}],"\n"]}],"\n",["$","$L75",null,{"label":"💳 Card","sync":"true","children":["\n","$L8d","\n",["$","p",null,{"children":["For a card transfer, you must provide a ",["$","code",null,{"children":"reference"}]," of up to 140 characters."]}],"\n"]}],"\n"]}] 53:["$","p",null,{"children":["For more details and additional examples, see ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/bank-transfers#check-transfer-field-requirements","children":"Bank transfers"}]," or ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/card-transfers#check-transfer-field-requirements","children":"Card transfers"}],"."]}] 54:["$","h2",null,{"id":"5-get-an-indicative-quote","children":["5. Get an indicative quote",["$","$L22",null,{"id":"5-get-an-indicative-quote"}]]}] 55:["$","p",null,{"children":["Make a ",["$","code",null,{"children":"POST"}]," request to the ",["$","code",null,{"children":"/pay/indicative-quote"}]," endpoint to preview the expected fees, exchange rate, and delivery time without committing to the transfer.\nProvide the same transfer details you would provide to the ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#create-payment","children":["$","code",null,{"children":"/pay"}]}]," endpoint (account ID, recipient, amount, currency), along with any required fields from ",["$","a",null,{"href":"#4-check-transfer-field-requirements","children":"step 4"}],".\nYou may also add any optional fields you want that you discovered in ",["$","a",null,{"href":"#4-check-transfer-field-requirements","children":"step 4"}],"."]}] 56:["$","p",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-indicative-quote","children":"See the API reference: Get an indicative quote"}]}] 57:["$","$L74",null,{"children":["\n",["$","$L75",null,{"label":"🇬🇧 UK / GBP","sync":"true","children":["\n",["$","p",null,{"children":"For a domestic GBP transfer of 1,000.00 from your GBP account:"}],"\n","$L8e","\n","$L8f","\n"]}],"\n",["$","$L75",null,{"label":"🇩🇪 DE / EUR","sync":"true","children":["\n",["$","p",null,{"children":"For a cross-currency transfer of 1,000.00 EUR from your GBP account:"}],"\n","$L90","\n","$L91","\n"]}],"\n",["$","$L75",null,{"label":"🇺🇸 US / USD","sync":"true","children":["\n",["$","p",null,{"children":"For a cross-currency transfer of 1,000.00 USD from your GBP account:"}],"\n","$L92","\n","$L93","\n"]}],"\n",["$","$L75",null,{"label":"Revolut","sync":"true","children":["\n",["$","p",null,{"children":"For a transfer of 1,000.00 GBP to a Revolut business account:"}],"\n","$L94","\n","$L95","\n"]}],"\n",["$","$L75",null,{"label":"💳 Card","sync":"true","children":["\n",["$","p",null,{"children":"For a card transfer of 1,000.00 GBP:"}],"\n","$L96","\n","$L97","\n"]}],"\n"]}] 58:["$","p",null,{"children":["For more details, see ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/bank-transfers#check-costs-and-delivery-time-before-paying","children":"Bank transfers"}]," or ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/card-transfers#check-costs-and-delivery-time-before-paying","children":"Card transfers"}],"."]}] 59:["$","div",null,{"data-type":"tip","className":"_25vm6y0","children":[["$","div",null,{"className":"_25vm6y1","children":["$","$L23",null,{"name":"Lightbulb","color":"var(--rui-color-success)","inline":true}]}],null,["$","div",null,{"className":"_25vm6y3","children":["$","p",null,{"children":["With all the information gathered – sender account details, counterparty details, and the indicative quote – you can present a human-readable transfer summary for review before executing the payment.\nThe sample scripts in the ",["$","a",null,{"href":"#automate-the-flow","children":"Automate the flow"}]," section show how to build and display this summary."]}]}]]}] 5a:["$","h2",null,{"id":"6-make-the-payment","children":["6. Make the payment",["$","$L22",null,{"id":"6-make-the-payment"}]]}] 5b:["$","p",null,{"children":["To execute the transfer, make a ",["$","code",null,{"children":"POST"}]," request to the ",["$","code",null,{"children":"/pay"}]," endpoint with the same details you used for the indicative quote, plus a unique ",["$","strong",null,{"children":["$","code",null,{"children":"request_id"}]}]," (UUID is recommended) for idempotency."]}] 5c:["$","ul",null,{"children":["\n",["$","li",null,{"children":["The always required fields are: ",["$","code",null,{"children":"request_id"}],", ",["$","code",null,{"children":"account_id"}],", ",["$","code",null,{"children":"receiver"}]," (with ",["$","code",null,{"children":"counterparty_id"}],"), ",["$","code",null,{"children":"amount"}],", and ",["$","code",null,{"children":"currency"}],"."]}],"\n",["$","li",null,{"children":["You must also provide a ",["$","code",null,{"children":"reference"}],", which is required for all example cases, as discovered in ",["$","a",null,{"href":"#4-check-transfer-field-requirements","children":"step 4"}],"."]}],"\n",["$","li",null,{"children":["Optionally, add any other fields you discovered in ",["$","a",null,{"href":"#4-check-transfer-field-requirements","children":"step 4"}],"."]}],"\n"]}] 5d:["$","h3",null,{"id":"build-the-payment-payload","children":["Build the payment payload",["$","$L22",null,{"id":"build-the-payment-payload"}]]}] 5e:["$","$L74",null,{"children":["\n",["$","$L75",null,{"label":"🇬🇧 UK / GBP","sync":"true","children":["\n","$L98","\n"]}],"\n",["$","$L75",null,{"label":"🇩🇪 DE / EUR","sync":"true","children":["\n","$L99","\n"]}],"\n",["$","$L75",null,{"label":"🇺🇸 US / USD","sync":"true","children":["\n","$L9a","\n"]}],"\n",["$","$L75",null,{"label":"Revolut","sync":"true","children":["\n","$L9b","\n"]}],"\n",["$","$L75",null,{"label":"💳 Card","sync":"true","children":["\n","$L9c","\n"]}],"\n"]}] 5f:["$","h3",null,{"id":"make-the-payment","children":["Make the payment",["$","$L22",null,{"id":"make-the-payment"}]]}] 60:["$","p",null,{"children":["For detailed instructions and example requests, see ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/bank-transfers#make-a-payment","children":"Bank transfers"}]," or ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/transfers/card-transfers#make-the-card-transfer","children":"Card transfers"}],"."]}] 61:["$","p",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#create-payment","children":"See the API reference: Create a transfer to another account or card"}]}] 62:["$","h2",null,{"id":"automate-the-flow","children":["Automate the flow",["$","$L22",null,{"id":"automate-the-flow"}]]}] 63:["$","p",null,{"children":"The method and end result will differ depending on your needs and implementation.\nTo give you an example of how to connect these steps, we provide sample Python scripts below."}] 64:["$","p",null,{"children":["The scripts use the standard-library ",["$","code",null,{"children":"uuid"}]," module and require the ",["$","a",null,{"href":"https://pypi.org/project/requests/","target":"_blank","rel":"noreferrer","children":["$","code",null,{"children":"requests"}]}]," library to be installed."]}] 65:["$","h3",null,{"id":"1-create-a-new-counterparty-and-make-a-transfer","children":["1. Create a new counterparty and make a transfer",["$","$L22",null,{"id":"1-create-a-new-counterparty-and-make-a-transfer"}]]}] 66:["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparty-countries","children":"Check supported countries and currencies"}]," and verify the destination is supported"]}],"\n",["$","li",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparty-requirements","children":"Check counterparty field requirements"}]}],"\n",["$","li",null,{"children":["Build the counterparty payload from the required and applicable fields, ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#validate-account-name","children":"validate the account name (CoP/VoP)"}],", ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#add-counterparty","children":"create the counterparty"}],", and extract the payment method details,"]}],"\n",["$","li",null,{"children":[["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-payment-requirements","children":"Check transfer field requirements"}],", ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-indicative-quote","children":"get an indicative quote for the transfer"}],", display a transfer summary, ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-account","children":"check the account balance"}],", ask for confirmation, and ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#create-payment","children":"execute the transfer"}]]}],"\n",["$","li",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-transaction","children":"Check the transaction status"}]}],"\n"]}] 67:["$","$L73",null,{"title":"Sample Python script 1: new counterparty","children":[["$","p",null,{"children":"Adjust the configuration variables at the top to match your setup."}],"$L9d","$L9e"]}] 68:["$","h3",null,{"id":"2-make-a-transfer-to-an-existing-counterparty","children":["2. Make a transfer to an existing counterparty",["$","$L22",null,{"id":"2-make-a-transfer-to-an-existing-counterparty"}]]}] 69:["$","ul",null,{"children":["\n",["$","li",null,{"children":[["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparty","children":"Retrieve the counterparty"}],", resolve the payment method (uses the provided one, defaults to the single available payment method, or asks for input)"]}],"\n",["$","li",null,{"children":[["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-payment-requirements","children":"Check transfer field requirements"}],", check and ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#update-counterparty-payment-method","children":"update the counterparty's address"}]," if needed"]}],"\n",["$","li",null,{"children":[["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-indicative-quote","children":"Get an indicative quote for the transfer"}],", display a transfer summary, ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-account","children":"check the account balance"}],", ask for confirmation, and ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#create-payment","children":"execute the transfer"}]]}],"\n",["$","li",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-transaction","children":"Check the transaction status"}]}],"\n"]}] 6a:["$","$L73",null,{"title":"Sample Python script 2: saved counterparty","children":[["$","p",null,{"children":"Adjust the configuration variables at the top to match your setup."}],"$L9f","$La0"]}] 6b:["$","h3",null,{"id":"3-interactive-add-or-fetch-a-counterparty-then-prepare-validate-and-make-a-transfer","children":["3. Interactive: add or fetch a counterparty, then prepare, validate, and make a transfer",["$","$L22",null,{"id":"3-interactive-add-or-fetch-a-counterparty-then-prepare-validate-and-make-a-transfer"}]]}] 6c:["$","ul",null,{"children":["\n",["$","li",null,{"children":["Choose to create a new counterparty or use an existing one\n",["$","ul",null,{"children":["\n",["$","li",null,{"children":["New: ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparty-countries","children":"check supported countries and currencies"}],", ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparty-requirements","children":"verify the destination"}],", build the payload, ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#validate-account-name","children":"validate the account name (CoP/VoP)"}],", and ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#add-counterparty","children":"create the counterparty"}]]}],"\n",["$","li",null,{"children":["Existing: ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparty","children":"retrieve the counterparty"}]," (enter ID or ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-counterparties","children":"get the list of counterparties"}]," and select from the list), optionally ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#validate-account-name","children":"validate the account name (CoP/VoP)"}]]}],"\n"]}],"\n"]}],"\n",["$","li",null,{"children":["Resolve the payment method, ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-payment-requirements","children":"check transfer field requirements"}]]}],"\n",["$","li",null,{"children":["Handle currency mismatches: ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-rate","children":"get the exchange rate"}]," of the original amount to the destination currency and either switch source account with FX-converted amount suggestion, or switch transfer currency with FX conversion"]}],"\n",["$","li",null,{"children":[["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-indicative-quote","children":"Get an indicative quote for the transfer"}],", display a transfer summary, ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-account","children":"check the account balance"}],", ask for confirmation, and ",["$","$L72",null,{"use":"$3","to":"/docs/api/business#create-payment","children":"execute the transfer"}]]}],"\n",["$","li",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/api/business#get-transaction","children":"Check the transaction status"}]}],"\n"]}] 6d:["$","$L73",null,{"title":"Sample Python script 3: interactive, extended flow ","children":[["$","p",null,{"children":"Interactive script that combines creating a new counterparty or using an existing one, with full validation and transfer flow.\nAsks the user at each step — no hardcoded counterparty data, account ID, or transfer details required.\nFor existing counterparties, offers a two-stage selection: enter the ID directly or browse the paginated list.\nFor the source account, offers the same two-stage selection: enter the ID or choose from the list of active accounts.\nHandles currency mismatches (switch source account with FX-converted amount suggestion, or switch transfer currency with FX conversion), multiple payment methods, and CoP/VoP validation for both new and existing counterparties."}],["$","p",null,{"children":"Each step is a separate function for clarity."}],["$","p",null,{"children":"Adjust the API URL and token at the top to match your setup."}],["$","p",null,{"children":"The script can be run interactively, or you can populate it with data before you run it.\nFor the second option, adjust the configuration variables at the top to match your setup."}],"$La1","$La2","$La3"]}] 6e:["$","h2",null,{"id":"whats-next","children":["What's next",["$","$L22",null,{"id":"whats-next"}]]}] 6f:["$","p",null,{"children":"Now that you've prepared, validated, and made your transaction, learn how to:"}] 70:["$","ul",null,{"children":["\n",["$","li",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/accounts-and-transactions/retrieve-transactions","children":"Retrieve your transaction data and check its details"}]}],"\n",["$","li",null,{"children":["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/accounts-and-transactions/map-transaction-data","children":"Map transaction data to a related transaction or card"}]}],"\n"]}] 71:["$","p",null,{"children":["See also how to ",["$","$L72",null,{"use":"$3","to":"/docs/guides/manage-accounts/use-cases/payouts-automation","children":"automate payouts at scale"}],"."]}] a5:T90f,
{
"countries": [
{ "country": "GB", "currencies": ["GBP"] },
{ "country": "US", "currencies": ["USD"] },
{ "country": "DE", "currencies": ["EUR"] }
]
}29:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$a5"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"countries\": [\n { \"country\": \"GB\", \"currencies\": [\"GBP\"] },\n { \"country\": \"US\", \"currencies\": [\"USD\"] },\n { \"country\": \"DE\", \"currencies\": [\"EUR\"] }\n ]\n}\n"}]}]]}]
a7:T17cb,{
"fields": [
{
"name": "company_name",
"required": true,
"regex": {
"pattern": "^.{3,255}$",
"description": "Beneficiary company name cannot be shorter than 3 characters and longer than 255 characters"
}
},
{
"name": "sort_code",
"required": true,
"regex": {
"pattern": "^\\d{6}$",
"description": "Must be a 6-digit number"
}
},
{
"name": "account_no",
"required": true,
"regex": {
"pattern": "^\\d{8}$",
"description": "Must be an 8-digit number"
}
},
{
"name": "address",
"required": true
}
]
}76:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$a7"}}]}]],"$La8"]}]
a9:T176e,{
"fields": [
{
"name": "company_name",
"required": true,
"regex": {
"pattern": "^.{3,255}$",
"description": "Beneficiary company name cannot be shorter than 3 characters and longer than 255 characters"
}
},
{
"name": "iban",
"required": true,
"regex": {
"pattern": "^[A-Z]{2}\\d{2}[A-Z0-9]{1,30}$",
"description": "IBAN format"
}
},
{
"name": "bic",
"required": false,
"regex": {
"pattern": "^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$",
"description": "BIC format"
}
},
{
"name": "address",
"required": false
}
]
}77:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$a9"}}]}]],"$Laa"]}]
ab:T20a1,{
"fields": [
{
"name": "company_name",
"required": true,
"regex": {
"pattern": "^.{3,255}$",
"description": "Beneficiary company name cannot be shorter than 3 characters and longer than 255 characters"
}
},
{
"name": "route",
"required": true,
"options": [
{ "value": "ach", "default": true },
{ "value": "fedwire" },
{ "value": "bic" }
]
},
{
"name": "routing_number",
"required": true,
"regex": {
"pattern": "^\\d{9}$",
"description": "Must be a 9-digit number"
}
},
{
"name": "account_no",
"required": true,
"regex": {
"pattern": "^\\d{6,17}$",
"description": "Must be between 6 and 17 digits long, numeric only"
}
},
{
"name": "address",
"required": true
}
]
}78:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ab"}}]}]],"$Lac"]}]
ad:T77f,{
"address": {
"street_line1": "350 Fifth Avenue",
"city": "New York",
"region": "NY",
"country": "US",
"postcode": "10118"
}
}83:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ad"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"address\": {\n \"street_line1\": \"350 Fifth Avenue\",\n \"city\": \"New York\",\n \"region\": \"NY\",\n \"country\": \"US\",\n \"postcode\": \"10118\"\n }\n}\n"}]}]]}]
ae:T47b,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "d4e5f6a7-b8c9-4012-def0-23456789012a"
}
}87:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ae"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"d4e5f6a7-b8c9-4012-def0-23456789012a\"\n }\n}\n"}]}]]}]
af:Te72,{
"fields": [
{
"name": "charge_bearer",
"required": false,
"options": [
{ "value": "shared", "default": true },
{ "value": "debtor" }
]
},
{
"name": "reference",
"required": true,
"validation": {
"max_length": 140
}
}
]
}89:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$af"}}]}]],"$Lb0"]}]
b1:Te72,{
"fields": [
{
"name": "reference",
"required": true,
"validation": {
"max_length": 140
}
},
{
"name": "charge_bearer",
"required": false,
"options": [
{ "value": "shared", "default": true },
{ "value": "debtor" }
]
}
]
}8a:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$b1"}}]}]],"$Lb2"]}]
b3:Te72,{
"fields": [
{
"name": "reference",
"required": true,
"validation": {
"max_length": 140
}
},
{
"name": "charge_bearer",
"required": false,
"options": [
{ "value": "shared", "default": true },
{ "value": "debtor" }
]
}
]
}8b:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$b3"}}]}]],"$Lb4"]}]
b5:T700,{
"fields": [
{
"name": "reference",
"required": true,
"validation": {
"max_length": 140
}
}
]
}8c:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$b5"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"fields\": [\n {\n \"name\": \"reference\",\n \"required\": true,\n \"validation\": {\n \"max_length\": 140\n }\n }\n ]\n}\n"}]}]]}]
b6:T700,{
"fields": [
{
"name": "reference",
"required": true,
"validation": {
"max_length": 140
}
}
]
}8d:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$b6"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"fields\": [\n {\n \"name\": \"reference\",\n \"required\": true,\n \"validation\": {\n \"max_length\": 140\n }\n }\n ]\n}\n"}]}]]}]
b7:Tcca,{
"amount": {
"amount": 1000.00,
"currency": "GBP"
},
"fee": {
"amount": 0,
"currency": "GBP"
},
"estimated_total": {
"amount": 1000.00,
"currency": "GBP"
},
"estimated_arrival": {
"date": "2026-07-02",
"speed": "in_seconds"
}
}8f:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$b7"}}]}]],"$Lb8"]}]
b9:T17de,{
"amount": {
"amount": 1000.00,
"currency": "EUR"
},
"fee": {
"amount": 5.75,
"currency": "GBP",
"breakdown": {
"transfer_fee": {
"amount": 3.00,
"currency": "GBP"
},
"exchange_fee": {
"amount": 2.75,
"currency": "GBP"
}
}
},
"estimated_total": {
"amount": 864.40,
"currency": "GBP"
},
"estimated_exchange_rate": "1.16458",
"estimated_amount_after_exchange": {
"amount": 858.65,
"currency": "GBP"
},
"estimated_arrival": {
"date": "2026-07-09",
"speed": "by_date"
}
}91:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$b9"}}]}]],"$Lba"]}]
bb:T17de,{
"amount": {
"amount": 1000.00,
"currency": "USD"
},
"fee": {
"amount": 6.50,
"currency": "GBP",
"breakdown": {
"transfer_fee": {
"amount": 4.00,
"currency": "GBP"
},
"exchange_fee": {
"amount": 2.50,
"currency": "GBP"
}
}
},
"estimated_total": {
"amount": 789.89,
"currency": "GBP"
},
"estimated_exchange_rate": "1.27650",
"estimated_amount_after_exchange": {
"amount": 783.39,
"currency": "GBP"
},
"estimated_arrival": {
"date": "2026-07-09",
"speed": "by_date"
}
}93:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$bb"}}]}]],"$Lbc"]}]
bd:T661,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "d4e5f6a7-b8c9-4012-def0-23456789012a"
},
"amount": 1000.00,
"currency": "GBP"
}94:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$bd"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"d4e5f6a7-b8c9-4012-def0-23456789012a\"\n },\n \"amount\": 1000.00,\n \"currency\": \"GBP\"\n}\n"}]}]]}]
be:Tcca,{
"amount": {
"amount": 1000.00,
"currency": "GBP"
},
"fee": {
"amount": 0,
"currency": "GBP"
},
"estimated_total": {
"amount": 1000.00,
"currency": "GBP"
},
"estimated_arrival": {
"date": "2026-07-02",
"speed": "in_seconds"
}
}95:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$be"}}]}]],"$Lbf"]}]
c0:Tcce,{
"amount": {
"amount": 1000.00,
"currency": "GBP"
},
"fee": {
"amount": 10.00,
"currency": "GBP"
},
"estimated_total": {
"amount": 1010.00,
"currency": "GBP"
},
"estimated_arrival": {
"date": "2026-07-02",
"speed": "in_seconds"
}
}97:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$c0"}}]}]],"$Lc1"]}]
c2:T263d9,import requests
import uuid
# =============================================
# Configuration: adjust these values as needed
# =============================================
API_URL = "https://b2b.revolut.com/api/1.0"
API_TOKEN = "YOUR_API_TOKEN" # Replace with your own token
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# Your account (the pocket you're sending from)
ACCOUNT_ID = "YOUR_ACCOUNT_ID" # Replace with your own account ID
# Destination details
COUNTRY = "GB" # Counterparty's bank country
CURRENCY = "GBP" # Counterparty's account currency
RECIPIENT_TYPE = "business" # "business" or "personal"
# Counterparty data — provide all fields that apply for your destination.
# The script will keep only the fields required by the API (discovered in step 3).
COUNTERPARTY_DATA = {
"company_name": "Example Vendor Ltd",
"account_no": "12345678",
"sort_code": "123456",
"address": {
"street_line1": "1 Canada Square",
"city": "London",
"region": "Greater London",
"country": "GB",
"postcode": "E14 5AB"
}
}
# Transfer details
AMOUNT = 1.23
REFERENCE = "Invoice #12345"
# =============================================
# Error handling
# =============================================
class ApiError(Exception):
pass
def check_response(response):
"""Print error details and raise ApiError if the response failed."""
if response.ok:
return
try:
error_data = response.json()
print(f"\nAPI Error (HTTP {response.status_code})")
print(f" Code: {error_data.get('code', 'N/A')}")
print(f" Message: {error_data.get('message', 'N/A')}")
print(f" Error ID: {error_data.get('error_id', 'N/A')}")
except Exception:
print(f"\nAPI Error (HTTP {response.status_code}): {response.text}")
raise ApiError(f"Request failed with status {response.status_code}")
# =============================================
# Print destination details
# =============================================
def print_destination_details(country, currency, recipient_type, counterparty_type):
"""Print a summary of the destination details."""
print("=" * 50)
print(f"DESTINATION: {country} / {currency}")
print(f"RECIPIENT TYPE: {recipient_type}")
print(f"COUNTERPARTY TYPE: {counterparty_type}")
print("=" * 50)
# =============================================
# Step 1: Check supported countries and currencies
# =============================================
def check_supported_countries():
"""GET /counterparties/countries — returns supported country/currency pairs."""
print("Checking supported countries and currencies...")
response = requests.get(f"{API_URL}/counterparties/countries", headers=HEADERS)
check_response(response)
data = response.json()
countries = data.get("countries", [])
print(f" Found {len(countries)} supported countries")
return countries
# =============================================
# Step 2: Verify the destination is supported
# =============================================
def verify_destination_supported(countries, country, currency):
"""Check if the desired country/currency combination is supported.
Returns True if supported, False otherwise.
"""
for entry in countries:
if entry.get("country") == country and currency in entry.get("currencies", []):
print(f" Destination {country}/{currency} is supported.")
return True
print(f" Destination {country}/{currency} is not supported.")
return False
# =============================================
# Step 3: Check counterparty field requirements
# =============================================
def check_counterparty_field_requirements(country, currency, recipient_type):
"""GET /counterparties/fields — returns required and applicable fields."""
print("Checking counterparty field requirements...")
params = {"country": country, "currency": currency, "recipient_type": recipient_type}
response = requests.get(f"{API_URL}/counterparties/fields", params=params, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
# =============================================
# Step 4: Build the counterparty payload
# =============================================
def build_counterparty_payload(field_requirements, country, currency, recipient_type, counterparty_data):
"""Combine always required fields with applicable fields from the requirements response.
Only fields present in the requirements response (or always required) are included.
Fields with no data (None) are dropped.
"""
payload = {
"profile_type": recipient_type,
"bank_country": country,
"currency": currency,
}
for field in field_requirements.get("fields", []):
name = field["name"]
if name in counterparty_data and counterparty_data[name] is not None:
payload[name] = counterparty_data[name]
# Group first_name/last_name into individual_name for personal counterparties
if recipient_type == "personal":
individual_name = {}
if "first_name" in payload:
individual_name["first_name"] = payload.pop("first_name")
if "last_name" in payload:
individual_name["last_name"] = payload.pop("last_name")
if individual_name:
payload["individual_name"] = individual_name
print(f" Counterparty payload fields: {list(payload.keys())}")
return payload
# =============================================
# Step 5: Validate the account name (CoP/VoP)
# =============================================
def build_cop_request(counterparty_data, country, currency, recipient_type):
"""Build the CoP request body based on the destination region.
Returns the request dict, or None if CoP is not available for this destination.
"""
request = {}
if recipient_type == "business":
request["company_name"] = counterparty_data.get("company_name")
else:
individual = counterparty_data.get("individual_name", {})
request["individual_name"] = {
"first_name": individual.get("first_name") or counterparty_data.get("first_name"),
"last_name": individual.get("last_name") or counterparty_data.get("last_name"),
}
if country == "GB" and currency == "GBP":
request["account_no"] = counterparty_data.get("account_no")
request["sort_code"] = counterparty_data.get("sort_code")
elif country == "AU" and currency == "AUD":
request["account_no"] = counterparty_data.get("account_no")
request["bsb"] = counterparty_data.get("bsb")
elif currency == "EUR" or (country == "RO" and currency == "RON"):
request["iban"] = counterparty_data.get("iban")
request["recipient_country"] = country
request["recipient_currency"] = currency
if counterparty_data.get("bic"):
request["bic"] = counterparty_data.get("bic")
else:
return None
return request
def validate_account_name(counterparty_data, country, currency, recipient_type):
"""POST /account-name-validation — validate the account name (CoP/VoP).
Returns True if the flow should proceed, False if it should stop.
"""
cop_request = build_cop_request(counterparty_data, country, currency, recipient_type)
if cop_request is None:
print("CoP/VoP is not available for this destination.")
return ask_to_proceed()
print("Validating account name (CoP/VoP)...")
try:
response = requests.post(f"{API_URL}/account-name-validation", json=cop_request, headers=HEADERS)
check_response(response)
except ApiError:
print(" CoP/VoP check failed.")
return ask_to_proceed()
result = response.json()
result_code = result.get("result_code")
print(f" Result: {result_code}")
if result_code in ("matched", "close_match"):
if result_code == "close_match":
if "company_name" in result:
print(f" Actual name: {result['company_name']}")
elif "individual_name" in result:
name = result["individual_name"]
print(f" Actual name: {name.get('first_name', '')} {name.get('last_name', '')}")
return True
if result_code == "not_matched":
print(" The account name does not match.")
return False
# cannot_be_checked or temporarily_unavailable
print(f" The check could not be completed (result: {result_code}).")
return ask_to_proceed()
def ask_to_proceed():
"""Ask the user whether to proceed after a non-blocking issue.
Returns True if the user wants to proceed, False otherwise.
"""
confirm = input("Proceed anyway? ([y]es/[n]o): ").strip().lower()
if confirm in ("y", "yes"):
return True
print("Transfer cancelled.")
return False
# =============================================
# Step 6: Create the counterparty
# =============================================
def create_counterparty(payload):
"""POST /counterparty — create the counterparty."""
print("Creating counterparty...")
response = requests.post(f"{API_URL}/counterparty", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
print(f" Counterparty ID: {data.get('id')}")
print(f" State: {data.get('state')}")
return data
# =============================================
# Step 7: Extract payment method details
# =============================================
def extract_payment_method(counterparty_data):
"""Extract the counterparty ID, payment method ID, and human-readable details.
Returns (counterparty_id, payment_method_id, receiver_key, pm_details).
"""
counterparty_id = counterparty_data["id"]
accounts = counterparty_data.get("accounts", [])
cards = counterparty_data.get("cards", [])
if accounts:
account = accounts[0]
pm_id = account["id"]
pm_details = {
"account_ref": account.get("iban") or account.get("account_no") or "Revolut account",
"address": account.get("address", {}),
}
return counterparty_id, pm_id, "account_id", pm_details
if cards:
card = cards[0]
pm_id = card["id"]
pm_details = {
"account_ref": f"Card *{card.get('last_digits', '????')} ({card.get('scheme', 'unknown')})",
"address": {},
}
return counterparty_id, pm_id, "card_id", pm_details
return counterparty_id, None, None, {
"account_ref": "Revolut account (revtag)",
"address": {},
}
def build_receiver(counterparty_id, payment_method_id, receiver_key):
"""Build the receiver object for /pay endpoints."""
receiver = {"counterparty_id": counterparty_id}
if payment_method_id:
receiver[receiver_key] = payment_method_id
return receiver
# =============================================
# Step 8: Check transfer field requirements
# =============================================
def check_transfer_field_requirements(account_id, receiver):
"""POST /pay/fields — returns required and optional fields for the transfer."""
print("Checking transfer field requirements...")
payload = {"account_id": account_id, "receiver": receiver}
response = requests.post(f"{API_URL}/pay/fields", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
def build_payment_payload(transfer_fields, account_id, receiver, amount, currency, reference):
"""Build the payment payload from always required fields + conditionally available fields.
Returns (payload, missing_required) where missing_required is a list of required
field names that have no value.
"""
payload = {
"request_id": str(uuid.uuid4()),
"account_id": account_id,
"receiver": receiver,
"amount": amount,
"currency": currency,
}
provided = {"reference": reference}
missing_required = []
for field in transfer_fields.get("fields", []):
name = field["name"]
is_required = field.get("required", False)
if name in provided and provided[name] is not None:
payload[name] = provided[name]
elif is_required:
missing_required.append(name)
return payload, missing_required
# =============================================
# Step 9: Get an indicative quote
# =============================================
def get_indicative_quote(payment_payload, currency):
"""POST /pay/indicative-quote — returns fees, exchange rate, and delivery time."""
print("Fetching indicative quote...")
payload = {k: v for k, v in payment_payload.items() if k != "request_id"}
response = requests.post(f"{API_URL}/pay/indicative-quote", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
fee = data.get("fee", {})
total = data.get("estimated_total", {})
print(f" Fee: {fee.get('amount', 0)} {fee.get('currency', currency)}")
print(f" Total: {total.get('amount', 0)} {total.get('currency', currency)}")
return data
# =============================================
# Step 10: Get own account details and print transfer summary
# =============================================
def get_account_details(account_id):
"""GET /accounts/{id}/bank-details — returns the sender's bank details."""
print("Fetching account bank details...")
response = requests.get(f"{API_URL}/accounts/{account_id}/bank-details", headers=HEADERS)
check_response(response)
data = response.json()
entry = data[0] if isinstance(data, list) else data
print(f" Sender: {entry.get('beneficiary', 'Unknown')}")
return entry
def print_transfer_summary(sender, counterparty_name, pm_details, pm_address, quote):
"""Display a human-readable transfer summary."""
fee = quote.get("fee", {})
total = quote.get("estimated_total", {})
rate = quote.get("estimated_exchange_rate")
arrival = quote.get("estimated_arrival", {})
sender_name = sender.get("beneficiary", "Unknown")
sender_addr = sender.get("beneficiary_address", {})
sender_ref = sender.get("iban") or sender.get("account_no") or "N/A"
sender_addr_str = ", ".join(filter(None, [
sender_addr.get("street_line1"),
sender_addr.get("city"),
sender_addr.get("country"),
sender_addr.get("postcode"),
])) if sender_addr else ""
pm_addr_str = ", ".join(filter(None, [
pm_address.get("street_line1"),
pm_address.get("city"),
pm_address.get("country"),
pm_address.get("postcode"),
])) if pm_address else ""
print("\n" + "=" * 50)
print("TRANSFER SUMMARY")
print("=" * 50)
print(f"FROM: {sender_name}")
print(f" {sender_ref}")
if sender_addr_str:
print(f" {sender_addr_str}")
print(f"TO: {counterparty_name}")
print(f" {pm_details['account_ref']}")
if pm_addr_str:
print(f" {pm_addr_str}")
print(f"\nREFERENCE: {REFERENCE}")
print("-" * 50)
print(f"Amount: {AMOUNT} {CURRENCY}")
if fee.get("amount") is not None:
print(f"Fee: {fee.get('amount')} {fee.get('currency')}")
if fee.get("breakdown"):
for key, val in fee["breakdown"].items():
print(f" - {key}: {val.get('amount')} {val.get('currency')}")
if rate:
print(f"Exchange rate: {rate}")
if total.get("amount") is not None:
print(f"Total cost: {total.get('amount')} {total.get('currency')}")
if arrival:
print(f"Delivery: {arrival.get('speed', '')} ({arrival.get('date', '')})")
print("=" * 50)
print("\n")
# =============================================
# Step 11: Check account balance
# =============================================
def check_balance(account_id, total_cost, total_currency):
"""GET /accounts/{id} — check if the balance covers the total cost.
Returns True if sufficient, False otherwise.
"""
print("Checking account balance...")
response = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(response)
account = response.json()
balance = account.get("balance", 0)
balance_currency = account.get("currency")
print(f" Balance: {balance} {balance_currency}")
print(f" Total cost: {total_cost} {total_currency}")
if balance_currency == total_currency and balance < total_cost:
print("Insufficient funds.")
return False
return True
# =============================================
# Step 12: Ask for confirmation
# =============================================
def confirm_transfer():
"""Ask the user to confirm the transfer.
Returns True if confirmed, False otherwise.
"""
confirm = input("\nProceed with this transfer? ([y]es/[n]o): ").strip().lower()
if confirm not in ("y", "yes"):
print("Transfer cancelled.")
return False
return True
# =============================================
# Step 13: Execute the transfer
# =============================================
def make_transfer(payload):
"""POST /pay — execute the transfer."""
print("Initiating transfer...")
response = requests.post(f"{API_URL}/pay", json=payload, headers=HEADERS)
check_response(response)
result = response.json()
print(f" Transaction ID: {result.get('id')}")
print(f" State: {result.get('state')}")
return result
# =============================================
# Step 14: Check transaction status
# =============================================
def check_transaction_status(transaction_id):
"""GET /transaction/{id} — check the transaction status."""
print("\nChecking transaction status...")
response = requests.get(f"{API_URL}/transaction/{transaction_id}", headers=HEADERS)
check_response(response)
transaction = response.json()
status = transaction.get("state")
print(f" Transaction ID: {transaction_id}")
print(f" Transaction status: {status}")
if status == "pending":
print("Please check again later.")
return status
# =============================================
# Main flow
# =============================================
def run():
# Print destination details
counterparty_type = "Revolut (revtag)" if "revtag" in COUNTERPARTY_DATA else "bank account"
print_destination_details(COUNTRY, CURRENCY, RECIPIENT_TYPE, counterparty_type)
# 1. Check supported countries and currencies
countries = check_supported_countries()
# 2. Verify the destination is supported
if not verify_destination_supported(countries, COUNTRY, CURRENCY):
return
# 3. Check counterparty field requirements
field_requirements = check_counterparty_field_requirements(COUNTRY, CURRENCY, RECIPIENT_TYPE)
# 4. Build the counterparty payload
counterparty_payload = build_counterparty_payload(
field_requirements, COUNTRY, CURRENCY, RECIPIENT_TYPE, COUNTERPARTY_DATA
)
# 5. Validate the account name (CoP/VoP)
if not validate_account_name(COUNTERPARTY_DATA, COUNTRY, CURRENCY, RECIPIENT_TYPE):
return
# 6. Create the counterparty
counterparty = create_counterparty(counterparty_payload)
# 7. Extract payment method details
counterparty_id, pm_id, receiver_key, pm_details = extract_payment_method(counterparty)
receiver = build_receiver(counterparty_id, pm_id, receiver_key)
print(f"Payment method ID: {pm_id or 'none (revtag-only)'}")
# 8. Check transfer field requirements
transfer_fields = check_transfer_field_requirements(ACCOUNT_ID, receiver)
# Build the payment payload and check for missing required fields
payment_payload, missing_required = build_payment_payload(
transfer_fields, ACCOUNT_ID, receiver, AMOUNT, CURRENCY, REFERENCE
)
if missing_required:
print(f"\nMissing required transfer fields: {missing_required}")
return
# 9. Get an indicative quote
quote = get_indicative_quote(payment_payload, CURRENCY)
# 10. Print transfer summary
sender = get_account_details(ACCOUNT_ID)
pm_address = pm_details.get("address", {})
print_transfer_summary(sender, counterparty.get("name", "Unknown"), pm_details, pm_address, quote)
# 11. Check that the account balance is sufficient
total = quote.get("estimated_total", {})
total_cost = total.get("amount", AMOUNT)
total_currency = total.get("currency", CURRENCY)
if not check_balance(ACCOUNT_ID, total_cost, total_currency):
return
# 12. Ask for confirmation
if not confirm_transfer():
return
# 13. Execute the transfer
transaction = make_transfer(payment_payload)
print("Transfer initiated successfully!")
# 14. Check transaction status
check_transaction_status(transaction.get("id"))
if __name__ == "__main__":
try:
run()
except ApiError:
print("\nTransfer flow stopped due to API error.")
except KeyboardInterrupt:
print("\nTransfer flow cancelled by user.")
except Exception as e:
print(f"\nUnexpected error: {e}")9d:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[["$","$L23",null,{"color":"grey-tone-50","name":"Document","size":16}],"create_counterparty_and_transfer.py"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$c2"}}]}]],"$Lc3"]}]
c4:T1101,==================================================
DESTINATION: GB / GBP
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
Checking supported countries and currencies...
Found 213 supported countries
Destination GB/GBP is supported.
Checking counterparty field requirements...
Required fields: ['company_name', 'account_no', 'sort_code', 'address']
Optional fields: []
Counterparty payload fields: ['profile_type', 'bank_country', 'currency', 'company_name', 'account_no', 'sort_code', 'address']
Validating account name (CoP/VoP)...
Result: matched
Creating counterparty...
Counterparty ID: b53fdd78-8d67-4f63-a103-eeeeef53cac8
State: created
Payment method ID: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
Checking transfer field requirements...
Required fields: ['reference']
Optional fields: ['charge_bearer']
Fetching indicative quote...
Fee: 0 GBP
Total: 1000 GBP
Fetching account bank details...
Sender: Example Corp Ltd
==================================================
TRANSFER SUMMARY
==================================================
FROM: Example Corp Ltd
31926819
1 Westminster Way, London, GB, E14 5AB
TO: Example Vendor Ltd
12345678
1 Canada Square, London, GB, E14 5AB
REFERENCE: Invoice #12345
--------------------------------------------------
Amount: 1000 GBP
Fee: 0 GBP
Total cost: 1000 GBP
Delivery: in_seconds (2026-07-07)
==================================================
Checking account balance...
Balance: 50000 GBP
Total cost: 1000 GBP
Initiating transfer...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
State: pending
Transfer initiated successfully!
Checking transaction status...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
Transaction status: pending
Please check again later.9e:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Sample output (UK / GBP, business counterparty)"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$c4"}}]}]],"$Lc5"]}]
c6:T1fe59,import requests
import uuid
# =============================================
# Configuration: adjust these values as needed
# =============================================
API_URL = "https://b2b.revolut.com/api/1.0"
API_TOKEN = "YOUR_API_TOKEN" # Replace with your own token
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# Your account (the pocket you're sending from)
ACCOUNT_ID = "YOUR_ACCOUNT_ID" # Replace with your own account ID
# The counterparty to send to
COUNTERPARTY_ID = "YOUR_COUNTERPARTY_ID" # Replace with the ID of your counterparty
# Optional: if your counterparty has more than one payment method specified,
# uncomment the second RECEIVER block below and provide the ID of the appropriate payment method (account or card)
RECEIVER = None
#RECEIVER = {
# "account_id": "YOUR_COUNTERPARTY_ACCOUNT_ID", # Replace with the account ID of the selected payment method, set card_id to None
# "card_id": None # Replace with the card ID of the selected payment method, set account_id to None
#}
# Transfer details
AMOUNT = 1000
CURRENCY = "EUR"
REFERENCE = "Invoice #12345"
# Optional: address to set if the counterparty's payment method is missing one
UPDATED_ADDRESS = {
"street_line1": "Hauptstraße 45",
"city": "München",
"region": "Bayern",
"country": "DE",
"postcode": "80331"
}
# =============================================
# Error handling
# =============================================
class ApiError(Exception):
pass
def check_response(response):
"""Print error details and raise ApiError if the response failed."""
if response.ok:
return
try:
error_data = response.json()
print(f"\nAPI Error (HTTP {response.status_code})")
print(f" Code: {error_data.get('code', 'N/A')}")
print(f" Message: {error_data.get('message', 'N/A')}")
print(f" Error ID: {error_data.get('error_id', 'N/A')}")
except Exception:
print(f"\nAPI Error (HTTP {response.status_code}): {response.text}")
raise ApiError(f"Request failed with status {response.status_code}")
# =============================================
# Print destination details
# =============================================
def print_destination_details(country, currency, recipient_type, counterparty_type):
"""Print a summary of the destination details."""
print("=" * 50)
print(f"DESTINATION: {country} / {currency}")
print(f"RECIPIENT TYPE: {recipient_type}")
print(f"COUNTERPARTY TYPE: {counterparty_type}")
print("=" * 50)
# =============================================
# Step 1: Retrieve the counterparty
# =============================================
def retrieve_counterparty(counterparty_id):
"""GET /counterparty/{id} — returns the counterparty data."""
print(f"Retrieving counterparty {counterparty_id}...")
response = requests.get(f"{API_URL}/counterparty/{counterparty_id}", headers=HEADERS)
check_response(response)
data = response.json()
print(f" Name: {data.get('name', 'Unknown')}")
return data
# =============================================
# Step 2: Resolve the payment method
# =============================================
def resolve_payment_method(counterparty_data):
"""Determine which payment method to use.
If RECEIVER["account_id"] or RECEIVER["card_id"] is set, use it directly.
If RECEIVER not set, but counterparty has only one payment method, use it.
Otherwise, ask for payment method ID.
Returns (payment_method_id, receiver_key) where receiver_key is
"account_id", "card_id", or None.
"""
accounts = counterparty_data.get("accounts", [])
cards = counterparty_data.get("cards", [])
if RECEIVER:
if RECEIVER["account_id"]:
return RECEIVER["account_id"], "account_id"
if RECEIVER["card_id"]:
return RECEIVER["card_id"], "card_id"
else:
print("Invalid recipient. Please provide a valid payment method ID (account_id or card_id).")
return None, None
if not accounts and not cards:
return None, None
if accounts and len(accounts) == 1:
return accounts[0]["id"], "account_id"
if cards and len(cards) == 1:
return cards[0]["id"], "card_id"
print("Please provide a payment method (account_id or card_id)")
return None, None
def build_receiver(counterparty_id, payment_method_id, receiver_key):
"""Build the receiver object for /pay endpoints."""
receiver = {"counterparty_id": counterparty_id}
if payment_method_id:
receiver[receiver_key] = payment_method_id
return receiver
# =============================================
# Step 3: Check transfer field requirements
# =============================================
def check_transfer_fields(account_id, receiver):
"""POST /pay/fields — returns required and optional fields for the transfer."""
print("Checking transfer field requirements...")
payload = {"account_id": account_id, "receiver": receiver}
response = requests.post(f"{API_URL}/pay/fields", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
def build_payment_payload(transfer_fields, account_id, receiver, amount, currency, reference):
"""Build the payment payload from always required fields + conditionally available fields.
Returns (payload, missing_required) where missing_required is a list of required
field names that have no value.
"""
payload = {
"request_id": str(uuid.uuid4()),
"account_id": account_id,
"receiver": receiver,
"amount": amount,
"currency": currency,
}
provided = {"reference": reference}
missing_required = []
for field in transfer_fields.get("fields", []):
name = field["name"]
is_required = field.get("required", False)
if name in provided and provided[name] is not None:
payload[name] = provided[name]
elif is_required:
missing_required.append(name)
return payload, missing_required
# =============================================
# Step 4: Check and update the counterparty's address
# =============================================
def is_address_complete(address):
"""Check if an address has the minimum required fields."""
if not address:
return False
required = ["street_line1", "city", "country"]
return all(address.get(field) for field in required)
def check_and_update_address(counterparty_data, payment_method_id, receiver_key):
"""If the payment method's address is missing or incomplete, update it.
Returns the (possibly updated) address.
Applicable only to accounts.
"""
# Check if the payment method is an account; if not, exit
if receiver_key != "account_id":
return {}
accounts = counterparty_data.get("accounts", [])
# Find the current address on the payment method
current_address = {}
for account in accounts:
if account.get("id") == payment_method_id:
current_address = account.get("address", {})
break
if is_address_complete(current_address):
print("Address is complete.")
return current_address
print("Address is missing or incomplete.")
if payment_method_id:
print("Updating address...")
url = f"{API_URL}/counterparties/{counterparty_data['id']}/payment-methods/{payment_method_id}"
response = requests.patch(url, json={"address": UPDATED_ADDRESS}, headers=HEADERS)
check_response(response)
print(" Address updated.")
return UPDATED_ADDRESS
return {}
# =============================================
# Step 5: Get payment method details
# =============================================
def get_payment_method_details(counterparty_data, payment_method_id):
"""Extract human-readable details for the payment method.
Returns a dict with "account_ref" and "address".
"""
accounts = counterparty_data.get("accounts", [])
cards = counterparty_data.get("cards", [])
for account in accounts:
if account.get("id") == payment_method_id:
return {
"account_ref": account.get("iban") or account.get("account_no") or "Revolut account",
"address": account.get("address", {}),
}
for card in cards:
if card.get("id") == payment_method_id:
return {
"account_ref": f"Card *{card.get('last_digits', '????')} ({card.get('scheme', 'unknown')})",
"address": {},
}
return {
"account_ref": "Revolut account (revtag)",
"address": {},
}
# =============================================
# Step 6: Get own account details
# =============================================
def get_account_details(account_id):
"""GET /accounts/{id}/bank-details — returns the sender's bank details."""
print("Fetching account bank details...")
response = requests.get(f"{API_URL}/accounts/{account_id}/bank-details", headers=HEADERS)
check_response(response)
data = response.json()
# bank-details returns an array — use the first entry
entry = data[0] if isinstance(data, list) else data
print(f" Sender: {entry.get('beneficiary', 'Unknown')}")
return entry
# =============================================
# Step 7: Get an indicative quote
# =============================================
def get_indicative_quote(payment_payload, currency):
"""POST /pay/indicative-quote — returns fees, exchange rate, and delivery time."""
print("Fetching indicative quote...")
payload = {k: v for k, v in payment_payload.items() if k != "request_id"}
response = requests.post(f"{API_URL}/pay/indicative-quote", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
fee = data.get("fee", {})
total = data.get("estimated_total", {})
print(f" Fee: {fee.get('amount', 0)} {fee.get('currency', currency)}")
print(f" Total: {total.get('amount', 0)} {total.get('currency', currency)}")
return data
# =============================================
# Step 8: Print transfer summary
# =============================================
def print_transfer_summary(sender, counterparty_data, pm_details, pm_address, quote):
"""Display a human-readable transfer summary."""
fee = quote.get("fee", {})
total = quote.get("estimated_total", {})
rate = quote.get("estimated_exchange_rate")
arrival = quote.get("estimated_arrival", {})
sender_name = sender.get("beneficiary", "Unknown")
sender_addr = sender.get("beneficiary_address", {})
sender_ref = sender.get("iban") or sender.get("account_no") or "N/A"
sender_addr_str = ", ".join(filter(None, [
sender_addr.get("street_line1"),
sender_addr.get("city"),
sender_addr.get("country"),
sender_addr.get("postcode"),
])) if sender_addr else ""
pm_addr_str = ", ".join(filter(None, [
pm_address.get("street_line1"),
pm_address.get("city"),
pm_address.get("country"),
pm_address.get("postcode"),
])) if pm_address else ""
print("\n" + "=" * 50)
print("TRANSFER SUMMARY")
print("=" * 50)
print(f"FROM: {sender_name}")
print(f" {sender_ref}")
if sender_addr_str:
print(f" {sender_addr_str}")
print(f"TO: {counterparty_data.get('name', 'Unknown')}")
print(f" {pm_details['account_ref']}")
if pm_addr_str:
print(f" {pm_addr_str}")
print(f"\nREFERENCE: {REFERENCE}")
print("-" * 50)
print(f"Amount: {AMOUNT} {CURRENCY}")
if fee.get("amount") is not None:
print(f"Fee: {fee.get('amount')} {fee.get('currency')}")
if fee.get("breakdown"):
for key, val in fee["breakdown"].items():
print(f" - {key}: {val.get('amount')} {val.get('currency')}")
if rate:
print(f"Exchange rate: {rate}")
if total.get("amount") is not None:
print(f"Total cost: {total.get('amount')} {total.get('currency')}")
if arrival:
print(f"Delivery: {arrival.get('speed', '')} ({arrival.get('date', '')})")
print("=" * 50)
print("\n")
# =============================================
# Step 9: Check account balance
# =============================================
def check_balance(account_id, total_cost, total_currency):
"""GET /accounts/{id} — check if the balance covers the total cost.
Returns True if sufficient, False otherwise.
"""
print("Checking account balance...")
response = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(response)
account = response.json()
balance = account.get("balance", 0)
balance_currency = account.get("currency")
print(f" Balance: {balance} {balance_currency}")
print(f" Total cost: {total_cost} {total_currency}")
if balance_currency == total_currency and balance < total_cost:
print("Insufficient funds.")
return False
return True
# =============================================
# Step 10: Ask for confirmation
# =============================================
def confirm_transfer():
"""Ask the user to confirm the transfer.
Returns True if confirmed, False otherwise.
"""
confirm = input("\nProceed with this transfer? ([y]es/[n]o): ").strip().lower()
if confirm not in ("y", "yes"):
print("Transfer cancelled.")
return False
return True
# =============================================
# Step 11: Execute the transfer
# =============================================
def make_transfer(payload):
"""POST /pay — execute the transfer."""
print("Initiating transfer...")
response = requests.post(f"{API_URL}/pay", json=payload, headers=HEADERS)
check_response(response)
result = response.json()
print(f" Transaction ID: {result.get('id')}")
print(f" State: {result.get('state')}")
return result
# =============================================
# Step 12: Check transaction status
# =============================================
def check_transaction_status(transaction_id):
"""GET /transaction/{id} — check the transaction status."""
print("\nChecking transaction status...")
response = requests.get(f"{API_URL}/transaction/{transaction_id}", headers=HEADERS)
check_response(response)
transaction = response.json()
status = transaction.get("state")
print(f" Transaction ID: {transaction_id}")
print(f" Transaction status: {status}")
if status == "pending":
print("Please check again later.")
return status
# =============================================
# Main flow
# =============================================
def run():
# 1. Retrieve the counterparty
counterparty = retrieve_counterparty(COUNTERPARTY_ID)
# 2. Resolve the payment method and build the receiver
payment_method_id, receiver_key = resolve_payment_method(counterparty)
receiver = build_receiver(counterparty["id"], payment_method_id, receiver_key)
print(f"Payment method ID: {payment_method_id or 'none (revtag-only)'}")
# Print destination details
recipient_type = counterparty.get("profile_type", "unknown")
accounts = counterparty.get("accounts", [])
cards = counterparty.get("cards", [])
is_revolut = "revtag" in counterparty
if receiver_key == "account_id":
for account in accounts:
if account.get("id") == payment_method_id:
bank_country = account.get("bank_country", "unknown")
account_currency = account.get("currency", "unknown")
break
else:
bank_country = "unknown"
account_currency = "unknown"
counterparty_type = "Revolut account" if is_revolut else "bank account"
elif receiver_key == "card_id":
bank_country = "N/A"
account_currency = "N/A"
counterparty_type = "card"
else:
bank_country = counterparty.get("country", "unknown")
account_currency = "N/A"
counterparty_type = "Revolut (revtag)"
print_destination_details(bank_country, account_currency, recipient_type, counterparty_type)
# 3. Check transfer field requirements
transfer_fields = check_transfer_fields(ACCOUNT_ID, receiver)
# Build the payment payload and check for missing required fields
payment_payload, missing_required = build_payment_payload(
transfer_fields, ACCOUNT_ID, receiver, AMOUNT, CURRENCY, REFERENCE
)
if missing_required:
print(f"\nMissing required transfer fields: {missing_required}")
return
# 4. Check and update the counterparty's address
pm_address = check_and_update_address(counterparty, payment_method_id, receiver_key)
# 5. Get payment method details
pm_details = get_payment_method_details(counterparty, payment_method_id)
# 6. Get own account details
sender = get_account_details(ACCOUNT_ID)
# 7. Get an indicative quote
quote = get_indicative_quote(payment_payload, CURRENCY)
# 8. Print transfer summary
print_transfer_summary(sender, counterparty, pm_details, pm_address, quote)
# 9. Check that the account balance is sufficient
total = quote.get("estimated_total", {})
total_cost = total.get("amount", AMOUNT)
total_currency = total.get("currency", CURRENCY)
if not check_balance(ACCOUNT_ID, total_cost, total_currency):
return
# 10. Ask for confirmation
if not confirm_transfer():
return
# 11. Execute the transfer
transaction = make_transfer(payment_payload)
print("Transfer initiated successfully!")
# 12. Check transaction status
check_transaction_status(transaction.get("id"))
if __name__ == "__main__":
try:
run()
except ApiError:
print("\nTransfer flow stopped due to API error.")
except KeyboardInterrupt:
print("\nTransfer flow cancelled by user.")
except Exception as e:
print(f"\nUnexpected error: {e}")9f:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[["$","$L23",null,{"color":"grey-tone-50","name":"Document","size":16}],"prepare_and_validate_transfer.py"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$c6"}}]}]],"$Lc7"]}]
c8:Tf34,Retrieving counterparty 239d6f1f-2222-4ae6-1111-5cc603341b4e...
Name: Beispiel GmbH
Payment method ID: b209281b-aakk-9911-8d83-ac72469cef8f
==================================================
DESTINATION: DE / EUR
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
Checking transfer field requirements...
Required fields: ['reference']
Optional fields: ['charge_bearer']
Address is missing or incomplete.
Updating address...
Address updated.
Fetching account bank details...
Sender: Example Corp Ltd
Fetching indicative quote...
Fee: 3 GBP
Total: 1167.58 GBP
==================================================
TRANSFER SUMMARY
==================================================
FROM: Example Corp Ltd
31926819
1 Westminster Way, London, GB, E14 5AB
TO: Beispiel GmbH
DE89370400440532013000
Hauptstraße 45, München, DE, 80331
REFERENCE: Invoice #12345
--------------------------------------------------
Amount: 1000 EUR
Fee: 3 GBP
Exchange rate: 1.16458
Total cost: 1167.58 GBP
Delivery: by_date (2026-07-09)
==================================================
Checking account balance...
Balance: 50000 GBP
Total cost: 1167.58 GBP
Proceed with this transfer? ([y]es/[n]o): y
Initiating transfer...
Transaction ID: 7c8d9e0f-1a2b-3c4d-5e6f-7a8b9c0d1e2f
State: pending
Transfer initiated successfully!
Checking transaction status...
Transaction ID: 7c8d9e0f-1a2b-3c4d-5e6f-7a8b9c0d1e2f
Transaction status: pending
Please check again later.a0:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Sample output (DE / EUR, business counterparty, GBP source account)"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$c8"}}]}]],"$Lc9"]}]
ca:T4e672,import requests
import uuid
# =============================================
# Configuration: adjust these values as needed
# =============================================
API_URL = "https://b2b.revolut.com/api/1.0"
API_TOKEN = "YOUR_API_TOKEN" # Replace with your own token
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# Optional: pre-fill new counterparty details.
# Leave a field empty ("") to be prompted for it interactively.
# Set COUNTERPARTY_DATA to a full dict to override individual fields entirely.
CP_COUNTRY = ""
CP_CURRENCY = ""
CP_RECIPIENT_TYPE = "" # "business" or "personal"
CP_COMPANY_NAME = ""
CP_FIRST_NAME = ""
CP_LAST_NAME = ""
CP_ACCOUNT_NO = ""
CP_SORT_CODE = ""
CP_IBAN = ""
CP_BIC = ""
CP_ROUTE = ""
CP_ROUTING_NUMBER = ""
CP_REVTAG = ""
CP_ADDRESS = {
"street_line1": "",
"city": "",
"region": "",
"country": "",
"postcode": ""
}
COUNTERPARTY_DATA = None # Set to a full dict to override the fields above
# =============================================
# Error handling
# =============================================
class ApiError(Exception):
pass
def check_response(response):
"""Print error details and raise ApiError if the response failed."""
if response.ok:
return
try:
error_data = response.json()
print(f"\nAPI Error (HTTP {response.status_code})")
print(f" Code: {error_data.get('code', 'N/A')}")
print(f" Message: {error_data.get('message', 'N/A')}")
print(f" Error ID: {error_data.get('error_id', 'N/A')}")
except Exception:
print(f"\nAPI Error (HTTP {response.status_code}): {response.text}")
raise ApiError(f"Request failed with status {response.status_code}")
# =============================================
# Print destination details
# =============================================
def print_destination_details(country, currency, recipient_type, counterparty_type):
"""Print a summary of the destination details."""
print("=" * 50)
print(f"DESTINATION: {country} / {currency}")
print(f"RECIPIENT TYPE: {recipient_type}")
print(f"COUNTERPARTY TYPE: {counterparty_type}")
print("=" * 50)
# =============================================
# Helper: ask user for input with default
# =============================================
def ask(prompt, default=""):
"""Prompt the user for input, with an optional default value."""
if default:
prompt = f"{prompt} [{default}]: "
else:
prompt = f"{prompt}: "
value = input(prompt).strip()
return value if value else default
# =============================================
# Step 1: Choose new or existing counterparty
# =============================================
def choose_counterparty_mode():
"""Ask the user whether to create a new counterparty or use an existing one.
Returns "new" or "existing".
"""
print("\n1. Create a new counterparty")
print("2. Use an existing counterparty")
choice = ask("Select an option (1/2)")
while choice not in ("1", "2"):
choice = ask("Invalid choice. Select 1 or 2")
return "new" if choice == "1" else "existing"
# =============================================
# Step 2: Check supported countries and currencies
# =============================================
def check_supported_countries():
"""GET /counterparties/countries — returns supported country/currency pairs."""
print("Checking supported countries and currencies...")
response = requests.get(f"{API_URL}/counterparties/countries", headers=HEADERS)
check_response(response)
data = response.json()
countries = data.get("countries", [])
print(f" Found {len(countries)} supported countries")
return countries
# =============================================
# Step 3: Verify the destination is supported
# =============================================
def verify_destination_supported(countries, country, currency):
"""Check if the desired country/currency combination is supported.
Returns True if supported, False otherwise.
"""
for entry in countries:
if entry.get("country") == country and currency in entry.get("currencies", []):
print(f" Destination {country}/{currency} is supported.")
return True
print(f" Destination {country}/{currency} is not supported.")
return False
# =============================================
# Step 4: Check counterparty field requirements
# =============================================
def check_counterparty_field_requirements(country, currency, recipient_type):
"""GET /counterparties/fields — returns required and applicable fields."""
print("Checking counterparty field requirements...")
params = {"country": country, "currency": currency, "recipient_type": recipient_type}
response = requests.get(f"{API_URL}/counterparties/fields", params=params, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
# =============================================
# Step 5: Build the counterparty payload
# =============================================
def build_counterparty_payload(field_requirements, country, currency, recipient_type):
"""Build the counterparty payload from config vars or interactive input.
Uses COUNTERPARTY_DATA if set, otherwise individual CP_* vars.
Prompts interactively for any field that is empty.
"""
if COUNTERPARTY_DATA:
print(" Using provided COUNTERPARTY_DATA.")
payload = dict(COUNTERPARTY_DATA)
payload.setdefault("profile_type", recipient_type)
payload.setdefault("bank_country", country)
payload.setdefault("currency", currency)
return payload
payload = {
"profile_type": recipient_type,
"bank_country": country,
"currency": currency,
}
config_map = {
"company_name": CP_COMPANY_NAME,
"first_name": CP_FIRST_NAME,
"last_name": CP_LAST_NAME,
"account_no": CP_ACCOUNT_NO,
"sort_code": CP_SORT_CODE,
"iban": CP_IBAN,
"bic": CP_BIC,
"route": CP_ROUTE,
"routing_number": CP_ROUTING_NUMBER,
"revtag": CP_REVTAG,
}
for field in field_requirements.get("fields", []):
name = field["name"]
default = config_map.get(name, "")
if name == "address":
address = {}
for addr_field in ["street_line1", "city", "region", "country", "postcode"]:
val = CP_ADDRESS.get(addr_field, "")
val = ask(f" Enter {addr_field}", val)
if val:
address[addr_field] = val
if address:
payload["address"] = address
else:
val = ask(f" Enter {name}", default)
if val:
payload[name] = val
# Group first_name/last_name into individual_name for personal counterparties
if recipient_type == "personal":
individual_name = {}
if "first_name" in payload:
individual_name["first_name"] = payload.pop("first_name")
if "last_name" in payload:
individual_name["last_name"] = payload.pop("last_name")
if individual_name:
payload["individual_name"] = individual_name
print(f" Counterparty payload fields: {list(payload.keys())}")
return payload
# =============================================
# Step 6: Validate the account name (CoP/VoP)
# =============================================
def build_cop_request(payload, country, currency, recipient_type):
"""Build the CoP request body based on the destination region.
Returns the request dict, or None if CoP is not available for this destination.
"""
request = {}
if recipient_type == "business":
request["company_name"] = payload.get("company_name")
else:
individual = payload.get("individual_name", {})
request["individual_name"] = {
"first_name": individual.get("first_name") or payload.get("first_name"),
"last_name": individual.get("last_name") or payload.get("last_name"),
}
if country == "GB" and currency == "GBP":
request["account_no"] = payload.get("account_no")
request["sort_code"] = payload.get("sort_code")
elif country == "AU" and currency == "AUD":
request["account_no"] = payload.get("account_no")
request["bsb"] = payload.get("bsb")
elif currency == "EUR" or (country == "RO" and currency == "RON"):
request["iban"] = payload.get("iban")
request["recipient_country"] = country
request["recipient_currency"] = currency
if payload.get("bic"):
request["bic"] = payload.get("bic")
else:
return None
return request
def ask_to_proceed():
"""Ask the user whether to proceed after a non-blocking issue.
Returns True if the user wants to proceed, False otherwise.
"""
confirm = input("Proceed anyway? ([y]es/[n]o): ").strip().lower()
if confirm in ("y", "yes"):
return True
print("Transfer cancelled.")
return False
def validate_account_name(payload, country, currency, recipient_type):
"""POST /account-name-validation — validate the account name (CoP/VoP).
Returns True if the flow should proceed, False if it should stop.
"""
cop_request = build_cop_request(payload, country, currency, recipient_type)
if cop_request is None:
print("CoP/VoP is not available for this destination.")
return ask_to_proceed()
print("Validating account name (CoP/VoP)...")
try:
response = requests.post(f"{API_URL}/account-name-validation", json=cop_request, headers=HEADERS)
check_response(response)
except ApiError:
print(" CoP/VoP check failed.")
return ask_to_proceed()
result = response.json()
result_code = result.get("result_code")
print(f" Result: {result_code}")
if result_code in ("matched", "close_match"):
if result_code == "close_match":
if "company_name" in result:
print(f" Actual name: {result['company_name']}")
elif "individual_name" in result:
name = result["individual_name"]
print(f" Actual name: {name.get('first_name', '')} {name.get('last_name', '')}")
return True
if result_code == "not_matched":
print(" The account name does not match.")
return False
print(f" The check could not be completed (result: {result_code}).")
return ask_to_proceed()
# =============================================
# Step 7: Create the counterparty
# =============================================
def create_counterparty(payload):
"""POST /counterparty — create the counterparty."""
print("Creating counterparty...")
response = requests.post(f"{API_URL}/counterparty", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
print(f" Counterparty ID: {data.get('id')}")
print(f" State: {data.get('state')}")
return data
# =============================================
# Step 8: Retrieve an existing counterparty
# =============================================
def retrieve_existing_counterparty():
"""Ask the user how to identify an existing counterparty, then retrieve it.
Two options:
1. Enter the counterparty ID directly.
2. Browse the list of counterparties (paginated) and select one.
Returns the selected counterparty's data (full GET /counterparty/{id} response).
"""
print("\n1. Enter the counterparty ID")
print("2. Choose from the list of counterparties")
choice = ask("Select an option (1/2)")
while choice not in ("1", "2"):
choice = ask("Invalid choice. Select 1 or 2")
if choice == "1":
cp_id = ask("Enter the counterparty ID")
return retrieve_counterparty(cp_id)
# Browse the list (paginated)
print("Retrieving your counterparties...")
all_counterparties = []
created_before = None
while True:
params = {"limit": 100}
if created_before:
params["created_before"] = created_before
response = requests.get(f"{API_URL}/counterparties", params=params, headers=HEADERS)
check_response(response)
page = response.json()
if not page:
break
all_counterparties.extend(page)
# Check if there are more pages
if len(page) < 100:
break
# Use the last item's created_at as the cursor for the next page
created_before = page[-1].get("created_at")
if not created_before:
break
more = ask(f"\n Loaded {len(all_counterparties)} counterparties so far. Load more? (y/n)", "n")
if more.lower() != "y":
break
if not all_counterparties:
print(" No counterparties found.")
return None
print(f"\n Found {len(all_counterparties)} counterpart{'y' if len(all_counterparties) == 1 else 'ies'}:\n")
for i, cp in enumerate(all_counterparties):
name = cp.get("name", "Unknown")
profile = cp.get("profile_type", "?")
cp_type = "Revolut (revtag)" if "revtag" in cp else "bank account" if cp.get("accounts") else "card" if cp.get("cards") else "unknown"
# Summarise payment methods
methods = []
for acc in cp.get("accounts", []):
cur = acc.get("currency", "?")
country = acc.get("bank_country", "?")
methods.append(f"{cur} ({country})")
for card in cp.get("cards", []):
methods.append(f"card ({card.get('currency', '?')})")
if "revtag" in cp:
methods.append(f"@{cp['revtag']}")
methods_str = ", ".join(methods) if methods else "no methods"
print(f" {i + 1}. {name} [{profile}, {cp_type}] — {methods_str}")
choice = ask(f"\n Select a counterparty (1-{len(all_counterparties)})")
while not choice.isdigit() or int(choice) < 1 or int(choice) > len(all_counterparties):
choice = ask(f" Invalid choice. Enter a number 1-{len(all_counterparties)}")
selected = all_counterparties[int(choice) - 1]
cp_id = selected["id"]
print(f"\n Selected: {selected.get('name', 'Unknown')} ({cp_id})")
return retrieve_counterparty(cp_id)
def retrieve_counterparty(counterparty_id):
"""GET /counterparty/{id} — returns the counterparty data."""
print(f"Retrieving counterparty {counterparty_id}...")
response = requests.get(f"{API_URL}/counterparty/{counterparty_id}", headers=HEADERS)
check_response(response)
data = response.json()
print(f" Name: {data.get('name', 'Unknown')}")
return data
# =============================================
# Step 9: Resolve the payment method
# =============================================
def resolve_payment_method(counterparty_data):
"""Determine which payment method to use.
If the counterparty has a single payment method, use it directly.
If multiple, list them and ask the user to select.
If none (revtag-only), return (None, None).
Returns (payment_method_id, receiver_key).
"""
accounts = counterparty_data.get("accounts", [])
cards = counterparty_data.get("cards", [])
if not accounts and not cards:
return None, None
all_methods = []
for account in accounts:
all_methods.append(("account_id", account))
for card in cards:
all_methods.append(("card_id", card))
if len(all_methods) == 1:
receiver_key, method = all_methods[0]
print(f" Single payment method found: {method.get('id')}")
return method["id"], receiver_key
print("\nMultiple payment methods available:")
for i, (key, method) in enumerate(all_methods, 1):
if key == "account_id":
method_type = "bank account"
ref = method.get("iban") or method.get("account_no") or "Revolut account"
currency = method.get("currency", "N/A")
print(f" {i}. [{method_type}] {method.get('name', 'N/A')} — {ref} ({currency})")
print(f" ID: {method['id']}")
else:
method_type = "card"
ref = f"*{method.get('last_digits', '????')} ({method.get('scheme', 'unknown')})"
print(f" {i}. [{method_type}] {method.get('name', 'N/A')} — {ref}")
print(f" ID: {method['id']}")
print(f" {len(all_methods) + 1}. Cancel")
choice = ask(f"Select a payment method (1-{len(all_methods) + 1})")
while not choice.isdigit() or int(choice) < 1 or int(choice) > len(all_methods) + 1:
choice = ask(f"Invalid choice. Select 1-{len(all_methods) + 1}")
idx = int(choice) - 1
if idx == len(all_methods):
print("Transfer cancelled.")
return None, None
receiver_key, method = all_methods[idx]
return method["id"], receiver_key
def build_receiver(counterparty_id, payment_method_id, receiver_key):
"""Build the receiver object for /pay endpoints."""
receiver = {"counterparty_id": counterparty_id}
if payment_method_id:
receiver[receiver_key] = payment_method_id
return receiver
# =============================================
# Step 10: Get destination details
# =============================================
def get_destination_details(counterparty_data, payment_method_id, receiver_key):
"""Extract destination details from the resolved payment method.
Returns (country, currency, recipient_type, counterparty_type).
"""
recipient_type = counterparty_data.get("profile_type", "unknown")
accounts = counterparty_data.get("accounts", [])
is_revolut = "revtag" in counterparty_data
if receiver_key == "account_id":
for account in accounts:
if account.get("id") == payment_method_id:
bank_country = account.get("bank_country", "unknown")
account_currency = account.get("currency", "unknown")
break
else:
bank_country = "unknown"
account_currency = "unknown"
counterparty_type = "Revolut account" if is_revolut else "bank account"
elif receiver_key == "card_id":
bank_country = "N/A"
account_currency = "N/A"
counterparty_type = "card"
else:
bank_country = counterparty_data.get("country", "unknown")
account_currency = "N/A"
counterparty_type = "Revolut (revtag)"
return bank_country, account_currency, recipient_type, counterparty_type
# =============================================
# Step 11: Ask for source account and transfer details
# =============================================
def ask_source_account():
"""Ask the user how to identify their source account, then retrieve it.
Two options:
1. Enter the account ID directly.
2. Choose from the list of active accounts.
Returns the account ID.
"""
print("\n1. Enter your account ID (the pocket to send from)")
print("2. Choose from the list of your accounts")
choice = ask("Select an option (1/2)")
while choice not in ("1", "2"):
choice = ask("Invalid choice. Select 1 or 2")
if choice == "1":
return ask("Enter your account ID")
# List accounts and let the user pick
print("Retrieving your accounts...")
response = requests.get(f"{API_URL}/accounts", headers=HEADERS)
check_response(response)
accounts = response.json()
active = [a for a in accounts if a.get("state") == "active"]
if not active:
print(" No active accounts found.")
return ask("Enter your account ID manually")
print(f"\n Found {len(active)} active account{'s' if len(active) != 1 else ''}:\n")
for i, acc in enumerate(active):
name = acc.get("name", "Unknown")
cur = acc.get("currency", "?")
balance = acc.get("balance", "?")
print(f" {i + 1}. {name} [{cur}] — balance: {balance}")
choice = ask(f"\n Select an account (1-{len(active)})")
while not choice.isdigit() or int(choice) < 1 or int(choice) > len(active):
choice = ask(f" Invalid choice. Enter a number 1-{len(active)}")
selected = active[int(choice) - 1]
acc_id = selected["id"]
print(f"\n Selected: {selected.get('name', 'Unknown')} ({acc_id})")
return acc_id
def ask_transfer_details():
"""Ask the user for the transfer amount and currency.
Returns (amount, currency).
"""
amount_str = ask("Enter the amount to transfer")
while not amount_str or not amount_str.replace(".", "").replace(",", "").isdigit():
amount_str = ask("Invalid amount. Enter a numeric value")
amount = float(amount_str.replace(",", ""))
currency = ask("Enter the transfer currency (e.g. GBP)").upper()
return amount, currency
# =============================================
# Step 12: Check currency mismatch
# =============================================
def get_account_currency(account_id):
"""GET /accounts/{id} — returns the account's currency."""
response = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(response)
account = response.json()
return account.get("currency", "unknown")
def get_matching_accounts(currency):
"""GET /accounts — find active accounts matching the given currency.
Returns a list of matching account dicts.
"""
response = requests.get(f"{API_URL}/accounts", headers=HEADERS)
check_response(response)
accounts = response.json()
return [a for a in accounts if a.get("currency") == currency and a.get("state") == "active"]
def get_exchange_rate(from_currency, to_currency, amount):
"""GET /rate — returns the exchange rate and converted amount."""
params = {"from": from_currency, "to": to_currency, "amount": amount}
response = requests.get(f"{API_URL}/rate", params=params, headers=HEADERS)
check_response(response)
return response.json()
def check_currency_mismatch(account_id, transfer_currency, destination_currency, amount):
"""Check if the transfer currency matches the destination currency.
If mismatch, offer the user three options:
1. Switch to a source account whose currency matches the destination
2. Switch the transfer currency to the destination currency (with FX preview)
3. Cancel
Returns (account_id, transfer_currency, amount_or_flag):
- amount_or_flag is None when currencies match or option 2 is chosen
(option 2 returns the string "fx" so the caller can do the conversion)
- amount_or_flag is a float when option 1 is chosen (new amount in dest currency)
- Returns None entirely if cancelled.
"""
if transfer_currency == destination_currency:
return account_id, transfer_currency, None
print(f"\nCurrency mismatch: transfer is {transfer_currency}, destination is {destination_currency}.")
print("Options:")
print(" 1. Use a different source account (matching destination currency)")
print(" 2. Switch transfer currency to destination currency (FX conversion)")
print(" 3. Cancel")
choice = ask("Select an option (1/2/3)")
while choice not in ("1", "2", "3"):
choice = ask("Invalid choice. Select 1, 2, or 3")
if choice == "3":
print("Transfer cancelled.")
return None
if choice == "1":
matching = get_matching_accounts(destination_currency)
if not matching:
print(f" No active accounts found with currency {destination_currency}.")
print(" Consider option 2 (switch transfer currency) instead.")
return check_currency_mismatch(account_id, transfer_currency, destination_currency, amount)
print(f"\nAccounts matching {destination_currency}:")
for i, acc in enumerate(matching, 1):
print(f" {i}. {acc.get('name', 'N/A')} — balance: {acc.get('balance', 0)} {acc.get('currency')}")
print(f" ID: {acc['id']}")
print(f" {len(matching) + 1}. Cancel")
sel = ask(f"Select an account (1-{len(matching) + 1})")
while not sel.isdigit() or int(sel) < 1 or int(sel) > len(matching) + 1:
sel = ask(f"Invalid choice. Select 1-{len(matching) + 1}")
idx = int(sel) - 1
if idx == len(matching):
print("Transfer cancelled.")
return None
new_account_id = matching[idx]["id"]
print(f" Switched to account {new_account_id} ({matching[idx].get('currency')})")
# Convert the original amount to the destination currency via FX rate
print(f"\n Converting {amount} {transfer_currency} → {destination_currency}...")
fx_data = get_exchange_rate(transfer_currency, destination_currency, amount)
rate = fx_data.get("rate", 0)
converted_amount = round(amount * rate, 2)
print(f" FX rate: {transfer_currency} → {destination_currency}: {rate}")
print(f" Suggested amount: {converted_amount} {destination_currency}")
entered = ask(f" Use this amount? (y/n)", "y")
if entered.lower() in ("y", "yes"):
return new_account_id, destination_currency, converted_amount
amount_str = ask(f" Enter your own amount ({destination_currency})")
while not amount_str or not amount_str.replace(".", "").replace(",", "").isdigit():
amount_str = ask(" Invalid amount. Enter a numeric value")
return new_account_id, destination_currency, float(amount_str.replace(",", ""))
if choice == "2":
print(f"\nChecking FX rate: {transfer_currency} → {destination_currency}...")
fx_data = get_exchange_rate(transfer_currency, destination_currency, amount)
rate = fx_data.get("rate", 0)
converted_amount = round(amount * rate, 2)
print(f" FX rate: {transfer_currency} → {destination_currency}: {rate}")
print(f" Converted amount: {converted_amount} {destination_currency}")
confirm = ask(f"Confirm transfer of {converted_amount} {destination_currency}? (y/n)")
if confirm not in ("y", "yes"):
print("Transfer cancelled.")
return None
return account_id, destination_currency, converted_amount
# =============================================
# Step 13: Check transfer field requirements
# =============================================
def check_transfer_field_requirements(account_id, receiver):
"""POST /pay/fields — returns required and optional fields for the transfer."""
print("Checking transfer field requirements...")
payload = {"account_id": account_id, "receiver": receiver}
response = requests.post(f"{API_URL}/pay/fields", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
def build_payment_payload(transfer_fields, account_id, receiver, amount, currency, reference):
"""Build the payment payload from always required fields + conditionally available fields.
Returns (payload, missing_required) where missing_required is a list of required
field names that have no value.
"""
payload = {
"request_id": str(uuid.uuid4()),
"account_id": account_id,
"receiver": receiver,
"amount": amount,
"currency": currency,
}
provided = {"reference": reference}
missing_required = []
for field in transfer_fields.get("fields", []):
name = field["name"]
is_required = field.get("required", False)
if name in provided and provided[name] is not None:
payload[name] = provided[name]
elif is_required:
missing_required.append(name)
return payload, missing_required
# =============================================
# Step 14: Get an indicative quote
# =============================================
def get_indicative_quote(payment_payload, currency):
"""POST /pay/indicative-quote — returns fees, exchange rate, and delivery time."""
print("Fetching indicative quote...")
payload = {k: v for k, v in payment_payload.items() if k != "request_id"}
response = requests.post(f"{API_URL}/pay/indicative-quote", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
fee = data.get("fee", {})
total = data.get("estimated_total", {})
print(f" Fee: {fee.get('amount', 0)} {fee.get('currency', currency)}")
print(f" Total: {total.get('amount', 0)} {total.get('currency', currency)}")
return data
# =============================================
# Step 15: Get own account details and print transfer summary
# =============================================
def get_account_details(account_id):
"""GET /accounts/{id}/bank-details — returns the sender's bank details.
Falls back to GET /accounts/{id} for the account name when bank details
are not available (e.g. currency pockets without local bank details).
"""
print("Fetching account bank details...")
response = requests.get(f"{API_URL}/accounts/{account_id}/bank-details", headers=HEADERS)
check_response(response)
data = response.json()
if isinstance(data, list) and data:
entry = data[0]
elif isinstance(data, dict):
entry = data
else:
# No bank details — fall back to account info for at least the name
print(" No bank details available, fetching account info...")
acct_resp = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(acct_resp)
acct = acct_resp.json()
entry = {"beneficiary": acct.get("name", "Unknown")}
print(f" Sender: {entry.get('beneficiary', 'Unknown')}")
return entry
def print_transfer_summary(sender, counterparty_name, pm_details, pm_address, amount, currency, reference, quote):
"""Display a human-readable transfer summary."""
fee = quote.get("fee", {})
total = quote.get("estimated_total", {})
rate = quote.get("estimated_exchange_rate")
arrival = quote.get("estimated_arrival", {})
sender_name = sender.get("beneficiary", "Unknown")
sender_addr = sender.get("beneficiary_address", {})
sender_ref = sender.get("iban") or sender.get("account_no") or "N/A"
sender_addr_str = ", ".join(filter(None, [
sender_addr.get("street_line1"),
sender_addr.get("city"),
sender_addr.get("country"),
sender_addr.get("postcode"),
])) if sender_addr else ""
pm_addr_str = ", ".join(filter(None, [
pm_address.get("street_line1"),
pm_address.get("city"),
pm_address.get("country"),
pm_address.get("postcode"),
])) if pm_address else ""
print("\n" + "=" * 50)
print("TRANSFER SUMMARY")
print("=" * 50)
print(f"FROM: {sender_name}")
print(f" {sender_ref}")
if sender_addr_str:
print(f" {sender_addr_str}")
print(f"TO: {counterparty_name}")
print(f" {pm_details['account_ref']}")
if pm_addr_str:
print(f" {pm_addr_str}")
print(f"\nREFERENCE: {reference}")
print("-" * 50)
print(f"Amount: {amount} {currency}")
if fee.get("amount") is not None:
print(f"Fee: {fee.get('amount')} {fee.get('currency')}")
if fee.get("breakdown"):
for key, val in fee["breakdown"].items():
print(f" - {key}: {val.get('amount')} {val.get('currency')}")
if rate:
print(f"Exchange rate: {rate}")
if total.get("amount") is not None:
print(f"Total cost: {total.get('amount')} {total.get('currency')}")
if arrival:
print(f"Delivery: {arrival.get('speed', '')} ({arrival.get('date', '')})")
print("=" * 50)
print("\n")
# =============================================
# Step 16: Check account balance
# =============================================
def check_balance(account_id, total_cost, total_currency):
"""GET /accounts/{id} — check if the balance covers the total cost.
Returns True if sufficient, False otherwise.
"""
print("Checking account balance...")
response = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(response)
account = response.json()
balance = account.get("balance", 0)
balance_currency = account.get("currency")
print(f" Balance: {balance} {balance_currency}")
print(f" Total cost: {total_cost} {total_currency}")
if balance_currency == total_currency and balance < total_cost:
print("Insufficient funds.")
return False
return True
# =============================================
# Step 17: Ask for confirmation
# =============================================
def confirm_transfer():
"""Ask the user to confirm the transfer.
Returns True if confirmed, False otherwise.
"""
confirm = input("\nProceed with this transfer? ([y]es/[n]o): ").strip().lower()
if confirm not in ("y", "yes"):
print("Transfer cancelled.")
return False
return True
# =============================================
# Step 18: Execute the transfer
# =============================================
def make_transfer(payload):
"""POST /pay — execute the transfer."""
print("Initiating transfer...")
response = requests.post(f"{API_URL}/pay", json=payload, headers=HEADERS)
check_response(response)
result = response.json()
print(f" Transaction ID: {result.get('id')}")
print(f" State: {result.get('state')}")
return result
# =============================================
# Step 19: Check transaction status (optional)
# =============================================
def check_transaction_status(transaction_id):
"""GET /transaction/{id} — check the transaction status."""
print("\nChecking transaction status...")
response = requests.get(f"{API_URL}/transaction/{transaction_id}", headers=HEADERS)
check_response(response)
transaction = response.json()
status = transaction.get("state")
print(f" Transaction ID: {transaction_id}")
print(f" Transaction status: {status}")
if status == "pending":
print("Please check again later.")
return status
# =============================================
# Main flow
# =============================================
def run():
# 1. Choose new or existing counterparty
mode = choose_counterparty_mode()
if mode == "new":
# 2. Get destination details (from config or interactive)
country = ask("Enter counterparty bank country (e.g. GB)", CP_COUNTRY)
currency = ask("Enter counterparty account currency (e.g. GBP)", CP_CURRENCY)
recipient_type = ask("Enter recipient type (business/personal)", CP_RECIPIENT_TYPE)
# Print destination details (pre-creation)
counterparty_type = "Revolut (revtag)" if CP_REVTAG else "bank account"
print_destination_details(country, currency, recipient_type, counterparty_type)
# 3. Check supported countries and currencies
countries = check_supported_countries()
# 4. Verify the destination is supported
if not verify_destination_supported(countries, country, currency):
return
# 5. Check counterparty field requirements
field_requirements = check_counterparty_field_requirements(country, currency, recipient_type)
# 6. Build the counterparty payload
counterparty_payload = build_counterparty_payload(field_requirements, country, currency, recipient_type)
# 7. Validate the account name (CoP/VoP)
if not validate_account_name(counterparty_payload, country, currency, recipient_type):
return
# 8. Create the counterparty
counterparty = create_counterparty(counterparty_payload)
else:
# 9. Retrieve an existing counterparty (enter ID or choose from list)
counterparty = retrieve_existing_counterparty()
# 10. Validate the account name (CoP/VoP) — offer for existing counterparties too
accounts = counterparty.get("accounts", [])
country = counterparty.get("country", "")
if accounts:
if not country:
country = accounts[0].get("bank_country", "")
currency = accounts[0].get("currency", "")
recipient_type = counterparty.get("profile_type", "business")
else:
currency = ""
recipient_type = counterparty.get("profile_type", "business")
if country and currency:
cop_payload = {}
cp_name = counterparty.get("name", "")
if recipient_type == "business":
cop_payload["company_name"] = cp_name
else:
# Split the full name into first_name/last_name for CoP
parts = cp_name.split()
if len(parts) == 1:
cop_payload["individual_name"] = {"first_name": parts[0], "last_name": ""}
elif len(parts) == 2:
cop_payload["individual_name"] = {"first_name": parts[0], "last_name": parts[1]}
else:
# Multiple parts — list split options for the user to choose
print(f"\n The counterparty name is: {cp_name}")
print(" Select the correct first name / last name split:")
for i, split_idx in enumerate(range(1, len(parts)), 1):
first = " ".join(parts[:split_idx])
last = " ".join(parts[split_idx:])
print(f" {i}. First: {first} | Last: {last}")
sel = ask(f" Select an option (1-{len(parts) - 1})")
while not sel.isdigit() or int(sel) < 1 or int(sel) > len(parts) - 1:
sel = ask(f" Invalid choice. Enter 1-{len(parts) - 1}")
split_idx = int(sel)
cop_payload["individual_name"] = {
"first_name": " ".join(parts[:split_idx]),
"last_name": " ".join(parts[split_idx:]),
}
if accounts:
cop_payload["account_no"] = accounts[0].get("account_no", "")
cop_payload["sort_code"] = accounts[0].get("sort_code", "")
cop_payload["iban"] = accounts[0].get("iban", "")
cop_payload["bic"] = accounts[0].get("bic", "")
print("\nWould you like to validate the account name (CoP/VoP)?")
if ask("Run CoP/VoP check? (y/n)") in ("y", "yes"):
if not validate_account_name(cop_payload, country, currency, recipient_type):
return
# 11. Resolve the payment method
payment_method_id, receiver_key = resolve_payment_method(counterparty)
if not payment_method_id and not receiver_key and not ("revtag" in counterparty):
print("No payment method available.")
return
receiver = build_receiver(counterparty["id"], payment_method_id, receiver_key)
print(f"Payment method ID: {payment_method_id or 'none (revtag-only)'}")
# 12. Get destination details
bank_country, dest_currency, recipient_type, cp_type = get_destination_details(
counterparty, payment_method_id, receiver_key
)
print_destination_details(bank_country, dest_currency, recipient_type, cp_type)
# 13. Ask for source account and transfer details
account_id = ask_source_account()
amount, transfer_currency = ask_transfer_details()
reference = ask("Enter the payment reference")
# 14. Check currency mismatch
if dest_currency and dest_currency != "N/A":
result = check_currency_mismatch(account_id, transfer_currency, dest_currency, amount)
if result is None:
return
account_id, transfer_currency, mismatch_result = result
if mismatch_result is not None:
amount = mismatch_result
# 15. Check transfer field requirements
transfer_fields = check_transfer_field_requirements(account_id, receiver)
# Build the payment payload and check for missing required fields
payment_payload, missing_required = build_payment_payload(
transfer_fields, account_id, receiver, amount, transfer_currency, reference
)
if missing_required:
print(f"\nMissing required transfer fields: {missing_required}")
return
# 16. Get an indicative quote
quote = get_indicative_quote(payment_payload, transfer_currency)
# 17. Print transfer summary
sender = get_account_details(account_id)
pm_details = {
"account_ref": "",
"address": {},
}
accounts = counterparty.get("accounts", [])
cards = counterparty.get("cards", [])
for account in accounts:
if account.get("id") == payment_method_id:
pm_details = {
"account_ref": account.get("iban") or account.get("account_no") or "Revolut account",
"address": account.get("address", {}),
}
break
for card in cards:
if card.get("id") == payment_method_id:
pm_details = {
"account_ref": f"Card *{card.get('last_digits', '????')} ({card.get('scheme', 'unknown')})",
"address": {},
}
break
if not pm_details["account_ref"]:
pm_details = {"account_ref": "Revolut account (revtag)", "address": {}}
print_transfer_summary(sender, counterparty.get("name", "Unknown"), pm_details, pm_details["address"],
amount, transfer_currency, reference, quote)
# 18. Check that the account balance is sufficient
total = quote.get("estimated_total", {})
total_cost = total.get("amount", amount)
total_currency = total.get("currency", transfer_currency)
if not check_balance(account_id, total_cost, total_currency):
return
# 19. Ask for confirmation
if not confirm_transfer():
return
# 20. Execute the transfer
transaction = make_transfer(payment_payload)
print("Transfer initiated successfully!")
# 21. Ask if user wants to check transaction status
check_status = ask("\nCheck transaction status now? (y/n)")
if check_status in ("y", "yes"):
check_transaction_status(transaction.get("id"))
if __name__ == "__main__":
try:
run()
except ApiError:
print("\nTransfer flow stopped due to API error.")
except KeyboardInterrupt:
print("\nTransfer flow cancelled by user.")
except Exception as e:
print(f"\nUnexpected error: {e}")a1:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[["$","$L23",null,{"color":"grey-tone-50","name":"Document","size":16}],"interactive_transfer.py"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ca"}}]}]],"$Lcb"]}]
cc:T19cb,1. Create a new counterparty
2. Use an existing counterparty
Select an option (1/2): 1
Enter counterparty bank country (e.g. GB): GB
Enter counterparty account currency (e.g. GBP): GBP
Enter recipient type (business/personal): business
==================================================
DESTINATION: GB / GBP
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
Checking supported countries and currencies...
Found 213 supported countries
Destination GB/GBP is supported.
Checking counterparty field requirements...
Required fields: ['company_name', 'account_no', 'sort_code', 'address']
Optional fields: []
Enter company_name: Example Vendor Ltd
Enter account_no: 70294360
Enter sort_code: 30-96-17
Enter street_line1: 1 Canada Square
Enter city: London
Enter region:
Enter country: GB
Enter postcode: E14 5AB
Counterparty payload fields: ['profile_type', 'bank_country', 'currency', 'company_name', 'account_no', 'sort_code', 'address']
Validating account name (CoP/VoP)...
Result: matched
Creating counterparty...
Counterparty ID: b53fdd78-8d67-4f63-a103-eeeeef53cac8
State: created
Single payment method found: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
Payment method ID: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
==================================================
DESTINATION: GB / GBP
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
1. Enter your account ID (the pocket to send from)
2. Choose from the list of your accounts
Select an option (1/2): 1
Enter your account ID: a3b4c5d6-e7f8-9012-abcd-ef12345678901
Enter the amount to transfer: 1000
Enter the transfer currency (e.g. GBP): GBP
Enter the payment reference: Invoice #12345
Checking transfer field requirements...
Required fields: ['reference']
Optional fields: ['charge_bearer']
Fetching indicative quote...
Fee: 0 GBP
Total: 1000 GBP
Fetching account bank details...
Sender: Example Corp Ltd
==================================================
TRANSFER SUMMARY
==================================================
FROM: Example Corp Ltd
92109701
11 Washington Walk APT 327, Washington, GB, PE3 9UP
TO: Example Vendor Ltd
70294360
1 Canada Square, London, GB, E14 5AB
REFERENCE: Invoice #12345
--------------------------------------------------
Amount: 1000 GBP
Fee: 0 GBP
Total cost: 1000 GBP
Delivery: in_seconds (2026-07-07)
==================================================
Checking account balance...
Balance: 50000 GBP
Total cost: 1000 GBP
Proceed with this transfer? ([y]es/[n]o): y
Initiating transfer...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
State: pending
Transfer initiated successfully!
Check transaction status now? (y/n): y
Checking transaction status...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
Transaction status: completeda2:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Sample output (new UK / GBP business counterparty, GBP source account)"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$cc"}}]}]],"$Lcd"]}]
ce:T1aea,1. Create a new counterparty
2. Use an existing counterparty
Select an option (1/2): 2
1. Enter the counterparty ID
2. Choose from the list of counterparties
Select an option (1/2): 2
Retrieving your counterparties...
Loaded 100 counterparties so far. Load more? (y/n) [n]: n
Found 100 counterparties:
1. Example Vendor Ltd [business, bank account] — GBP (GB)
2. Acme Corp [business, bank account] — EUR (DE)
3. John Smith [personal, Revolut (revtag)] — @johnsmith
... (97 more)
Select a counterparty (1-100): 1
Selected: Example Vendor Ltd (b53fdd78-8d67-4f63-a103-eeeeef53cac8)
Retrieving counterparty b53fdd78-8d67-4f63-a103-eeeeef53cac8...
Name: Example Vendor Ltd
Would you like to validate the account name (CoP/VoP)?
Run CoP/VoP check? (y/n): y
Validating account name (CoP/VoP)...
Result: matched
Single payment method found: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
Payment method ID: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
==================================================
DESTINATION: GB / GBP
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
1. Enter your account ID (the pocket to send from)
2. Choose from the list of your accounts
Select an option (1/2): 2
Retrieving your accounts...
Found 5 active accounts:
1. GBP pocket [GBP] — balance: 50000
2. EUR pocket [EUR] — balance: 10000
3. USD pocket [USD] — balance: 5000
4. Payroll [GBP] — balance: 12000
5. Misc [GBP] — balance: 0
Select an account (1-5): 1
Selected: GBP pocket (a3b4c5d6-e7f8-9012-abcd-ef12345678901)
Enter the amount to transfer: 1000
Enter the transfer currency (e.g. GBP): GBP
Enter the payment reference: Invoice #12345
Checking transfer field requirements...
Required fields: ['reference']
Optional fields: ['charge_bearer']
Fetching indicative quote...
Fee: 0 GBP
Total: 1000 GBP
Fetching account bank details...
Sender: Example Corp Ltd
==================================================
TRANSFER SUMMARY
==================================================
FROM: Example Corp Ltd
92109701
11 Washington Walk APT 327, Washington, GB, PE3 9UP
TO: Example Vendor Ltd
70294360
1 Canada Square, London, GB, E14 5AB
REFERENCE: Invoice #12345
--------------------------------------------------
Amount: 1000 GBP
Fee: 0 GBP
Total cost: 1000 GBP
Delivery: in_seconds (2026-07-07)
==================================================
Checking account balance...
Balance: 50000 GBP
Total cost: 1000 GBP
Proceed with this transfer? ([y]es/[n]o): y
Initiating transfer...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
State: pending
Transfer initiated successfully!
Check transaction status now? (y/n): y
Checking transaction status...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
Transaction status: completeda3:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Sample output (existing UK / GBP business counterparty, GBP source account)"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ce"}}]}]],"$Lcf"]}]
a8:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"fields\": [\n {\n \"name\": \"company_name\",\n \"required\": true,\n \"regex\": {\n \"pattern\": \"^.{3,255}$\",\n \"description\": \"Beneficiary company name cannot be shorter than 3 characters and longer than 255 characters\"\n }\n },\n {\n \"name\": \"sort_code\",\n \"required\": true,\n \"regex\": {\n \"pattern\": \"^\\\\d{6}$\",\n \"description\": \"Must be a 6-digit number\"\n }\n },\n {\n \"name\": \"account_no\",\n \"required\": true,\n \"regex\": {\n \"pattern\": \"^\\\\d{8}$\",\n \"description\": \"Must be an 8-digit number\"\n }\n },\n {\n \"name\": \"address\",\n \"required\": true\n }\n ]\n}\n"}]}]
aa:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"fields\": [\n {\n \"name\": \"company_name\",\n \"required\": true,\n \"regex\": {\n \"pattern\": \"^.{3,255}$\",\n \"description\": \"Beneficiary company name cannot be shorter than 3 characters and longer than 255 characters\"\n }\n },\n {\n \"name\": \"iban\",\n \"required\": true,\n \"regex\": {\n \"pattern\": \"^[A-Z]{2}\\\\d{2}[A-Z0-9]{1,30}$\",\n \"description\": \"IBAN format\"\n }\n },\n {\n \"name\": \"bic\",\n \"required\": false,\n \"regex\": {\n \"pattern\": \"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$\",\n \"description\": \"BIC format\"\n }\n },\n {\n \"name\": \"address\",\n \"required\": false\n }\n ]\n}\n"}]}]
ac:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"fields\": [\n {\n \"name\": \"company_name\",\n \"required\": true,\n \"regex\": {\n \"pattern\": \"^.{3,255}$\",\n \"description\": \"Beneficiary company name cannot be shorter than 3 characters and longer than 255 characters\"\n }\n },\n {\n \"name\": \"route\",\n \"required\": true,\n \"options\": [\n { \"value\": \"ach\", \"default\": true },\n { \"value\": \"fedwire\" },\n { \"value\": \"bic\" }\n ]\n },\n {\n \"name\": \"routing_number\",\n \"required\": true,\n \"regex\": {\n \"pattern\": \"^\\\\d{9}$\",\n \"description\": \"Must be a 9-digit number\"\n }\n },\n {\n \"name\": \"account_no\",\n \"required\": true,\n \"regex\": {\n \"pattern\": \"^\\\\d{6,17}$\",\n \"description\": \"Must be between 6 and 17 digits long, numeric only\"\n }\n },\n {\n \"name\": \"address\",\n \"required\": true\n }\n ]\n}\n"}]}]
b0:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"fields\": [\n {\n \"name\": \"charge_bearer\",\n \"required\": false,\n \"options\": [\n { \"value\": \"shared\", \"default\": true },\n { \"value\": \"debtor\" }\n ]\n },\n {\n \"name\": \"reference\",\n \"required\": true,\n \"validation\": {\n \"max_length\": 140\n }\n }\n ]\n}\n"}]}]
b2:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"fields\": [\n {\n \"name\": \"reference\",\n \"required\": true,\n \"validation\": {\n \"max_length\": 140\n }\n },\n {\n \"name\": \"charge_bearer\",\n \"required\": false,\n \"options\": [\n { \"value\": \"shared\", \"default\": true },\n { \"value\": \"debtor\" }\n ]\n }\n ]\n}\n"}]}]
b4:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"fields\": [\n {\n \"name\": \"reference\",\n \"required\": true,\n \"validation\": {\n \"max_length\": 140\n }\n },\n {\n \"name\": \"charge_bearer\",\n \"required\": false,\n \"options\": [\n { \"value\": \"shared\", \"default\": true },\n { \"value\": \"debtor\" }\n ]\n }\n ]\n}\n"}]}]
b8:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"amount\": {\n \"amount\": 1000.00,\n \"currency\": \"GBP\"\n },\n \"fee\": {\n \"amount\": 0,\n \"currency\": \"GBP\"\n },\n \"estimated_total\": {\n \"amount\": 1000.00,\n \"currency\": \"GBP\"\n },\n \"estimated_arrival\": {\n \"date\": \"2026-07-02\",\n \"speed\": \"in_seconds\"\n }\n}\n"}]}]
ba:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"amount\": {\n \"amount\": 1000.00,\n \"currency\": \"EUR\"\n },\n \"fee\": {\n \"amount\": 5.75,\n \"currency\": \"GBP\",\n \"breakdown\": {\n \"transfer_fee\": {\n \"amount\": 3.00,\n \"currency\": \"GBP\"\n },\n \"exchange_fee\": {\n \"amount\": 2.75,\n \"currency\": \"GBP\"\n }\n }\n },\n \"estimated_total\": {\n \"amount\": 864.40,\n \"currency\": \"GBP\"\n },\n \"estimated_exchange_rate\": \"1.16458\",\n \"estimated_amount_after_exchange\": {\n \"amount\": 858.65,\n \"currency\": \"GBP\"\n },\n \"estimated_arrival\": {\n \"date\": \"2026-07-09\",\n \"speed\": \"by_date\"\n }\n}\n"}]}]
bc:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"amount\": {\n \"amount\": 1000.00,\n \"currency\": \"USD\"\n },\n \"fee\": {\n \"amount\": 6.50,\n \"currency\": \"GBP\",\n \"breakdown\": {\n \"transfer_fee\": {\n \"amount\": 4.00,\n \"currency\": \"GBP\"\n },\n \"exchange_fee\": {\n \"amount\": 2.50,\n \"currency\": \"GBP\"\n }\n }\n },\n \"estimated_total\": {\n \"amount\": 789.89,\n \"currency\": \"GBP\"\n },\n \"estimated_exchange_rate\": \"1.27650\",\n \"estimated_amount_after_exchange\": {\n \"amount\": 783.39,\n \"currency\": \"GBP\"\n },\n \"estimated_arrival\": {\n \"date\": \"2026-07-09\",\n \"speed\": \"by_date\"\n }\n}\n"}]}]
bf:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"amount\": {\n \"amount\": 1000.00,\n \"currency\": \"GBP\"\n },\n \"fee\": {\n \"amount\": 0,\n \"currency\": \"GBP\"\n },\n \"estimated_total\": {\n \"amount\": 1000.00,\n \"currency\": \"GBP\"\n },\n \"estimated_arrival\": {\n \"date\": \"2026-07-02\",\n \"speed\": \"in_seconds\"\n }\n}\n"}]}]
c1:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"amount\": {\n \"amount\": 1000.00,\n \"currency\": \"GBP\"\n },\n \"fee\": {\n \"amount\": 10.00,\n \"currency\": \"GBP\"\n },\n \"estimated_total\": {\n \"amount\": 1010.00,\n \"currency\": \"GBP\"\n },\n \"estimated_arrival\": {\n \"date\": \"2026-07-02\",\n \"speed\": \"in_seconds\"\n }\n}\n"}]}]
d0:T55e7,import requests
import uuid
# =============================================
# Configuration: adjust these values as needed
# =============================================
API_URL = "https://b2b.revolut.com/api/1.0"
API_TOKEN = "YOUR_API_TOKEN" # Replace with your own token
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# Your account (the pocket you're sending from)
ACCOUNT_ID = "YOUR_ACCOUNT_ID" # Replace with your own account ID
# Destination details
COUNTRY = "GB" # Counterparty's bank country
CURRENCY = "GBP" # Counterparty's account currency
RECIPIENT_TYPE = "business" # "business" or "personal"
# Counterparty data — provide all fields that apply for your destination.
# The script will keep only the fields required by the API (discovered in step 3).
COUNTERPARTY_DATA = {
"company_name": "Example Vendor Ltd",
"account_no": "12345678",
"sort_code": "123456",
"address": {
"street_line1": "1 Canada Square",
"city": "London",
"region": "Greater London",
"country": "GB",
"postcode": "E14 5AB"
}
}
# Transfer details
AMOUNT = 1.23
REFERENCE = "Invoice #12345"
# =============================================
# Error handling
# =============================================
class ApiError(Exception):
pass
def check_response(response):
"""Print error details and raise ApiError if the response failed."""
if response.ok:
return
try:
error_data = response.json()
print(f"\nAPI Error (HTTP {response.status_code})")
print(f" Code: {error_data.get('code', 'N/A')}")
print(f" Message: {error_data.get('message', 'N/A')}")
print(f" Error ID: {error_data.get('error_id', 'N/A')}")
except Exception:
print(f"\nAPI Error (HTTP {response.status_code}): {response.text}")
raise ApiError(f"Request failed with status {response.status_code}")
# =============================================
# Print destination details
# =============================================
def print_destination_details(country, currency, recipient_type, counterparty_type):
"""Print a summary of the destination details."""
print("=" * 50)
print(f"DESTINATION: {country} / {currency}")
print(f"RECIPIENT TYPE: {recipient_type}")
print(f"COUNTERPARTY TYPE: {counterparty_type}")
print("=" * 50)
# =============================================
# Step 1: Check supported countries and currencies
# =============================================
def check_supported_countries():
"""GET /counterparties/countries — returns supported country/currency pairs."""
print("Checking supported countries and currencies...")
response = requests.get(f"{API_URL}/counterparties/countries", headers=HEADERS)
check_response(response)
data = response.json()
countries = data.get("countries", [])
print(f" Found {len(countries)} supported countries")
return countries
# =============================================
# Step 2: Verify the destination is supported
# =============================================
def verify_destination_supported(countries, country, currency):
"""Check if the desired country/currency combination is supported.
Returns True if supported, False otherwise.
"""
for entry in countries:
if entry.get("country") == country and currency in entry.get("currencies", []):
print(f" Destination {country}/{currency} is supported.")
return True
print(f" Destination {country}/{currency} is not supported.")
return False
# =============================================
# Step 3: Check counterparty field requirements
# =============================================
def check_counterparty_field_requirements(country, currency, recipient_type):
"""GET /counterparties/fields — returns required and applicable fields."""
print("Checking counterparty field requirements...")
params = {"country": country, "currency": currency, "recipient_type": recipient_type}
response = requests.get(f"{API_URL}/counterparties/fields", params=params, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
# =============================================
# Step 4: Build the counterparty payload
# =============================================
def build_counterparty_payload(field_requirements, country, currency, recipient_type, counterparty_data):
"""Combine always required fields with applicable fields from the requirements response.
Only fields present in the requirements response (or always required) are included.
Fields with no data (None) are dropped.
"""
payload = {
"profile_type": recipient_type,
"bank_country": country,
"currency": currency,
}
for field in field_requirements.get("fields", []):
name = field["name"]
if name in counterparty_data and counterparty_data[name] is not None:
payload[name] = counterparty_data[name]
# Group first_name/last_name into individual_name for personal counterparties
if recipient_type == "personal":
individual_name = {}
if "first_name" in payload:
individual_name["first_name"] = payload.pop("first_name")
if "last_name" in payload:
individual_name["last_name"] = payload.pop("last_name")
if individual_name:
payload["individual_name"] = individual_name
print(f" Counterparty payload fields: {list(payload.keys())}")
return payload
# =============================================
# Step 5: Validate the account name (CoP/VoP)
# =============================================
def build_cop_request(counterparty_data, country, currency, recipient_type):
"""Build the CoP request body based on the destination region.
Returns the request dict, or None if CoP is not available for this destination.
"""
request = {}
if recipient_type == "business":
request["company_name"] = counterparty_data.get("company_name")
else:
individual = counterparty_data.get("individual_name", {})
request["individual_name"] = {
"first_name": individual.get("first_name") or counterparty_data.get("first_name"),
"last_name": individual.get("last_name") or counterparty_data.get("last_name"),
}
if country == "GB" and currency == "GBP":
request["account_no"] = counterparty_data.get("account_no")
request["sort_code"] = counterparty_data.get("sort_code")
elif country == "AU" and currency == "AUD":
request["account_no"] = counterparty_data.get("account_no")
request["bsb"] = counterparty_data.get("bsb")
elif currency == "EUR" or (country == "RO" and currency == "RON"):
request["iban"] = counterparty_data.get("iban")
request["recipient_country"] = country
request["recipient_currency"] = currency
if counterparty_data.get("bic"):
request["bic"] = counterparty_data.get("bic")
else:
return None
return request
def validate_account_name(counterparty_data, country, currency, recipient_type):
"""POST /account-name-validation — validate the account name (CoP/VoP).
Returns True if the flow should proceed, False if it should stop.
"""
cop_request = build_cop_request(counterparty_data, country, currency, recipient_type)
if cop_request is None:
print("CoP/VoP is not available for this destination.")
return ask_to_proceed()
print("Validating account name (CoP/VoP)...")
try:
response = requests.post(f"{API_URL}/account-name-validation", json=cop_request, headers=HEADERS)
check_response(response)
except ApiError:
print(" CoP/VoP check failed.")
return ask_to_proceed()
result = response.json()
result_code = result.get("result_code")
print(f" Result: {result_code}")
if result_code in ("matched", "close_match"):
if result_code == "close_match":
if "company_name" in result:
print(f" Actual name: {result['company_name']}")
elif "individual_name" in result:
name = result["individual_name"]
print(f" Actual name: {name.get('first_name', '')} {name.get('last_name', '')}")
return True
if result_code == "not_matched":
print(" The account name does not match.")
return False
# cannot_be_checked or temporarily_unavailable
print(f" The check could not be completed (result: {result_code}).")
return ask_to_proceed()
def ask_to_proceed():
"""Ask the user whether to proceed after a non-blocking issue.
Returns True if the user wants to proceed, False otherwise.
"""
confirm = input("Proceed anyway? ([y]es/[n]o): ").strip().lower()
if confirm in ("y", "yes"):
return True
print("Transfer cancelled.")
return False
# =============================================
# Step 6: Create the counterparty
# =============================================
def create_counterparty(payload):
"""POST /counterparty — create the counterparty."""
print("Creating counterparty...")
response = requests.post(f"{API_URL}/counterparty", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
print(f" Counterparty ID: {data.get('id')}")
print(f" State: {data.get('state')}")
return data
# =============================================
# Step 7: Extract payment method details
# =============================================
def extract_payment_method(counterparty_data):
"""Extract the counterparty ID, payment method ID, and human-readable details.
Returns (counterparty_id, payment_method_id, receiver_key, pm_details).
"""
counterparty_id = counterparty_data["id"]
accounts = counterparty_data.get("accounts", [])
cards = counterparty_data.get("cards", [])
if accounts:
account = accounts[0]
pm_id = account["id"]
pm_details = {
"account_ref": account.get("iban") or account.get("account_no") or "Revolut account",
"address": account.get("address", {}),
}
return counterparty_id, pm_id, "account_id", pm_details
if cards:
card = cards[0]
pm_id = card["id"]
pm_details = {
"account_ref": f"Card *{card.get('last_digits', '????')} ({card.get('scheme', 'unknown')})",
"address": {},
}
return counterparty_id, pm_id, "card_id", pm_details
return counterparty_id, None, None, {
"account_ref": "Revolut account (revtag)",
"address": {},
}
def build_receiver(counterparty_id, payment_method_id, receiver_key):
"""Build the receiver object for /pay endpoints."""
receiver = {"counterparty_id": counterparty_id}
if payment_method_id:
receiver[receiver_key] = payment_method_id
return receiver
# =============================================
# Step 8: Check transfer field requirements
# =============================================
def check_transfer_field_requirements(account_id, receiver):
"""POST /pay/fields — returns required and optional fields for the transfer."""
print("Checking transfer field requirements...")
payload = {"account_id": account_id, "receiver": receiver}
response = requests.post(f"{API_URL}/pay/fields", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
def build_payment_payload(transfer_fields, account_id, receiver, amount, currency, reference):
"""Build the payment payload from always required fields + conditionally available fields.
Returns (payload, missing_required) where missing_required is a list of required
field names that have no value.
"""
payload = {
"request_id": str(uuid.uuid4()),
"account_id": account_id,
"receiver": receiver,
"amount": amount,
"currency": currency,
}
provided = {"reference": reference}
missing_required = []
for field in transfer_fields.get("fields", []):
name = field["name"]
is_required = field.get("required", False)
if name in provided and provided[name] is not None:
payload[name] = provided[name]
elif is_required:
missing_required.append(name)
return payload, missing_required
# =============================================
# Step 9: Get an indicative quote
# =============================================
def get_indicative_quote(payment_payload, currency):
"""POST /pay/indicative-quote — returns fees, exchange rate, and delivery time."""
print("Fetching indicative quote...")
payload = {k: v for k, v in payment_payload.items() if k != "request_id"}
response = requests.post(f"{API_URL}/pay/indicative-quote", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
fee = data.get("fee", {})
total = data.get("estimated_total", {})
print(f" Fee: {fee.get('amount', 0)} {fee.get('currency', currency)}")
print(f" Total: {total.get('amount', 0)} {total.get('currency', currency)}")
return data
# =============================================
# Step 10: Get own account details and print transfer summary
# =============================================
def get_account_details(account_id):
"""GET /accounts/{id}/bank-details — returns the sender's bank details."""
print("Fetching account bank details...")
response = requests.get(f"{API_URL}/accounts/{account_id}/bank-details", headers=HEADERS)
check_response(response)
data = response.json()
entry = data[0] if isinstance(data, list) else data
print(f" Sender: {entry.get('beneficiary', 'Unknown')}")
return entry
def print_transfer_summary(sender, counterparty_name, pm_details, pm_address, quote):
"""Display a human-readable transfer summary."""
fee = quote.get("fee", {})
total = quote.get("estimated_total", {})
rate = quote.get("estimated_exchange_rate")
arrival = quote.get("estimated_arrival", {})
sender_name = sender.get("beneficiary", "Unknown")
sender_addr = sender.get("beneficiary_address", {})
sender_ref = sender.get("iban") or sender.get("account_no") or "N/A"
sender_addr_str = ", ".join(filter(None, [
sender_addr.get("street_line1"),
sender_addr.get("city"),
sender_addr.get("country"),
sender_addr.get("postcode"),
])) if sender_addr else ""
pm_addr_str = ", ".join(filter(None, [
pm_address.get("street_line1"),
pm_address.get("city"),
pm_address.get("country"),
pm_address.get("postcode"),
])) if pm_address else ""
print("\n" + "=" * 50)
print("TRANSFER SUMMARY")
print("=" * 50)
print(f"FROM: {sender_name}")
print(f" {sender_ref}")
if sender_addr_str:
print(f" {sender_addr_str}")
print(f"TO: {counterparty_name}")
print(f" {pm_details['account_ref']}")
if pm_addr_str:
print(f" {pm_addr_str}")
print(f"\nREFERENCE: {REFERENCE}")
print("-" * 50)
print(f"Amount: {AMOUNT} {CURRENCY}")
if fee.get("amount") is not None:
print(f"Fee: {fee.get('amount')} {fee.get('currency')}")
if fee.get("breakdown"):
for key, val in fee["breakdown"].items():
print(f" - {key}: {val.get('amount')} {val.get('currency')}")
if rate:
print(f"Exchange rate: {rate}")
if total.get("amount") is not None:
print(f"Total cost: {total.get('amount')} {total.get('currency')}")
if arrival:
print(f"Delivery: {arrival.get('speed', '')} ({arrival.get('date', '')})")
print("=" * 50)
print("\n")
# =============================================
# Step 11: Check account balance
# =============================================
def check_balance(account_id, total_cost, total_currency):
"""GET /accounts/{id} — check if the balance covers the total cost.
Returns True if sufficient, False otherwise.
"""
print("Checking account balance...")
response = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(response)
account = response.json()
balance = account.get("balance", 0)
balance_currency = account.get("currency")
print(f" Balance: {balance} {balance_currency}")
print(f" Total cost: {total_cost} {total_currency}")
if balance_currency == total_currency and balance < total_cost:
print("Insufficient funds.")
return False
return True
# =============================================
# Step 12: Ask for confirmation
# =============================================
def confirm_transfer():
"""Ask the user to confirm the transfer.
Returns True if confirmed, False otherwise.
"""
confirm = input("\nProceed with this transfer? ([y]es/[n]o): ").strip().lower()
if confirm not in ("y", "yes"):
print("Transfer cancelled.")
return False
return True
# =============================================
# Step 13: Execute the transfer
# =============================================
def make_transfer(payload):
"""POST /pay — execute the transfer."""
print("Initiating transfer...")
response = requests.post(f"{API_URL}/pay", json=payload, headers=HEADERS)
check_response(response)
result = response.json()
print(f" Transaction ID: {result.get('id')}")
print(f" State: {result.get('state')}")
return result
# =============================================
# Step 14: Check transaction status
# =============================================
def check_transaction_status(transaction_id):
"""GET /transaction/{id} — check the transaction status."""
print("\nChecking transaction status...")
response = requests.get(f"{API_URL}/transaction/{transaction_id}", headers=HEADERS)
check_response(response)
transaction = response.json()
status = transaction.get("state")
print(f" Transaction ID: {transaction_id}")
print(f" Transaction status: {status}")
if status == "pending":
print("Please check again later.")
return status
# =============================================
# Main flow
# =============================================
def run():
# Print destination details
counterparty_type = "Revolut (revtag)" if "revtag" in COUNTERPARTY_DATA else "bank account"
print_destination_details(COUNTRY, CURRENCY, RECIPIENT_TYPE, counterparty_type)
# 1. Check supported countries and currencies
countries = check_supported_countries()
# 2. Verify the destination is supported
if not verify_destination_supported(countries, COUNTRY, CURRENCY):
return
# 3. Check counterparty field requirements
field_requirements = check_counterparty_field_requirements(COUNTRY, CURRENCY, RECIPIENT_TYPE)
# 4. Build the counterparty payload
counterparty_payload = build_counterparty_payload(
field_requirements, COUNTRY, CURRENCY, RECIPIENT_TYPE, COUNTERPARTY_DATA
)
# 5. Validate the account name (CoP/VoP)
if not validate_account_name(COUNTERPARTY_DATA, COUNTRY, CURRENCY, RECIPIENT_TYPE):
return
# 6. Create the counterparty
counterparty = create_counterparty(counterparty_payload)
# 7. Extract payment method details
counterparty_id, pm_id, receiver_key, pm_details = extract_payment_method(counterparty)
receiver = build_receiver(counterparty_id, pm_id, receiver_key)
print(f"Payment method ID: {pm_id or 'none (revtag-only)'}")
# 8. Check transfer field requirements
transfer_fields = check_transfer_field_requirements(ACCOUNT_ID, receiver)
# Build the payment payload and check for missing required fields
payment_payload, missing_required = build_payment_payload(
transfer_fields, ACCOUNT_ID, receiver, AMOUNT, CURRENCY, REFERENCE
)
if missing_required:
print(f"\nMissing required transfer fields: {missing_required}")
return
# 9. Get an indicative quote
quote = get_indicative_quote(payment_payload, CURRENCY)
# 10. Print transfer summary
sender = get_account_details(ACCOUNT_ID)
pm_address = pm_details.get("address", {})
print_transfer_summary(sender, counterparty.get("name", "Unknown"), pm_details, pm_address, quote)
# 11. Check that the account balance is sufficient
total = quote.get("estimated_total", {})
total_cost = total.get("amount", AMOUNT)
total_currency = total.get("currency", CURRENCY)
if not check_balance(ACCOUNT_ID, total_cost, total_currency):
return
# 12. Ask for confirmation
if not confirm_transfer():
return
# 13. Execute the transfer
transaction = make_transfer(payment_payload)
print("Transfer initiated successfully!")
# 14. Check transaction status
check_transaction_status(transaction.get("id"))
if __name__ == "__main__":
try:
run()
except ApiError:
print("\nTransfer flow stopped due to API error.")
except KeyboardInterrupt:
print("\nTransfer flow cancelled by user.")
except Exception as e:
print(f"\nUnexpected error: {e}")
c3:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"$d0"}]}]
d1:T77a,==================================================
DESTINATION: GB / GBP
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
Checking supported countries and currencies...
Found 213 supported countries
Destination GB/GBP is supported.
Checking counterparty field requirements...
Required fields: ['company_name', 'account_no', 'sort_code', 'address']
Optional fields: []
Counterparty payload fields: ['profile_type', 'bank_country', 'currency', 'company_name', 'account_no', 'sort_code', 'address']
Validating account name (CoP/VoP)...
Result: matched
Creating counterparty...
Counterparty ID: b53fdd78-8d67-4f63-a103-eeeeef53cac8
State: created
Payment method ID: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
Checking transfer field requirements...
Required fields: ['reference']
Optional fields: ['charge_bearer']
Fetching indicative quote...
Fee: 0 GBP
Total: 1000 GBP
Fetching account bank details...
Sender: Example Corp Ltd
==================================================
TRANSFER SUMMARY
==================================================
FROM: Example Corp Ltd
31926819
1 Westminster Way, London, GB, E14 5AB
TO: Example Vendor Ltd
12345678
1 Canada Square, London, GB, E14 5AB
REFERENCE: Invoice #12345
--------------------------------------------------
Amount: 1000 GBP
Fee: 0 GBP
Total cost: 1000 GBP
Delivery: in_seconds (2026-07-07)
==================================================
Checking account balance...
Balance: 50000 GBP
Total cost: 1000 GBP
Initiating transfer...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
State: pending
Transfer initiated successfully!
Checking transaction status...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
Transaction status: pending
Please check again later.
c5:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"$d1"}]}]
d2:T4881,import requests
import uuid
# =============================================
# Configuration: adjust these values as needed
# =============================================
API_URL = "https://b2b.revolut.com/api/1.0"
API_TOKEN = "YOUR_API_TOKEN" # Replace with your own token
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# Your account (the pocket you're sending from)
ACCOUNT_ID = "YOUR_ACCOUNT_ID" # Replace with your own account ID
# The counterparty to send to
COUNTERPARTY_ID = "YOUR_COUNTERPARTY_ID" # Replace with the ID of your counterparty
# Optional: if your counterparty has more than one payment method specified,
# uncomment the second RECEIVER block below and provide the ID of the appropriate payment method (account or card)
RECEIVER = None
#RECEIVER = {
# "account_id": "YOUR_COUNTERPARTY_ACCOUNT_ID", # Replace with the account ID of the selected payment method, set card_id to None
# "card_id": None # Replace with the card ID of the selected payment method, set account_id to None
#}
# Transfer details
AMOUNT = 1000
CURRENCY = "EUR"
REFERENCE = "Invoice #12345"
# Optional: address to set if the counterparty's payment method is missing one
UPDATED_ADDRESS = {
"street_line1": "Hauptstraße 45",
"city": "München",
"region": "Bayern",
"country": "DE",
"postcode": "80331"
}
# =============================================
# Error handling
# =============================================
class ApiError(Exception):
pass
def check_response(response):
"""Print error details and raise ApiError if the response failed."""
if response.ok:
return
try:
error_data = response.json()
print(f"\nAPI Error (HTTP {response.status_code})")
print(f" Code: {error_data.get('code', 'N/A')}")
print(f" Message: {error_data.get('message', 'N/A')}")
print(f" Error ID: {error_data.get('error_id', 'N/A')}")
except Exception:
print(f"\nAPI Error (HTTP {response.status_code}): {response.text}")
raise ApiError(f"Request failed with status {response.status_code}")
# =============================================
# Print destination details
# =============================================
def print_destination_details(country, currency, recipient_type, counterparty_type):
"""Print a summary of the destination details."""
print("=" * 50)
print(f"DESTINATION: {country} / {currency}")
print(f"RECIPIENT TYPE: {recipient_type}")
print(f"COUNTERPARTY TYPE: {counterparty_type}")
print("=" * 50)
# =============================================
# Step 1: Retrieve the counterparty
# =============================================
def retrieve_counterparty(counterparty_id):
"""GET /counterparty/{id} — returns the counterparty data."""
print(f"Retrieving counterparty {counterparty_id}...")
response = requests.get(f"{API_URL}/counterparty/{counterparty_id}", headers=HEADERS)
check_response(response)
data = response.json()
print(f" Name: {data.get('name', 'Unknown')}")
return data
# =============================================
# Step 2: Resolve the payment method
# =============================================
def resolve_payment_method(counterparty_data):
"""Determine which payment method to use.
If RECEIVER["account_id"] or RECEIVER["card_id"] is set, use it directly.
If RECEIVER not set, but counterparty has only one payment method, use it.
Otherwise, ask for payment method ID.
Returns (payment_method_id, receiver_key) where receiver_key is
"account_id", "card_id", or None.
"""
accounts = counterparty_data.get("accounts", [])
cards = counterparty_data.get("cards", [])
if RECEIVER:
if RECEIVER["account_id"]:
return RECEIVER["account_id"], "account_id"
if RECEIVER["card_id"]:
return RECEIVER["card_id"], "card_id"
else:
print("Invalid recipient. Please provide a valid payment method ID (account_id or card_id).")
return None, None
if not accounts and not cards:
return None, None
if accounts and len(accounts) == 1:
return accounts[0]["id"], "account_id"
if cards and len(cards) == 1:
return cards[0]["id"], "card_id"
print("Please provide a payment method (account_id or card_id)")
return None, None
def build_receiver(counterparty_id, payment_method_id, receiver_key):
"""Build the receiver object for /pay endpoints."""
receiver = {"counterparty_id": counterparty_id}
if payment_method_id:
receiver[receiver_key] = payment_method_id
return receiver
# =============================================
# Step 3: Check transfer field requirements
# =============================================
def check_transfer_fields(account_id, receiver):
"""POST /pay/fields — returns required and optional fields for the transfer."""
print("Checking transfer field requirements...")
payload = {"account_id": account_id, "receiver": receiver}
response = requests.post(f"{API_URL}/pay/fields", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
def build_payment_payload(transfer_fields, account_id, receiver, amount, currency, reference):
"""Build the payment payload from always required fields + conditionally available fields.
Returns (payload, missing_required) where missing_required is a list of required
field names that have no value.
"""
payload = {
"request_id": str(uuid.uuid4()),
"account_id": account_id,
"receiver": receiver,
"amount": amount,
"currency": currency,
}
provided = {"reference": reference}
missing_required = []
for field in transfer_fields.get("fields", []):
name = field["name"]
is_required = field.get("required", False)
if name in provided and provided[name] is not None:
payload[name] = provided[name]
elif is_required:
missing_required.append(name)
return payload, missing_required
# =============================================
# Step 4: Check and update the counterparty's address
# =============================================
def is_address_complete(address):
"""Check if an address has the minimum required fields."""
if not address:
return False
required = ["street_line1", "city", "country"]
return all(address.get(field) for field in required)
def check_and_update_address(counterparty_data, payment_method_id, receiver_key):
"""If the payment method's address is missing or incomplete, update it.
Returns the (possibly updated) address.
Applicable only to accounts.
"""
# Check if the payment method is an account; if not, exit
if receiver_key != "account_id":
return {}
accounts = counterparty_data.get("accounts", [])
# Find the current address on the payment method
current_address = {}
for account in accounts:
if account.get("id") == payment_method_id:
current_address = account.get("address", {})
break
if is_address_complete(current_address):
print("Address is complete.")
return current_address
print("Address is missing or incomplete.")
if payment_method_id:
print("Updating address...")
url = f"{API_URL}/counterparties/{counterparty_data['id']}/payment-methods/{payment_method_id}"
response = requests.patch(url, json={"address": UPDATED_ADDRESS}, headers=HEADERS)
check_response(response)
print(" Address updated.")
return UPDATED_ADDRESS
return {}
# =============================================
# Step 5: Get payment method details
# =============================================
def get_payment_method_details(counterparty_data, payment_method_id):
"""Extract human-readable details for the payment method.
Returns a dict with "account_ref" and "address".
"""
accounts = counterparty_data.get("accounts", [])
cards = counterparty_data.get("cards", [])
for account in accounts:
if account.get("id") == payment_method_id:
return {
"account_ref": account.get("iban") or account.get("account_no") or "Revolut account",
"address": account.get("address", {}),
}
for card in cards:
if card.get("id") == payment_method_id:
return {
"account_ref": f"Card *{card.get('last_digits', '????')} ({card.get('scheme', 'unknown')})",
"address": {},
}
return {
"account_ref": "Revolut account (revtag)",
"address": {},
}
# =============================================
# Step 6: Get own account details
# =============================================
def get_account_details(account_id):
"""GET /accounts/{id}/bank-details — returns the sender's bank details."""
print("Fetching account bank details...")
response = requests.get(f"{API_URL}/accounts/{account_id}/bank-details", headers=HEADERS)
check_response(response)
data = response.json()
# bank-details returns an array — use the first entry
entry = data[0] if isinstance(data, list) else data
print(f" Sender: {entry.get('beneficiary', 'Unknown')}")
return entry
# =============================================
# Step 7: Get an indicative quote
# =============================================
def get_indicative_quote(payment_payload, currency):
"""POST /pay/indicative-quote — returns fees, exchange rate, and delivery time."""
print("Fetching indicative quote...")
payload = {k: v for k, v in payment_payload.items() if k != "request_id"}
response = requests.post(f"{API_URL}/pay/indicative-quote", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
fee = data.get("fee", {})
total = data.get("estimated_total", {})
print(f" Fee: {fee.get('amount', 0)} {fee.get('currency', currency)}")
print(f" Total: {total.get('amount', 0)} {total.get('currency', currency)}")
return data
# =============================================
# Step 8: Print transfer summary
# =============================================
def print_transfer_summary(sender, counterparty_data, pm_details, pm_address, quote):
"""Display a human-readable transfer summary."""
fee = quote.get("fee", {})
total = quote.get("estimated_total", {})
rate = quote.get("estimated_exchange_rate")
arrival = quote.get("estimated_arrival", {})
sender_name = sender.get("beneficiary", "Unknown")
sender_addr = sender.get("beneficiary_address", {})
sender_ref = sender.get("iban") or sender.get("account_no") or "N/A"
sender_addr_str = ", ".join(filter(None, [
sender_addr.get("street_line1"),
sender_addr.get("city"),
sender_addr.get("country"),
sender_addr.get("postcode"),
])) if sender_addr else ""
pm_addr_str = ", ".join(filter(None, [
pm_address.get("street_line1"),
pm_address.get("city"),
pm_address.get("country"),
pm_address.get("postcode"),
])) if pm_address else ""
print("\n" + "=" * 50)
print("TRANSFER SUMMARY")
print("=" * 50)
print(f"FROM: {sender_name}")
print(f" {sender_ref}")
if sender_addr_str:
print(f" {sender_addr_str}")
print(f"TO: {counterparty_data.get('name', 'Unknown')}")
print(f" {pm_details['account_ref']}")
if pm_addr_str:
print(f" {pm_addr_str}")
print(f"\nREFERENCE: {REFERENCE}")
print("-" * 50)
print(f"Amount: {AMOUNT} {CURRENCY}")
if fee.get("amount") is not None:
print(f"Fee: {fee.get('amount')} {fee.get('currency')}")
if fee.get("breakdown"):
for key, val in fee["breakdown"].items():
print(f" - {key}: {val.get('amount')} {val.get('currency')}")
if rate:
print(f"Exchange rate: {rate}")
if total.get("amount") is not None:
print(f"Total cost: {total.get('amount')} {total.get('currency')}")
if arrival:
print(f"Delivery: {arrival.get('speed', '')} ({arrival.get('date', '')})")
print("=" * 50)
print("\n")
# =============================================
# Step 9: Check account balance
# =============================================
def check_balance(account_id, total_cost, total_currency):
"""GET /accounts/{id} — check if the balance covers the total cost.
Returns True if sufficient, False otherwise.
"""
print("Checking account balance...")
response = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(response)
account = response.json()
balance = account.get("balance", 0)
balance_currency = account.get("currency")
print(f" Balance: {balance} {balance_currency}")
print(f" Total cost: {total_cost} {total_currency}")
if balance_currency == total_currency and balance < total_cost:
print("Insufficient funds.")
return False
return True
# =============================================
# Step 10: Ask for confirmation
# =============================================
def confirm_transfer():
"""Ask the user to confirm the transfer.
Returns True if confirmed, False otherwise.
"""
confirm = input("\nProceed with this transfer? ([y]es/[n]o): ").strip().lower()
if confirm not in ("y", "yes"):
print("Transfer cancelled.")
return False
return True
# =============================================
# Step 11: Execute the transfer
# =============================================
def make_transfer(payload):
"""POST /pay — execute the transfer."""
print("Initiating transfer...")
response = requests.post(f"{API_URL}/pay", json=payload, headers=HEADERS)
check_response(response)
result = response.json()
print(f" Transaction ID: {result.get('id')}")
print(f" State: {result.get('state')}")
return result
# =============================================
# Step 12: Check transaction status
# =============================================
def check_transaction_status(transaction_id):
"""GET /transaction/{id} — check the transaction status."""
print("\nChecking transaction status...")
response = requests.get(f"{API_URL}/transaction/{transaction_id}", headers=HEADERS)
check_response(response)
transaction = response.json()
status = transaction.get("state")
print(f" Transaction ID: {transaction_id}")
print(f" Transaction status: {status}")
if status == "pending":
print("Please check again later.")
return status
# =============================================
# Main flow
# =============================================
def run():
# 1. Retrieve the counterparty
counterparty = retrieve_counterparty(COUNTERPARTY_ID)
# 2. Resolve the payment method and build the receiver
payment_method_id, receiver_key = resolve_payment_method(counterparty)
receiver = build_receiver(counterparty["id"], payment_method_id, receiver_key)
print(f"Payment method ID: {payment_method_id or 'none (revtag-only)'}")
# Print destination details
recipient_type = counterparty.get("profile_type", "unknown")
accounts = counterparty.get("accounts", [])
cards = counterparty.get("cards", [])
is_revolut = "revtag" in counterparty
if receiver_key == "account_id":
for account in accounts:
if account.get("id") == payment_method_id:
bank_country = account.get("bank_country", "unknown")
account_currency = account.get("currency", "unknown")
break
else:
bank_country = "unknown"
account_currency = "unknown"
counterparty_type = "Revolut account" if is_revolut else "bank account"
elif receiver_key == "card_id":
bank_country = "N/A"
account_currency = "N/A"
counterparty_type = "card"
else:
bank_country = counterparty.get("country", "unknown")
account_currency = "N/A"
counterparty_type = "Revolut (revtag)"
print_destination_details(bank_country, account_currency, recipient_type, counterparty_type)
# 3. Check transfer field requirements
transfer_fields = check_transfer_fields(ACCOUNT_ID, receiver)
# Build the payment payload and check for missing required fields
payment_payload, missing_required = build_payment_payload(
transfer_fields, ACCOUNT_ID, receiver, AMOUNT, CURRENCY, REFERENCE
)
if missing_required:
print(f"\nMissing required transfer fields: {missing_required}")
return
# 4. Check and update the counterparty's address
pm_address = check_and_update_address(counterparty, payment_method_id, receiver_key)
# 5. Get payment method details
pm_details = get_payment_method_details(counterparty, payment_method_id)
# 6. Get own account details
sender = get_account_details(ACCOUNT_ID)
# 7. Get an indicative quote
quote = get_indicative_quote(payment_payload, CURRENCY)
# 8. Print transfer summary
print_transfer_summary(sender, counterparty, pm_details, pm_address, quote)
# 9. Check that the account balance is sufficient
total = quote.get("estimated_total", {})
total_cost = total.get("amount", AMOUNT)
total_currency = total.get("currency", CURRENCY)
if not check_balance(ACCOUNT_ID, total_cost, total_currency):
return
# 10. Ask for confirmation
if not confirm_transfer():
return
# 11. Execute the transfer
transaction = make_transfer(payment_payload)
print("Transfer initiated successfully!")
# 12. Check transaction status
check_transaction_status(transaction.get("id"))
if __name__ == "__main__":
try:
run()
except ApiError:
print("\nTransfer flow stopped due to API error.")
except KeyboardInterrupt:
print("\nTransfer flow cancelled by user.")
except Exception as e:
print(f"\nUnexpected error: {e}")
c7:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"$d2"}]}]
d3:T649,Retrieving counterparty 239d6f1f-2222-4ae6-1111-5cc603341b4e...
Name: Beispiel GmbH
Payment method ID: b209281b-aakk-9911-8d83-ac72469cef8f
==================================================
DESTINATION: DE / EUR
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
Checking transfer field requirements...
Required fields: ['reference']
Optional fields: ['charge_bearer']
Address is missing or incomplete.
Updating address...
Address updated.
Fetching account bank details...
Sender: Example Corp Ltd
Fetching indicative quote...
Fee: 3 GBP
Total: 1167.58 GBP
==================================================
TRANSFER SUMMARY
==================================================
FROM: Example Corp Ltd
31926819
1 Westminster Way, London, GB, E14 5AB
TO: Beispiel GmbH
DE89370400440532013000
Hauptstraße 45, München, DE, 80331
REFERENCE: Invoice #12345
--------------------------------------------------
Amount: 1000 EUR
Fee: 3 GBP
Exchange rate: 1.16458
Total cost: 1167.58 GBP
Delivery: by_date (2026-07-09)
==================================================
Checking account balance...
Balance: 50000 GBP
Total cost: 1167.58 GBP
Proceed with this transfer? ([y]es/[n]o): y
Initiating transfer...
Transaction ID: 7c8d9e0f-1a2b-3c4d-5e6f-7a8b9c0d1e2f
State: pending
Transfer initiated successfully!
Checking transaction status...
Transaction ID: 7c8d9e0f-1a2b-3c4d-5e6f-7a8b9c0d1e2f
Transaction status: pending
Please check again later.
c9:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"$d3"}]}]
d4:Ta938,import requests
import uuid
# =============================================
# Configuration: adjust these values as needed
# =============================================
API_URL = "https://b2b.revolut.com/api/1.0"
API_TOKEN = "YOUR_API_TOKEN" # Replace with your own token
HEADERS = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# Optional: pre-fill new counterparty details.
# Leave a field empty ("") to be prompted for it interactively.
# Set COUNTERPARTY_DATA to a full dict to override individual fields entirely.
CP_COUNTRY = ""
CP_CURRENCY = ""
CP_RECIPIENT_TYPE = "" # "business" or "personal"
CP_COMPANY_NAME = ""
CP_FIRST_NAME = ""
CP_LAST_NAME = ""
CP_ACCOUNT_NO = ""
CP_SORT_CODE = ""
CP_IBAN = ""
CP_BIC = ""
CP_ROUTE = ""
CP_ROUTING_NUMBER = ""
CP_REVTAG = ""
CP_ADDRESS = {
"street_line1": "",
"city": "",
"region": "",
"country": "",
"postcode": ""
}
COUNTERPARTY_DATA = None # Set to a full dict to override the fields above
# =============================================
# Error handling
# =============================================
class ApiError(Exception):
pass
def check_response(response):
"""Print error details and raise ApiError if the response failed."""
if response.ok:
return
try:
error_data = response.json()
print(f"\nAPI Error (HTTP {response.status_code})")
print(f" Code: {error_data.get('code', 'N/A')}")
print(f" Message: {error_data.get('message', 'N/A')}")
print(f" Error ID: {error_data.get('error_id', 'N/A')}")
except Exception:
print(f"\nAPI Error (HTTP {response.status_code}): {response.text}")
raise ApiError(f"Request failed with status {response.status_code}")
# =============================================
# Print destination details
# =============================================
def print_destination_details(country, currency, recipient_type, counterparty_type):
"""Print a summary of the destination details."""
print("=" * 50)
print(f"DESTINATION: {country} / {currency}")
print(f"RECIPIENT TYPE: {recipient_type}")
print(f"COUNTERPARTY TYPE: {counterparty_type}")
print("=" * 50)
# =============================================
# Helper: ask user for input with default
# =============================================
def ask(prompt, default=""):
"""Prompt the user for input, with an optional default value."""
if default:
prompt = f"{prompt} [{default}]: "
else:
prompt = f"{prompt}: "
value = input(prompt).strip()
return value if value else default
# =============================================
# Step 1: Choose new or existing counterparty
# =============================================
def choose_counterparty_mode():
"""Ask the user whether to create a new counterparty or use an existing one.
Returns "new" or "existing".
"""
print("\n1. Create a new counterparty")
print("2. Use an existing counterparty")
choice = ask("Select an option (1/2)")
while choice not in ("1", "2"):
choice = ask("Invalid choice. Select 1 or 2")
return "new" if choice == "1" else "existing"
# =============================================
# Step 2: Check supported countries and currencies
# =============================================
def check_supported_countries():
"""GET /counterparties/countries — returns supported country/currency pairs."""
print("Checking supported countries and currencies...")
response = requests.get(f"{API_URL}/counterparties/countries", headers=HEADERS)
check_response(response)
data = response.json()
countries = data.get("countries", [])
print(f" Found {len(countries)} supported countries")
return countries
# =============================================
# Step 3: Verify the destination is supported
# =============================================
def verify_destination_supported(countries, country, currency):
"""Check if the desired country/currency combination is supported.
Returns True if supported, False otherwise.
"""
for entry in countries:
if entry.get("country") == country and currency in entry.get("currencies", []):
print(f" Destination {country}/{currency} is supported.")
return True
print(f" Destination {country}/{currency} is not supported.")
return False
# =============================================
# Step 4: Check counterparty field requirements
# =============================================
def check_counterparty_field_requirements(country, currency, recipient_type):
"""GET /counterparties/fields — returns required and applicable fields."""
print("Checking counterparty field requirements...")
params = {"country": country, "currency": currency, "recipient_type": recipient_type}
response = requests.get(f"{API_URL}/counterparties/fields", params=params, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
# =============================================
# Step 5: Build the counterparty payload
# =============================================
def build_counterparty_payload(field_requirements, country, currency, recipient_type):
"""Build the counterparty payload from config vars or interactive input.
Uses COUNTERPARTY_DATA if set, otherwise individual CP_* vars.
Prompts interactively for any field that is empty.
"""
if COUNTERPARTY_DATA:
print(" Using provided COUNTERPARTY_DATA.")
payload = dict(COUNTERPARTY_DATA)
payload.setdefault("profile_type", recipient_type)
payload.setdefault("bank_country", country)
payload.setdefault("currency", currency)
return payload
payload = {
"profile_type": recipient_type,
"bank_country": country,
"currency": currency,
}
config_map = {
"company_name": CP_COMPANY_NAME,
"first_name": CP_FIRST_NAME,
"last_name": CP_LAST_NAME,
"account_no": CP_ACCOUNT_NO,
"sort_code": CP_SORT_CODE,
"iban": CP_IBAN,
"bic": CP_BIC,
"route": CP_ROUTE,
"routing_number": CP_ROUTING_NUMBER,
"revtag": CP_REVTAG,
}
for field in field_requirements.get("fields", []):
name = field["name"]
default = config_map.get(name, "")
if name == "address":
address = {}
for addr_field in ["street_line1", "city", "region", "country", "postcode"]:
val = CP_ADDRESS.get(addr_field, "")
val = ask(f" Enter {addr_field}", val)
if val:
address[addr_field] = val
if address:
payload["address"] = address
else:
val = ask(f" Enter {name}", default)
if val:
payload[name] = val
# Group first_name/last_name into individual_name for personal counterparties
if recipient_type == "personal":
individual_name = {}
if "first_name" in payload:
individual_name["first_name"] = payload.pop("first_name")
if "last_name" in payload:
individual_name["last_name"] = payload.pop("last_name")
if individual_name:
payload["individual_name"] = individual_name
print(f" Counterparty payload fields: {list(payload.keys())}")
return payload
# =============================================
# Step 6: Validate the account name (CoP/VoP)
# =============================================
def build_cop_request(payload, country, currency, recipient_type):
"""Build the CoP request body based on the destination region.
Returns the request dict, or None if CoP is not available for this destination.
"""
request = {}
if recipient_type == "business":
request["company_name"] = payload.get("company_name")
else:
individual = payload.get("individual_name", {})
request["individual_name"] = {
"first_name": individual.get("first_name") or payload.get("first_name"),
"last_name": individual.get("last_name") or payload.get("last_name"),
}
if country == "GB" and currency == "GBP":
request["account_no"] = payload.get("account_no")
request["sort_code"] = payload.get("sort_code")
elif country == "AU" and currency == "AUD":
request["account_no"] = payload.get("account_no")
request["bsb"] = payload.get("bsb")
elif currency == "EUR" or (country == "RO" and currency == "RON"):
request["iban"] = payload.get("iban")
request["recipient_country"] = country
request["recipient_currency"] = currency
if payload.get("bic"):
request["bic"] = payload.get("bic")
else:
return None
return request
def ask_to_proceed():
"""Ask the user whether to proceed after a non-blocking issue.
Returns True if the user wants to proceed, False otherwise.
"""
confirm = input("Proceed anyway? ([y]es/[n]o): ").strip().lower()
if confirm in ("y", "yes"):
return True
print("Transfer cancelled.")
return False
def validate_account_name(payload, country, currency, recipient_type):
"""POST /account-name-validation — validate the account name (CoP/VoP).
Returns True if the flow should proceed, False if it should stop.
"""
cop_request = build_cop_request(payload, country, currency, recipient_type)
if cop_request is None:
print("CoP/VoP is not available for this destination.")
return ask_to_proceed()
print("Validating account name (CoP/VoP)...")
try:
response = requests.post(f"{API_URL}/account-name-validation", json=cop_request, headers=HEADERS)
check_response(response)
except ApiError:
print(" CoP/VoP check failed.")
return ask_to_proceed()
result = response.json()
result_code = result.get("result_code")
print(f" Result: {result_code}")
if result_code in ("matched", "close_match"):
if result_code == "close_match":
if "company_name" in result:
print(f" Actual name: {result['company_name']}")
elif "individual_name" in result:
name = result["individual_name"]
print(f" Actual name: {name.get('first_name', '')} {name.get('last_name', '')}")
return True
if result_code == "not_matched":
print(" The account name does not match.")
return False
print(f" The check could not be completed (result: {result_code}).")
return ask_to_proceed()
# =============================================
# Step 7: Create the counterparty
# =============================================
def create_counterparty(payload):
"""POST /counterparty — create the counterparty."""
print("Creating counterparty...")
response = requests.post(f"{API_URL}/counterparty", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
print(f" Counterparty ID: {data.get('id')}")
print(f" State: {data.get('state')}")
return data
# =============================================
# Step 8: Retrieve an existing counterparty
# =============================================
def retrieve_existing_counterparty():
"""Ask the user how to identify an existing counterparty, then retrieve it.
Two options:
1. Enter the counterparty ID directly.
2. Browse the list of counterparties (paginated) and select one.
Returns the selected counterparty's data (full GET /counterparty/{id} response).
"""
print("\n1. Enter the counterparty ID")
print("2. Choose from the list of counterparties")
choice = ask("Select an option (1/2)")
while choice not in ("1", "2"):
choice = ask("Invalid choice. Select 1 or 2")
if choice == "1":
cp_id = ask("Enter the counterparty ID")
return retrieve_counterparty(cp_id)
# Browse the list (paginated)
print("Retrieving your counterparties...")
all_counterparties = []
created_before = None
while True:
params = {"limit": 100}
if created_before:
params["created_before"] = created_before
response = requests.get(f"{API_URL}/counterparties", params=params, headers=HEADERS)
check_response(response)
page = response.json()
if not page:
break
all_counterparties.extend(page)
# Check if there are more pages
if len(page) < 100:
break
# Use the last item's created_at as the cursor for the next page
created_before = page[-1].get("created_at")
if not created_before:
break
more = ask(f"\n Loaded {len(all_counterparties)} counterparties so far. Load more? (y/n)", "n")
if more.lower() != "y":
break
if not all_counterparties:
print(" No counterparties found.")
return None
print(f"\n Found {len(all_counterparties)} counterpart{'y' if len(all_counterparties) == 1 else 'ies'}:\n")
for i, cp in enumerate(all_counterparties):
name = cp.get("name", "Unknown")
profile = cp.get("profile_type", "?")
cp_type = "Revolut (revtag)" if "revtag" in cp else "bank account" if cp.get("accounts") else "card" if cp.get("cards") else "unknown"
# Summarise payment methods
methods = []
for acc in cp.get("accounts", []):
cur = acc.get("currency", "?")
country = acc.get("bank_country", "?")
methods.append(f"{cur} ({country})")
for card in cp.get("cards", []):
methods.append(f"card ({card.get('currency', '?')})")
if "revtag" in cp:
methods.append(f"@{cp['revtag']}")
methods_str = ", ".join(methods) if methods else "no methods"
print(f" {i + 1}. {name} [{profile}, {cp_type}] — {methods_str}")
choice = ask(f"\n Select a counterparty (1-{len(all_counterparties)})")
while not choice.isdigit() or int(choice) < 1 or int(choice) > len(all_counterparties):
choice = ask(f" Invalid choice. Enter a number 1-{len(all_counterparties)}")
selected = all_counterparties[int(choice) - 1]
cp_id = selected["id"]
print(f"\n Selected: {selected.get('name', 'Unknown')} ({cp_id})")
return retrieve_counterparty(cp_id)
def retrieve_counterparty(counterparty_id):
"""GET /counterparty/{id} — returns the counterparty data."""
print(f"Retrieving counterparty {counterparty_id}...")
response = requests.get(f"{API_URL}/counterparty/{counterparty_id}", headers=HEADERS)
check_response(response)
data = response.json()
print(f" Name: {data.get('name', 'Unknown')}")
return data
# =============================================
# Step 9: Resolve the payment method
# =============================================
def resolve_payment_method(counterparty_data):
"""Determine which payment method to use.
If the counterparty has a single payment method, use it directly.
If multiple, list them and ask the user to select.
If none (revtag-only), return (None, None).
Returns (payment_method_id, receiver_key).
"""
accounts = counterparty_data.get("accounts", [])
cards = counterparty_data.get("cards", [])
if not accounts and not cards:
return None, None
all_methods = []
for account in accounts:
all_methods.append(("account_id", account))
for card in cards:
all_methods.append(("card_id", card))
if len(all_methods) == 1:
receiver_key, method = all_methods[0]
print(f" Single payment method found: {method.get('id')}")
return method["id"], receiver_key
print("\nMultiple payment methods available:")
for i, (key, method) in enumerate(all_methods, 1):
if key == "account_id":
method_type = "bank account"
ref = method.get("iban") or method.get("account_no") or "Revolut account"
currency = method.get("currency", "N/A")
print(f" {i}. [{method_type}] {method.get('name', 'N/A')} — {ref} ({currency})")
print(f" ID: {method['id']}")
else:
method_type = "card"
ref = f"*{method.get('last_digits', '????')} ({method.get('scheme', 'unknown')})"
print(f" {i}. [{method_type}] {method.get('name', 'N/A')} — {ref}")
print(f" ID: {method['id']}")
print(f" {len(all_methods) + 1}. Cancel")
choice = ask(f"Select a payment method (1-{len(all_methods) + 1})")
while not choice.isdigit() or int(choice) < 1 or int(choice) > len(all_methods) + 1:
choice = ask(f"Invalid choice. Select 1-{len(all_methods) + 1}")
idx = int(choice) - 1
if idx == len(all_methods):
print("Transfer cancelled.")
return None, None
receiver_key, method = all_methods[idx]
return method["id"], receiver_key
def build_receiver(counterparty_id, payment_method_id, receiver_key):
"""Build the receiver object for /pay endpoints."""
receiver = {"counterparty_id": counterparty_id}
if payment_method_id:
receiver[receiver_key] = payment_method_id
return receiver
# =============================================
# Step 10: Get destination details
# =============================================
def get_destination_details(counterparty_data, payment_method_id, receiver_key):
"""Extract destination details from the resolved payment method.
Returns (country, currency, recipient_type, counterparty_type).
"""
recipient_type = counterparty_data.get("profile_type", "unknown")
accounts = counterparty_data.get("accounts", [])
is_revolut = "revtag" in counterparty_data
if receiver_key == "account_id":
for account in accounts:
if account.get("id") == payment_method_id:
bank_country = account.get("bank_country", "unknown")
account_currency = account.get("currency", "unknown")
break
else:
bank_country = "unknown"
account_currency = "unknown"
counterparty_type = "Revolut account" if is_revolut else "bank account"
elif receiver_key == "card_id":
bank_country = "N/A"
account_currency = "N/A"
counterparty_type = "card"
else:
bank_country = counterparty_data.get("country", "unknown")
account_currency = "N/A"
counterparty_type = "Revolut (revtag)"
return bank_country, account_currency, recipient_type, counterparty_type
# =============================================
# Step 11: Ask for source account and transfer details
# =============================================
def ask_source_account():
"""Ask the user how to identify their source account, then retrieve it.
Two options:
1. Enter the account ID directly.
2. Choose from the list of active accounts.
Returns the account ID.
"""
print("\n1. Enter your account ID (the pocket to send from)")
print("2. Choose from the list of your accounts")
choice = ask("Select an option (1/2)")
while choice not in ("1", "2"):
choice = ask("Invalid choice. Select 1 or 2")
if choice == "1":
return ask("Enter your account ID")
# List accounts and let the user pick
print("Retrieving your accounts...")
response = requests.get(f"{API_URL}/accounts", headers=HEADERS)
check_response(response)
accounts = response.json()
active = [a for a in accounts if a.get("state") == "active"]
if not active:
print(" No active accounts found.")
return ask("Enter your account ID manually")
print(f"\n Found {len(active)} active account{'s' if len(active) != 1 else ''}:\n")
for i, acc in enumerate(active):
name = acc.get("name", "Unknown")
cur = acc.get("currency", "?")
balance = acc.get("balance", "?")
print(f" {i + 1}. {name} [{cur}] — balance: {balance}")
choice = ask(f"\n Select an account (1-{len(active)})")
while not choice.isdigit() or int(choice) < 1 or int(choice) > len(active):
choice = ask(f" Invalid choice. Enter a number 1-{len(active)}")
selected = active[int(choice) - 1]
acc_id = selected["id"]
print(f"\n Selected: {selected.get('name', 'Unknown')} ({acc_id})")
return acc_id
def ask_transfer_details():
"""Ask the user for the transfer amount and currency.
Returns (amount, currency).
"""
amount_str = ask("Enter the amount to transfer")
while not amount_str or not amount_str.replace(".", "").replace(",", "").isdigit():
amount_str = ask("Invalid amount. Enter a numeric value")
amount = float(amount_str.replace(",", ""))
currency = ask("Enter the transfer currency (e.g. GBP)").upper()
return amount, currency
# =============================================
# Step 12: Check currency mismatch
# =============================================
def get_account_currency(account_id):
"""GET /accounts/{id} — returns the account's currency."""
response = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(response)
account = response.json()
return account.get("currency", "unknown")
def get_matching_accounts(currency):
"""GET /accounts — find active accounts matching the given currency.
Returns a list of matching account dicts.
"""
response = requests.get(f"{API_URL}/accounts", headers=HEADERS)
check_response(response)
accounts = response.json()
return [a for a in accounts if a.get("currency") == currency and a.get("state") == "active"]
def get_exchange_rate(from_currency, to_currency, amount):
"""GET /rate — returns the exchange rate and converted amount."""
params = {"from": from_currency, "to": to_currency, "amount": amount}
response = requests.get(f"{API_URL}/rate", params=params, headers=HEADERS)
check_response(response)
return response.json()
def check_currency_mismatch(account_id, transfer_currency, destination_currency, amount):
"""Check if the transfer currency matches the destination currency.
If mismatch, offer the user three options:
1. Switch to a source account whose currency matches the destination
2. Switch the transfer currency to the destination currency (with FX preview)
3. Cancel
Returns (account_id, transfer_currency, amount_or_flag):
- amount_or_flag is None when currencies match or option 2 is chosen
(option 2 returns the string "fx" so the caller can do the conversion)
- amount_or_flag is a float when option 1 is chosen (new amount in dest currency)
- Returns None entirely if cancelled.
"""
if transfer_currency == destination_currency:
return account_id, transfer_currency, None
print(f"\nCurrency mismatch: transfer is {transfer_currency}, destination is {destination_currency}.")
print("Options:")
print(" 1. Use a different source account (matching destination currency)")
print(" 2. Switch transfer currency to destination currency (FX conversion)")
print(" 3. Cancel")
choice = ask("Select an option (1/2/3)")
while choice not in ("1", "2", "3"):
choice = ask("Invalid choice. Select 1, 2, or 3")
if choice == "3":
print("Transfer cancelled.")
return None
if choice == "1":
matching = get_matching_accounts(destination_currency)
if not matching:
print(f" No active accounts found with currency {destination_currency}.")
print(" Consider option 2 (switch transfer currency) instead.")
return check_currency_mismatch(account_id, transfer_currency, destination_currency, amount)
print(f"\nAccounts matching {destination_currency}:")
for i, acc in enumerate(matching, 1):
print(f" {i}. {acc.get('name', 'N/A')} — balance: {acc.get('balance', 0)} {acc.get('currency')}")
print(f" ID: {acc['id']}")
print(f" {len(matching) + 1}. Cancel")
sel = ask(f"Select an account (1-{len(matching) + 1})")
while not sel.isdigit() or int(sel) < 1 or int(sel) > len(matching) + 1:
sel = ask(f"Invalid choice. Select 1-{len(matching) + 1}")
idx = int(sel) - 1
if idx == len(matching):
print("Transfer cancelled.")
return None
new_account_id = matching[idx]["id"]
print(f" Switched to account {new_account_id} ({matching[idx].get('currency')})")
# Convert the original amount to the destination currency via FX rate
print(f"\n Converting {amount} {transfer_currency} → {destination_currency}...")
fx_data = get_exchange_rate(transfer_currency, destination_currency, amount)
rate = fx_data.get("rate", 0)
converted_amount = round(amount * rate, 2)
print(f" FX rate: {transfer_currency} → {destination_currency}: {rate}")
print(f" Suggested amount: {converted_amount} {destination_currency}")
entered = ask(f" Use this amount? (y/n)", "y")
if entered.lower() in ("y", "yes"):
return new_account_id, destination_currency, converted_amount
amount_str = ask(f" Enter your own amount ({destination_currency})")
while not amount_str or not amount_str.replace(".", "").replace(",", "").isdigit():
amount_str = ask(" Invalid amount. Enter a numeric value")
return new_account_id, destination_currency, float(amount_str.replace(",", ""))
if choice == "2":
print(f"\nChecking FX rate: {transfer_currency} → {destination_currency}...")
fx_data = get_exchange_rate(transfer_currency, destination_currency, amount)
rate = fx_data.get("rate", 0)
converted_amount = round(amount * rate, 2)
print(f" FX rate: {transfer_currency} → {destination_currency}: {rate}")
print(f" Converted amount: {converted_amount} {destination_currency}")
confirm = ask(f"Confirm transfer of {converted_amount} {destination_currency}? (y/n)")
if confirm not in ("y", "yes"):
print("Transfer cancelled.")
return None
return account_id, destination_currency, converted_amount
# =============================================
# Step 13: Check transfer field requirements
# =============================================
def check_transfer_field_requirements(account_id, receiver):
"""POST /pay/fields — returns required and optional fields for the transfer."""
print("Checking transfer field requirements...")
payload = {"account_id": account_id, "receiver": receiver}
response = requests.post(f"{API_URL}/pay/fields", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
required = [f["name"] for f in data.get("fields", []) if f.get("required")]
optional = [f["name"] for f in data.get("fields", []) if not f.get("required")]
print(f" Required fields: {required}")
print(f" Optional fields: {optional}")
return data
def build_payment_payload(transfer_fields, account_id, receiver, amount, currency, reference):
"""Build the payment payload from always required fields + conditionally available fields.
Returns (payload, missing_required) where missing_required is a list of required
field names that have no value.
"""
payload = {
"request_id": str(uuid.uuid4()),
"account_id": account_id,
"receiver": receiver,
"amount": amount,
"currency": currency,
}
provided = {"reference": reference}
missing_required = []
for field in transfer_fields.get("fields", []):
name = field["name"]
is_required = field.get("required", False)
if name in provided and provided[name] is not None:
payload[name] = provided[name]
elif is_required:
missing_required.append(name)
return payload, missing_required
# =============================================
# Step 14: Get an indicative quote
# =============================================
def get_indicative_quote(payment_payload, currency):
"""POST /pay/indicative-quote — returns fees, exchange rate, and delivery time."""
print("Fetching indicative quote...")
payload = {k: v for k, v in payment_payload.items() if k != "request_id"}
response = requests.post(f"{API_URL}/pay/indicative-quote", json=payload, headers=HEADERS)
check_response(response)
data = response.json()
fee = data.get("fee", {})
total = data.get("estimated_total", {})
print(f" Fee: {fee.get('amount', 0)} {fee.get('currency', currency)}")
print(f" Total: {total.get('amount', 0)} {total.get('currency', currency)}")
return data
# =============================================
# Step 15: Get own account details and print transfer summary
# =============================================
def get_account_details(account_id):
"""GET /accounts/{id}/bank-details — returns the sender's bank details.
Falls back to GET /accounts/{id} for the account name when bank details
are not available (e.g. currency pockets without local bank details).
"""
print("Fetching account bank details...")
response = requests.get(f"{API_URL}/accounts/{account_id}/bank-details", headers=HEADERS)
check_response(response)
data = response.json()
if isinstance(data, list) and data:
entry = data[0]
elif isinstance(data, dict):
entry = data
else:
# No bank details — fall back to account info for at least the name
print(" No bank details available, fetching account info...")
acct_resp = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(acct_resp)
acct = acct_resp.json()
entry = {"beneficiary": acct.get("name", "Unknown")}
print(f" Sender: {entry.get('beneficiary', 'Unknown')}")
return entry
def print_transfer_summary(sender, counterparty_name, pm_details, pm_address, amount, currency, reference, quote):
"""Display a human-readable transfer summary."""
fee = quote.get("fee", {})
total = quote.get("estimated_total", {})
rate = quote.get("estimated_exchange_rate")
arrival = quote.get("estimated_arrival", {})
sender_name = sender.get("beneficiary", "Unknown")
sender_addr = sender.get("beneficiary_address", {})
sender_ref = sender.get("iban") or sender.get("account_no") or "N/A"
sender_addr_str = ", ".join(filter(None, [
sender_addr.get("street_line1"),
sender_addr.get("city"),
sender_addr.get("country"),
sender_addr.get("postcode"),
])) if sender_addr else ""
pm_addr_str = ", ".join(filter(None, [
pm_address.get("street_line1"),
pm_address.get("city"),
pm_address.get("country"),
pm_address.get("postcode"),
])) if pm_address else ""
print("\n" + "=" * 50)
print("TRANSFER SUMMARY")
print("=" * 50)
print(f"FROM: {sender_name}")
print(f" {sender_ref}")
if sender_addr_str:
print(f" {sender_addr_str}")
print(f"TO: {counterparty_name}")
print(f" {pm_details['account_ref']}")
if pm_addr_str:
print(f" {pm_addr_str}")
print(f"\nREFERENCE: {reference}")
print("-" * 50)
print(f"Amount: {amount} {currency}")
if fee.get("amount") is not None:
print(f"Fee: {fee.get('amount')} {fee.get('currency')}")
if fee.get("breakdown"):
for key, val in fee["breakdown"].items():
print(f" - {key}: {val.get('amount')} {val.get('currency')}")
if rate:
print(f"Exchange rate: {rate}")
if total.get("amount") is not None:
print(f"Total cost: {total.get('amount')} {total.get('currency')}")
if arrival:
print(f"Delivery: {arrival.get('speed', '')} ({arrival.get('date', '')})")
print("=" * 50)
print("\n")
# =============================================
# Step 16: Check account balance
# =============================================
def check_balance(account_id, total_cost, total_currency):
"""GET /accounts/{id} — check if the balance covers the total cost.
Returns True if sufficient, False otherwise.
"""
print("Checking account balance...")
response = requests.get(f"{API_URL}/accounts/{account_id}", headers=HEADERS)
check_response(response)
account = response.json()
balance = account.get("balance", 0)
balance_currency = account.get("currency")
print(f" Balance: {balance} {balance_currency}")
print(f" Total cost: {total_cost} {total_currency}")
if balance_currency == total_currency and balance < total_cost:
print("Insufficient funds.")
return False
return True
# =============================================
# Step 17: Ask for confirmation
# =============================================
def confirm_transfer():
"""Ask the user to confirm the transfer.
Returns True if confirmed, False otherwise.
"""
confirm = input("\nProceed with this transfer? ([y]es/[n]o): ").strip().lower()
if confirm not in ("y", "yes"):
print("Transfer cancelled.")
return False
return True
# =============================================
# Step 18: Execute the transfer
# =============================================
def make_transfer(payload):
"""POST /pay — execute the transfer."""
print("Initiating transfer...")
response = requests.post(f"{API_URL}/pay", json=payload, headers=HEADERS)
check_response(response)
result = response.json()
print(f" Transaction ID: {result.get('id')}")
print(f" State: {result.get('state')}")
return result
# =============================================
# Step 19: Check transaction status (optional)
# =============================================
def check_transaction_status(transaction_id):
"""GET /transaction/{id} — check the transaction status."""
print("\nChecking transaction status...")
response = requests.get(f"{API_URL}/transaction/{transaction_id}", headers=HEADERS)
check_response(response)
transaction = response.json()
status = transaction.get("state")
print(f" Transaction ID: {transaction_id}")
print(f" Transaction status: {status}")
if status == "pending":
print("Please check again later.")
return status
# =============================================
# Main flow
# =============================================
def run():
# 1. Choose new or existing counterparty
mode = choose_counterparty_mode()
if mode == "new":
# 2. Get destination details (from config or interactive)
country = ask("Enter counterparty bank country (e.g. GB)", CP_COUNTRY)
currency = ask("Enter counterparty account currency (e.g. GBP)", CP_CURRENCY)
recipient_type = ask("Enter recipient type (business/personal)", CP_RECIPIENT_TYPE)
# Print destination details (pre-creation)
counterparty_type = "Revolut (revtag)" if CP_REVTAG else "bank account"
print_destination_details(country, currency, recipient_type, counterparty_type)
# 3. Check supported countries and currencies
countries = check_supported_countries()
# 4. Verify the destination is supported
if not verify_destination_supported(countries, country, currency):
return
# 5. Check counterparty field requirements
field_requirements = check_counterparty_field_requirements(country, currency, recipient_type)
# 6. Build the counterparty payload
counterparty_payload = build_counterparty_payload(field_requirements, country, currency, recipient_type)
# 7. Validate the account name (CoP/VoP)
if not validate_account_name(counterparty_payload, country, currency, recipient_type):
return
# 8. Create the counterparty
counterparty = create_counterparty(counterparty_payload)
else:
# 9. Retrieve an existing counterparty (enter ID or choose from list)
counterparty = retrieve_existing_counterparty()
# 10. Validate the account name (CoP/VoP) — offer for existing counterparties too
accounts = counterparty.get("accounts", [])
country = counterparty.get("country", "")
if accounts:
if not country:
country = accounts[0].get("bank_country", "")
currency = accounts[0].get("currency", "")
recipient_type = counterparty.get("profile_type", "business")
else:
currency = ""
recipient_type = counterparty.get("profile_type", "business")
if country and currency:
cop_payload = {}
cp_name = counterparty.get("name", "")
if recipient_type == "business":
cop_payload["company_name"] = cp_name
else:
# Split the full name into first_name/last_name for CoP
parts = cp_name.split()
if len(parts) == 1:
cop_payload["individual_name"] = {"first_name": parts[0], "last_name": ""}
elif len(parts) == 2:
cop_payload["individual_name"] = {"first_name": parts[0], "last_name": parts[1]}
else:
# Multiple parts — list split options for the user to choose
print(f"\n The counterparty name is: {cp_name}")
print(" Select the correct first name / last name split:")
for i, split_idx in enumerate(range(1, len(parts)), 1):
first = " ".join(parts[:split_idx])
last = " ".join(parts[split_idx:])
print(f" {i}. First: {first} | Last: {last}")
sel = ask(f" Select an option (1-{len(parts) - 1})")
while not sel.isdigit() or int(sel) < 1 or int(sel) > len(parts) - 1:
sel = ask(f" Invalid choice. Enter 1-{len(parts) - 1}")
split_idx = int(sel)
cop_payload["individual_name"] = {
"first_name": " ".join(parts[:split_idx]),
"last_name": " ".join(parts[split_idx:]),
}
if accounts:
cop_payload["account_no"] = accounts[0].get("account_no", "")
cop_payload["sort_code"] = accounts[0].get("sort_code", "")
cop_payload["iban"] = accounts[0].get("iban", "")
cop_payload["bic"] = accounts[0].get("bic", "")
print("\nWould you like to validate the account name (CoP/VoP)?")
if ask("Run CoP/VoP check? (y/n)") in ("y", "yes"):
if not validate_account_name(cop_payload, country, currency, recipient_type):
return
# 11. Resolve the payment method
payment_method_id, receiver_key = resolve_payment_method(counterparty)
if not payment_method_id and not receiver_key and not ("revtag" in counterparty):
print("No payment method available.")
return
receiver = build_receiver(counterparty["id"], payment_method_id, receiver_key)
print(f"Payment method ID: {payment_method_id or 'none (revtag-only)'}")
# 12. Get destination details
bank_country, dest_currency, recipient_type, cp_type = get_destination_details(
counterparty, payment_method_id, receiver_key
)
print_destination_details(bank_country, dest_currency, recipient_type, cp_type)
# 13. Ask for source account and transfer details
account_id = ask_source_account()
amount, transfer_currency = ask_transfer_details()
reference = ask("Enter the payment reference")
# 14. Check currency mismatch
if dest_currency and dest_currency != "N/A":
result = check_currency_mismatch(account_id, transfer_currency, dest_currency, amount)
if result is None:
return
account_id, transfer_currency, mismatch_result = result
if mismatch_result is not None:
amount = mismatch_result
# 15. Check transfer field requirements
transfer_fields = check_transfer_field_requirements(account_id, receiver)
# Build the payment payload and check for missing required fields
payment_payload, missing_required = build_payment_payload(
transfer_fields, account_id, receiver, amount, transfer_currency, reference
)
if missing_required:
print(f"\nMissing required transfer fields: {missing_required}")
return
# 16. Get an indicative quote
quote = get_indicative_quote(payment_payload, transfer_currency)
# 17. Print transfer summary
sender = get_account_details(account_id)
pm_details = {
"account_ref": "",
"address": {},
}
accounts = counterparty.get("accounts", [])
cards = counterparty.get("cards", [])
for account in accounts:
if account.get("id") == payment_method_id:
pm_details = {
"account_ref": account.get("iban") or account.get("account_no") or "Revolut account",
"address": account.get("address", {}),
}
break
for card in cards:
if card.get("id") == payment_method_id:
pm_details = {
"account_ref": f"Card *{card.get('last_digits', '????')} ({card.get('scheme', 'unknown')})",
"address": {},
}
break
if not pm_details["account_ref"]:
pm_details = {"account_ref": "Revolut account (revtag)", "address": {}}
print_transfer_summary(sender, counterparty.get("name", "Unknown"), pm_details, pm_details["address"],
amount, transfer_currency, reference, quote)
# 18. Check that the account balance is sufficient
total = quote.get("estimated_total", {})
total_cost = total.get("amount", amount)
total_currency = total.get("currency", transfer_currency)
if not check_balance(account_id, total_cost, total_currency):
return
# 19. Ask for confirmation
if not confirm_transfer():
return
# 20. Execute the transfer
transaction = make_transfer(payment_payload)
print("Transfer initiated successfully!")
# 21. Ask if user wants to check transaction status
check_status = ask("\nCheck transaction status now? (y/n)")
if check_status in ("y", "yes"):
check_transaction_status(transaction.get("id"))
if __name__ == "__main__":
try:
run()
except ApiError:
print("\nTransfer flow stopped due to API error.")
except KeyboardInterrupt:
print("\nTransfer flow cancelled by user.")
except Exception as e:
print(f"\nUnexpected error: {e}")
cb:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"$d4"}]}]
d5:Tbb2,1. Create a new counterparty
2. Use an existing counterparty
Select an option (1/2): 1
Enter counterparty bank country (e.g. GB): GB
Enter counterparty account currency (e.g. GBP): GBP
Enter recipient type (business/personal): business
==================================================
DESTINATION: GB / GBP
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
Checking supported countries and currencies...
Found 213 supported countries
Destination GB/GBP is supported.
Checking counterparty field requirements...
Required fields: ['company_name', 'account_no', 'sort_code', 'address']
Optional fields: []
Enter company_name: Example Vendor Ltd
Enter account_no: 70294360
Enter sort_code: 30-96-17
Enter street_line1: 1 Canada Square
Enter city: London
Enter region:
Enter country: GB
Enter postcode: E14 5AB
Counterparty payload fields: ['profile_type', 'bank_country', 'currency', 'company_name', 'account_no', 'sort_code', 'address']
Validating account name (CoP/VoP)...
Result: matched
Creating counterparty...
Counterparty ID: b53fdd78-8d67-4f63-a103-eeeeef53cac8
State: created
Single payment method found: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
Payment method ID: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
==================================================
DESTINATION: GB / GBP
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
1. Enter your account ID (the pocket to send from)
2. Choose from the list of your accounts
Select an option (1/2): 1
Enter your account ID: a3b4c5d6-e7f8-9012-abcd-ef12345678901
Enter the amount to transfer: 1000
Enter the transfer currency (e.g. GBP): GBP
Enter the payment reference: Invoice #12345
Checking transfer field requirements...
Required fields: ['reference']
Optional fields: ['charge_bearer']
Fetching indicative quote...
Fee: 0 GBP
Total: 1000 GBP
Fetching account bank details...
Sender: Example Corp Ltd
==================================================
TRANSFER SUMMARY
==================================================
FROM: Example Corp Ltd
92109701
11 Washington Walk APT 327, Washington, GB, PE3 9UP
TO: Example Vendor Ltd
70294360
1 Canada Square, London, GB, E14 5AB
REFERENCE: Invoice #12345
--------------------------------------------------
Amount: 1000 GBP
Fee: 0 GBP
Total cost: 1000 GBP
Delivery: in_seconds (2026-07-07)
==================================================
Checking account balance...
Balance: 50000 GBP
Total cost: 1000 GBP
Proceed with this transfer? ([y]es/[n]o): y
Initiating transfer...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
State: pending
Transfer initiated successfully!
Check transaction status now? (y/n): y
Checking transaction status...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
Transaction status: completed
cd:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"$d5"}]}]
d6:Tb72,1. Create a new counterparty
2. Use an existing counterparty
Select an option (1/2): 2
1. Enter the counterparty ID
2. Choose from the list of counterparties
Select an option (1/2): 2
Retrieving your counterparties...
Loaded 100 counterparties so far. Load more? (y/n) [n]: n
Found 100 counterparties:
1. Example Vendor Ltd [business, bank account] — GBP (GB)
2. Acme Corp [business, bank account] — EUR (DE)
3. John Smith [personal, Revolut (revtag)] — @johnsmith
... (97 more)
Select a counterparty (1-100): 1
Selected: Example Vendor Ltd (b53fdd78-8d67-4f63-a103-eeeeef53cac8)
Retrieving counterparty b53fdd78-8d67-4f63-a103-eeeeef53cac8...
Name: Example Vendor Ltd
Would you like to validate the account name (CoP/VoP)?
Run CoP/VoP check? (y/n): y
Validating account name (CoP/VoP)...
Result: matched
Single payment method found: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
Payment method ID: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
==================================================
DESTINATION: GB / GBP
RECIPIENT TYPE: business
COUNTERPARTY TYPE: bank account
==================================================
1. Enter your account ID (the pocket to send from)
2. Choose from the list of your accounts
Select an option (1/2): 2
Retrieving your accounts...
Found 5 active accounts:
1. GBP pocket [GBP] — balance: 50000
2. EUR pocket [EUR] — balance: 10000
3. USD pocket [USD] — balance: 5000
4. Payroll [GBP] — balance: 12000
5. Misc [GBP] — balance: 0
Select an account (1-5): 1
Selected: GBP pocket (a3b4c5d6-e7f8-9012-abcd-ef12345678901)
Enter the amount to transfer: 1000
Enter the transfer currency (e.g. GBP): GBP
Enter the payment reference: Invoice #12345
Checking transfer field requirements...
Required fields: ['reference']
Optional fields: ['charge_bearer']
Fetching indicative quote...
Fee: 0 GBP
Total: 1000 GBP
Fetching account bank details...
Sender: Example Corp Ltd
==================================================
TRANSFER SUMMARY
==================================================
FROM: Example Corp Ltd
92109701
11 Washington Walk APT 327, Washington, GB, PE3 9UP
TO: Example Vendor Ltd
70294360
1 Canada Square, London, GB, E14 5AB
REFERENCE: Invoice #12345
--------------------------------------------------
Amount: 1000 GBP
Fee: 0 GBP
Total cost: 1000 GBP
Delivery: in_seconds (2026-07-07)
==================================================
Checking account balance...
Balance: 50000 GBP
Total cost: 1000 GBP
Proceed with this transfer? ([y]es/[n]o): y
Initiating transfer...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
State: pending
Transfer initiated successfully!
Check transaction status now? (y/n): y
Checking transaction status...
Transaction ID: 3a2b1c0d-9e8f-4a7b-6c5d-4e3f2a1b0c9d
Transaction status: completed
cf:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"$d6"}]}]
d7:Te4d,{
"company_name": "Example Vendor Ltd",
"profile_type": "business", // ← always required
"bank_country": "GB", // ← always required
"currency": "GBP", // ← always required
"account_no": "12345678",
"sort_code": "123456",
"address": {
"street_line1": "1 Canada Square",
"city": "London",
"country": "GB",
"postcode": "E14 5AB"
}
}79:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$d7"}}]}]],"$Ld8"]}]
d9:Td3a,{
"company_name": "Beispiel GmbH",
"profile_type": "business", // ← always required
"bank_country": "DE", // ← always required
"currency": "EUR", // ← always required
"iban": "DE89370400440532013000",
"address": {
"street_line1": "Musterring 1",
"city": "München",
"country": "DE",
"postcode": "80331"
}
}7a:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$d9"}}]}]],"$Lda"]}]
db:T10fb,{
"company_name": "Acme Corp",
"profile_type": "business", // ← always required
"bank_country": "US", // ← always required
"currency": "USD", // ← always required
"route": "ach", // ← required (ach, fedwire, or bic)
"routing_number": "026013576",
"account_no": "1234567890",
"address": {
"street_line1": "350 Fifth Avenue",
"city": "New York",
"region": "NY",
"country": "US",
"postcode": "10118"
}
}7b:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$db"}}]}]],"$Ldc"]}]
dd:T4c5,{
"profile_type": "business", // ← always required
"name": "Acme Corp",
"revtag": "acmecorp"
}7c:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$dd"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"profile_type\": \"business\", // ← always required\n \"name\": \"Acme Corp\",\n \"revtag\": \"acmecorp\"\n}\n"}]}]]}]
de:T11f6,{
"id": "b53fdd78-8d67-4f63-a103-eeeeef53cac8", // ← counterparty ID
"name": "Example Vendor Ltd",
"profile_type": "business",
"state": "created",
"created_at": "2026-07-02T09:34:41.790401Z",
"updated_at": "2026-07-02T09:34:41.790401Z",
"accounts": [
{
"account_no": "12345678",
"sort_code": "123456",
"id": "5c9e171c-7e23-4d6a-b768-aaaaaba535f3", // ← payment method ID
"name": "Example Vendor Ltd",
"bank_country": "GB",
"currency": "GBP",
"type": "external"
}
]
}7d:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$de"}}]}]],"$Ldf"]}]
e0:T10dd,{
"id": "239d6f1f-2222-4ae6-1111-5cc603341b4e", // ← counterparty ID
"name": "Beispiel GmbH",
"profile_type": "business",
"state": "created",
"created_at": "2026-07-02T14:47:12.273718Z",
"updated_at": "2026-07-02T14:47:12.273718Z",
"accounts": [
{
"iban": "DE89370400440532013000",
"id": "b209281b-aakk-9911-8d83-ac72469cef8f", // ← payment method ID
"name": "Beispiel GmbH",
"bank_country": "DE",
"currency": "EUR",
"type": "external"
}
]
}7e:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$e0"}}]}]],"$Le1"]}]
e2:T12fe,{
"id": "a1b2c3d4-e5f6-4789-abcd-ef1234567890", // ← counterparty ID
"name": "Acme Corp",
"profile_type": "business",
"state": "created",
"created_at": "2026-07-02T15:22:31.123456Z",
"updated_at": "2026-07-02T15:22:31.123456Z",
"accounts": [
{
"account_no": "1234567890",
"routing_number": "026013576",
"route": "ach",
"id": "c3d4e5f6-a7b8-4901-bcde-f12345678901", // ← payment method ID
"name": "Acme Corp",
"bank_country": "US",
"currency": "USD",
"type": "external"
}
]
}7f:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$e2"}}]}]],"$Le3"]}]
e4:Ta52,{
"id": "d4e5f6a7-b8c9-4012-def0-23456789012a", // ← counterparty ID
"name": "Acme Corp",
"revtag": "acmecorp",
"profile_type": "business",
"country": "GB",
"state": "created",
"created_at": "2026-07-02T16:01:22.789012Z",
"updated_at": "2026-07-02T16:01:22.789012Z"
}80:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Response"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$e4"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"id\": \"d4e5f6a7-b8c9-4012-def0-23456789012a\", // ← counterparty ID\n \"name\": \"Acme Corp\",\n \"revtag\": \"acmecorp\",\n \"profile_type\": \"business\",\n \"country\": \"GB\",\n \"state\": \"created\",\n \"created_at\": \"2026-07-02T16:01:22.789012Z\",\n \"updated_at\": \"2026-07-02T16:01:22.789012Z\"\n}\n"}]}]]}]
e5:T814,{
"address": {
"street_line1": "1 Canada Square",
"city": "London",
"region": "Greater London", // ← added: not always required at creation, but needed for some payment rails
"country": "GB",
"postcode": "E14 5AB"
}
}81:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$e5"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"address\": {\n \"street_line1\": \"1 Canada Square\",\n \"city\": \"London\",\n \"region\": \"Greater London\", // ← added: not always required at creation, but needed for some payment rails\n \"country\": \"GB\",\n \"postcode\": \"E14 5AB\"\n }\n}\n"}]}]]}]
e6:T810,{
"address": {
"street_line1": "Musterring 1",
"city": "München",
"region": "Bavaria", // ← added: not always required at creation, but needed for some payment rails
"country": "DE",
"postcode": "80331"
}
}82:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$e6"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"address\": {\n \"street_line1\": \"Musterring 1\",\n \"city\": \"München\",\n \"region\": \"Bavaria\", // ← added: not always required at creation, but needed for some payment rails\n \"country\": \"DE\",\n \"postcode\": \"80331\"\n }\n}\n"}]}]]}]
e7:T62d,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "b53fdd78-8d67-4f63-a103-eeeeef53cac8",
"account_id": "5c9e171c-7e23-4d6a-b768-aaaaaba535f3" // ← required when counterparty has multiple payment methods
}
}84:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$e7"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"b53fdd78-8d67-4f63-a103-eeeeef53cac8\",\n \"account_id\": \"5c9e171c-7e23-4d6a-b768-aaaaaba535f3\" // ← required when counterparty has multiple payment methods\n }\n}\n"}]}]]}]
e8:T62d,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "239d6f1f-2222-4ae6-1111-5cc603341b4e",
"account_id": "b209281b-aakk-9911-8d83-ac72469cef8f" // ← required when counterparty has multiple payment methods
}
}85:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$e8"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"239d6f1f-2222-4ae6-1111-5cc603341b4e\",\n \"account_id\": \"b209281b-aakk-9911-8d83-ac72469cef8f\" // ← required when counterparty has multiple payment methods\n }\n}\n"}]}]]}]
e9:T62d,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "a1b2c3d4-e5f6-4789-abcd-ef1234567890",
"account_id": "c3d4e5f6-a7b8-4901-bcde-f12345678901" // ← required when counterparty has multiple payment methods
}
}86:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$e9"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"a1b2c3d4-e5f6-4789-abcd-ef1234567890\",\n \"account_id\": \"c3d4e5f6-a7b8-4901-bcde-f12345678901\" // ← required when counterparty has multiple payment methods\n }\n}\n"}]}]]}]
ea:T62a,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "e5f6a7b8-c9d0-4123-ef01-34567890123b",
"card_id": "f6a7b8c9-d0e1-4234-f012-45678901234c" // ← required when counterparty has multiple payment methods
}
}88:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ea"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"e5f6a7b8-c9d0-4123-ef01-34567890123b\",\n \"card_id\": \"f6a7b8c9-d0e1-4234-f012-45678901234c\" // ← required when counterparty has multiple payment methods\n }\n}\n"}]}]]}]
eb:T9ae,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "b53fdd78-8d67-4f63-a103-eeeeef53cac8",
"account_id": "5c9e171c-7e23-4d6a-b768-aaaaaba535f3" // ← required when counterparty has multiple payment methods
},
"amount": 1000.00,
"currency": "GBP",
"charge_bearer": "shared" // ← optional (discovered in step 4)
}8e:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$eb"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"b53fdd78-8d67-4f63-a103-eeeeef53cac8\",\n \"account_id\": \"5c9e171c-7e23-4d6a-b768-aaaaaba535f3\" // ← required when counterparty has multiple payment methods\n },\n \"amount\": 1000.00,\n \"currency\": \"GBP\",\n \"charge_bearer\": \"shared\" // ← optional (discovered in step 4)\n}\n"}]}]]}]
ec:T99f,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "239d6f1f-2222-4ae6-1111-5cc603341b4e",
"account_id": "b209281b-aakk-9911-8d83-ac72469cef8f" // ← required when counterparty has multiple payment methods
},
"amount": 1000.00,
"currency": "EUR",
"charge_bearer": "shared" // ← optional (discovered in step 4)
}90:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ec"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"239d6f1f-2222-4ae6-1111-5cc603341b4e\",\n \"account_id\": \"b209281b-aakk-9911-8d83-ac72469cef8f\" // ← required when counterparty has multiple payment methods\n },\n \"amount\": 1000.00,\n \"currency\": \"EUR\",\n \"charge_bearer\": \"shared\" // ← optional (discovered in step 4)\n}\n"}]}]]}]
ed:T9a6,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "a1b2c3d4-e5f6-4789-abcd-ef1234567890",
"account_id": "c3d4e5f6-a7b8-4901-bcde-f12345678901" // ← required when counterparty has multiple payment methods
},
"amount": 1000.00,
"currency": "USD",
"charge_bearer": "shared" // ← optional (discovered in step 4)
}92:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ed"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"a1b2c3d4-e5f6-4789-abcd-ef1234567890\",\n \"account_id\": \"c3d4e5f6-a7b8-4901-bcde-f12345678901\" // ← required when counterparty has multiple payment methods\n },\n \"amount\": 1000.00,\n \"currency\": \"USD\",\n \"charge_bearer\": \"shared\" // ← optional (discovered in step 4)\n}\n"}]}]]}]
ee:T810,{
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "e5f6a7b8-c9d0-4123-ef01-34567890123b",
"card_id": "f6a7b8c9-d0e1-4234-f012-45678901234c" // ← required when counterparty has multiple payment methods
},
"amount": 1000.00,
"currency": "GBP"
}96:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ee"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"e5f6a7b8-c9d0-4123-ef01-34567890123b\",\n \"card_id\": \"f6a7b8c9-d0e1-4234-f012-45678901234c\" // ← required when counterparty has multiple payment methods\n },\n \"amount\": 1000.00,\n \"currency\": \"GBP\"\n}\n"}]}]]}]
ef:Tc38,{
"request_id": "a1b2c3d4-e5f6-4789-abcd-ef1234567890", // ← always required (UUID for idempotency)
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "b53fdd78-8d67-4f63-a103-eeeeef53cac8",
"account_id": "5c9e171c-7e23-4d6a-b768-aaaaaba535f3"
},
"amount": 1000.00,
"currency": "GBP",
"charge_bearer": "shared", // ← optional (discovered in step 4)
"reference": "Invoice #12345" // ← required (discovered in step 4)
}98:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$ef"}}]}]],"$Lf0"]}]
f1:Tc38,{
"request_id": "c2d3e4f5-a6b7-4890-bcde-f12345678901", // ← always required (UUID for idempotency)
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "239d6f1f-2222-4ae6-1111-5cc603341b4e",
"account_id": "b209281b-aakk-9911-8d83-ac72469cef8f"
},
"amount": 1000.00,
"currency": "EUR",
"charge_bearer": "shared", // ← optional (discovered in step 4)
"reference": "Invoice #12345" // ← required (discovered in step 4)
}99:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$f1"}}]}]],"$Lf2"]}]
f3:Tc38,{
"request_id": "d3e4f5a6-b7c8-4901-def0-012345678912", // ← always required (UUID for idempotency)
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "a1b2c3d4-e5f6-4789-abcd-ef1234567890",
"account_id": "c3d4e5f6-a7b8-4901-bcde-f12345678901"
},
"amount": 1000.00,
"currency": "USD",
"charge_bearer": "shared", // ← optional (discovered in step 4)
"reference": "Invoice #12345" // ← required (discovered in step 4)
}9a:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$f3"}}]}]],"$Lf4"]}]
f5:T98d,{
"request_id": "e4f5a6b7-c8d9-4012-ef01-123456789023", // ← always required (UUID for idempotency)
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "d4e5f6a7-b8c9-4012-def0-23456789012a"
},
"amount": 1000.00,
"currency": "GBP",
"reference": "Invoice #12345" // ← required (discovered in step 4)
}9b:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$f5"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"request_id\": \"e4f5a6b7-c8d9-4012-ef01-123456789023\", // ← always required (UUID for idempotency)\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"d4e5f6a7-b8c9-4012-def0-23456789012a\"\n },\n \"amount\": 1000.00,\n \"currency\": \"GBP\",\n \"reference\": \"Invoice #12345\" // ← required (discovered in step 4)\n}\n"}]}]]}]
f6:Tabe,{
"request_id": "f5a6b7c8-d9e0-4123-f012-234567890134", // ← always required (UUID for idempotency)
"account_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"receiver": {
"counterparty_id": "e5f6a7b8-c9d0-4123-ef01-34567890123b",
"card_id": "f6a7b8c9-d0e1-4234-f012-45678901234c"
},
"amount": 1000.00,
"currency": "GBP",
"reference": "Invoice #12345" // ← required (discovered in step 4)
}9c:["$","div",null,{"className":"wzy01m0 _18b50nc0","children":[[["$","div",null,{"className":"_18b50nc1","children":["$","span",null,{"className":"_18b50nc2","children":[false,"Request"]}]}],["$","$La4",null,{"className":"_18b50nc3","defaultWrap":false,"children":["$","div",null,{"className":"_18b50nc4 _18b50nc5","dangerouslySetInnerHTML":{"__html":"$f6"}}]}]],["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"request_id\": \"f5a6b7c8-d9e0-4123-f012-234567890134\", // ← always required (UUID for idempotency)\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"e5f6a7b8-c9d0-4123-ef01-34567890123b\",\n \"card_id\": \"f6a7b8c9-d0e1-4234-f012-45678901234c\"\n },\n \"amount\": 1000.00,\n \"currency\": \"GBP\",\n \"reference\": \"Invoice #12345\" // ← required (discovered in step 4)\n}\n"}]}]]}]
d8:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"company_name\": \"Example Vendor Ltd\",\n \"profile_type\": \"business\", // ← always required\n \"bank_country\": \"GB\", // ← always required\n \"currency\": \"GBP\", // ← always required\n \"account_no\": \"12345678\",\n \"sort_code\": \"123456\",\n \"address\": {\n \"street_line1\": \"1 Canada Square\",\n \"city\": \"London\",\n \"country\": \"GB\",\n \"postcode\": \"E14 5AB\"\n }\n}\n"}]}]
da:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"company_name\": \"Beispiel GmbH\",\n \"profile_type\": \"business\", // ← always required\n \"bank_country\": \"DE\", // ← always required\n \"currency\": \"EUR\", // ← always required\n \"iban\": \"DE89370400440532013000\",\n \"address\": {\n \"street_line1\": \"Musterring 1\",\n \"city\": \"München\",\n \"country\": \"DE\",\n \"postcode\": \"80331\"\n }\n}\n"}]}]
dc:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"company_name\": \"Acme Corp\",\n \"profile_type\": \"business\", // ← always required\n \"bank_country\": \"US\", // ← always required\n \"currency\": \"USD\", // ← always required\n \"route\": \"ach\", // ← required (ach, fedwire, or bic)\n \"routing_number\": \"026013576\",\n \"account_no\": \"1234567890\",\n \"address\": {\n \"street_line1\": \"350 Fifth Avenue\",\n \"city\": \"New York\",\n \"region\": \"NY\",\n \"country\": \"US\",\n \"postcode\": \"10118\"\n }\n}\n"}]}]
df:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"id\": \"b53fdd78-8d67-4f63-a103-eeeeef53cac8\", // ← counterparty ID\n \"name\": \"Example Vendor Ltd\",\n \"profile_type\": \"business\",\n \"state\": \"created\",\n \"created_at\": \"2026-07-02T09:34:41.790401Z\",\n \"updated_at\": \"2026-07-02T09:34:41.790401Z\",\n \"accounts\": [\n {\n \"account_no\": \"12345678\",\n \"sort_code\": \"123456\",\n \"id\": \"5c9e171c-7e23-4d6a-b768-aaaaaba535f3\", // ← payment method ID\n \"name\": \"Example Vendor Ltd\",\n \"bank_country\": \"GB\",\n \"currency\": \"GBP\",\n \"type\": \"external\"\n }\n ]\n}\n"}]}]
e1:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"id\": \"239d6f1f-2222-4ae6-1111-5cc603341b4e\", // ← counterparty ID\n \"name\": \"Beispiel GmbH\",\n \"profile_type\": \"business\",\n \"state\": \"created\",\n \"created_at\": \"2026-07-02T14:47:12.273718Z\",\n \"updated_at\": \"2026-07-02T14:47:12.273718Z\",\n \"accounts\": [\n {\n \"iban\": \"DE89370400440532013000\",\n \"id\": \"b209281b-aakk-9911-8d83-ac72469cef8f\", // ← payment method ID\n \"name\": \"Beispiel GmbH\",\n \"bank_country\": \"DE\",\n \"currency\": \"EUR\",\n \"type\": \"external\"\n }\n ]\n}\n"}]}]
e3:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"id\": \"a1b2c3d4-e5f6-4789-abcd-ef1234567890\", // ← counterparty ID\n \"name\": \"Acme Corp\",\n \"profile_type\": \"business\",\n \"state\": \"created\",\n \"created_at\": \"2026-07-02T15:22:31.123456Z\",\n \"updated_at\": \"2026-07-02T15:22:31.123456Z\",\n \"accounts\": [\n {\n \"account_no\": \"1234567890\",\n \"routing_number\": \"026013576\",\n \"route\": \"ach\",\n \"id\": \"c3d4e5f6-a7b8-4901-bcde-f12345678901\", // ← payment method ID\n \"name\": \"Acme Corp\",\n \"bank_country\": \"US\",\n \"currency\": \"USD\",\n \"type\": \"external\"\n }\n ]\n}\n"}]}]
f0:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"request_id\": \"a1b2c3d4-e5f6-4789-abcd-ef1234567890\", // ← always required (UUID for idempotency)\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"b53fdd78-8d67-4f63-a103-eeeeef53cac8\",\n \"account_id\": \"5c9e171c-7e23-4d6a-b768-aaaaaba535f3\"\n },\n \"amount\": 1000.00,\n \"currency\": \"GBP\",\n \"charge_bearer\": \"shared\", // ← optional (discovered in step 4)\n \"reference\": \"Invoice #12345\" // ← required (discovered in step 4)\n}\n"}]}]
f2:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"request_id\": \"c2d3e4f5-a6b7-4890-bcde-f12345678901\", // ← always required (UUID for idempotency)\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"239d6f1f-2222-4ae6-1111-5cc603341b4e\",\n \"account_id\": \"b209281b-aakk-9911-8d83-ac72469cef8f\"\n },\n \"amount\": 1000.00,\n \"currency\": \"EUR\",\n \"charge_bearer\": \"shared\", // ← optional (discovered in step 4)\n \"reference\": \"Invoice #12345\" // ← required (discovered in step 4)\n}\n"}]}]
f4:["$","div",null,{"className":"wzy01m1","children":["$","$La6",null,{"code":"{\n \"request_id\": \"d3e4f5a6-b7c8-4901-def0-012345678912\", // ← always required (UUID for idempotency)\n \"account_id\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"receiver\": {\n \"counterparty_id\": \"a1b2c3d4-e5f6-4789-abcd-ef1234567890\",\n \"account_id\": \"c3d4e5f6-a7b8-4901-bcde-f12345678901\"\n },\n \"amount\": 1000.00,\n \"currency\": \"USD\",\n \"charge_bearer\": \"shared\", // ← optional (discovered in step 4)\n \"reference\": \"Invoice #12345\" // ← required (discovered in step 4)\n}\n"}]}]