Revolut Counterparties API

Manage counterparties that you intend to transact with. Request and response examples can vary based on the account provider's location and type of the counterparty. For more information, see the guides: [Create a counterparty](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/create-a-counterparty), [Retrieve counterparties](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/retrieve-counterparties), and [Update a counterparty's payment method](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/update-counterparty-payment-method). :::note In the Sandbox environment, you cannot add real people and businesses as Revolut counterparties. Therefore, to help you simulate [Create a counterparty](https://developer.revolut.com/docs/api/business#add-counterparty) requests, we have created some test accounts for counterparties of profile type `personal`. To add a counterparty via Revtag, use one of these pairs for the `name` and `revtag` fields respectively: - `Test User 1` & `john1pvki` - `Test User 2` & `john2pvki` - ... - `Test User 9` & `john9pvki` :::

OpenAPI Specification

revolut-counterparties-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  version: '1.0'
  title: Business Accounting Counterparties API
  description: "As a Revolut Business customer with a Business Account, you can use the Business API to automate your own business processes.\nSave time, reduce your costs, and avoid errors by using the Business API. \n\n:::tip[Before you get started]\nTo learn more about the Business API and its features, check the [**user guides**](https://developer.revolut.com/docs/guides/manage-accounts/introduction).\n\nYou can reach them at any time from the main navigation bar **→ Guides → Business**.\n:::\n\nYou can view accounts, manage counterparties, make payments or currency exchanges without manual effort in the Web UI:\n\n- Accounting: [Account management](https://developer.revolut.com/docs/api/business#get-account), [Accounting settings](https://developer.revolut.com/docs/api/business#tag-accounting), [Expense management](https://developer.revolut.com/docs/api/business#get-expense), [Transactions](https://developer.revolut.com/docs/api/business#get-transactions) \n- Payments: \n  - [Counterparty management](https://developer.revolut.com/docs/api/business#get-counterparties)\n  - Payment management: [Payment drafts](https://developer.revolut.com/docs/api/business#delete-payment-draft), [Payout links](https://developer.revolut.com/docs/api/business#get-payout-link), [Transfers](https://developer.revolut.com/docs/api/business#tag-transfers)\n  - [Foreign exchange](https://developer.revolut.com/docs/api/business#tag-foreign-exchange)\n- Business team: [Card management](https://developer.revolut.com/docs/api/business#delete-card), [Card invitation management](https://developer.revolut.com/docs/api/business#update-card-invitation), [Team member management](https://developer.revolut.com/docs/api/business#delete-team-member)\n- Developer tools: [Sandbox simulations](https://developer.revolut.com/docs/api/business#tag-simulations), [Webhook management](https://developer.revolut.com/docs/api/business#tag-webhooks-v2)\n\nTo see the reference for the specific endpoints and operations of this API, browse the menu on the left.\n\n### Test the Business API\n\nYou can test the Business API in Postman by forking this collection:\n\n[![View in Postman](https://run.pstmn.io/button.svg)](https://www.postman.com/revolut-api/workspace/revolut-developers/overview)"
  contact: {}
servers:
- url: https://b2b.revolut.com/api/1.0
  description: Production server (uses live data)
- url: https://sandbox-b2b.revolut.com/api/1.0
  description: Sandbox server (uses test data)
tags:
- name: Counterparties
  description: "Manage counterparties that you intend to transact with.\n\nRequest and response examples can vary based on the account provider's location and type of the counterparty. \nFor more information, see the guides: [Create a counterparty](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/create-a-counterparty), [Retrieve counterparties](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/retrieve-counterparties), and [Update a counterparty's payment method](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/update-counterparty-payment-method).\n\n:::note\nIn the Sandbox environment, you cannot add real people and businesses as Revolut counterparties. \nTherefore, to help you simulate [Create a counterparty](https://developer.revolut.com/docs/api/business#add-counterparty) requests, we have created some test accounts for counterparties of profile type `personal`.\n\nTo add a counterparty via Revtag, use one of these pairs for the `name` and `revtag` fields respectively: \n- `Test User 1` & `john1pvki`\n- `Test User 2` & `john2pvki`\n-    ...\n- `Test User 9` & `john9pvki`\n:::"
paths:
  /account-name-validation:
    post:
      summary: Validate an account name (CoP/VoP)
      operationId: validateAccountName
      description: "Validate a counterparty's account name against their account details when [adding a counterparty](https://developer.revolut.com/docs/api/business#add-counterparty) or [making a transfer](https://developer.revolut.com/docs/api/business#create-payment) to a new or existing counterparty.\n\n:::warning\nThe CoP check is **not** a complete fraud-prevention tool, and it does **not** guarantee the person is who they claim to be.\nIt only confirms that the name and account details your provide match the bank's records.\n\nEven if the counterparty's details match, you should still exercise due caution when transferring funds.\n:::\n\n:::note[Availability & Sandbox behaviour]\n- This feature is only available to businesses in the [supported regions](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services).\n  Additionally, to get access to CoP in the UK, eligible businesses must contact [Revolut API Support](mailto:api-requests@revolut.com).\n- In Sandbox, this feature is only available for **testing**.\n  While **incomplete or invalid requests** will return production-like error responses, **complete and valid requests** in Sandbox do **not** undergo real validation and will always return `cannot_be_checked`.\n:::\n\nThe validation relies on different underlying services, depending on the recipient's payment scheme (region and currency).\nThese factors determine which fields you must provide and what response you get.\n- For examples, refer to the request body samples.\n- For more information, see the guides: [Validate an account name (CoP/VoP)](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/confirmation-of-payee)."
      security:
      - AccessToken:
        - WRITE
      requestBody:
        description: Counterparty account details
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValidateAccountNameRequest'
            examples:
              uk_individual:
                summary: UK individual counterparty (personal account)
                value:
                  sort_code: 54-01-05
                  account_no: '12345678'
                  individual_name:
                    first_name: John
                    last_name: Smith
              uk_company:
                summary: UK company (business account)
                value:
                  sort_code: 54-01-05
                  account_no: '12345678'
                  company_name: John Smith Co.
              eu_individual:
                summary: EUR individual counterparty (personal account)
                value:
                  iban: LT479258808892168739
                  recipient_country: LT
                  recipient_currency: EUR
                  individual_name:
                    first_name: Petras
                    last_name: Petrauskas
              eu_company:
                summary: EUR company (business account)
                value:
                  iban: LT479258808892168739
                  recipient_country: LT
                  recipient_currency: EUR
                  company_name: Petras Petrauskas UAB
              ro_individual:
                summary: RO individual counterparty (personal account)
                value:
                  iban: RO1598536106002528374911
                  recipient_country: RO
                  recipient_currency: RON
                  individual_name:
                    first_name: Alexandru
                    last_name: Ionescu
              ro_company:
                summary: RO company (business account)
                value:
                  iban: RO1598536106002528374911
                  recipient_country: RO
                  recipient_currency: RON
                  company_name: Alexandru Ionescu SRL
              au_individual:
                summary: AU individual counterparty (personal account)
                value:
                  account_no: '486196918'
                  bsb: '159517'
                  individual_name:
                    first_name: Joseph
                    last_name: Bloggs
              au_company:
                summary: AU company (business account)
                value:
                  account_no: '486196918'
                  bsb: '159517'
                  company_name: Joseph Bloggs Pty Ltd
      responses:
        '200':
          description: "Account name validation result\n\n:::note\n- The actual results returned in the response come from the CoP services, not from Revolut.\n  The Business API passes them on as received.\n\n  Because of this, the descriptions below should be treated as an approximation rather than complete documentation.\n- The responses differ depending on the CoP service, even when the schema appears the same.\n  Make sure that you refer to the appropriate response variant.\n:::"
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidateAccountNameResponse'
              examples:
                match_individual_uk:
                  summary: (UK) Individual account name and number match
                  value:
                    result_code: matched
                    individual_name:
                      first_name: John
                      last_name: Smith
                match_company_uk:
                  summary: (UK) Company account name and number match
                  value:
                    result_code: matched
                    company_name: John Smith Co.
                match_but_individual_account_type_uk:
                  summary: (UK) Names match but counterparty is an individual, not a company
                  value:
                    result_code: close_match
                    reason:
                      type: uk_cop
                      code: individual_account_name_matched
                    individual_name:
                      first_name: John
                      last_name: Smith
                match_but_company_account_type_uk:
                  summary: (UK) Names match but counterparty is a company, not an individual
                  value:
                    result_code: close_match
                    reason:
                      type: uk_cop
                      code: company_account_name_matched
                    company_name: John Smith Co.
                close_match_individual_name_uk:
                  summary: (UK) Individual account name is a close match
                  value:
                    result_code: close_match
                    reason:
                      type: uk_cop
                      code: close_match
                    individual_name:
                      first_name: Joan
                      last_name: Smith
                close_match_company_name_uk:
                  summary: (UK) Company account name is a close match
                  value:
                    result_code: close_match
                    reason:
                      type: uk_cop
                      code: close_match
                    company_name: Joan Smith Co.
                close_match_individual_name_and_account_type_uk:
                  summary: (UK) Names are similar and counterparty is an individual, not a company
                  value:
                    result_code: close_match
                    reason:
                      type: uk_cop
                      code: individual_account_close_match
                    individual_name:
                      first_name: Joan
                      last_name: Smith
                close_match_company_name_and_account_type_uk:
                  summary: (UK) Names are similar and counterparty is a company, not an individual
                  value:
                    result_code: close_match
                    reason:
                      type: uk_cop
                      code: company_account_close_match
                    company_name: Joan Smith Co.
                account_does_not_match_individual_uk:
                  summary: (UK) Provided details for individual do not match account details
                  value:
                    result_code: not_matched
                    reason:
                      type: uk_cop
                      code: not_matched
                    individual_name:
                      first_name: John
                      last_name: Smith
                account_does_not_match_company_uk:
                  summary: (UK) Provided details for company do not match account details
                  value:
                    result_code: not_matched
                    reason:
                      type: uk_cop
                      code: not_matched
                    company_name: John Smith Co.
                account_does_not_exist_uk:
                  summary: (UK) Account does not exist
                  value:
                    result_code: not_matched
                    reason:
                      type: uk_cop
                      code: account_does_not_exist
                account_switched_uk:
                  summary: (UK) Account switched
                  value:
                    result_code: cannot_be_checked
                    reason:
                      type: uk_cop
                      code: account_switched
                cannot_be_checked_uk:
                  summary: (UK) Account cannot be checked
                  value:
                    result_code: cannot_be_checked
                    reason:
                      type: uk_cop
                      code: cannot_be_checked
                    individual_name:
                      first_name: Jane
                      last_name: Doe
                match_individual_au:
                  summary: (AU) Individual account name and number match
                  value:
                    result_code: matched
                    individual_name:
                      first_name: Joseph
                      last_name: Bloggs
                match_company_au:
                  summary: (AU) Company account name and number match
                  value:
                    result_code: matched
                    company_name: Joseph Bloggs Pty Ltd
                match_but_individual_account_type_au:
                  summary: (AU) Names match but counterparty is an individual, not a company
                  value:
                    result_code: matched
                    individual_name:
                      first_name: Joseph
                      last_name: Bloggs
                match_but_company_account_type_au:
                  summary: (AU) Names match but counterparty is a company, not an individual
                  value:
                    result_code: matched
                    company_name: Joseph Bloggs Pty Ltd
                close_match_company_name_au:
                  summary: (AU) Company account name is a close match
                  value:
                    result_code: close_match
                    reason:
                      type: au_cop
                      code: close_match
                    company_name: Josef Bloggs Pty Ltd
                account_does_not_match_individual_au:
                  summary: (AU) Provided details for individual do not match account details
                  value:
                    result_code: not_matched
                    reason:
                      type: au_cop
                      code: not_matched
                    individual_name:
                      first_name: Jane
                      last_name: Bloggs
                account_does_not_match_company_au:
                  summary: (AU) Provided details for company do not match account details
                  value:
                    result_code: not_matched
                    reason:
                      type: uk_cop
                      code: not_matched
                    company_name: Jane Bloggs Pty Ltd
                match_individual_eur:
                  summary: (EUR) Individual account name and number match
                  value:
                    result_code: matched
                    individual_name:
                      first_name: Petras
                      last_name: Petrauskas
                match_company_eur:
                  summary: (EUR) Company account name and number match
                  value:
                    result_code: matched
                    company_name: Petras Petrauskas UAB
                match_but_individual_account_type_eur:
                  summary: (EUR) Names match, though counterparty is an individual, not a company
                  value:
                    result_code: matched
                    company_name: Petras Petrauskas
                match_but_company_account_type_eur:
                  summary: (EUR) Names match, though counterparty is a company, not an individual
                  value:
                    result_code: matched
                    individual_name:
                      first_name: Petras
                      last_name: Petrauskas UAB
                close_match_individual_name_eur:
                  summary: (EUR) Individual account name is a close match
                  value:
                    result_code: close_match
                    reason:
                      type: eu_cop
                      code: close_match
                    individual_name:
                      first_name: Petras
                      last_name: Petrauskas
                close_match_company_name_eur:
                  summary: (EUR) Company account name is a close match
                  value:
                    result_code: close_match
                    reason:
                      type: eu_cop
                      code: close_match
                    company_name: Petras Petrauskas UAB
                account_does_not_match_individual_eur:
                  summary: (EUR) Provided details for individual do not match account details
                  value:
                    result_code: not_matched
                    reason:
                      type: au_cop
                      code: not_matched
                    individual_name:
                      first_name: Piter
                      last_name: Petrauskas
                account_does_not_match_company_eur:
                  summary: (EUR) Provided details for company do not match account details
                  value:
                    result_code: not_matched
                    reason:
                      type: uk_cop
                      code: not_matched
                    company_name: Piter Petrauskas Ltd
                match_individual_ro:
                  summary: (RO) Account found, partial name returned for individual
                  value:
                    result_code: matched
                    individual_name:
                      first_name: Alexandru
                      last_name: I.
                match_company_ro:
                  summary: (RO) Account found, partial name returned for company
                  value:
                    result_code: matched
                    company_name: Rodri**** SA
                cannot_be_checked_not_supported:
                  summary: The specified currency+country combination is invalid or not supported for your region
                  value:
                    result_code: cannot_be_checked
                    reason:
                      code: not_supported
                unavailable:
                  summary: Temporarily unavailable
                  value:
                    result_code: temporarily_unavailable
        '400':
          description: 'Bad request


            Returned, for example, when the data you provided is invalid or required data is missing.

            '
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    description: The error code.
                  message:
                    type: string
                    description: The description of the error.
                required:
                - code
                - message
              examples:
                invalid_sort_code_uk:
                  summary: Invalid sort code (UK)
                  value:
                    message: 'Invalid sort code: 54-01-050'
                    code: 3000
                invalid_iban_ro:
                  summary: Invalid IBAN (RO)
                  value:
                    message: RO49AAAA1B31007593840000 is not a valid IBAN
                    code: 3000
                country_missing:
                  summary: Country prefix is missing in IBAN
                  value:
                    message: Required 'country' is missing
                    code: 3000
                name_missing_eur:
                  summary: Recipient's name is missing
                  value:
                    message: company_name or individual_name should be provided
                    code: 3000
                last_name_is_empty_ro:
                  summary: Last name is required but was not provided
                  value:
                    message: last_name is empty
                    code: 3000
        '401':
          description: 'Unauthorized


            Returned, for example, when the credentials you used to make the request are invalid.

            For more information, see the **Authorization** section.'
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    description: The description of the error.
                  status:
                    type: string
                    description: The HTTP error code.
                required:
                - message
              example:
                message: The request should be authorized.
                status: 401
        '404':
          description: 'Not found


            Returned, for example, when your account does not have access to CoP.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                message: Resource not found
                code: 3006
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Counterparties
  /counterparties:
    get:
      summary: Retrieve a list of counterparties
      operationId: getCounterparties
      description: "Get all the counterparties that you have created, or use the query parameters to filter the results. \n\nThe counterparties are sorted by the `created_at` date in reverse chronological order.\n\nThe returned counterparties are **paginated**. \nThe maximum number of counterparties returned per page is specified by the `limit` parameter.\nTo get to the next page, make a new request and use the `created_at` date of the last counterparty returned in the previous response.\n\nFor more information, see the guides: [Retrieve counterparties](https://developer.revolut.com/docs/guides/manage-accounts/counterparties/retrieve-counterparties)."
      parameters:
      - in: query
        name: name
        schema:
          type: string
        description: "The name of the counterparty to retrieve. It does not need to be an exact match, partial match is also supported. \n\n:::note\nSpecial characters must be properly URL-encoded.\n:::"
      - in: query
        name: account_no
        schema:
          type: string
        description: The exact account number of the counterparty to retrieve.
      - in: query
        name: sort_code
        schema:
          type: string
        description: "The exact sort code of the counterparty to retrieve. \nOnly allowed in combination with the `account_no` parameter."
      - in: query
        name: iban
        schema:
          type: string
        description: The exact IBAN of the counterparty to retrieve.
      - in: query
        name: bic
        schema:
          type: string
        description: "The exact BIC of the counterparty to retrieve. \nOnly allowed in combination with the `iban` parameter."
      - in: query
        name: created_before
        schema:
          type: string
          format: date-time
          default: the date-time at which the request is made
        description: "Retrieves counterparties with `created_at` < `created_before`.\nThe default value is the current date and time at which you are calling the endpoint. \n\nProvide it in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format."
      - in: query
        name: limit
        schema:
          type: integer
          minimum: 1
          maximum: 1000
          default: 100
        description: 'The maximum number of counterparties returned per page.


          To get to the next page, make a new request and use the `created_at` date of the last counterparty returned in the previous response as the value for `created_before`.'
      security:
      - AccessToken:
        - READ
      responses:
        '200':
          description: List of your counterparties
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Counterparties'
              examples:
                all_counterparties:
                  summary: A list of your counterparties
                  value:
                  - id: 239d6f1f-2222-4ae6-1111-5cc603341b4e
                    name: Jane Doe Co.
                    profile_type: business
                    state: created
                    created_at: '2022-09-14T14:47:12.273718Z'
                    updated_at: '2022-09-14T14:47:12.273718Z'
                    accounts:
                    - iban: GB66REVO00996995908786
                      bic: REVOGB21
                      id: b209281b-aakk-9911-8d83-ac72469cef8f
                      name: Jane Doe Co.
                      bank_country: GB
                      currency: EUR
                      type: external
                      address:
                        street_line1: Revolut LTD
                        street_line2: 1 Canada Square
                        region: Greater London
                        city: London
                        country: GB
                        postcode: E14 5AB
                  - id: 8e0e9886-0af1-4b0c-acf4-111180d2892b
                    name: John Smith
                    revtag: johnsmith
                    profile_type: personal
                    country: GB
                    state: created
                    created_at: '2022-09-14T14:41:39.312017Z'
                    updated_at: '2022-09-14T14:41:39.312017Z'
                  - id: 11cae5ef-ec24-401d-98a3-e5baa0041671
                    name: John Smith Co.
                    revtag: jsmithco1
                    profile_type: business
                    country: GB
                    state: created
                    created_at: '2025-09-16T09:34:41.790401Z'
                    updated_at: '2025-09-16T09:34:41.790401Z'
                    accounts:
                    - id: ad3c3b03-611e-461e-99b2-572f4785e44b
                      name: Main GBP
                      currency: GBP
                      type: revolut
                    - id: 67fe3eaa-c994-40c0-b3e0-7b6bfe0cedca
                      name: Main EUR
                      currency: EUR
                      type: revolut
                  - id: e7e36cce-2e9c-4e96-818e-1c2fed325852
                    name: John Doe Co.
                    profile_type: business
                    state: created
                    created_at: '2022-08-14T14:34:11.168340Z'
                    updated_at: '2022-08-14T14:34:11.168340Z'
                    accounts:
                    - account_no: '12345674'
                      sort_code: '540107'
                      id: e277b2bd-3a6d-423b-933d-3d425094bb13
                      name: John Doe Co.
                      bank_country: GB
                      currency: GBP
                      type: external
                      address:
                        street_line1: 7 King's Road
                        region: Greater London
                        city: London
                        country: GB
                        postcode: SW3 4PQ
                  - id: 239d6f1f-2222-4ae6-1111-5cc603341b4e
                    name: Bleu Blanc Conseil SARL
                    profile_type: business
                    state: created
                    created_at: '2022-09-14T14:47:12.273718Z'
                    updated_at: '2022-09-14T14:47:12.273718Z'
                    accounts:
                    - iban: FR1420041010050500013M02606
                      bic: PSSTFRPPLIL
                      id: b209281b-aakk-9911-8d83-ac72469cef8f
                      name: Bleu Blanc Conseil SARL
                      bank_country: FR
                      currency: EUR
                      type: external
                      address:
                        street_line1: 12 Rue de la Paix
                        city: Paris
                        country: FR
                        postcode: '75002'
                  - id: b8ce3922-d518-4ae6-9426-e8cc117e5332
                    name: Johann Meier Co.
                    profile_type: business
                    state: created
                    created_at: '2023-08-10T12:43:20.273500Z'
                    updated_at: '2026-01-30T12:43:20.273500Z'
                    accounts:
                    - iban: CH9300762011623852957
                      bic: UBSWCHZH80A
                      id: d95bc455-f495-4f18-95fa-32f99479318c
                      name: Johann Meier Co.
                      bank_country: CH
                      currency: EUR
                      type: external
                      address:
                        street_line1: Bahnhofstrasse 10
                        city: Zurich
                        country: CH
                        postcode: '8001'
                  - id: 173e6a6b-d955-465f-8f31-7f6f7c03927c
                    name: Edelweiss Handel GmbH
                    profile_type: business
                    state: created
                    created_at: '2023-08-10T12:43:20.273500Z'
                    updated_at: '2026-01-32T10:54:03.350240Z'
                    accounts:
                    - iban: CH5604835012345678009
                      bic: UBSWCHZH80A
                      id: b3cc43e8-f141-459b-9bd5-3505cf9797f8
                      name: Edelweiss Handel GmbH
                      bank_country: CH
                      currency: CHF
                      type: external
                      address:
                        street_line1: Marktgasse 22
                        city: Bern
                        country: CH
                        postcode: '3011'
                  - id: 1d9013c8-84bf-474c-b3d9-690f2ae2e65c
                    name: Jane Doe
                    state: created
                    created_at: '2024-01-10T15:32:10.172300Z'
                    updated_at: '2024-01-10T15:32:10.172300Z'
                    cards:
                    - id: 0130f363-eeaf-4aa8-b77f-a6a629c603f5
                      name: Jane Doe
                      last_digits: 1234
                      scheme: visa
                      country: GB
                      currency: GBP
                    - id: fa05f2e5-d253-4661-85cc-bcff98b136ac
                      name: Jane Doe
                      last_digits: 5678
                      scheme: mastercard
                      country: GB
                      currency: GBP
                no_search_results:
                  summary: No matching search results
                  value: []
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                bad_limit:
                  summary: Bad limit
                  value:
                    message: limit must be between 1 and 1000
                    code: 2101
                bic_only_allowed_with_iban:
                  summary: BIC can be used only in combination with IBAN
                  value:
                    message: bic param can be used only combined with iban param
 

# --- truncated at 32 KB (90 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/revolut/refs/heads/main/openapi/revolut-counterparties-api-openapi.yml