openapi: 3.1.1
info:
  version: "1.0"
  title: Business API
  description: |-
    As a Revolut Business customer with a Business Account, you can use the Business API to automate your own business processes.
    Save time, reduce your costs, and avoid errors by using the Business API. 

    :::tip[Before you get started]
    To learn more about the Business API and its features, check the [**user guides**](/docs/guides/manage-accounts/introduction).

    You can reach them at any time from the main navigation bar **→ Guides → Business**.
    :::

    You can view accounts, manage counterparties, make payments or currency exchanges without manual effort in the Web UI:

    - Accounting: [Account management](/docs/api/business#get-account), [Accounting settings](/docs/api/business#tag-accounting), [Expense management](/docs/api/business#get-expense), [Transactions](/docs/api/business#get-transactions) 
    - Payments: 
      - [Counterparty management](/docs/api/business#get-counterparties)
      - Payment management: [Payment drafts](/docs/api/business#delete-payment-draft), [Payout links](/docs/api/business#get-payout-link), [Transfers](/docs/api/business#tag-transfers)
      - [Foreign exchange](/docs/api/business#tag-foreign-exchange)
    - Business team: [Card management](/docs/api/business#delete-card), [Card invitation management](/docs/api/business#update-card-invitation), [Team member management](/docs/api/business#delete-team-member)
    - Developer tools: [Sandbox simulations](/docs/api/business#tag-simulations), [Webhook management](/docs/api/business#tag-webhooks-v2)

    To see the reference for the specific endpoints and operations of this API, browse the menu on the left.

    ### Test the Business API

    You can test the Business API in Postman by forking this collection:

    [![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)
paths:
  /accounting-categories:
    post:
      summary: Create an accounting category
      operationId: createAccountingCategory
      description: |-
        Add a new accounting category to the list of accounting categories that can be assigned to your financial records, such as expenses.

        :::note
        This operation is not supported for [externally managed accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories#externally-managed-settings).
        :::

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories).
      security:
        - AccessToken:
            - WRITE
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateAccountingCategoryRequest"
            examples:
              category_with_default_tax_rate:
                summary: Accounting category with default tax rate
                value:
                  name: Transportation
                  code: "400"
                  default_tax_rate_id: e6b84ddb-a127-466b-9a0a-501bda07773f
              category_without_default_tax_rate:
                summary: Accounting category without default tax rate
                value:
                  name: Office supplies
                  code: "410"
      responses:
        "201":
          description: >-
            Resource created


            On successful creation, the response returns only the ID of the new
            resource (i.e. the accounting category), even if the resource has
            more properties.

            To get all the details of the accounting category, use the returned
            resource ID with a [GET
            request](/docs/api/business#get-accounting-category).
          $ref: "#/components/responses/ResourceCreatedResponse"
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                param_required:
                  summary: Required parameter(s) missing
                  value:
                    error_id: fa12f45e-0ebf-4f7c-88e0-ebb7a1441a18
                    code: 2101
                    message: "'code' is required, 'name' is required"
                bad_param_type:
                  summary: Incorrect parameter type
                  value:
                    error_id: 29146977-8042-446f-b362-675e2921d71c
                    code: 2101
                    message: "'code' must be a string, 'name' must be a string"
                invalid_json:
                  summary: Invalid JSON
                  value:
                    error_id: df7b76b2-1313-42f0-8c0b-3673c665f135
                    code: 2101
                    message: Request body is not valid JSON
                param_value_too_short:
                  summary: Parameter value too short
                  value:
                    error_id: 7acc6073-5290-45f8-8956-c79d487ef1e5
                    code: 2101
                    message: "'name' must be at least 1 character"
                param_value_too_long:
                  summary: Parameter value too long
                  value:
                    error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
                    code: 2101
                    message: "'name' must be at most 60 characters"
                bad_param_format:
                  summary: Incorrect parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: "'default_tax_rate_id' must be a valid UUID"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "409":
          description: >-
            Conflict


            Request conflicts with the current state of the resource.

            Returned, for example, when an accounting category with the provided
            name already exists.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                category_with_name_exists:
                  summary: Name must be unique
                  value:
                    error_id: 8c08b656-ab6e-4768-4e57-f281da25aa2b
                    code: 3503
                    message: Category with name My Unique Accounting Category already exists
                category_with_code_exists:
                  summary: Code must be unique
                  value:
                    error_id: 8c08b656-ab6e-4768-4e57-f281da25aa2b
                    code: 3504
                    message: Category with code MUAC already exists
        "422":
          description: >-
            Unprocessable entity - accounting category cannot be created due to
            business rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and
            accounting categories are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_modify_externally_managed_resource:
                  summary: Accounting categories are managed by integration, cannot be created
                    manually
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Accounting categories are managed by your connected accounting
                      integration and cannot be modified manually
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Accounting categories
    get:
      summary: Retrieve a list of accounting categories
      operationId: getAccountingCategories
      description: |-
        Get available accounting categories based on the provided query criteria.

        :::note
        The API returns a maximum of 500 accounting categories per request. 
        The default page size is 100.
        :::

        The accounting categories are sorted by the `created_at` date in reverse chronological order, and they're **paginated**.
        The page size, that is, the maximum number of accounting categories returned per page is specified by the `limit` parameter. 
        - If the number of results exceeds the page size, the response also returns a cursor for the next page under `next_page_token`.        
          To get the next page of results, make a new request using that `next_page_token` value in `page_token`.
        - If the number of results is smaller than the page size, `next_page_token` is not returned.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: limit
          in: query
          required: false
          description: >-
            The page size, that is, the maximum number of accounting categories
            to return per page.


            To get the next page of results, use `page_token`.
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
            examples:
              - 10
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: List of accounting categories and the next page token if the number
            of results exceeds the page size
          content:
            application/json:
              schema:
                type: object
                properties:
                  next_page_token:
                    $ref: "#/components/schemas/PageToken"
                  accounting_categories:
                    type: array
                    description: The list of accounting categories.
                    items:
                      $ref: "#/components/schemas/AccountingCategoryResponse"
                required:
                  - accounting_categories
              examples:
                results_with_next_page:
                  summary: Results exceed page size (when limit=5) & next page available
                  value:
                    next_page_token: MjAyNi0wMS0wMVQwOToxMzoxNS40MDZaN2RhNTFjZGY0LTZiYjctNDRkNi04OWU1LTc2OWEzZGYxZDc5ZA
                    accounting_categories:
                      - id: 8d831292-f950-4c5a-83f9-030df8cacd3f
                        name: Transportation
                        code: "400"
                        created_at: 2026-03-11T17:03:25.570942Z
                        updated_at: 2026-03-11T17:03:25.570942Z
                        default_tax_rate_id: d8f6bf6c-5b70-4c16-9549-5943e67ab009
                      - id: 8d749b93-4a2e-4f28-8b5b-9d64fe2e1d62
                        name: Office Supplies
                        code: "410"
                        created_at: 2026-03-11T17:03:25.570940Z
                        updated_at: 2026-03-11T17:03:25.570940Z
                        default_tax_rate_id: 2a3520af-e6f7-416c-821e-0e83ffac1dfa
                      - id: 3726661e-0e93-4822-8bda-4d1a4c6e7dff
                        name: Software & Subscriptions
                        code: "420"
                        created_at: 2026-03-11T17:03:25.570937Z
                        updated_at: 2026-03-11T17:03:25.570937Z
                        default_tax_rate_id: 6a83d8d8-f5a5-405d-aafd-729786569c2d
                      - id: b37c42c8-1d42-4ee1-aa7e-348dd06ea69f
                        name: General Expenses
                        code: "429"
                        created_at: 2026-03-11T17:03:25.570927Z
                        updated_at: 2026-03-11T17:03:25.570927Z
                        default_tax_rate_id: 5781063b-d140-4c72-bde9-b8b21e64e3e0
                      - id: c729ea95-3ae7-4d21-91f7-1a69844175f2
                        name: Travel & Lodging
                        code: "460"
                        created_at: 2026-03-11T17:03:25.570924Z
                        updated_at: 2026-03-11T17:03:25.570924Z
                        default_tax_rate_id: f2519604-b04a-4a82-9b01-68235c4ad000
                results_single_page:
                  summary: Results fit within page size, no more pages available
                  value:
                    accounting_categories:
                      - id: 8d831292-f950-4c5a-83f9-030df8cacd3f
                        name: Transportation
                        code: "400"
                        created_at: 2026-03-11T17:03:25.570942Z
                        updated_at: 2026-03-11T17:03:25.570942Z
                        default_tax_rate_id: d8f6bf6c-5b70-4c16-9549-5943e67ab009
                      - id: 8d749b93-4a2e-4f28-8b5b-9d64fe2e1d62
                        name: Office Supplies
                        code: "410"
                        created_at: 2026-03-11T17:03:25.570940Z
                        updated_at: 2026-03-11T17:03:25.570940Z
                        default_tax_rate_id: 2a3520af-e6f7-416c-821e-0e83ffac1dfa
                      - id: 3726661e-0e93-4822-8bda-4d1a4c6e7dff
                        name: Software & Subscriptions
                        code: "420"
                        created_at: 2026-03-11T17:03:25.570937Z
                        updated_at: 2026-03-11T17:03:25.570937Z
                        default_tax_rate_id: 6a83d8d8-f5a5-405d-aafd-729786569c2d
                      - id: b37c42c8-1d42-4ee1-aa7e-348dd06ea69f
                        name: General Expenses
                        code: "429"
                        created_at: 2026-03-11T17:03:25.570927Z
                        updated_at: 2026-03-11T17:03:25.570927Z
                        default_tax_rate_id: 5781063b-d140-4c72-bde9-b8b21e64e3e0
                      - id: c729ea95-3ae7-4d21-91f7-1a69844175f2
                        name: Travel & Lodging
                        code: "460"
                        created_at: 2026-03-11T17:03:25.570924Z
                        updated_at: 2026-03-11T17:03:25.570924Z
                        default_tax_rate_id: f2519604-b04a-4a82-9b01-68235c4ad000
                      - id: 846b4cad-462d-4b4e-b96c-fc4e14de564d
                        name: Utilities
                        code: "499"
                        created_at: 2026-03-11T17:03:25.570919Z
                        updated_at: 2026-03-11T17:03:25.570919Z
                        default_tax_rate_id: fa95a4ae-a7d2-4ea6-bf42-2af1aead8ca4
                      - id: 2f76152a-2b14-4390-aa32-bbab02a1e98c
                        name: Meals & Entertainment
                        code: "500"
                        created_at: 2026-03-11T17:03:25.570919Z
                        updated_at: 2026-03-11T17:03:25.570919Zs
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_type:
                  summary: Incorrect query parameter type
                  value:
                    error_id: 29146977-8042-0ebf-b362-af224b14c830
                    code: 2101
                    message: Query parameter 'limit' must be an integer
                param_value_too_low:
                  summary: Query parameter value too low
                  value:
                    error_id: b5a51cd1-4f78-4074-adae-675e2921d71c
                    code: 2101
                    message: Query parameter 'limit' must be at least 1
                param_value_too_high:
                  summary: Query parameter value too high
                  value:
                    error_id: fa12f45e-4633-446f-8d40-42dadc380511
                    code: 2101
                    message: Query parameter 'limit' must be at most 500
                multiple_values_not_allowed:
                  summary: Multiple values provided for a single-value query parameter
                  value:
                    error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
                    code: 2101
                    message: Query parameter 'limit' must have a single value
                param_cannot_be_empty:
                  summary: Query parameter provided without a value
                  value:
                    error_id: fa12f45e-0ebf-4f7c-88e0-3673c665f135
                    code: 2101
                    message: Query parameter 'limit' must not be empty, Query parameter 'page_token'
                      must not be empty
                bad_page_token:
                  summary: Incorrect page token
                  value:
                    error_id: 69772914-8042-0ebf-b362-14c830af224b
                    code: 2101
                    message: Query parameter 'page_token' is invalid. Use a value from a previous
                      response's next_page_token field.
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Accounting categories
  /accounting-categories/{accounting_category_id}:
    get:
      summary: Retrieve accounting category details
      operationId: getAccountingCategory
      description: |-
        Get the details of a specific accounting category based on its ID.

        The details include the accounting category name, code, and default tax rate, as well as when the accounting category was added to your settings, and when it was last updated.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: accounting_category_id
          in: path
          required: true
          description: The ID of the accounting category to retrieve.
          schema:
            type: string
            format: uuid
            examples:
              - 64a2d310-e2a0-43c2-872f-969098141ebb
      responses:
        "200":
          description: Accounting category details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AccountingCategoryResponse"
              examples:
                category_with_default_tax_rate:
                  summary: Accounting category with default tax rate
                  value:
                    id: 8d831292-f950-4c5a-83f9-030df8cacd3f
                    name: Transportation
                    code: "400"
                    created_at: 2026-03-11T17:03:25.570942Z
                    updated_at: 2026-03-11T17:03:25.570942Z
                    default_tax_rate_id: e6b84ddb-a127-466b-9a0a-501bda07773f
                category_without_default_tax_rate:
                  summary: Accounting category without default tax rate
                  value:
                    id: 6a37383e-cfd3-4a2f-aa81-e3a6e6939efa
                    name: Office supplies
                    code: "410"
                    created_at: 2026-03-11T17:03:25.570942Z
                    updated_at: 2026-03-11T17:03:25.570942Z
        "400":
          description: >-
            Bad Request


            Returned, for example, when the required path parameter is missing
            or malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: 36e1a581-b05e-4018-b202-6b371092a19a
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the accounting category that you're trying to retrieve
            cannot be found.

            This can happen, for example, when the accounting category doesn't
            exist, or the provided accounting category ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: cbb15721-5f51-4588-a959-7494bb7ba827
                    code: 3006
                    message: Accounting category with id 8945879d-6854-4e10-88d6-ce92c5f010ac not
                      found
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Accounting categories
    patch:
      summary: Update accounting category settings
      operationId: updateAccountingCategory
      description: |-
        Update settings for a specific accounting category, based on its ID.

        :::note
        This operation is not supported for [externally managed accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories#externally-managed-settings).
        :::

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: accounting_category_id
          in: path
          required: true
          description: The ID of the accounting category to update.
          schema:
            type: string
            format: uuid
            examples:
              - 64a2d310-e2a0-43c2-872f-969098141ebb
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateAccountingCategoryRequest"
            examples:
              update_all_props:
                summary: Update all properties
                value:
                  name: Custom with tax rate
                  code: "998"
                  default_tax_rate_id: e6b84ddb-a127-466b-9a0a-501bda07773f
              update_category_name:
                summary: Update accounting category name
                value:
                  name: Marketing
              update_category_code:
                summary: Update accounting category code
                value:
                  code: "998"
              update_default_tax_rate:
                summary: Update default tax rate
                value:
                  default_tax_rate_id: 6a6399c3-4a3b-4b21-b710-57aa03aae58f
      responses:
        "204":
          description: Accounting category updated
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                param_required:
                  summary: Body is empty
                  value:
                    error_id: f1059c4b-4278-45d3-a17f-bd433ab33c15
                    code: 2101
                    message: Request body must not be empty
                bad_param_type:
                  summary: Incorrect parameter format
                  value:
                    error_id: a79a73ea-7dk4-41f8-a106-1656ab5f1234
                    code: 2101
                    message: "'name' must be a string"
                bad_param_format:
                  summary: Incorrect parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
                invalid_json:
                  summary: Invalid JSON
                  value:
                    error_id: 36f3cec5-b4b9-431f-9c28-afd3899bc64f
                    code: 2101
                    message: Request body is not valid JSON
                param_value_too_short:
                  summary: Parameter value too short
                  value:
                    error_id: 32fd0697-2f3f-4308-b25d-c9230f99c589
                    code: 2101
                    message: "'name' must be at least 1 character"
                param_value_too_long:
                  summary: Parameter value too long
                  value:
                    error_id: d8d919b5-d667-4058-9bb3-17b6f7bcd6c8
                    code: 2101
                    message: "'name' must be at most 60 characters"
                param_value_too_long2:
                  summary: Parameter value too long
                  value:
                    error_id: b4d919b5-d667-4058-9bb3-17b6f7bcdd03
                    code: 2101
                    message: "'code' must be at most 50 characters"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the accounting category that you're trying to modify
            cannot be found.

            This can happen, for example, when the accounting category doesn't
            exist, or the provided category ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: be6c9d90-df25-458a-b559-be61896c94b8
                    code: 3006
                    message: Accounting category with id b656d8a4-a5cb-4f03-9a95-f281da25aa2b not
                      found
        "409":
          description: >-
            Conflict


            Request conflicts with the current state of the resource.

            Returned, for example, when an accounting category with the provided
            name and/or code already exists.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                category_with_name_exists:
                  summary: Name must be unique
                  value:
                    error_id: 8c08b656-ab6e-4768-4e57-f281da25aa2b
                    code: 3503
                    message: Category with name My Unique Accounting Category already exists
                category_with_code_exists:
                  summary: Code must be unique
                  value:
                    error_id: d8a48c08-4e57-4768-ab6e-4d53aa1731b0
                    code: 3504
                    message: Category with code MUAC already exists
        "422":
          description: >-
            Unprocessable entity - accounting category cannot be updated due to
            business rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and
            accounting categories are managed by that integration.

            May also be returned if you try to modify a category that has
            already been deleted, or when you try to clear `name` and/or `code`
            values using `null`. 


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_update_externally_managed_resource:
                  summary: Accounting category managed by integration, cannot be updated
                  value:
                    error_id: 9c4be950c-cfd6-4e04-bd79-bd433ab33c15
                    code: 3514
                    message: Accounting categories are managed by your connected accounting
                      integration and cannot be modified manually
                state_mismatch:
                  summary: Accounting category is no longer available
                  value:
                    error_id: 41ef105-4278-cfd6-a17f-2d57a3951774
                    code: 3100
                    message: Invalid request
                null_name:
                  summary: Name cannot be null
                  value:
                    error_id: 41ef105-4278-cfd6-a17f-2d57a3951774
                    code: 3100
                    message: Invalid request
                null_code:
                  summary: Code cannot be null
                  value:
                    error_id: 41ef105-4278-cfd6-a17f-2d57a3951774
                    code: 3100
                    message: Invalid request
                null_name_and_code:
                  summary: Name or code cannot be null
                  value:
                    error_id: 41ef105-4278-cfd6-a17f-2d57a3951774
                    code: 3100
                    message: Invalid request
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Accounting categories
    delete:
      summary: Delete an accounting category
      operationId: deleteAccountingCategory
      description: |-
        Delete a specific accounting category, based on its ID.

        :::note
        This operation is not supported for [externally managed accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories#externally-managed-settings).
        :::

        Once the accounting category is deleted, it will not be returned by the API or in the Revolut Business app, and:
        - You will not be able to assign it to new financial records (e.g. expenses). 
        - Existing records assigned to this category that have not been completed will be marked as invalid, and you'll need to reassign them to another category.
        - Completed records will not be affected by the change. 

        A successful response does not get any content in return.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: accounting_category_id
          in: path
          required: true
          description: The ID of the accounting category to delete.
          schema:
            type: string
            format: uuid
            examples:
              - 64a2d310-e2a0-43c2-872f-969098141ebb
      responses:
        "204":
          description: Accounting category deleted
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_format:
                  summary: Incorrect path parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the accounting category that you're trying to delete
            doesn't exist.

            This can happen when, for example, the accounting category has
            already been deleted, or the provided category ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: 69bca351a-22a7-ac4d-af05-21032f9080ec
                    code: 3006
                    message: Accounting category with id d6c034a8-b302-4741-b66f-cc0f0a19642e not
                      found
        "422":
          description: >-
            Unprocessable entity - accounting category cannot be deleted due to
            business rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and
            accounting category are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_delete_externally_managed_resource:
                  summary: Accounting categories managed by integration, cannot be deleted
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Accounting categories are managed by your connected accounting
                      integration and cannot be modified manually
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Accounting categories
  /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](/docs/api/business#add-counterparty) or [making a transfer](/docs/api/business#create-payment) to a new or existing counterparty.

        :::warning
        The CoP check is **not** a complete fraud-prevention tool, and it does **not** guarantee the person is who they claim to be.
        It only confirms that the name and account details your provide match the bank's records.

        Even if the counterparty's details match, you should still exercise due caution when transferring funds.
        :::

        :::note[Availability & Sandbox behaviour]
        - This feature is only available to businesses in the [supported regions](/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services).
          Additionally, to get access to CoP in the UK, eligible businesses must contact [Revolut API Support](mailto:api-requests@revolut.com).
        - In Sandbox, this feature is only available for **testing**.
          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`.
        :::

        The validation relies on different underlying services, depending on the recipient's payment scheme (region and currency).
        These factors determine which fields you must provide and what response you get.
        - For examples, refer to the request body samples.
        - For more information, see the guides: [Validate an account name (CoP/VoP)](/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


            :::note

            - The actual results returned in the response come from the CoP
            services, not from Revolut.
              The Business API passes them on as received.

              Because of this, the descriptions below should be treated as an approximation rather than complete documentation.
            - The responses differ depending on the CoP service, even when the
            schema appears the same.
              Make sure that you refer to the appropriate response variant.
            :::
          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
              examples:
                default:
                  value:
                    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"
              examples:
                default:
                  value:
                    message: Resource not found
                    code: 3006
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Counterparties
  /accounts:
    get:
      summary: Retrieve all accounts
      operationId: getAccounts
      description: |-
        Get a list of all your accounts.

        For more information, see the guides: [Get your account details](/docs/guides/manage-accounts/accounts-and-transactions/manage-your-accounts).
      security:
        - AccessToken:
            - READ
      responses:
        "200":
          description: List of business accounts
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Accounts"
              examples:
                default:
                  value:
                    - id: b7ec67d3-5af1-42c8-bece-3d28nlmo894d
                      name: International account
                      balance: 3171.89
                      currency: GBP
                      state: active
                      public: false
                      created_at: 2022-08-05T14:29:22.215785Z
                      updated_at: 2022-08-05T14:29:22.215785Z
                    - id: bssc67d3-5afd-42c2-bece-3d28nlmo894d
                      name: International account 2
                      balance: 411561.89
                      currency: EUR
                      state: active
                      public: true
                      created_at: 2022-08-25T14:29:22.215785Z
                      updated_at: 2022-08-30T14:29:22.215785Z
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Accounts
  /accounts/{account_id}:
    get:
      summary: Retrieve an account
      operationId: getAccount
      description: |-
        Get the information about one of your accounts.
        Specify the account by its ID.

        For more information, see the guides: [Get your account details](/docs/guides/manage-accounts/accounts-and-transactions/manage-your-accounts).
      security:
        - AccessToken:
            - READ
      tags:
        - Accounts
      parameters:
        - name: account_id
          in: path
          required: true
          description: The ID of the account to retrieve.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: The information about a specific account
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
              examples:
                default:
                  value:
                    id: b7ec67d3-5af1-42c8-bece-3d28nlmo894d
                    name: International account
                    balance: 3171.89
                    currency: GBP
                    state: active
                    public: false
                    created_at: 2022-08-05T14:29:22.215785Z
                    updated_at: 2022-08-05T14:29:22.215785Z
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /accounts/{account_id}/bank-details:
    get:
      summary: Retrieve account's full bank details
      operationId: getAccountDetails
      description: |-
        Get all the bank details of one of your accounts.
        Specify the account by its ID.

        For more information, see the guides: [Get your account details](/docs/guides/manage-accounts/accounts-and-transactions/manage-your-accounts).
      security:
        - AccessToken:
            - READ
      tags:
        - Accounts
      parameters:
        - name: account_id
          in: path
          required: true
          description: The ID of the account to retrieve all bank details.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: The bank details of a specific account
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AccountBankDetailsItems"
              examples:
                default:
                  value:
                    - iban: GB66REVO00996995908888
                      bic: REVOGB21
                      beneficiary: International account
                      beneficiary_address:
                        street_line1: Revolut LTD
                        street_line2: 1 Canada Square
                        city: London
                        country: GB
                        postcode: E14 5AB
                      bank_country: GB
                      pooled: false
                      schemes:
                        - swift
                      estimated_time:
                        unit: days
                        min: 1
                        max: 3
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /card-invitations:
    servers:
      - url: https://b2b.revolut.com/api/1.0
        description: Production server (uses live data)
    post:
      summary: Create a card invitation
      operationId: createCardInvitation
      description: |-
        Create an invitation for a virtual [team member card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) for a new, not-yet-onboarded team member.
        When the team member completes onboarding before the invitation's expiry date, the invitation will automatically be claimed, and the card will then be issued for the team member immediately.

        :::note
        - This feature is not available in Sandbox.
        - To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
        :::

        For more information, see the guides: [Manage card invitations](/docs/guides/manage-accounts/cards/manage-card-invitations).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Card invitations
      requestBody:
        description: Card to create an invitation for
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                request_id:
                  type: string
                  description: |-
                    A unique ID of the request that you provide.

                    There is no strict requirement on the format of this ID, but we suggest using v4 UUIDs.

                    :::warning
                    This ID is used to prevent duplicate card creation requests in case of a lost connection or client error, so make sure you use the same `request_id` for requests related to the same card invitation.
                    The deduplication is limited to 24 hours counting from the first request using a given ID.
                    :::
                    For more information, see the guides: [Manage card invitations - Idempotency](/docs/guides/manage-accounts/cards/manage-card-invitations#idempotency).
                  maxLength: 40
                expiry_period:
                  type: string
                  description: >-
                    The period after which the card invitation expires if it
                    hasn't been claimed or cancelled. 

                    Must be specified in [ISO
                    8601](https://en.wikipedia.org/wiki/ISO_8601) duration
                    format.

                    The duration is counted from the card invitation creation.

                    - **Minimum duration:** 1 day (`P1D`)

                    - **Maximum duration:** 90 days (`P90D`)

                    - **Default duration:** 90 days (`P90D`)
                  pattern: ^P\d+D$
                  default: P90D
                  examples:
                    - P3D
                holder_id:
                  type: string
                  format: uuid
                  description: >-
                    The ID of the team member who will be assigned as the holder
                    of the card after the invitation is claimed.


                    :::tip

                    To retrieve a team member's ID, use the [`GET /team-members`
                    operation](/docs/api/business#get-team-members).

                    :::
                virtual:
                  type: boolean
                  enum:
                    - true
                  description: >-
                    Specifies the type of the card. 

                    Must be set to `true`, as with the API, you can create only
                    virtual cards.


                    :::tip

                    To create physical cards, use the [Revolut Business
                    app](https://business.revolut.com).

                    :::
                label:
                  type: string
                  description: >-
                    The label for the card to be issued, displayed in the UI to
                    help distinguish between cards.

                    If not specified, the default label will be set according to
                    the card's type.

                    For card invitations created via API, it's always `Virtual`.
                  minLength: 1
                  maxLength: 30
                  default: Virtual
                spending_limits:
                  description: >-
                    All spending limits set for the card.


                    You can have at most 1 periodic
                    (day/week/month/quarter/all-time) and 1 non-periodic (single
                    transaction) limit at a time.

                    If you try to specify 2 periodic limits at a time, it will
                    result in an error.
                  type: object
                  $ref: "#/components/schemas/SpendingLimitsSchema"
                spending_period:
                  description: >-
                    The controls for the card's spending period.


                    They let you set the dates when the card becomes available
                    or unavailable for spending, and define what happens after
                    the end date.


                    If specified, you must provide at least one of these:

                    - `start_date`

                    - `end_date` together with `end_date_action`


                    The dates provided must be in the future.
                  type: object
                  allOf:
                    - $ref: "#/components/schemas/SpendingPeriodSchema"
                categories:
                  type: array
                  description: >-
                    The list of merchant categories to be available for card
                    spending.

                    If not specified, all categories will be allowed.


                    :::note

                    The `categories` and `merchant_controls` parameters have the
                    following restrictions:

                    - If you set `categories`, you **cannot** set
                    `merchant_controls.control_type` to `allow`.

                    - You **can** set `merchant_controls.control_type` to
                    `block`.

                    - You may also set **either** `categories` or
                    `merchant_controls` independently, or **set neither**.

                    - Both parameters can be used together **only** if
                    `merchant_controls.control_type` is `block`.

                    :::
                  items:
                    $ref: "#/components/schemas/BusinessMerchantCategory"
                merchant_controls:
                  description: >-
                    The merchant-level controls for card spending.


                    They let you block or allow the card to only transact with
                    specific merchants: 

                    - `allow`: permits only the specified merchants (cannot be
                    used if the `categories` parameter is set).

                    - `block`: blocks the specified merchants (can be used with
                    or without `categories`).
                  type: object
                  $ref: "#/components/schemas/MerchantControlsSchema"
                countries:
                  description: Restricts card use to specified countries, provided as 2-letter
                    [ISO
                    3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
                    codes.
                  type: array
                  items:
                    type: string
                    pattern: ^[A-Z]{2}$
                    examples:
                      - GB
                accounts:
                  type: array
                  description: >-
                    The list of accounts to link to the card.

                    If not specified, all accounts will be linked.

                    To retrieve account IDs, use the [`GET /accounts`
                    operation](/docs/api/business#get-accounts).
                  items:
                    type: string
                    format: uuid
              required:
                - request_id
                - holder_id
                - virtual
            examples:
              card_invitation_minimal_example:
                $ref: "#/components/examples/cardInvitationMinCreate"
              card_invitation_full_example:
                $ref: "#/components/examples/cardInvitationMaxCreate"
      responses:
        "200":
          description: Successfully created card invitation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CardInvitationCreatedResponse"
              examples:
                card_invitation_response:
                  $ref: "#/components/examples/cardInvitationCreatedDetails"
        "400":
          description: >-
            Bad Request


            Returned, for example, when your request is malformed, missing
            required fields, or when it contains fields that cannot co-exist or
            unsupported values.


            If the invalid value is an array item, the error might indicate the
            array index of this faulty item, counting from `0`. 

            For example, if you provide the list of countries, such as
            `"countries": ["GB", "USA", ...]`, the first item (`GB`) has index
            `0`, the second item (`USA`) has index `1`, and so on.

            In the example, `USA` is invalid, because it should be a 2-letter
            code.

            In such a case, the error will indicate that `countries[1]` is
            invalid, thus pointing to the second item in the array, i.e. `USA`.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                missing_required_field:
                  summary: Merchant controls are missing merchant IDs
                  value:
                    code: 3000
                    message: merchant_ids is empty
                categories_and_allowed_merchants_cannot_coexist:
                  summary: Cannot set both categories and allowed merchants
                  value:
                    code: 2101
                    message: Allowed merchant categories must be empty when merchant controls of
                      type ALLOW is present
                expiry_period_too_long:
                  summary: Expiry period is too long (max.90 days)
                  value:
                    code: 3000
                    message: expiry_period must be between PT24H and PT2160H
                invalid_json:
                  summary: Invalid request body
                  value:
                    code: 3000
                    message: "Cannot parse request: invalid JSON"
                wrong_spending_period_date:
                  summary: Wrong spending period date
                  value:
                    code: 2101
                    message: Spending period start_date must be in the future
                invalid_account_id:
                  summary: Invalid account ID
                  value:
                    code: 2101
                    message: Invalid account ids provided=[0f187658-8c07-491f-9129-ae567b829137]
                invalid_country_code:
                  $ref: "#/components/examples/cardErrorBadCountryCode"
        "401":
          description: >-
            Unauthorised


            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:
                $ref: "#/components/schemas/ErrorUnauthorized"
              examples:
                unauthorized:
                  $ref: "#/components/examples/errorUnauthorized"
        "404":
          description: >-
            Team member not found


            Returned when the team member specified as cardholder in `holder_id`
            does not exist.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3042
                    message: Team member not found
        "422":
          description: >-
            Unprocessable Entity


            For example, you try to set more than one periodic limit at a time,
            create an invitation for a deleted team member, or an unexpected
            error occurred when the initial request with the same `request_id`
            was sent.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorUnprocessableEntity"
              examples:
                multiple_periodic_limits:
                  summary: Only one periodic spending limit at a time is allowed
                  value:
                    code: 33000
                    message: Only one periodic limit can be set on a card
                inactive_team_member:
                  summary: Team member not in supported state, e.g. team member was deleted
                  value:
                    message: Card invitations are only allowed for users in created state
                unexpected_error:
                  summary: Unexpected error on initial request
                  value:
                    code: 33009
                    message: "Idempotent replay failed: first execution was not successful"
        "429":
          description: Concurrent requests with the same idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3162
                    message: Parallel requests conflict. Please synchronize your requests.
                      request_id=5baa6989-ae59-4668-bb09-042fca180518
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    get:
      summary: Retrieve a list of card invitations
      operationId: getCardInvitations
      description: |-
        Get the list of all card invitations in your organisation.

        The results are paginated and sorted by the `created_at` date in reverse chronological order.

        :::note
        - This feature is not available in Sandbox.
        - To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
        :::

        For more information, see the guides: [Manage card invitations](/docs/guides/manage-accounts/cards/manage-card-invitations).
      security:
        - AccessToken:
            - READ
      tags:
        - Card invitations
      parameters:
        - name: created_before
          in: query
          required: false
          description: >-
            Retrieves only card invitations created before this timestamp
            (`created_at` < `created_before`).

            Used for pagination.

            The default value is the current date and time at which you are
            calling the endpoint.

            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.
          schema:
            type: string
            format: date-time
            default: the date-time at which the request is made
          examples:
            default:
              value: 2025-10-15T14:30:00Z
        - name: limit
          in: query
          required: false
          description: >-
            The maximum number of card invitations to return per page.


            To get to the next page, make a new request and use the `created_at`
            date of the last card invitation returned in the previous response
            as the value for `created_before`.
          schema:
            type: number
            format: integer
            minimum: 1
            maximum: 100
            default: 100
        - name: state
          in: query
          required: false
          description: >-
            Retrieves card invitations filtered by the specified state(s).

            To specify multiple values, follow this pattern:
            `state={VALUE1}&state={VALUE2}`. 

            If not provided, all states are returned.
          schema:
            type: array
            items:
              $ref: "#/components/schemas/CardInvitationState"
          style: form
          explode: false
          examples:
            default:
              value: state=created&state=redeemed
      responses:
        "200":
          description: The list of card invitations for your business
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/CardInvitationsResponse"
              examples:
                list_of_card_invitations:
                  $ref: "#/components/examples/cardInvitationsList"
        "400":
          description: |-
            Bad request

            Returned, for example, when you provide invalid query parameters.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_limit_parameter:
                  summary: Invalid limit parameter
                  value:
                    code: 2101
                    message: "Parameter limit must be a valid integer in range: [1, 100]."
                invalid_created_before_format:
                  summary: Invalid created_before format
                  value:
                    code: 2101
                    message: Parameter created_before must be a valid timestamp
                invalid_state_parameter:
                  summary: Invalid state parameter
                  value:
                    code: 2101
                    message: "Invalid card invitation state: active"
        "401":
          description: >-
            Unauthorised


            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:
                $ref: "#/components/schemas/ErrorUnauthorized"
              examples:
                unauthorized:
                  $ref: "#/components/examples/errorUnauthorized"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /card-invitations/{card_invitation_id}:
    servers:
      - url: https://b2b.revolut.com/api/1.0
        description: Production server (uses live data)
    get:
      summary: Retrieve card invitation details
      operationId: getCardInvitation
      description: |-
        Get the details of a specific card invitation, based on its ID.

        :::note
        - This feature is not available in Sandbox.
        - To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
        :::

        For more information, see the guides: [Manage card invitations](/docs/guides/manage-accounts/cards/manage-card-invitations).
      security:
        - AccessToken:
            - READ
      tags:
        - Card invitations
      parameters:
        - name: card_invitation_id
          in: path
          required: true
          description: The ID of the card invitation.
          schema:
            type: string
            format: uuid
          examples:
            default:
              value: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
      responses:
        "200":
          description: Information about the card invitation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CardInvitationResponse"
              examples:
                invitation_created:
                  $ref: "#/components/examples/cardInvitationCreatedDetails"
                invitation_redeemed:
                  $ref: "#/components/examples/cardInvitationRedeemedDetails"
                invitation_expired:
                  $ref: "#/components/examples/cardInvitationExpiredDetails"
                invitation_failed:
                  $ref: "#/components/examples/cardInvitationFailedDetails"
                invitation_failed_team_member_deleted:
                  $ref: "#/components/examples/cardInvitationFailedNoHolderDetails"
        "400":
          description: >-
            Bad request


            Returned, for example, when you provide an invalid card invitation
            ID in the path.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "401":
          description: >-
            Unauthorised


            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:
                $ref: "#/components/schemas/ErrorUnauthorized"
              examples:
                unauthorized:
                  $ref: "#/components/examples/errorUnauthorized"
        "404":
          description: Card invitation doesn't exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card invitation not found
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      summary: Update card invitation settings
      operationId: updateCardInvitation
      description: |-
        Update settings for a specific card invitation, based on its ID.
        You can update successfully created invitations that have not been claimed yet (`state=created`).

        :::note
        - This feature is not available in Sandbox.
        - To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
        :::

        :::warning
        Some spend control parameters can affect one another.
        When updating spend controls, review the resulting settings in the response to ensure they reflect the configuration you intended.
        :::

        For more information, see the guides: [Manage card invitations](/docs/guides/manage-accounts/cards/manage-card-invitations).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Card invitations
      parameters:
        - name: card_invitation_id
          in: path
          required: true
          description: The ID of the card invitation.
          schema:
            type: string
            format: uuid
          examples:
            default:
              value: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                label:
                  type: string
                  description: >-
                    The label of the card.


                    Cards without labels are not allowed.

                    If set to `null`, the default label will be set according to
                    the card's type.


                    :::tip[Default labels]

                    For virtual cards, the default label is `Virtual`.

                    For physical cards, depending on the type, it can be, for
                    example, `Standard` or `Metal`. 


                    As these values depend on available card types, they are
                    subject to change over time.

                    :::
                  minLength: 1
                  maxLength: 30
                  default: Default label according to card's type
                spending_limits:
                  description: >-
                    All spending limits to be set for the card.


                    You can have at most 1 periodic
                    (day/week/month/quarter/all-time) and 1 non-periodic (single
                    transaction) limit at a time.

                    If you try to specify 2 periodic limits at a time, it will
                    result in an error.


                    Use `null` as the value for a specific limit to erase that
                    limit.

                    Use `null` as the value for the `spending_limits` object to
                    erase all limits.
                  type: object
                  $ref: "#/components/schemas/SpendingLimitsSchema"
                spending_period:
                  description: >-
                    The controls for the card's spending period.


                    They let you set or modify the dates when the card should
                    become available or unavailable for spending, and define
                    what happens after the end date.


                    If specified, you must provide at least one of these:

                    - `start_date`

                    - `end_date` together with `end_date_action`


                    The spending period dates must be in the future.


                    The dates are inclusive.

                    This means that:

                    - If you set the `start_date` to `2026-03-31`, the card will
                    become active on that day.

                    - If you set the `end_date` to `2027-12-31`, the card will
                    be active through that day, and will be locked/terminated
                    starting on 1st Jan 2028.


                    :::note

                    You can update the spending period settings in a few ways,
                    depending on your use case:

                    - To remove the start date, but keep the end date settings,
                    provide the current `spending_period` settings without the
                    `start_date`.

                    - To remove the start date when no end date is set, provide
                    the `spending_period.start_date` set to `null`.

                    - To remove **all** spending period settings, provide
                    `spending_period` set to `null`.


                    If you wish to erase a spending period end date, you can do
                    this in a similar way, applying the steps to
                    `spending_period.end_date` and
                    `spending_period.end_date_action`.

                    :::
                  type: object
                  allOf:
                    - $ref: "#/components/schemas/SpendingPeriodSchema"
                categories:
                  type: array
                  description: >-
                    The list of merchant categories to be available for card
                    spending.

                    Use `null` to erase the value and reset to empty (all
                    categories will be allowed).


                    :::note

                    The `categories` and `merchant_controls` parameters have the
                    following restrictions:

                    - If you set `categories`, you **cannot** set
                    `merchant_controls.control_type` to `allow`.

                    - You **can** set `merchant_controls.control_type` to
                    `block`.

                    - You may also set **either** `categories` or
                    `merchant_controls` independently, or **set neither**.

                    - Both parameters can be used together **only** if
                    `merchant_controls.control_type` is `block`.

                    :::
                  items:
                    $ref: "#/components/schemas/BusinessMerchantCategory"
                merchant_controls:
                  description: >-
                    The merchant-level controls for card spending.


                    They let you block or allow the card to only transact with
                    specific merchants:

                    - `allow`: permits only the specified merchants (cannot be
                    used if the `categories` parameter is set).

                    - `block`: blocks the specified merchants (can be used with
                    or without `categories`).
                  type: object
                  $ref: "#/components/schemas/MerchantControlsSchema"
                countries:
                  description: The list of countries where the card can be used, provided as
                    2-letter [ISO
                    3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
                    codes.
                  type: array
                  items:
                    type: string
                    pattern: ^[A-Z]{2}$
                    examples:
                      - GB
                accounts:
                  type: array
                  description: >-
                    The list of accounts to link to the card.

                    If not specified, all accounts will be linked.

                    To retrieve account IDs, use the [`GET /accounts`
                    operation](/docs/api/business#get-accounts).
                  items:
                    type: string
                    format: uuid
            examples:
              update_all_properties:
                summary: Update all properties
                value:
                  label: New card label
                  spending_limits:
                    single:
                      amount: 100
                      currency: GBP
                    month:
                      amount: 300
                      currency: GBP
                  spending_period:
                    start_date: 2025-12-20
                    end_date: 2027-12-20
                    end_date_action: lock
                  categories:
                    - services
                    - shopping
                    - furniture
                  merchant_controls:
                    control_type: block
                    merchant_ids:
                      - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
                      - e8a87432-f71e-4deb-be84-969a02792929
                      - 3f09819f-63d1-473a-966c-54d8b9f43a93
                  countries:
                    - GB
                    - SG
                    - ES
                  accounts:
                    - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
                    - 9ae4345a-5ee5-496b-b776-241fcc5a5ba4
              erase_spending_period_start_date:
                summary: Erase spending period start date and update end date
                value:
                  spending_period:
                    start_date: null
                    end_date: 2027-12-20
                    end_date_action: terminate
              erase_all_spending_limits:
                summary: Erase all spending limits
                value:
                  spending_limits: null
              erase_single_transaction_limit:
                summary: Erase the single-transaction limit
                value:
                  spending_limits:
                    single: null
              allow_specific_merchants:
                summary: Allow only specific merchants
                value:
                  categories: []
                  merchant_controls:
                    control_type: allow
                    merchant_ids:
                      - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
                      - e8a87432-f71e-4deb-be84-969a02792929
      responses:
        "200":
          description: Information about the updated card invitation
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CardInvitationUpdatedResponse"
              examples:
                update_all_properties:
                  $ref: "#/components/examples/cardInvitationUpdatedAllProperties"
                erase_spending_period_start_date:
                  $ref: "#/components/examples/cardInvitationUpdatedEraseSpendingPeriodStartDate"
                erase_all_spending_limits:
                  $ref: "#/components/examples/cardInvitationUpdatedEraseAllSpendingLimits"
                erase_single_transaction_limit:
                  $ref: "#/components/examples/cardInvitationUpdatedEraseSingleTransactionLimit"
                allow_specific_merchants:
                  $ref: "#/components/examples/cardInvitationUpdatedAllowSpecificMerchants"
        "400":
          description: >-
            Bad request


            Returned, for example, when there's nothing to update or the
            provided details are unsupported for this operation.


            If the invalid value is an array item, the error might indicate the
            array index of this faulty item, counting from `0`. 

            For example, if you provide the list of countries, such as
            `"countries": ["GB", "USA", ...]`, the first item (`GB`) has index
            `0`, the second item (`USA`) has index `1`, and so on.

            In the example, `USA` is invalid, because it should be a 2-letter
            code.

            In such a case, the error will indicate that `countries[1]` is
            invalid, thus pointing to the second item in the array, i.e. `USA`.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                nothing_to_update:
                  summary: Empty request body - nothing to update
                  value:
                    code: 1112
                    message: Specify at least one parameter for card update
                invalid_spending_period_date_settings:
                  summary: Invalid spending period date settings
                  value:
                    code: 3000
                    message: At least one of start_date or end_date must be present
                invalid_spending_period_end_settings:
                  summary: Invalid spending period end settings
                  value:
                    code: 3000
                    message: end_date and end_date_action must be either both present or both empty
                spending_period_end_date_before_start_date:
                  summary: Spending period end date is sooner than start date
                  value:
                    code: 3000
                    message: end_date must be at or after 2025-12-28, but is 2024-12-20
                past_spending_period_end_date:
                  summary: Spending period start date is in the past
                  value:
                    code: 2102
                    message: Spending period start_date must be in the future
                multiple_periodic_limits:
                  summary: Multiple periodic spending limits at a time
                  value:
                    code: 3000
                    message: Only one periodic limit can be specified
                label_too_long:
                  summary: Card label too long
                  value:
                    code: 3000
                    message: Card label cannot contain more than 30 characters
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
                invalid_country_code:
                  $ref: "#/components/examples/cardErrorBadCountryCode"
        "401":
          description: >-
            Unauthorised


            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:
                $ref: "#/components/schemas/ErrorUnauthorized"
              examples:
                unauthorized:
                  $ref: "#/components/examples/errorUnauthorized"
        "404":
          description: >-
            Card invitation doesn't exist


            The card invitation for which you wish to update details does not
            exist.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3088
                    message: Card invitation '3c059a42-24e1-4fd6-bfbe-f3c09234315f not found
        "422":
          description: >-
            Unprocessable Entity


            Returned, for example, when you try to update a card invitation
            that's not in state `created`.

            Such an invitation is no longer active and therefore cannot be
            modified.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorUnprocessableEntity"
              examples:
                unsupported_card_invitation_state:
                  summary: Card invitation is not in state 'created'
                  value:
                    message: Unable to update card invitation with state=redeemed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /card-invitations/{cardInvitationId}/cancel:
    post:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Cancel a card invitation
      operationId: cancelCardInvitation
      description: |-
        Cancel a specific card invitation, based on its ID.

        :::note
        - This feature is not available in Sandbox.
        - To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
        :::

        You can cancel successfully created invitations that have not been claimed yet (`state=created`).

        Once the card invitation is cancelled, it cannot be claimed or reactivated.

        A successful response does not get any content in return.

        For more information, see the guides: [Manage card invitations](/docs/guides/manage-accounts/cards/manage-card-invitations).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Card invitations
      parameters:
        - name: card_invitation_id
          in: path
          required: true
          description: The ID of the card invitation to cancel.
          schema:
            type: string
            format: uuid
          examples:
            default:
              value: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
      responses:
        "204":
          description: Card invitation successfully cancelled
        "400":
          description: >-
            Bad request


            Returned, for example, when the format of the invitation ID you
            provided is invalid.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "401":
          description: >-
            Unauthorised


            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:
                $ref: "#/components/schemas/ErrorUnauthorized"
              examples:
                unauthorized:
                  $ref: "#/components/examples/errorUnauthorized"
        "404":
          description: |-
            Card invitation doesn't exist

            The card invitation you wish to cancel does not exist.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3088
                    message: Card invitation '10a2069f-fc11-4d5f-82b4-29c4ecc3a62e' not found
        "422":
          description: >-
            Unprocessable entity


            Returned, for example, when you try to cancel a card invitation
            that's not in state `created`.

            Such an invitation is no longer active and therefore cannot be
            cancelled.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorUnprocessableEntity"
              examples:
                unsupported_card_invitation_state:
                  summary: Card invitation is not in state 'created'
                  value:
                    message: Unable to cancel card invitation with state=redeemed
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /cards:
    servers:
      - url: https://b2b.revolut.com/api/1.0
        description: Production server (uses live data)
    get:
      summary: Retrieve a list of cards
      operationId: getCards
      description: >-
        Get the list of all cards in your organisation.


        The results are paginated and sorted by the `created_at` date in reverse
        chronological order.


        :::note

        - This feature is not available in Sandbox.

        - To increase your account's card limits, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::


        For more information, see the guides: [Manage
        cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - READ
      tags:
        - Cards
      parameters:
        - in: query
          name: created_before
          schema:
            type: string
            format: date-time
            default: the date-time at which the request is made
          description: >-
            Retrieves cards with `created_at` < `created_before`.

            The default value is the current date and time at which you are
            calling the endpoint.


            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.
        - name: limit
          in: query
          required: false
          description: >-
            The maximum number of cards to return per page.


            To get to the next page, make a new request and use the `created_at`
            date of the last card returned in the previous response as the value
            for `created_before`.
          schema:
            type: number
            format: integer
            default: 100
            maximum: 100
            minimum: 1
      responses:
        "200":
          description: List of cards of the business
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CardsResponse"
              examples:
                list_of_cards:
                  $ref: "#/components/examples/cardsListSimple"
        "400":
          description: Bad pagination parameters
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 2101
                    message: "Parameter limit must be a valid integer in range: [1, 100]."
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Create a card
      operationId: createCard
      description: |-
        Create a new [team member card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards), [company card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards), or [auto-issued card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards).

        When using the API, you can create only virtual cards.
        To create a physical card, use the [Revolut Business app](https://business.revolut.com).

        :::note
        - This feature is not available in Sandbox.
        - To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
        :::

        For more information, see the guides: [Manage cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Cards
      requestBody:
        description: Card to create
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                request_id:
                  type: string
                  description: |-
                    A unique ID of the request that you provide.

                    There is no strict requirement on the format of this ID, but we suggest using v4 UUIDs.

                    :::warning
                    This ID is used to prevent duplicate card creation requests in case of a lost connection or client error, so make sure you use the same `request_id` for requests related to the same card.
                    The deduplication is limited to 24 hours counting from the first request using a given ID.
                    For more information, see the guides: [Manage cards - Idempotency](/docs/guides/manage-accounts/cards/manage-cards#idempotency).
                    :::
                  maxLength: 40
                holder_id:
                  type: string
                  format: uuid
                  description: >-
                    The ID of the team member to assign as the holder of the
                    card.


                    :::tip

                    To retrieve a team member's ID, use the [`GET /team-members`
                    operation](/docs/api/business#get-team-members).

                    :::


                    For virtual cards (`virtual=true`), this field is
                    optional.                    

                    If not provided, the type of the issued card depends on
                    `contact_ids`:
                      - `contact_ids` provided → [company card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)
                      - `contact_ids` not specified → [auto-issued card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)
                contact_ids:
                  description: |-
                    The list of [contacts](https://help.revolut.com/business/help/cards/more-on-cards/company-cards/) for the card.
                    Up to 5 team members sharing the card, much like co-holders.
                    Can be [edited](/docs/api/business#update-card-contacts).

                    Allowed only for [company cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`virtual=true`, `holder_id` not specified).
                  type: array
                  minItems: 1
                  maxItems: 5
                  items:
                    type: string
                    format: uuid
                product:
                  description: |-
                    The card product offered by the card provider for this card.
                    In other words, the program that the card is issued under.

                    Provided only for virtual cards with no holder ID (`virtual=true`, and `holder_id` not specified):
                    - **Required** for [auto-issued cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`contact_ids` not specified)
                    - Optional for [company cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`contact_ids` specified)

                    Not allowed for [team member cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (`holder_id` present).

                    :::note
                    This property is only available to travel intermediaries using our travel solution.
                    To use it, please contact [Revolut API Support](mailto:api-requests@revolut.com).
                    :::
                  type: object
                  required:
                    - code
                  properties:
                    code:
                      type: string
                      description: The code of the card product.
                      examples:
                        - MBJ
                virtual:
                  type: boolean
                  enum:
                    - true
                  description: >-
                    Specifies the type of the card. 

                    Must be set to `true`, as with the API, you can create only
                    virtual cards.


                    :::tip

                    To create a physical card, use the [Revolut Business
                    app](https://business.revolut.com).

                    :::
                label:
                  type: string
                  description: >-
                    The label for the issued card, displayed in the UI to help
                    distinguish between cards.

                    If not specified, no label will be added.
                  maxLength: 30
                references:
                  description: |-
                    References for the card.
                    Up to 5 name-value pairs assigned to the card for tracking.

                    :::info
                    Each time the card is used, the references are recorded in the [transaction details](/docs/api/business#get-transaction#response) (`card.references`), helping track transactions made with this card.
                    :::

                    The names must be unique.
                    The references can be [amended](/docs/api/business#update-card-references) up to 10 times.

                    References are only supported for cards owned by the business (i.e. [company](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) or [auto-issued cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)).
                    They are **not** supported for [team member cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (i.e. with `holder_id` present). 

                    :::note
                    The references recorded on a transaction are those assigned to the card at the time the transaction took place.
                    If the references are amended, they will only be applied to future transactions. 
                    Existing transaction are not affected.
                    :::
                  $ref: "#/components/schemas/CardReferences"
                spending_limits:
                  description: >-
                    All spending limits set for the card.


                    You can have at most 1 periodic
                    (day/week/month/quarter/all-time) and 1 non-periodic (single
                    transaction) limit at a time.

                    If you try to specify 2 periodic limits at a time, it will
                    result in an error.
                  type: object
                  $ref: "#/components/schemas/SpendingLimitsSchema"
                spending_period:
                  description: >-
                    The controls for the card's spending period.


                    They let you set the dates when the card becomes available
                    or unavailable for spending, and define what happens after
                    the end date.


                    If specified, you must provide at least one of these:

                    - `start_date`

                    - `end_date` together with `end_date_action`


                    The dates provided must be in the future.
                  type: object
                  allOf:
                    - $ref: "#/components/schemas/SpendingPeriodSchema"
                categories:
                  type: array
                  description: >-
                    The list of merchant categories to be available for card
                    spending.

                    If not specified, all categories will be allowed.


                    :::note

                    The `categories` and `merchant_controls` parameters have the
                    following restrictions:

                    - If you set `categories`, you **cannot** set
                    `merchant_controls.control_type` to `allow`.

                    - You **can** set `merchant_controls.control_type` to
                    `block`.

                    - You may also set **either** `categories` or
                    `merchant_controls` independently, or **set neither**.

                    - Both parameters can be used together **only** if
                    `merchant_controls.control_type` is `block`.

                    :::
                  items:
                    $ref: "#/components/schemas/BusinessMerchantCategory"
                merchant_controls:
                  description: >-
                    The merchant-level controls for card spending.


                    They let you block or allow the card to only transact with
                    specific merchants: 

                    - `allow`: permits only the specified merchants (cannot be
                    used if the `categories` parameter is set).

                    - `block`: blocks the specified merchants (can be used with
                    or without `categories`).
                  type: object
                  $ref: "#/components/schemas/MerchantControlsSchema"
                countries:
                  description: Restricts card use to specified countries, provided as 2-letter
                    [ISO
                    3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
                    codes.
                  type: array
                  items:
                    type: string
                    pattern: ^[A-Z]{2}$
                    examples:
                      - GB
                accounts:
                  type: array
                  description: >-
                    The list of accounts to link to the card.

                    If not specified, all accounts will be linked.

                    To retrieve account IDs, use the [`GET /accounts`
                    operation](/docs/api/business#get-accounts).
                  items:
                    type: string
                    format: uuid
              required:
                - request_id
                - virtual
            examples:
              team_member_card:
                $ref: "#/components/examples/cardIndividualCreate"
              company_card:
                $ref: "#/components/examples/cardCompanyCreate"
              autogenerated_card:
                $ref: "#/components/examples/cardAutogeneratedCreate"
              card_with_spending_period_start_date:
                $ref: "#/components/examples/cardWithSpendingPeriodStartDateCreate"
      responses:
        "200":
          description: Information about the created card
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CardCreatedResponse"
              examples:
                team_member_card:
                  $ref: "#/components/examples/cardIndividualDetails"
                company_card:
                  $ref: "#/components/examples/cardCompanyDetails"
                autogenerated_card:
                  $ref: "#/components/examples/cardAutogeneratedDetails"
                card_with_spending_period_start_date:
                  $ref: "#/components/examples/cardWithSpendingPeriodStartDateDetails"
        "400":
          description: >-
            Bad Request


            Returned, for example, when your request is malformed, missing
            required fields, or when it contains fields that cannot co-exist or
            unsupported values.


            If the invalid value is an array item, the error might indicate the
            array index of this faulty item, counting from `0`. 

            For example, if you provide the list of countries, such as
            `"countries": ["GB", "USA", ...]`, the first item (`GB`) has index
            `0`, the second item (`USA`) has index `1`, and so on.

            In the example, `USA` is invalid, because it should be a 2-letter
            code.

            In such a case, the error will indicate that `countries[1]` is
            invalid, thus pointing to the second item in the array, i.e. `USA`.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                missing_conditional_fields:
                  summary: Contact IDs or product are required when holder ID not provided
                  value:
                    code: 3000
                    message: Either contact_ids or product must be present when holder_id is empty
                contact_ids_and_product_not_allowed_with_holder_id:
                  summary: Contact IDs and product are not allowed when holder ID present
                  value:
                    code: 3000
                    message: Both contact_ids and product must be empty when holder_id is present
                references_not_allowed_with_holder_id:
                  summary: References are not allowed when holder ID present
                  value:
                    code: 3000
                    message: references must be empty when holder_id is present
                missing_required_field:
                  summary: Merchant controls are missing merchant IDs
                  value:
                    code: 3000
                    message: merchant_ids is empty
                invalid_json:
                  summary: Invalid request body
                  value:
                    code: 3000
                    message: "Cannot parse request: invalid JSON"
                product_not_found:
                  summary: Card product not found
                  value:
                    code: 2101
                    message: Product MJB not found
                cannot_add_contact_ids:
                  summary: Contact ID(s) not found
                  value:
                    code: 2101
                    message: Unable to attach contactIds
                wrong_spending_period_date:
                  summary: Wrong spending period date
                  value:
                    code: 2101
                    message: Spending period start_date must be in the future
                invalid_account_id:
                  summary: Invalid account ID
                  value:
                    code: 2101
                    message: Invalid account ids provided=[0f187658-8c07-491f-9129-ae567b829137]
                invalid_country_code:
                  $ref: "#/components/examples/cardErrorBadCountryCode"
        "404":
          description: >-
            Team member not found


            Returned when the team member specified as cardholder in `holder_id`
            does not exist.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3042
                    message: Team member not found
        "422":
          description: >-
            Unprocessable entity


            For example, the team member exceeds the limit for virtual cards per
            account, or an unexpected error occurred when the initial request
            with the same `request_id` was sent.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                cards_limit_exceeded:
                  summary: Virtual cards limit per account exceeded
                  value:
                    code: 3087
                    message: Active virtual cards limit is exceeded for the employee
                unexpected_error:
                  summary: Unexpected error on initial request
                  value:
                    code: 33009
                    message: "Idempotent replay failed: first execution was not successful"
        "429":
          description: Concurrent requests with the same idempotency key
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3162
                    message: Parallel requests conflict. Please synchronize your requests.
                      request_id=5baa6989-ae59-4668-bb09-042fca180518
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /cards/{card_id}:
    get:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Retrieve card details
      operationId: getCard
      description: >-
        Get the details of a specific card, based on its ID.


        :::note

        - This feature is not available in Sandbox.

        - To increase your account's card limits, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::


        For more information, see the guides: [Manage
        cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - READ
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: Information about the card
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CardResponse"
              examples:
                virtual_card:
                  $ref: "#/components/examples/cardVirtualDetails"
                physical_card:
                  $ref: "#/components/examples/cardPhysicalDetails"
                card_with_spend_program:
                  $ref: "#/components/examples/cardWithSpendProgramDetails"
                team_member_card:
                  $ref: "#/components/examples/cardIndividualDetails"
                company_card:
                  $ref: "#/components/examples/cardCompanyDetails"
                autogenerated_card:
                  $ref: "#/components/examples/cardAutogeneratedDetails"
                card_with_spending_period_start_date:
                  $ref: "#/components/examples/cardWithSpendingPeriodStartDateDetails"
        "400":
          description: >-
            Bad request


            Returned, for example, when you provide an invalid card ID in the
            path.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "404":
          description: Card doesn't exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    patch:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Update card settings
      operationId: updateCard
      description: >-
        Update settings for a specific card, based on its ID.


        :::note

        - This feature is not available in Sandbox.

        - To increase your account's card limits, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::


        :::warning

        Some spend control parameters can affect one another.

        When updating spend controls, review the resulting settings in the
        response to ensure they reflect the configuration you intended.

        :::


        For more information, see the guides: [Manage
        cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              properties:
                label:
                  type: string
                  description: The label of the card.
                  maxLength: 30
                spending_limits:
                  description: |-
                    All spending limits set for the card.

                    You can have at most 1 periodic (day/week/month/quarter/all-time) and 1 non-periodic (single transaction) limit at a time.
                    If you try to specify 2 periodic limits at a time, it will result in an error.

                    Use `null` as the value for a specific limit to erase that limit.
                    Use `null` as the value for the `spending_limits` object to erase all limits.

                    :::note
                    Updating a spending limit does not reset the spending counter.
                    For more information, see the guides: [Manage cards - Update a card](/docs/guides/manage-accounts/cards/manage-cards#update-a-card).
                    :::
                  type: object
                  $ref: "#/components/schemas/SpendingLimitsSchema"
                spending_period:
                  description: >-
                    The controls for the card's spending period.


                    They let you set or modify the dates when the card becomes
                    available or unavailable for spending, and define what
                    happens after the end date.


                    If specified, you must provide at least one of these:

                    - `start_date`

                    - `end_date` together with `end_date_action`


                    The spending period dates must be in the future.


                    The dates are inclusive.

                    This means that:

                    - If you set the `start_date` to `2025-12-31`, the card will
                    become active on that day.

                    - If you set the `end_date` to `2026-06-01`, the card will
                    be active through that day, and will be locked/terminated
                    starting on 2nd June 2026.


                    :::note []

                    If you wish to unlock a card with a spending period starting
                    in the future and make it available for spending right away,
                    you can do it in a few ways, depending on your use case:

                    - To remove the start date, but keep the end date settings,
                    provide the current `spending_period` settings without the
                    `start_date`.

                    - To remove the start date when no end date is set, provide
                    the `spending_period.start_date` set to `null`.

                    - To remove **all** spending period settings, either provide
                    `spending_period` set to `null`, or use the dedicated
                    endpoint to [unlock](/docs/api/business#unlock-card) the
                    card.


                    If you wish to erase a spending period end date, you can do
                    this in a similar way, applying the steps to
                    `spending_period.end_date` and
                    `spending_period.end_date_action`.

                    :::
                  type: object
                  allOf:
                    - $ref: "#/components/schemas/SpendingPeriodSchema"
                categories:
                  type: array
                  description: >-
                    The list of merchant categories that will be available for
                    card spending.

                    Use `null` to erase the value and reset to empty (all
                    categories will be allowed).


                    :::note

                    The `categories` and `merchant_controls` parameters have the
                    following restrictions:

                    - If you set `categories`, you **cannot** set
                    `merchant_controls.control_type` to `allow`.

                    - You **can** set `merchant_controls.control_type` to
                    `block`.

                    - You may also set **either** `categories` or
                    `merchant_controls` independently, or **set neither**.

                    - Both parameters can be used together **only** if
                    `merchant_controls.control_type` is `block`.

                    :::
                  items:
                    $ref: "#/components/schemas/BusinessMerchantCategory"
                merchant_controls:
                  description: >-
                    The merchant-level controls for card spending.


                    They let you block or allow the card to only transact with
                    specific merchants:

                    - `allow`: permits only the specified merchants (cannot be
                    used if the `categories` parameter is set).

                    - `block`: blocks the specified merchants (can be used with
                    or without `categories`).
                  type: object
                  $ref: "#/components/schemas/MerchantControlsSchema"
                countries:
                  description: The list of countries where the card can be used, provided as
                    2-letter [ISO
                    3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
                    codes.
                  type: array
                  items:
                    type: string
                    pattern: ^[A-Z]{2}$
                    examples:
                      - GB
                accounts:
                  type: array
                  description: >-
                    The list of accounts to link to the card.

                    If not specified, all accounts will be linked.

                    To retrieve account IDs, use the [`GET /accounts`
                    operation](/docs/api/business#get-accounts).
                  items:
                    type: string
                    format: uuid
            examples:
              update_all_properties:
                summary: Update all properties
                value:
                  label: New card label
                  spending_limits:
                    single:
                      amount: 100
                      currency: GBP
                    month:
                      amount: 300
                      currency: GBP
                  spending_period:
                    start_date: 2025-09-18
                    end_date: 2026-12-20
                    end_date_action: lock
                  categories:
                    - services
                    - shopping
                    - furniture
                  merchant_controls:
                    control_type: block
                    merchant_ids:
                      - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
                      - e8a87432-f71e-4deb-be84-969a02792929
                      - 3f09819f-63d1-473a-966c-54d8b9f43a93
                  countries:
                    - GB
                    - SG
                    - ES
                  accounts:
                    - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
                    - 9ae4345a-5ee5-496b-b776-241fcc5a5ba4
              erase_spending_period_start_date:
                summary: Erase spending period start date
                value:
                  spending_period:
                    start_date: null
                    end_date: 2026-12-20
                    end_date_action: lock
              erase_all_spending_limits:
                summary: Erase all spending limits
                value:
                  spending_limits: null
              erase_single_transaction_limit:
                summary: Erase the single-transaction limit
                value:
                  spending_limits:
                    single: null
              allow_specific_merchants:
                summary: Allow only specific merchants
                value:
                  categories: []
                  merchant_controls:
                    control_type: allow
                    merchant_ids:
                      - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
                      - e8a87432-f71e-4deb-be84-969a02792929
      responses:
        "200":
          description: >-
            Information about the updated card


            :::note

            If you modify the card's spending period in the request, the card's
            `state` returned in the response might not yet reflect those
            changes.

            This is because these spending period locks are applied to the card
            asynchronously, which might result in a slight delay in the card's
            state update.


            To re-check the state, [fetch the card's
            details](/docs/api/business#get-card).

            :::
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CardResponse"
              examples:
                update_all_properties:
                  $ref: "#/components/examples/cardUpdatedAllPropertiesDetails"
                erase_spending_period_start_date:
                  $ref: "#/components/examples/cardUpdatedEraseSpendingPeriodStartDateDetails"
                erase_all_spending_limits:
                  $ref: "#/components/examples/cardUpdatedEraseAllSpendingLimitsDetails"
                erase_single_transaction_limit:
                  $ref: "#/components/examples/cardUpdatedEraseSingleTransactionLimitDetails"
                allow_specific_merchants:
                  $ref: "#/components/examples/cardUpdatedAllowSpecificMerchantsDetails"
        "400":
          description: >-
            Nothing to update or the provided details are unsupported for this
            operation


            If the invalid value is an array item, the error might indicate the
            array index of this faulty item, counting from `0`. 

            For example, if you provide the list of countries, such as
            `"countries": ["GB", "USA", ...]`, the first item (`GB`) has index
            `0`, the second item (`USA`) has index `1`, and so on.

            In the example, `USA` is invalid, because it should be a 2-letter
            code.

            In such a case, the error will indicate that `countries[1]` is
            invalid, thus pointing to the second item in the array, i.e. `USA`.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                nothing_to_update:
                  summary: Nothing to update
                  value:
                    code: 1112
                    message: Specify at least one parameter for card update
                invalid_spending_period_date_settings:
                  summary: Invalid spending period date settings
                  value:
                    code: 3000
                    message: At least one of start_date or end_date must be present
                invalid_spending_period_end_settings:
                  summary: Invalid spending period end settings
                  value:
                    code: 3000
                    message: end_date and end_date_action must be either both present or both empty
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
                invalid_country_code:
                  $ref: "#/components/examples/cardErrorBadCountryCode"
        "404":
          description: |-
            Card doesn't exist

            The card for which you wish to update details does not exist.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        "422":
          description: >-
            Unprocessable entity


            For example, you try to provide a spending period end date that's in
            the past.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                past_spending_period_end_date:
                  summary: Spending period end date is in the past
                  value:
                    code: 33003
                    message: Unable to update the card with state=active
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Terminate a card
      operationId: deleteCard
      description: >-
        Terminate a specific card, based on its ID.


        Once the card is terminated, it will not be returned by the API.


        A successful response does not get any content in return.


        :::note

        - This feature is not available in Sandbox.

        - To increase your account's card limits, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::


        For more information, see the guides: [Manage
        cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card.
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: Card successfully terminated
        "400":
          description: >-
            Bad request


            Returned, for example, when you provide an invalid card ID in the
            path.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "404":
          description: Card doesn't exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /cards/{card_id}/contacts:
    put:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Update card contacts
      operationId: updateCardContacts
      description: |-
        Update the list of card contacts (`contact_ids`) for a [company card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards).

        :::note
        - This feature is not available in Sandbox.
        - To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
        :::

        You can only update cards with existing contacts.
        If a card does not have any contacts assigned, this operation is not allowed.

        On success, the updated list of contacts is returned.

        :::warning
        This operation **overrides** the existing contacts.
        This means that it removes the current list completely, and replaces it with the new one provided in this request.

        If you want to add new contacts for the card instead of replacing the existing ones, make sure that you [fetch](/docs/api/business#get-card) the existing contacts first, and include them in your request.
        :::

        For more information, see the guides: [Manage cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card whose contacts should be updated.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        description: |-
          New contacts for the card.
          :::warning
          This will **override** the existing list of contacts.
          :::
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CardContacts"
            examples:
              list_of_contacts:
                $ref: "#/components/examples/CardContacts"
      responses:
        "200":
          description: Updated list of contacts
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CardContacts"
              examples:
                list_of_contacts:
                  $ref: "#/components/examples/CardContacts"
        "400":
          description: >-
            Bad Request


            Returned, for example, when the provided list of contacts is empty
            or too many contacts are provided, or when it's malformed or
            contains incorrect values.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                wrong_size:
                  summary: Wrong number of contacts
                  value:
                    code: 2101
                    message: Card contacts size must be between 1 and 5
                incorrect_values:
                  summary: Incorrect value(s)
                  value:
                    code: 3000
                    message: Value of field '[0]' is not in correct format
                invalid_json:
                  summary: Incorrect request format
                  value:
                    code: 3000
                    message: "Cannot parse request: invalid JSON"
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "404":
          description: |-
            Card not found

            The card for which you wish to update contacts does not exist.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        "422":
          description: |-
            Unprocessable Content

            Returned, for example, when you try to update contacts for a card other than a [company card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards).
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 33011
                    message: Card contacts are not supported for the
                      card=23a8befd-7b7b-4922-a00f-188b0153730b
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /cards/{card_id}/references:
    put:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Update card references
      operationId: updateCardReferences
      description: |-
        Update the list of [references (`references`)](/docs/api/business#get-card#response) for a [company](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) or [auto-issued card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards).

        :::note
        - This feature is not available in Sandbox.
        - To increase your account's card limits, please contact [Revolut API Support](mailto:api-requests@revolut.com).
        :::

        References can be amended up to 10 times.
        Reference names must be unique.

        References are only supported for cards owned by the business (i.e. [company](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) or [auto-issued cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)).
        They can't be added to [team member cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (i.e. with `holder_id` present). 

        The references recorded on a transaction are those assigned to the card at the time the transaction took place.
        If the references are amended, they will only be applied to future transactions.
        Existing transaction are not affected.

        On success, the updated list of references is returned.

        :::warning
        This operation **overrides** the existing references.
        This means that it removes the current list completely, and replaces it with the new one provided in this request.

        If you want to add references to the card instead of replacing the existing ones, make sure that you [fetch](/docs/api/business#get-card) the existing references first, and include them in your request.

        To delete existing references without adding new ones, simply provide an empty list.
        :::

        For more information, see the guides: [Manage cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card whose references should be amended.
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        description: |-
          References for the card.
          Up to 5 name-value pairs assigned to the card for tracking.
          :::warning
          This will **override** the existing references.
          :::
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CardReferences"
            examples:
              list_of_references:
                $ref: "#/components/examples/CardReferences"
      responses:
        "200":
          description: |-
            Updated list of references.             
            Up to 5 name-value pairs assigned to the card for tracking.
          content:
            application/json:
              schema:
                description: |-
                  References for the card.
                  Up to 5 name-value pairs assigned to the card for tracking.

                  The names must be unique.
                  The references can be amended up to 10 times.
                $ref: "#/components/schemas/CardReferences"
              examples:
                list_of_references:
                  $ref: "#/components/examples/CardReferences"
        "400":
          description: >-
            Bad Request


            Returned, for example, when you provide duplicate reference names,
            too many references, the reference names or values are too long, or
            your request is malformed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                duplicate_names:
                  summary: Duplicate names
                  value:
                    code: 2101
                    message: Reference names must be unique
                too_long_names:
                  summary: Too long reference name(s)
                  value:
                    code: 3000
                    message: name cannot be longer than 30
                too_long_values:
                  summary: Too long reference value(s)
                  value:
                    code: 3000
                    message: value cannot be longer than 30
                wrong_size:
                  summary: Too many references
                  value:
                    code: 3000
                    message: references size must be not greater than 5
                invalid_json:
                  summary: Incorrect request format
                  value:
                    code: 3000
                    message: "Cannot parse request: invalid JSON"
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "404":
          description: |-
            Card not found

            The card for which you wish to update references does not exist.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        "422":
          description: >-
            Unprocessable Content


            Returned, for example, when you try to amend references more than 10
            times, or when you try to add them to a card that does not support
            references, like a card with a `holder_id` present.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                update_limit_exceeded:
                  summary: References can be amended up to 10 times
                  value:
                    code: 3549
                    message: Card references update limit exceeded
                unsupported_card:
                  summary: References can't be assigned to cards with holder_id
                  value:
                    code: 33012
                    message: Card references are not supported for the
                      card=a5c697d1-84ae-40b2-879a-a17aab3362bb
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /cards/{card_id}/freeze:
    post:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Freeze a card
      operationId: freezeCard
      description: >-
        Freeze a card to make it temporarily unavailable for spending.

        You can only freeze a card that is in the state `active`.


        A successful freeze changes the card's state to `frozen`, and no content
        is returned in the response.


        :::note

        - This feature is not available in Sandbox.

        - To increase your account's card limits, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::


        For more information, see the guides: [Manage
        cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card to freeze.
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: Card successfully frozen
        "400":
          description: >-
            Bad request


            Returned, for example, when you provide an invalid card ID in the
            path.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "403":
          description: State of the card doesn't allow to freeze it
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 9002
                    message: Card is locked
        "404":
          description: Card doesn't exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /cards/{card_id}/unfreeze:
    post:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Unfreeze a card
      description: >-
        Unfreeze a card to re-enable spending for that card.

        You can only unfreeze a card that is in the state `frozen`.


        A successful unfreeze changes the card's state back to `active`, and no
        content is returned in the response.


        :::note

        - This feature is not available in Sandbox.

        - To increase your account's card limits, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::


        For more information, see the guides: [Manage
        cards](/docs/guides/manage-accounts/cards/manage-cards).
      operationId: unfreezeCard
      security:
        - AccessToken:
            - WRITE
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card to unfreeze.
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: Card successfully unfrozen
        "400":
          description: >-
            Bad request


            Returned, for example, when you provide an invalid card ID in the
            path.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "403":
          description: State of the card doesn't allow to unfreeze it
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 9002
                    message: Card is locked
        "404":
          description: Card doesn't exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /cards/{card_id}/lock:
    post:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Lock a card
      operationId: lockCard
      description: >-
        Apply an admin lock to a card to make it temporarily unavailable for
        spending.


        A successful lock changes the card's state to `locked`, and no content
        is returned in the response.


        :::note

        - This feature is not available in Sandbox.

        - To increase your account's card limits, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::


        For more information, see the guides: [Manage
        cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card to lock.
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: Card successfully locked
        "400":
          description: >-
            Bad request


            Returned, for example, when you provide an invalid card ID in the
            path.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "403":
          description: >-
            Action forbidden


            Returned, for example, when the request is valid, but the provided
            access token does not include the required scope for this action.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 9002
                    message: This action is forbidden
        "404":
          description: Card doesn't exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /cards/{card_id}/unlock:
    post:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Unlock a card
      operationId: unlockCard
      description: >-
        Unlock a card locked with an admin lock or spending period settings to
        make it available for spending again.


        :::note

        - This feature is not available in Sandbox.

        - To increase your account's card limits, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::


        :::warning

        If a card has a `spending_period` set and is locked due to being outside
        of that period, unlocking the card removes this spending period
        completely, including the end date.


        If you want to unlock such a card but keep its spending period end date:

        1. [Fetch](/docs/api/business#get-card) the card's details.

        2. Save the `spending_period.end_date` and
        `spending_period.end_date_action` settings.

        3. [Unlock](/docs/api/business#unlock-card) the card.

        4. [Update](/docs/api/business#update-card) the card's `spending_period`
        by re-adding the saved settings.


        :::tip

        If both start and end dates for the spending period are provided, and
        the card is locked due to those dates, to unlock such a card,
        [update](/docs/api/business#update-card) its `spending_period` settings
        instead.

        :::


        A successful unlock changes the card's state to `active`, and no content
        is returned in the response.


        For more information, see the guides: [Manage
        cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card to unlock.
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: Card successfully unlocked
        "400":
          description: >-
            Bad request


            Returned, for example, when you provide an invalid card ID in the
            path.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "403":
          description: >-
            Action forbidden


            Returned, for example, when the request is valid, but the provided
            access token does not include the required scope for this action.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 9002
                    message: This action is forbidden
        "404":
          description: Card doesn't exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /cards/{card_id}/sensitive-details:
    get:
      servers:
        - url: https://b2b.revolut.com/api/1.0
          description: Production server (uses live data)
      summary: Retrieve sensitive card details
      operationId: getSensitiveCardDetails
      description: >-
        Get sensitive details of a specific card, based on its ID.


        Requires the `READ_SENSITIVE_CARD_DATA` token scope. For more
        information, see the **Authorization** section.


        :::note

        - This feature is not available in Sandbox.

        - To increase your account's card limits, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::


        For more information, see the guides: [Manage
        cards](/docs/guides/manage-accounts/cards/manage-cards).
      security:
        - AccessToken:
            - READ_SENSITIVE_CARD_DATA
      tags:
        - Cards
      parameters:
        - name: card_id
          in: path
          required: true
          description: The ID of the card for which to retrieve the sensitive details.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: Sensitive details of the card
          content:
            application/json:
              schema:
                type: object
                properties:
                  pan:
                    type: string
                    description: The PAN (Primary Account Number) of the card.
                  cvv:
                    type: string
                    description: The CVV (Card Verification Value) of the card.
                  expiry:
                    type: string
                    description: The card expiration date.
                    format: DD/MMMM
                    pattern: ^[0-9]{2}/[0-9]{4}$
                required:
                  - pan
                  - cvv
                  - expiry
              examples:
                default:
                  value:
                    pan: "4111111111111111"
                    cvv: "123"
                    expiry: 06/2030
        "400":
          description: >-
            Bad request


            Returned, for example, when you provide an invalid card ID in the
            path.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_id:
                  $ref: "#/components/examples/cardErrorBadId"
        "403":
          description: Action forbidden
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 9002
                    message: This action is forbidden
        "404":
          description: Card doesn't exist
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 1214
                    message: Card not found
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /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. 

        The counterparties are sorted by the `created_at` date in reverse chronological order.

        The returned counterparties are **paginated**. 
        The maximum number of counterparties returned per page is specified by the `limit` parameter.
        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.

        For more information, see the guides: [Retrieve counterparties](/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. 


            :::note

            Special characters must be properly URL-encoded.

            :::
        - 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. 
            Only 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. 
            Only 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`.

            The default value is the current date and time at which you are
            calling the endpoint. 


            Provide 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
                    - 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
                    - 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
                    - 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
                    - 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
                    - 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
                    code: 2101
                sort_code_only_allowed_with_account_no:
                  summary: Sort code can be used only in combination with account number
                  value:
                    message: sort_code param can be used only combined with account_no param
                    code: 2101
                invalid_timestamp:
                  summary: Invalid timestamp
                  value:
                    message: Parameter created_before must be a valid timestamp
                    code: 2101
        "401":
          description: Anauthorized
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: The request should be authorized.
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Counterparties
  /counterparty:
    post:
      summary: Create a counterparty
      operationId: addCounterparty
      description: |-
        Create a new counterparty to transact with.

        ### Revtags in Sandbox

        In the Sandbox environment, you cannot add real people and businesses as Revolut counterparties.
        To help you simulate adding counterparties using Revtag, we created some test accounts of profile type `personal` that you can use.

        <details id='test-accounts-for-sandbox'>
          <summary> 
          <b>Test accounts for Sandbox</b>
          </summary>

          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`

        </details>

        ### Address field recommendations

        Some payment rails may have stricter requirements regarding the `address` field – for example, by also requiring the `region` field.  
        This is why we recommend that you use **all** available address fields (including `street_line1`, `region` and `city`) when creating a counterparty.

        This significantly reduces the risk of any disruption to payments made via the API.

        ### Multiple counterparties with the same details

        You cannot create multiple counterparties with the same Revtag.
        This restriction does not apply to other details. 
        For example:
        - **Revtag**: If you've already added `johnsmith` as a Revolut counterparty, you can't add another counterparty with the `johnsmith` Revtag.
          If you try to do so, you'll get an error.
        - **Other details**: If you've added John Smith as an individual UK counterparty using GBP with `sort_code=54-01-05` and `account_no=12345678`, you can still use the same details to create another counterparty.

        ### Counterparty name

        When creating a counterparty, ensure that you use the correct field to define the counterparty's name.

        <table>
          <thead>
            <tr>
              <th rowSpan="2"> Counterparty type</th>
              <th colSpan="2">Name field to use when added with:</th>
            </tr>
            <tr>
              <th>Revtag</th>
              <th>Other details</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <th>Individual</th>
              <td><code>name</code> (string)</td>
              <td><code>individual_name</code> (<b>object</b> with string subfields for first and last name)</td>
            </tr>
            <tr>
              <th>Company</th>
              <td><code>name</code> (string)</td>
              <td><code>company_name</code> (string)</td>
            </tr>
          </tbody>
        </table>

        ---

        For more information, see the guides: [Create a counterparty](/docs/guides/manage-accounts/counterparties/create-a-counterparty).
      security:
        - AccessToken:
            - READ
            - WRITE
      tags:
        - Counterparties
      requestBody:
        description: Counterparty to add
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateCounterpartyRequest"
            examples:
              revolut_counterparty_individual:
                summary: Revolut individual counterparty
                value:
                  profile_type: personal
                  name: John Smith
                  revtag: johnsmith
              revolut_counterparty_business:
                summary: Revolut business counterparty
                value:
                  profile_type: business
                  name: John Smith Co.
                  revtag: jsmithco1
              uk_individual:
                summary: UK individual counterparty
                value:
                  individual_name:
                    first_name: John
                    last_name: Smith
                  bank_country: GB
                  currency: GBP
                  sort_code: 54-01-05
                  account_no: "12345678"
              uk_individual_with_address:
                summary: UK individual counterparty with address
                value:
                  individual_name:
                    first_name: John
                    last_name: Smith
                  bank_country: GB
                  currency: GBP
                  sort_code: 54-01-05
                  account_no: "12345678"
                  address:
                    city: London
                    street_line1: 20 Upping St
                    country: GB
                    postcode: SW1A 2AB
              uk_business:
                summary: UK business counterparty
                value:
                  company_name: John Smith Co.
                  bank_country: GB
                  currency: GBP
                  sort_code: 54-01-05
                  account_no: "12345678"
              uk_business_with_address:
                summary: UK business counterparty with address
                value:
                  company_name: John Smith Co.
                  bank_country: GB
                  currency: GBP
                  sort_code: 54-01-05
                  account_no: "12345678"
                  address:
                    city: London
                    street_line1: 20 Upping St
                    country: GB
                    postcode: SW1A 2AB
              international_business_eurozone:
                summary: International business counterparty (eurozone with EUR)
                value:
                  company_name: Bleu Blanc Conseil SARL
                  bank_country: FR
                  currency: EUR
                  iban: FR1420041010050500013M02606
              international_business_ch_eur:
                summary: International business counterparty (outside eurozone, with EUR)
                value:
                  company_name: Johann Meier Co.
                  bank_country: CH
                  currency: EUR
                  iban: CH9300762011623852957
              international_business_ch_chf:
                summary: International business counterparty (outside eurozone, non-EUR)
                value:
                  company_name: Edelweiss Handel GmbH
                  bank_country: CH
                  currency: CHF
                  iban: CH5604835012345678009
                  address:
                    street_line1: Bahnhofstrasse 4a/8
                    city: Zurich
                    country: CH
                    postcode: "8001"
      responses:
        "200":
          description: Added counterparty
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Counterparty"
              examples:
                revolut_counterparty_individual:
                  summary: Revolut individual counterparty
                  value:
                    id: 54ee57d7-1234-abcd-1234-0e1f79164d5e
                    name: John Smith
                    revtag: johnsmith
                    profile_type: personal
                    country: GB
                    state: created
                    created_at: 2023-07-26T09:34:41.790401Z
                    updated_at: 2023-07-26T09:34:41.790401Z
                revolut_counterparty_business:
                  summary: Revolut business counterparty
                  value:
                    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
                uk_individual:
                  summary: UK individual counterparty
                  value:
                    id: 19dcf5a2-110f-43f7-9d5f-98aaf4b8f0d6
                    name: John Smith
                    profile_type: personal
                    state: created
                    created_at: 2023-03-13T09:34:41.790401Z
                    updated_at: 2023-03-13T09:34:41.790401Z
                    accounts:
                      - account_no: "12345678"
                        sort_code: "540105"
                        id: 6f45a49a-710c-4ef4-b42b-6c247c82af75
                        name: John Doe
                        bank_country: GB
                        currency: GBP
                        type: external
                uk_business:
                  summary: UK business counterparty
                  value:
                    id: b53fdd78-8d67-4f63-a103-eeeeef53cac8
                    name: John Smith Co.
                    profile_type: business
                    state: created
                    created_at: 2022-09-14T14:34:11.168340Z
                    updated_at: 2022-09-14T14:34:11.168340Z
                    accounts:
                      - account_no: "12345678"
                        sort_code: "540105"
                        id: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
                        name: John Smith Co.
                        bank_country: GB
                        currency: GBP
                        type: external
                international_business_eurozone:
                  summary: International business counterparty (eurozone with EUR)
                  value:
                    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
                international_business_ch_eur:
                  summary: International business counterparty (outside eurozone, with EUR)
                  value:
                    id: b8ce3922-d518-4ae6-9426-e8cc117e5332
                    name: Johann Meier Co.
                    profile_type: business
                    state: created
                    created_at: 2026-01-30T12: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
                international_business_ch_chf:
                  summary: International business counterparty (outside eurozone, non-EUR)
                  value:
                    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: 2023-08-10T12:43:20.273500Z
                    accounts:
                      - iban: CH5604835012345678009
                        bic: UBSWCHZH80A
                        id: b3cc43e8-f141-459b-9bd5-3505cf9797f8
                        name: Edelweiss Handel GmbH
                        bank_country: CH
                        currency: CHF
                        type: external
        "400":
          description: |-
            Bad Request

            Returned, for example, when the provided IBAN is invalid.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3000
                    message: FR66995908786 is not a valid IBAN
        "404":
          description: >-
            Not Found


            Returned, for example, when the counterparty that you're trying to
            add doesn't exist, or when the name that you provide for the Revtag
            counterparty doesn't match the actual name on the account.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3006
                    message: Resource not found
        "422":
          description: >-
            Unprocessable Content


            Returned, for example, when the Revolut counterparty that you're
            trying to add using Revtag already exists, or when the counterparty
            cannot be added.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CounterpartyError"
              examples:
                counterparty_exists:
                  summary: Counterparty already exists
                  value:
                    message: This counterparty already exists
                    code: 3012
                    params:
                      counterparty_id: 878029d4-5972-4424-ae8c-80fe5f59407b
                counterparty_cannot_be_added:
                  summary: Counterparty cannot be added
                  value:
                    message: Recipient can't be added
                    code: 2101
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /counterparty/{counterparty_id}:
    get:
      summary: Retrieve a counterparty
      operationId: getCounterparty
      description: Get the information about a specific counterparty by ID.
      security:
        - AccessToken:
            - READ
      parameters:
        - name: counterparty_id
          in: path
          required: true
          description: The ID of the counterparty to retrieve.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: The information about a specific counterparty
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Counterparty"
              examples:
                revolut_counterparty_individual:
                  summary: Revolut individual counterparty
                  value:
                    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
                revolut_counterparty_business:
                  summary: Revolut business counterparty
                  value:
                    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
                uk_counterparty:
                  summary: UK counterparty
                  value:
                    id: b53fdd78-8d67-4f63-a103-eeeeef53cac8
                    name: John Smith Co.
                    profile_type: business
                    state: created
                    created_at: 2022-09-14T14:34:11.168340Z
                    updated_at: 2022-09-14T14:34:11.168340Z
                    accounts:
                      - account_no: "12345678"
                        sort_code: "540105"
                        id: 5c9e171c-7e23-4d6a-b768-aaaaaba535f3
                        name: John Smith Co.
                        bank_country: GB
                        currency: GBP
                        type: external
                international_business_eurozone:
                  summary: International business counterparty (eurozone with EUR)
                  value:
                    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
                international_business_ch_eur:
                  summary: International business counterparty (outside eurozone, with EUR)
                  value:
                    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
                international_business_ch_chf:
                  summary: International business counterparty (outside eurozone, non-EUR)
                  value:
                    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
                card_counterparty:
                  summary: Card counterparty
                  value:
                    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
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Counterparties
    delete:
      summary: Delete a counterparty
      operationId: deleteCounterparty
      description: Delete a counterparty with the given ID. When a counterparty is
        deleted, you cannot make any payments to the counterparty.
      security:
        - AccessToken:
            - READ
            - WRITE
      parameters:
        - name: counterparty_id
          in: path
          required: true
          description: The ID of the counterparty to delete.
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: The counterparty deleted
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Counterparties
  /rate:
    get:
      summary: Get an exchange rate
      operationId: getRate
      description: |-
        Get the sell exchange rate between two currencies.

        You can check the [currencies supported in Production](https://help.revolut.com/business/help/receiving-payments/currency-exchanges/which-currencies-can-i-exchange-and-keep-in-my-account/) in the Revolut Help Centre.
        Some of these currencies might not be available in Sandbox.

        For more information, see the guides: [Exchange money](/docs/guides/manage-accounts/exchange-money).
      security:
        - AccessToken:
            - READ
      tags:
        - Foreign exchange
      parameters:
        - name: from
          in: query
          required: true
          description: The currency that you exchange from in [ISO
            4217](https://en.wikipedia.org/wiki/ISO_4217) format.
          schema:
            $ref: "#/components/schemas/Currency"
        - name: amount
          in: query
          required: false
          description: The amount of the currency to exchange **from**. The default value
            is `1.00`.
          schema:
            type: number
            format: double
            default: "1.00"
        - name: to
          in: query
          required: true
          description: The currency that you exchange to in [ISO
            4217](https://en.wikipedia.org/wiki/ISO_4217) format.
          schema:
            $ref: "#/components/schemas/Currency"
      responses:
        "200":
          description: The exchange rate information
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExchangeRateResponse"
              examples:
                default:
                  value:
                    from:
                      amount: 1
                      currency: EUR
                    to:
                      amount: 1
                      currency: USD
                    rate: 1.0044090351
                    fee:
                      amount: 0
                      currency: EUR
                    rate_date: 2022-08-31T17:30:34Z
        "404":
          description: |-
            Not found

            Returned, for example, when the exchange rate is unknown
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Exchange rate unknown
                    code: 3472
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /exchange:
    post:
      summary: Exchange money
      operationId: exchangeMoney
      description: |-
        Exchange money using one of these methods: 

        - **Sell currency**: You know the amount of currency to sell. 
          For example, you want to exchange 135.5 USD to some EUR. 

          Specify the amount in the `from` object.
        - **Buy currency**: You know the amount of currency to buy. 
          For example, you want to exchange some USD to 200 EUR. 

          Specify the amount in the `to` object.

        :::note
        You must specify the `amount` field only once, either in the `from` object or in the `to` object.
        :::

        You can check the [currencies supported in Production](https://help.revolut.com/business/help/receiving-payments/currency-exchanges/which-currencies-can-i-exchange-and-keep-in-my-account/) in the Revolut Help Centre.
        Some of these currencies might not be available in Sandbox.

        For more information, see the guides: [Exchange money](/docs/guides/manage-accounts/exchange-money).
      security:
        - AccessToken:
            - READ
            - PAY
      tags:
        - Foreign exchange
      requestBody:
        description: Specify the exchange information
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ExchangeRequest"
            examples:
              sell:
                summary: Sell
                value:
                  from:
                    account_id: af98333c-ea53-482b-93c2-1fa5e4eae671
                    currency: USD
                    amount: 135.5
                  to:
                    account_id: b7ec67d3-5af1-42c8-bece-3d285774894d
                    currency: EUR
                  reference: exchange
                  request_id: A1pH4num3ric2
              buy:
                summary: Buy
                value:
                  from:
                    account_id: af98333c-ea53-482b-93c2-1fa5e4eae671
                    currency: USD
                  to:
                    account_id: b7ec67d3-5af1-42c8-bece-3d285774894d
                    currency: EUR
                    amount: 200
                  reference: exchange
                  request_id: A1pH4num3ric2
      responses:
        "200":
          description: Exchange operation details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExchangeResponse"
              examples:
                default:
                  value:
                    id: 630f9c2e-2e74-a06d-ab61-deb7ggkkd6cb
                    state: completed
                    created_at: 2022-08-31T17:36:46.656876Z
                    completed_at: 2022-08-31T17:36:46.657239Z
        "400":
          description: |-
            Bad request

            For example, the exchange reason is required.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3448
                    message: Exchange reason is required
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /exchange-reasons:
    get:
      summary: Get exchange reasons
      description: >-
        Depending on the country and the amount of funds to be exchanged, you
        might be required to provide an exchange reason. 

        With this endpoint, you can retrieve all exchange reasons available to
        your business account.


        After you retrieve the results, use the appropriate reason code in the
        `exchange_reason_code` field when [exchanging
        money](/docs/api/business#exchange-money) or [making a
        payment](/docs/api/business#create-payment) that involves foreign
        currency exchange.
      operationId: getExchangeReasons
      security:
        - AccessToken:
            - READ
      tags:
        - Foreign exchange
        - Transfers
      responses:
        "200":
          description: List of exchange reasons
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ExchangeReasons"
              examples:
                default:
                  value:
                    $ref: "#/components/examples/exchangeReasons"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /expenses:
    servers:
      - url: https://b2b.revolut.com/api/1.0
        description: Production server (uses live data)
    get:
      summary: Retrieve a list of expenses
      operationId: getExpenses
      description: |-
        Get all your expenses, or use the query parameters to filter the results.

        The expenses are sorted by the `expense_date` value in reverse chronological order, and they're **paginated**.
        The maximum number of expenses returned per page is specified by the `count` parameter.
        To get the next page of results, make a new request and use the `expense_date` value from the last item of the previous page as the value for the `to` parameter.

        The data enriched by the user, for example, VAT and cost centre, is returned under `splits[].tax_rate` and `labels`, respectively.

        :::note
        - The API returns a maximum of 500 expenses per request.
        - This feature is not available in Sandbox.
        :::

        For more information, see the guides: [Retrieve expenses and receipts](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses).
      security:
        - AccessToken:
            - READ
      tags:
        - Expenses
      parameters:
        - in: query
          name: from
          description: >-
            The date and time to retrieve the expenses from, including this
            date-time.

            Corresponds to the value of `expense_date`.

            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.


            Used also for pagination.

            To get back to the previous page of results, make a new request and
            use the `expense_date` value from the first item of the current page
            as the value for the `from` parameter.
          schema:
            type: string
            format: date-time
        - in: query
          name: to
          description: >-
            The date and time to retrieve the expenses to, excluding this
            date-time.

            Corresponds to the value of `expense_date`.

            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.

            The default value is the date and time at which you're calling the
            endpoint.


            Used also for pagination.

            To get back to the next page of results, make a new request and use
            the `expense_date` value from the last item of the previous
            (current) page as the value for the `to` parameter.
          schema:
            type: string
            format: date-time
        - in: query
          name: count
          description: >-
            The maximum number of the expenses to retrieve per page.

            To get the next page of results, make a new request and use the
            `expense_date` value from the last item of the previous page as the
            value for the `to` parameter.
          schema:
            type: integer
            default: 100
            maximum: 500
            minimum: 1
        - in: query
          name: state
          description: Retrieves the expenses in the specified state.
          schema:
            type: string
            enum:
              - missing_info
              - awaiting_review
              - reverted
              - pending_reimbursement
              - refund_requested
              - refunded
              - approved
              - rejected
        - in: query
          name: transaction_type
          description: >-
            The type of the transaction related to the expense.

            If provided, only expenses with transactions of this type are
            returned.
          schema:
            type: string
            enum:
              - atm
              - card_payment
              - fee
              - transfer
              - external
              - mileage_reimbursement
      responses:
        "200":
          description: List of expenses
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expenses"
              examples:
                default:
                  value:
                    - id: 8decf9f8-053e-46cb-92d8-a7b450fe5ae0
                      state: approved
                      transaction_type: card_payment
                      description: Printer paper
                      submitted_at: 2024-09-13T20:48:40.912Z
                      completed_at: 2024-09-13T20:48:40.948Z
                      payer: Ray Trenfield
                      merchant: Best Printers Company
                      transaction_id: 163e0ef6-2414-4fcf-846f-1f871059d506
                      expense_date: 2024-09-13T18:47:01.782Z
                      splits:
                        - amount:
                            amount: 15.39
                            currency: GBP
                          category:
                            id: 71b9ec74-d5ff-4aa1-a489-f8dc39d4c9b7
                            name: Printing & Stationery
                            code: "461"
                          tax_rate:
                            id: 5704fdd2-bac2-42ec-bab0-e075182260be
                            name: VAT
                            percentage: 20
                        - amount:
                            amount: 8.99
                            currency: GBP
                          category:
                            id: a5532a5e-d859-4795-967b-14723f8920ea
                            name: Groceries
                            code: "555"
                          tax_rate:
                            id: d92efe31-fc26-4364-af4b-3630c1057ece
                            name: No VAT
                            percentage: 0
                      labels:
                        Office supplies:
                          - photocopying
                        Department:
                          - HR
                      receipt_ids:
                        - 84c0169a-37f9-4bfa-ab1e-f2c81dbc34cf
                      spent_amount:
                        amount: 24.38
                        currency: GBP
                    - id: 8498b232-28ba-4baf-b33d-22fb464e83c8
                      state: missing_info
                      transaction_type: fee
                      description: Expenses app charges
                      payer: Bingston Labs
                      transaction_id: 91b56d41-7b42-40e8-8970-0082cf965e6e
                      expense_date: 2024-09-04T13:39:18.606Z
                      splits:
                        - amount:
                            amount: 17.68
                            currency: EUR
                          category:
                            id: 95bf2a30-7284-4664-989a-1dcb51e2053a
                            name: General Expenses
                            code: "429"
                          tax_rate:
                            id: 812f50e7-37b3-480b-a7c4-2ad08442f7cf
                            name: 20% (VAT on Expenses)
                            percentage: 20
                      labels: {}
                      receipt_ids:
                        - d97d062f-5aae-4a0c-b5f3-52ae134d384d
                      spent_amount:
                        amount: 17.68
                        currency: EUR
                    - id: a0e0294e-0460-42f4-bd97-f969469f1afc
                      state: missing_info
                      transaction_type: mileage_reimbursement
                      payer: John Smith
                      expense_date: 2025-10-6T08:34:18.123Z
                      splits:
                        - amount:
                            amount: 25.99
                            currency: EUR
                          category:
                            id: dab86546-a442-464a-9bad-18a826542b03
                            name: Vehicle Operating Expenses
                          tax_rate:
                            id: 728980d1-aa76-44f5-8902-53520160bfeb
                            name: 20% Fuel bills
                            percentage: 20
                      labels: {}
                      receipt_ids: []
                      spent_amount:
                        amount: 25.99
                        currency: EUR
        "400":
          description: Bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        "403":
          description: >-
            Forbidden


            Returned, for example, when the Expenses API is disabled for the
            business that is trying to use it.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Expenses API for business is disabled
                    code: 9002
        "422":
          description: >-
            Unprocessable content


            Returned, for example, when the Expenses feature (not just the API)
            is disabled for the business.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Expenses feature is not enabled
                    code: 3470
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /expenses/{expense_id}:
    servers:
      - url: https://b2b.revolut.com/api/1.0
        description: Production server (uses live data)
    get:
      summary: Retrieve an expense
      operationId: getExpense
      description: |-
        Get the information about a specific expense by ID.

        The data enriched by the user, for example, VAT and cost centre, is returned under `splits[].tax_rate` and `labels`, respectively.

        :::note
        This feature is not available in Sandbox.
        :::

        For more information, see the guides: [Retrieve expenses and receipts](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses).
      security:
        - AccessToken:
            - READ
      tags:
        - Expenses
      parameters:
        - name: expense_id
          in: path
          required: true
          description: The ID of the expense to retrieve.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: Expense
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Expense"
              examples:
                expense_approved:
                  summary: Approved expense, with labels and multiple splits
                  value:
                    id: 8decf9f8-053e-46cb-92d8-a7b450fe5ae0
                    state: approved
                    transaction_type: card_payment
                    description: Printer paper
                    submitted_at: 2024-09-13T20:48:40.912Z
                    completed_at: 2024-09-13T20:48:40.948Z
                    payer: Ray Trenfield
                    merchant: Best Printers Company
                    transaction_id: 163e0ef6-2414-4fcf-846f-1f871059d506
                    expense_date: 2024-09-13T18:47:01.782Z
                    splits:
                      - amount:
                          amount: 15.39
                          currency: GBP
                        category:
                          id: 71b9ec74-d5ff-4aa1-a489-f8dc39d4c9b7
                          name: Printing & Stationery
                          code: "461"
                        tax_rate:
                          id: 5704fdd2-bac2-42ec-bab0-e075182260be
                          name: VAT
                          percentage: 20
                      - amount:
                          amount: 8.99
                          currency: GBP
                        category:
                          id: a5532a5e-d859-4795-967b-14723f8920ea
                          name: Groceries
                          code: "555"
                        tax_rate:
                          id: d92efe31-fc26-4364-af4b-3630c1057ece
                          name: No VAT
                          percentage: 0
                    labels:
                      Office supplies:
                        - photocopying
                      Department:
                        - HR
                    receipt_ids:
                      - 84c0169a-37f9-4bfa-ab1e-f2c81dbc34cf
                    spent_amount:
                      amount: 24.38
                      currency: GBP
                expense_awaiting_review:
                  summary: Expense awaiting review, with external transaction
                  value:
                    id: 7ff44b9f-556b-4dce-8e39-4a667246f49f
                    state: awaiting_review
                    transaction_type: external
                    description: Snack
                    submitted_at: 2024-09-11T13:19:24.659Z
                    payer: Chima Aragonye
                    merchant: Go FroYo Co.
                    expense_date: 2024-01-21T00:00:00Z
                    splits:
                      - amount:
                          amount: 5
                          currency: GBP
                        category:
                          id: 95bf2a30-7284-4664-989a-1dcb51e2053a
                          name: General Expenses
                          code: "429"
                        tax_rate:
                          id: d92efe31-fc26-4364-af4b-3630c1057ece
                          name: No VAT
                          percentage: 0
                    labels: {}
                    receipt_ids: []
                    spent_amount:
                      amount: 5
                      currency: GBP
                expense_missing_info:
                  summary: Expense missing information
                  value:
                    id: 8498b232-28ba-4baf-b33d-22fb464e83c8
                    state: missing_info
                    transaction_type: fee
                    description: Expenses app charges
                    payer: Bingston Labs
                    transaction_id: 91b56d41-7b42-40e8-8970-0082cf965e6e
                    expense_date: 2024-09-04T13:39:18.606Z
                    splits:
                      - amount:
                          amount: 17.68
                          currency: EUR
                        category:
                          id: 95bf2a30-7284-4664-989a-1dcb51e2053a
                          name: General Expenses
                          code: "429"
                        tax_rate:
                          id: 812f50e7-37b3-480b-a7c4-2ad08442f7cf
                          name: 20% (VAT on Expenses)
                          percentage: 20
                    labels: {}
                    receipt_ids:
                      - d97d062f-5aae-4a0c-b5f3-52ae134d384d
                    spent_amount:
                      amount: 17.68
                      currency: EUR
                expense_reverted:
                  summary: Reverted expense
                  value:
                    id: 9b9cf87a-e17f-4854-8800-515a0475c4df
                    state: reverted
                    transaction_type: transfer
                    payer: Mindy Carter
                    transaction_id: 5581efb8-6b98-4c2b-bdcd-1270062a8d48
                    expense_date: 2024-09-16T12:48:39.960Z
                    splits:
                      - amount:
                          amount: 100
                          currency: EUR
                    labels: {}
                    receipt_ids: []
                    spent_amount:
                      amount: 100
                      currency: EUR
        "400":
          description: Bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        "403":
          description: >-
            Forbidden


            Returned, for example, when the access token is missing the required
            [scope](/docs/api/business#access-token) or if the Expenses API is
            disabled for the business.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                forbidden:
                  summary: Forbidden
                  value:
                    message: This action is forbidden
                    code: 9002
                api_disabled:
                  summary: Feature disabled
                  value:
                    message: Expenses API for business is disabled
                    code: 9002
        "404":
          description: Not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Expense 'bd415411-6e3e-46e7-af07-42f9b790c44e' not found
                    code: 3006
        "422":
          description: >-
            Unprocessable content


            Returned, for example, when the Expenses feature (not just the API)
            is disabled for the business.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Expenses feature is not enabled
                    code: 3470
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /expenses/{expense_id}/receipts/{receipt_id}/content:
    servers:
      - url: https://b2b.revolut.com/api/1.0
        description: Production server (uses live data)
    get:
      summary: Retrieve a receipt related to an expense
      operationId: getExpenseReceipt
      description: |-
        Get the receipt related to an expense by providing the receipt's ID.

        :::note
        This feature is not available in Sandbox.
        :::

        For more information, see the guides: [Retrieve expenses and receipts](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses).
      security:
        - AccessToken:
            - READ
      tags:
        - Expenses
      parameters:
        - name: expense_id
          in: path
          required: true
          description: The ID of the [expense](/docs/api/business#get-expense) to which
            the receipt is related.
          schema:
            type: string
            format: uuid
        - name: receipt_id
          in: path
          required: true
          description: >-
            The ID of the receipt to retrieve.


            To find the ID of a receipt related to a specific expense, refer to
            the [expense's details](/docs/api/business#get-expense#response).

            The IDs of receipts related to that expense are returned under
            `receipt_ids`.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: Receipt content. The exact format depends on the receipt.
          content:
            "*/*":
              schema:
                type: string
                contentMediaType: application/octet-stream
              examples:
                receipt_pdf:
                  summary: A PDF receipt
                  value: "@sample-receipt.pdf"
        "400":
          description: Bad request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
        "403":
          description: >-
            Forbidden


            Returned, for example, when the access token is missing the required
            [scope](/docs/api/business#access-token) or if the Expenses API is
            disabled for the business.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                forbidden:
                  summary: Forbidden
                  value:
                    message: This action is forbidden
                    code: 9002
                api_disabled:
                  summary: Feature disabled
                  value:
                    message: Expenses API for business is disabled
                    code: 9002
        "404":
          description: Not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Receipt 'cea368fe-c757-44ce-b2cc-3da94b3d13a6' for expense
                      '3e45f3d7-9919-46df-9793-300726c9fed1' not found
                    code: 3006
        "422":
          description: >-
            Unprocessable content


            Returned, for example, when the Expenses feature (not just the API)
            is disabled for the business.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Expenses feature is not enabled
                    code: 3470
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /label-groups:
    post:
      summary: Create a new label group
      operationId: createLabelGroup
      description: |-
        Add a new group of labels that can be applied to your financial records, such as expenses.

        :::note
        - This operation is not supported for [externally managed label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups#externally-managed-settings).
        - You can have up to 5 label groups at a time per business.
        :::

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).
      security:
        - AccessToken:
            - WRITE
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateLabelGroupRequest"
            examples:
              department_labels:
                summary: Label group for Department
                value:
                  name: Department
                  labels:
                    - name: Sales & Account Management
                    - name: Product Management
                    - name: Design & UX
                    - name: Customer Success
                    - name: Engineering
                    - name: Research & Development
                    - name: Operations
                    - name: Quality Assurance
                    - name: Data Science & Analytics
                    - name: Executive & Leadership
              team_labels:
                summary: Label group for Team
                value:
                  name: Team
                  labels:
                    - name: Brand Design & Creative Services
                    - name: Enterprise Sales (Europe)
                    - name: Cloud Infrastructure & DevOps
                    - name: Growth & Performance Marketing
                    - name: Mobile App Development
      responses:
        "201":
          description: >-
            Resource created


            On successful creation, the response returns only the ID of the new
            resource (i.e. the label group), even if the resource has more
            properties.

            To get all the details of the label group, use the returned resource
            ID with a [GET request](/docs/api/business#get-label-group).
          $ref: "#/components/responses/ResourceCreatedResponse"
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                param_required:
                  summary: Required parameter is missing
                  value:
                    error_id: 69bc43d4-0ebf-4f7c-88e0-ebb7a1441a18
                    code: 2101
                    message: "'labels' is required"
                bad_param_type:
                  summary: Incorrect parameter type
                  value:
                    error_id: 69bc4467-8042-446f-b362-675e2921d71c
                    code: 2101
                    message: "'labels' must be an array"
                invalid_json:
                  summary: Invalid JSON
                  value:
                    error_id: 69bc1985-1313-42f0-8c0b-3673c665f135
                    code: 2101
                    message: Request body is not valid JSON
                param_value_too_short:
                  summary: Parameter value too short
                  value:
                    error_id: 7acc6073-5290-45f8-8956-c79d487ef1e5
                    code: 2101
                    message: "'name' must be at least 1 character"
                param_value_too_long:
                  summary: Parameter value too long
                  value:
                    error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
                    code: 2101
                    message: "'name' must be at most 100 characters"
                param_value_missing:
                  summary: Parameter value too long
                  value:
                    error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
                    code: 2101
                    message: "'labels' must not be empty"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "409":
          description: >-
            Conflict


            Request conflicts with the current state of the resource.

            Returned, for example, when a label group with the provided name
            already exists.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: 69bc49bc-4e57-4768-ab6e-f281da25aa2b
                    code: 3506
                    message: Label group with name 'My Unique Label Group' already exists
        "422":
          description: >-
            Unprocessable entity - label group cannot be created due to business
            rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and labels
            are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_modify_externally_managed_resource:
                  summary: Labels and label groups are managed by integration, cannot be created
                    manually
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Labels are managed by your connected accounting integration and cannot
                      be modified manually
                group_limit_exceeded:
                  summary: Label groups limit exceeded
                  value:
                    error_id: 69bc3507-cfd6-4e04-bd79-2d57a3951774
                    code: 3591
                    message: Maximum of 5 label groups per business reached
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Labels
    get:
      summary: Retrieve a list of label groups
      operationId: getLabelGroups
      description: |-
        Get available label groups based on the provided query criteria.

        The label groups are sorted by the `created_at` date in reverse chronological order, and they're **paginated**.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: limit
          in: query
          required: false
          description: >-
            The page size, that is, the maximum number of label groups to return
            per page.


            To get the next page of results, use `page_token`.
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
            examples:
              - 10
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: List of label groups
          content:
            application/json:
              schema:
                type: object
                properties:
                  next_page_token:
                    $ref: "#/components/schemas/PageToken"
                  label_groups:
                    description: List of label groups.
                    type: array
                    items:
                      $ref: "#/components/schemas/LabelGroupResponse"
                required:
                  - label_groups
              examples:
                results_with_next_page:
                  summary: Results exceed page size (when limit=5) & next page available
                  value:
                    next_page_token: MjAyNi0wMS0wMVQwOToxMzoxNS40MDZaN2RhNTFjZGY0LTZiYjctNDRkNi04OWU1LTc2OWEzZGYxZDc5ZA
                    label_groups:
                      - id: f0e1d2c3-b4a5-4678-9012-3456789abcde
                        name: Department
                        created_at: 2026-03-19T07:15:00.000000Z
                        updated_at: 2026-03-19T08:45:22.111444Z
                      - id: f09ad1ad3-a1c0-4c09-b8f8-24b439e72690
                        name: Employee
                        created_at: 2026-03-11T10:33:51.121090Z
                        updated_at: 2026-03-11T10:33:51.121090Z
                      - id: a1b2c3d4-e5f6-4a5b-bc6d-7e8f9a0b1c2d
                        name: Project
                        created_at: 2026-02-01T08:00:00.000000Z
                        updated_at: 2026-02-01T08:00:00.000000Z
                      - id: 5f4e3d2c-1b0a-4987-8765-43210fedcba9
                        name: Location
                        created_at: 2026-01-15T10:20:30.123456Z
                        updated_at: 2026-03-10T14:45:12.987654Z
                      - id: 98765432-abcd-ef01-2345-67890abcdef0
                        name: Task
                        created_at: 2025-12-20T11:11:11.000Z
                        updated_at: 2026-03-15T09:30:00.555222Z
                results_single_page:
                  summary: Results fit within page size, no more pages available
                  value:
                    label_groups:
                      - id: f0e1d2c3-b4a5-4678-9012-3456789abcde
                        name: Department
                        created_at: 2026-03-19T07:15:00.000000Z
                        updated_at: 2026-03-19T08:45:22.111444Z
                      - id: f09ad1ad3-a1c0-4c09-b8f8-24b439e72690
                        name: Employee
                        created_at: 2026-03-11T10:33:51.121090Z
                        updated_at: 2026-03-11T10:33:51.121090Z
                      - id: a1b2c3d4-e5f6-4a5b-bc6d-7e8f9a0b1c2d
                        name: Project
                        created_at: 2026-02-01T08:00:00.000000Z
                        updated_at: 2026-02-01T08:00:00.000000Z
                      - id: 5f4e3d2c-1b0a-4987-8765-43210fedcba9
                        name: Location
                        created_at: 2026-01-15T10:20:30.123456Z
                        updated_at: 2026-03-10T14:45:12.987654Z
                      - id: 98765432-abcd-ef01-2345-67890abcdef0
                        name: Task
                        created_at: 2025-12-20T11:11:11.000Z
                        updated_at: 2026-03-15T09:30:00.555222Z
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_type:
                  summary: Incorrect query parameter type
                  value:
                    error_id: 29146977-8042-446f-b362-af224b14c830
                    code: 2101
                    message: Query parameter 'limit' must be an integer
                param_value_too_low:
                  summary: Query parameter value too low
                  value:
                    error_id: b5a51cd1-9d0f-4074-adae-675e2921d71c
                    code: 2101
                    message: Query parameter 'limit' must be at least 1
                param_value_too_high:
                  summary: Query parameter value too high
                  value:
                    error_id: fa12f45e-4633-4f78-8d40-42dadc380511
                    code: 2101
                    message: Query parameter 'limit' must be at most 500
                multiple_values_not_allowed:
                  summary: Multiple values provided for a single-value query parameter
                  value:
                    error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
                    code: 2101
                    message: Query parameter 'limit' must have a single value
                param_cannot_be_empty:
                  summary: Query parameter provided without a value
                  value:
                    error_id: fa12f45e-0ebf-4f7c-88e0-3673c665f135
                    code: 2101
                    message: Query parameter 'limit' must not be empty
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Labels
  /label-groups/{group_id}:
    get:
      summary: Retrieve label group details
      operationId: getLabelGroup
      description: |-
        Get the details of a specific label group based on the label group ID.

        The details include the label group name, as well as when the label group was added to your settings, and when it was last updated.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: group_id
          in: path
          description: The ID of the label group to retrieve.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
      responses:
        "200":
          description: Label group details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LabelGroupResponse"
              examples:
                default:
                  value:
                    id: 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
                    name: Department
                    created_at: 2026-03-11T10:33:51.121090Z
                    updated_at: 2026-03-11T10:33:51.121090Z
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_format:
                  summary: Incorrect path parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the label group that you're trying to retrieve cannot
            be found.

            This can happen, for example, when the label group has been deleted,
            or the provided label group ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: cbb15721-5f51-4588-a959-7494bb7ba827
                    code: 3006
                    message: Label group with id 8945879d-6854-4e10-88d6-ce92c5f010ac not found
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Labels
    patch:
      summary: Update label group settings
      operationId: updateLabelGroup
      description: |-
        Update the name for a specific label group, based on its ID.

        :::note
        This operation is not supported for [externally managed label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups#externally-managed-settings).
        :::

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: group_id
          in: path
          description: The ID of the label group to update.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateLabelGroupRequest"
            examples:
              default:
                value:
                  name: 20% VAT
      responses:
        "204":
          description: Label group updated
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                param_required:
                  summary: Body is empty
                  value:
                    error_id: f1059c4b-4278-45d3-a17f-bd433ab33c15
                    code: 2101
                    message: Request body must not be empty
                bad_param_format:
                  summary: Incorrect parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
                invalid_json:
                  summary: Invalid JSON
                  value:
                    error_id: 36f3cec5-b4b9-431f-9c28-afd3899bc64f
                    code: 2101
                    message: Request body is not valid JSON
                param_value_too_short:
                  summary: Parameter value too short
                  value:
                    error_id: 32fd0697-2f3f-4308-b25d-c9230f99c589
                    code: 2101
                    message: "'name' must be at least 1 character"
                param_value_too_long:
                  summary: Parameter value too long
                  value:
                    error_id: d8d919b5-d667-4058-9bb3-17b6f7bcd6c8
                    code: 2101
                    message: "'name' must be at most 20 characters"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the label group that you're trying to update cannot be
            found.

            This can happen, for example, when the label group doesn't exist, or
            the provided label group ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: ca73d8a4-a5cb-4f03-9a95-4d53aa1731b0
                    code: 3006
                    message: Label group with id be6c9d90-df25-458a-b559-be61896c94b8 not found
        "409":
          description: >-
            Conflict


            Request conflicts with the current state of the resource.

            Returned, for example, when a label group with the provided name
            already exists.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: 8c08b656-4e57-4768-ab6e-f281da25aa2b
                    code: 3506
                    message: Label group with name 'My Unique Label Group' already exists
        "422":
          description: >-
            Unprocessable entity - label group cannot be updated due to business
            rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and label
            groups are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_update_externally_managed_resource:
                  summary: Labels and label groups are managed by integration, cannot be updated
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Labels are managed by your connected accounting integration and cannot
                      be modified manually
                state_mismatch:
                  summary: Label group is no longer available
                  value:
                    error_id: f1059c4b-4278-45d3-a17f-bd433ab33c15
                    code: 3100
                    message: Invalid request
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Labels
    delete:
      summary: Delete a label group
      operationId: deleteLabelGroup
      description: |-
        Delete a specific label group, based on its ID.

        :::note
        This operation is not supported for [externally managed label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups#externally-managed-settings).
        :::

        Once the label group is deleted, it will not be returned by the API or in the Revolut Business app, and:
        - You will not be able to apply labels from the group to new financial records (e.g. expenses). 
        - Existing records that have not been completed and that contain labels from this group will be marked as invalid, and you'll need to update them to use different labels.
        - Completed records will not be affected by the change. 

        A successful response does not get any content in return.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: group_id
          description: The ID of the label group to delete.
          in: path
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
      responses:
        "204":
          description: Label group deleted
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_format:
                  summary: Incorrect path parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the label group that you're trying to delete cannot be
            found.

            This can happen, for example, when the label group doesn't exist, or
            the provided label group ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: ca73d8a4-a5cb-4f03-9a95-4d53aa1731b0
                    code: 3006
                    message: Label group with id be6c9d90-df25-458a-b559-be61896c94b8 not found
        "422":
          description: >-
            Unprocessable entity - label group cannot be deleted due to business
            rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and label
            groups are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_delete_externally_managed_resource:
                  summary: Labels and label groups are managed by integration, cannot be deleted
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Labels are managed by your connected accounting integration and cannot
                      be modified manually
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Labels
  /label-groups/{group_id}/labels:
    post:
      summary: Create a new label
      operationId: createLabel
      description: |-
        Add a new label to a label group. 

        :::note
        This operation is not supported for [externally managed labels](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups#externally-managed-settings).
        :::

        The labels are used for accounting and can be applied to your financial records, such as expenses.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: group_id
          in: path
          description: The ID of the label group to which to add the new label.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateLabelRequest"
            examples:
              default:
                value:
                  name: Communications
      responses:
        "201":
          description: >-
            Resource created


            On successful creation, the response returns only the ID of the new
            resource (i.e. the label), even if the resource has more properties.

            To get more details, use the ID of the parent label group to [get
            all the labels from the label group](/docs/api/business#get-labels).
          $ref: "#/components/responses/ResourceCreatedResponse"
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                param_required:
                  summary: Required parameter is missing
                  value:
                    error_id: fa12f45e-0ebf-4f7c-88e0-ebb7a1441a18
                    code: 2101
                    message: "'name' is required"
                bad_param_type:
                  summary: Incorrect parameter type
                  value:
                    error_id: 29146977-8042-446f-b362-675e2921d71c
                    code: 2101
                    message: "'name' must be a string"
                invalid_json:
                  summary: Invalid JSON
                  value:
                    error_id: df7b76b2-1313-42f0-8c0b-3673c665f135
                    code: 2101
                    message: Request body is not valid JSON
                param_value_too_short:
                  summary: Parameter value too short
                  value:
                    error_id: 7acc6073-5290-45f8-8956-c79d487ef1e5
                    code: 2101
                    message: "'name' must be at least 1 character"
                param_value_too_long:
                  summary: Parameter value too long
                  value:
                    error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
                    code: 2101
                    message: "'name' must be at most 100 characters"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "409":
          description: >-
            Conflict


            Request conflicts with the current state of the resource.

            Returned, for example, when a label with the provided name already
            exists.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: 8c08b656-4e57-4768-ab6e-f281da25aa2b
                    code: 3506
                    message: Label with name 'My Unique Label' already exists
        "422":
          description: >-
            Unprocessable entity - label cannot be created due to business
            rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and labels
            are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_modify_externally_managed_resource:
                  summary: Labels and label groups are managed by integration, cannot be created
                    manually
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Labels are managed by your connected accounting integration and cannot
                      be modified manually
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Labels
    get:
      summary: Retrieve a list of labels from a label group
      operationId: getLabels
      description: |-
        Get labels from a specific label group based on the provided query criteria.

        :::note
        The API returns a maximum of 500 labels per request. 
        The default page size is 100.
        :::

        The labels are sorted by the `created_at` date in reverse chronological order, and they're **paginated**.
        The page size, that is, the maximum number of labels returned per page is specified by the `limit` parameter. 
        - If the number of results exceeds the page size, the response also returns a cursor for the next page under `next_page_token`.        
          To get the next page of results, make a new request using that `next_page_token` value in `page_token`.
        - If the number of results is smaller than the page size, `next_page_token` is not returned.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: group_id
          in: path
          description: The ID of the label group from which to retrieve labels.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
        - name: limit
          in: query
          required: false
          description: >-
            The page size, that is, the maximum number of labels to return per
            page.


            To get the next page of results, use `page_token`.
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
            examples:
              - 10
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: List of labels
          content:
            application/json:
              schema:
                type: object
                properties:
                  next_page_token:
                    $ref: "#/components/schemas/PageToken"
                  labels:
                    description: List of labels in the specified group
                    type: array
                    items:
                      $ref: "#/components/schemas/LabelResponse"
                required:
                  - labels
              examples:
                results_with_next_page:
                  summary: Results exceed page size (when limit=5) & next page available
                  value:
                    next_page_token: MjAyNi0wMS0wMVQwOToxMzoxNS40MDZaN2RhNTFjZGY0LTZiYjctNDRkNi04OWU1LTc2OWEzZGYxZDc5ZA
                    labels:
                      - id: f0e1d2c3-b4a5-4678-9012-3456789abcde
                        name: Consultants
                        created_at: 2026-03-19T07:15:00.000000Z
                        updated_at: 2026-03-19T08:45:22.111444Z
                      - id: f09ad1ad-a1c0-4c09-b8f8-24b439e72690
                        name: IT & Tech Support
                        created_at: 2026-03-11T10:33:51.121090Z
                        updated_at: 2026-03-11T10:33:51.121090Z
                      - id: a1b2c3d4-e5f6-4a5b-bc6d-7e8f9a0b1c2d
                        name: HR & Facility
                        created_at: 2026-02-01T08:00:00.000000Z
                        updated_at: 2026-02-01T08:00:00.000000Z
                      - id: c3b2a1d0-e9f8-47a6-9d8c-7b6a5f4e3d2c
                        name: Finance & Legal
                        created_at: 2026-01-22T09:10:15.555000Z
                        updated_at: 2026-01-23T11:00:45.123456Z
                      - id: d9e8f7a6-b5c4-4321-8765-43210fedcba9
                        name: Sales & Marketing
                        created_at: 2026-01-20T14:20:00.000000Z
                        updated_at: 2026-01-20T14:20:00.000000Z
                results_single_page:
                  summary: Results fit within page size, no more pages available
                  value:
                    labels:
                      - id: f0e1d2c3-b4a5-4678-9012-3456789abcde
                        name: Consultants
                        created_at: 2026-03-19T07:15:00.000000Z
                        updated_at: 2026-03-19T08:45:22.111444Z
                      - id: f09ad1ad-a1c0-4c09-b8f8-24b439e72690
                        name: IT & Tech Support
                        created_at: 2026-03-11T10:33:51.121090Z
                        updated_at: 2026-03-11T10:33:51.121090Z
                      - id: a1b2c3d4-e5f6-4a5b-bc6d-7e8f9a0b1c2d
                        name: HR & Facility
                        created_at: 2026-02-01T08:00:00.000000Z
                        updated_at: 2026-02-01T08:00:00.000000Z
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_type:
                  summary: Incorrect query parameter type
                  value:
                    error_id: 29146977-8042-446f-b362-af224b14c830
                    code: 2101
                    message: Query parameter 'limit' must be an integer
                param_value_too_low:
                  summary: Query parameter value too low
                  value:
                    error_id: b5a51cd1-9d0f-4074-adae-675e2921d71c
                    code: 2101
                    message: Query parameter 'limit' must be at least 1
                param_value_too_high:
                  summary: Query parameter value too high
                  value:
                    error_id: fa12f45e-4633-4f78-8d40-42dadc380511
                    code: 2101
                    message: Query parameter 'limit' must be at most 500
                multiple_values_not_allowed:
                  summary: Multiple values provided for a single-value query parameter
                  value:
                    error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
                    code: 2101
                    message: Query parameter 'limit' must have a single value
                param_cannot_be_empty:
                  summary: Query parameter provided without a value
                  value:
                    error_id: fa12f45e-0ebf-4f7c-88e0-3673c665f135
                    code: 2101
                    message: Query parameter 'limit' must not be empty
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Labels
  /label-groups/{group_id}/labels/{label_id}:
    patch:
      summary: Update a label
      operationId: updateLabel
      description: |-
        Update the name for a specific label, based on the IDs of the label and its label group.

        :::note
        This operation is not supported for [externally managed labels]/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups(#externally-managed-settings).
        :::

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: group_id
          in: path
          description: The ID of the label group to which the label belongs.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
        - name: label_id
          in: path
          description: The ID of the label to update.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 33279b4f-97ac-4a6f-8932-c6a3b0974060
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateLabelRequest"
            examples:
              default:
                value:
                  name: 20% VAT
      responses:
        "204":
          description: Label updated
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                param_required:
                  summary: Body is empty
                  value:
                    error_id: f1059c4b-4278-45d3-a17f-bd433ab33c15
                    code: 2101
                    message: Request body must not be empty
                bad_param_format:
                  summary: Incorrect parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
                invalid_json:
                  summary: Invalid JSON
                  value:
                    error_id: 36f3cec5-b4b9-431f-9c28-afd3899bc64f
                    code: 2101
                    message: Request body is not valid JSON
                param_value_too_short:
                  summary: Parameter value too short
                  value:
                    error_id: 32fd0697-2f3f-4308-b25d-c9230f99c589
                    code: 2101
                    message: "'name' must be at least 1 character"
                param_value_too_long:
                  summary: Parameter value too long
                  value:
                    error_id: d8d919b5-d667-4058-9bb3-17b6f7bcd6c8
                    code: 2101
                    message: "'name' must be at most 100 characters"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the label that you're trying to update cannot be
            found.

            This can happen, for example, when the label or corresponding label
            group doesn't exist, or the provided ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: ca73d8a4-a5cb-4f03-9a95-4d53aa1731b0
                    code: 3006
                    message: Label with id be6c9d90-df25-458a-b559-be61896c94b8 not found
        "409":
          description: >-
            Conflict


            Request conflicts with the current state of the resource.

            Returned, for example, when a label with the provided name already
            exists.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: 8c08b656-4e57-4768-ab6e-f281da25aa2b
                    code: 3506
                    message: Label with name 'My Unique Label' already exists
        "422":
          description: >-
            Unprocessable entity - label cannot be updated due to business
            rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and labels
            are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_update_externally_managed_resource:
                  summary: Labels and label groups are managed by integration, cannot be updated
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Labels are managed by your connected accounting integration and cannot
                      be modified manually
                state_mismatch:
                  summary: Label is no longer available
                  value:
                    error_id: f1059c4b-4278-45d3-a17f-bd433ab33c15
                    code: 3100
                    message: Invalid request
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Labels
    delete:
      summary: Delete a label
      operationId: deleteLabel
      description: |-
        Delete a specific label, based on the IDs of the label and its label group.

        :::note
        This operation is not supported for [externally managed labels](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups#externally-managed-settings).
        :::

        Once the label is deleted, it will not be returned by the API or in the Revolut Business app, and:
        - You will not be able to apply it to new financial records (e.g. expenses). 
        - Existing records with this label that have not been completed will be marked as invalid, and you'll need to update them to use a different label.
        - Completed records will not be affected by the change. 

        A successful response does not get any content in return.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: group_id
          in: path
          description: The ID of the label group to which the label belongs.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
        - name: label_id
          in: path
          description: The ID of the label to delete.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 33279b4f-97ac-4a6f-8932-c6a3b0974060
      responses:
        "204":
          description: Label deleted
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_format:
                  summary: Incorrect path parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the label that you're trying to delete cannot be
            found.

            This can happen, for example, when the label doesn't exist, or the
            provided label ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: ca73d8a4-a5cb-4f03-9a95-4d53aa1731b0
                    code: 3006
                    message: Label with id be6c9d90-df25-458a-b559-be61896c94b8 not found
        "422":
          description: >-
            Unprocessable entity - label cannot be deleted due to business
            rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and labels
            are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_delete_externally_managed_resource:
                  summary: Labels and label groups are managed by integration, cannot be deleted
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Labels are managed by your connected accounting integration and cannot
                      be modified manually
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Labels
  /payment-drafts:
    get:
      summary: Retrieve a list of payment drafts
      operationId: getPaymentDrafts
      description: |-
        Get the list of payment drafts created with the API that haven't been [sent for processing](/docs/guides/manage-accounts/transfers/payment-drafts#send-drafts-for-processing).

        :::note
        Payment drafts created through the [Revolut Business app](https://business.revolut.com/) are not retrieved by the API.
        :::

        The response lists the drafts with their details, such as the number of payments included in the draft, but not the payment details.

        For more information, see the guides: [Payment drafts](/docs/guides/manage-accounts/transfers/payment-drafts).
      security:
        - AccessToken:
            - READ
      responses:
        "200":
          description: List of payment drafts
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentDraftsResponse"
              examples:
                default:
                  value:
                    payment_orders:
                      - id: e7e54cb2-861a-aaaa-80e9-3e6600f3db10
                        scheduled_for: 2026-06-24
                        title: Draft Payment through API
                        payments_count: 1
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Payment drafts
    post:
      summary: Create a payment draft
      operationId: createPaymentDraft
      description: |-
        Create a payment draft.

        When you create a payment draft, it stays a draft until you [send it for processing as payment](/docs/guides/manage-accounts/transfers/payment-drafts#send-drafts-for-processing) in the [Revolut Business app](https://business.revolut.com/).

        Until then, you can [delete](/docs/api/business#delete-payment-draft) the draft if you no longer wish to proceed with it.

        :::note
        If you or the payment you're making is subject to an [approval process](https://help.revolut.com/business/help/managing-my-business/users-and-employees/how-can-i-set-payment-approval-rules/), when you send the draft for processing, the payment goes into the `Pending review` state.
        Before it can be processed, the business owner, administrator, or another team member designated as an approver must approve it in the Revolut Business app.
        :::

        For more information on use cases and other details, see the guides: [Payment drafts](/docs/guides/manage-accounts/transfers/payment-drafts).
      security:
        - AccessToken:
            - READ
            - WRITE
      tags:
        - Payment drafts
      requestBody:
        description: The payment draft information
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreatePaymentDraftRequest"
            examples:
              simple_draft:
                summary: Payment draft for a simple payment
                value:
                  title: Payment Draft Title
                  payments:
                    - account_id: 2e6de1bf-97ad-478d-aad1-9d7a3cdf70cb
                      receiver:
                        counterparty_id: a15bcac4-dd42-45ed-a828-6806ccc8bb7e
                        account_id: 2bf609f4-9825-4401-b6f7-960c61f8bee0
                      amount: 10
                      currency: GBP
                      reference: "Payment #123"
              draft_with_charge_bearer:
                summary: Payment draft for a single payment with charge bearer specified
                value:
                  title: Payment Draft Title
                  payments:
                    - account_id: 21cb9b68-0017-45cf-93f2-1a8954bcb120
                      receiver:
                        counterparty_id: d4d52566-280b-47df-b34f-0da6da484c43
                      amount: 100
                      currency: USD
                      reference: "Transaction #456"
                      charge_bearer: debtor
              bulk_payment_draft:
                summary: Payment draft for a bulk payment
                value:
                  title: Payment Draft Title
                  payments:
                    - account_id: 2e6de1bf-97ad-478d-aad1-9d7a3cdf70cb
                      receiver:
                        counterparty_id: a15bcac4-dd42-45ed-a828-6806ccc8bb7e
                        account_id: 2bf609f4-9825-4401-b6f7-960c61f8bee0
                      amount: 10
                      currency: GBP
                      reference: "Payment #123"
                    - account_id: 2e6de1bf-97ad-478d-aad1-9d7a3cdf70cb
                      receiver:
                        counterparty_id: f3107ecc-d368-48f3-8120-92b7d612f949
                      amount: 120
                      currency: GBP
                      reference: "Transaction #654"
                    - account_id: 2e6de1bf-97ad-478d-aad1-9d7a3cdf70cb
                      receiver:
                        counterparty_id: d4d52566-280b-47df-b34f-0da6da484c43
                      amount: 100
                      currency: EUR
                      reference: "Invoice #789"
              scheduled_payment_draft:
                summary: Payment draft for a scheduled payment
                value:
                  title: Payment Draft Title
                  schedule_for: 2026-06-24
                  payments:
                    - account_id: 2e6de1bf-97ad-478d-aad1-9d7a3cdf70cb
                      receiver:
                        counterparty_id: a15bcac4-dd42-45ed-a828-6806ccc8bb7e
                        account_id: 2bf609f4-9825-4401-b6f7-960c61f8bee0
                      amount: 10
                      currency: GBP
                      reference: "Payment #123"
              scheduled_bulk_payment_draft:
                summary: Payment draft for a scheduled bulk payment
                value:
                  title: Payment Draft Title
                  schedule_for: 2026-06-24
                  payments:
                    - account_id: 2e6de1bf-97ad-478d-aad1-9d7a3cdf70cb
                      receiver:
                        counterparty_id: a15bcac4-dd42-45ed-a828-6806ccc8bb7e
                        account_id: 2bf609f4-9825-4401-b6f7-960c61f8bee0
                      amount: 10
                      currency: GBP
                      reference: "Payment #123"
                    - account_id: 2e6de1bf-97ad-478d-aad1-9d7a3cdf70cb
                      receiver:
                        counterparty_id: d4d52566-280b-47df-b34f-0da6da484c43
                      amount: 100
                      currency: EUR
                      reference: "Invoice #789"
      responses:
        "201":
          description: The ID of the payment draft that was created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/CreatePaymentDraftResponse"
              examples:
                default:
                  value:
                    id: e7e54cb2-861a-aaaa-80e9-3e6600f3db10
        "204":
          description: No payments provided
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted, or when the request contains incompatible parameters.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                charge_bearer_bulk_payments:
                  summary: Charge bearer cannot be used with bulk payments
                  value:
                    code: 2101
                    message: Charge bearer is not supported for bulk payments.
                charge_bearer_not_eligible:
                  summary: Charge bearer not supported for the given recipient
                  value:
                    code: 3287
                    message: Recipient not eligible for SWIFT SHA/OUR
                currency_should_match:
                  summary: Payment currency must match the recipient account currency
                  value:
                    code: 3452
                    message: Payment draft currency should match with recipient currency [USD] but
                      is [EUR]
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /payment-drafts/{payment_draft_id}:
    get:
      summary: Retrieve a payment draft
      operationId: getPaymentDraft
      description: >-
        Get the information about a specific payment draft by ID.


        The response lists the details of the payment(s) included in the draft,
        as well as the draft details.


        For more information, see the guides: [Payment
        drafts](/docs/guides/manage-accounts/transfers/payment-drafts).
      security:
        - AccessToken:
            - READ
      tags:
        - Payment drafts
      parameters:
        - name: payment_draft_id
          in: path
          required: true
          description: The ID of the payment draft to retrieve.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: The information about a specific payment draft
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PaymentDraftResponse"
              examples:
                default:
                  value:
                    title: Draft Payment through API
                    scheduled_for: 2026-06-24
                    payments:
                      - id: 67b38771-3db0-4cf0-bdc0-aaaa1284ab81
                        amount:
                          amount: 123
                          currency: GBP
                        reference: Draft Payment through API
                        account_id: 05018b0d-e67c-4fec-aaaa-415e9da9432c
                        receiver:
                          counterparty_id: c71af44d-aaaa-4e1a-84bb-17589c81f022
                        state: CREATED
                        current_charge_options:
                          from:
                            amount: 123
                            currency: GBP
                          to:
                            amount: 123
                            currency: GBP
                          rate: "1.0000"
                          fee:
                            amount: 0
                            currency: GBP
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    delete:
      summary: Delete a payment draft
      operationId: deletePaymentDraft
      description: |-
        Delete a payment draft with the given ID.

        You can delete a payment draft only if it hasn't been [sent for processing](/docs/guides/manage-accounts/transfers/payment-drafts#send-drafts-for-processing).

        For more information, see the guides: [Payment drafts](/docs/guides/manage-accounts/transfers/payment-drafts).
      security:
        - AccessToken:
            - READ
            - WRITE
      tags:
        - Payment drafts
      parameters:
        - name: payment_draft_id
          in: path
          required: true
          description: The ID of the payment draft to delete.
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: The payment draft was successfully deleted
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /payout-links:
    post:
      summary: Create a payout link
      operationId: createPayoutLink
      description: >-
        Create a payout link to send money even when you don't have the full
        banking details of the counterparty.  

        After you have created the link, send it to the recipient so that they
        can claim the payment.


        :::note

        This feature is available in the UK, the EEA, AU, and SG.

        :::


        For more information, see the guides: [Send money via payout
        link](/docs/guides/manage-accounts/transfers/payout-links).
      security:
        - AccessToken:
            - PAY
            - WRITE
      requestBody:
        description: Payout link to create
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreatePayoutLinkRequest"
      responses:
        "201":
          description: Created payout link details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PayoutLinkInitialProps"
              examples:
                default:
                  value:
                    $ref: "#/components/examples/payoutLinkActive"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                required_param_missing:
                  summary: Required parameter missing
                  value:
                    message: Required 'account_id' is missing
                    code: 3009
                incorrect_param_format:
                  summary: Incorrect parameter format
                  value:
                    message: Value '123' is not in correct format for field 'account_id'
                    code: 3000
                ivalid_json:
                  summary: Invalid JSON
                  value:
                    message: "Cannot parse request: invalid JSON"
                    code: 3000
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: This action is forbidden
                    code: 9002
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Payout links
    get:
      summary: Retrieve a list of payout links
      description: >-
        Get all the links that you have created, or use the query parameters to
        filter the results.


        The links are sorted by the `created_at` date in reverse chronological
        order.


        The returned links are **paginated**. 

        The maximum number of payout links returned per page is specified by the
        `limit` parameter.

        To get to the next page, make a new request and use the `created_at`
        date of the last payout link returned in the previous response.


        :::note

        This feature is available in the UK, the EEA, AU, and SG.

        :::        


        For more information, see the guides: [Send money via payout
        link](/docs/guides/manage-accounts/transfers/payout-links).
      operationId: getPayoutLinks
      security:
        - AccessToken:
            - READ
      parameters:
        - name: state
          in: query
          description: |-
            Retrieves links in the specified state(s). Possible states are:
            - `created`: The payout link has been created, but the amount has not yet been [blocked](/docs/guides/manage-accounts/transfers/payout-links#sender-link-generation).
            - `failed`: The payout link couldn't be generated due to a failure during transaction booking.
            - `awaiting`: The payout link is awaiting approval.
            - `active`: The payout link can be redeemed.
            - `expired`: The payout link cannot be redeemed because it wasn't claimed before its expiry date.
            - `cancelled`: The payout link cannot be redeemed because it was cancelled.
            - `processing`: The payout link has been redeemed and is being processed.
            - `processed`: The payout link has been redeemed and the money has been transferred to the recipient.

            Use for filtering to retrieve only links in specified states.
            To specify multiple values, follow this pattern: `state={VALUE1}&state={VALUE2}`.
          schema:
            type: array
            items:
              $ref: "#/components/schemas/PayoutLinkState"
          explode: true
          uniqueItems: true
        - name: created_before
          in: query
          description: >-
            Retrieves links with `created_at` < `created_before`.

            The default value is the current date and time at which you are
            calling the endpoint.


            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.
          schema:
            type: string
            format: date-time
            default: the date-time at which the request is made
        - name: limit
          in: query
          description: >-
            The maximum number of links returned per page.


            To get to the next page, make a new request and use the `created_at`
            date of the last payout link returned in the previous response as
            the value for `created_before`.
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 100
      responses:
        "200":
          description: List of your payout links
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PayoutLinks"
              examples:
                default:
                  value:
                    $ref: "#/components/examples/payoutLinks"
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                forbidden:
                  summary: Action forbidden
                  value:
                    message: This action is forbidden
                    code: 9002
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Payout links
  /payout-links/{payout_link_id}:
    get:
      summary: Retrieve a payout link
      description: >-
        Get the information about a specific link by its ID.


        :::note

        This feature is available in the UK, the EEA, AU, and SG.

        :::


        For more information, see the guides: [Send money via payout
        link](/docs/guides/manage-accounts/transfers/payout-links).
      operationId: getPayoutLink
      security:
        - AccessToken:
            - READ
      parameters:
        - name: payout_link_id
          in: path
          required: true
          description: The ID of the link to retrieve.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: The information about a specific link
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/PayoutLink"
              examples:
                active_payout_link:
                  summary: Active payout link
                  value:
                    $ref: "#/components/examples/payoutLinkActive"
                processed_payout_link:
                  summary: Processed payout link
                  value:
                    $ref: "#/components/examples/payoutLinkProcessed"
                cancelled_payout_link:
                  summary: Cancelled payout link
                  value:
                    $ref: "#/components/examples/payoutLinkCancelled"
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                forbidden:
                  summary: Action forbidden
                  value:
                    message: This action is forbidden
                    code: 9002
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Resource not found
                    code: 3006
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Payout links
  /payout-links/{payout_link_id}/cancel:
    post:
      summary: Cancel a payout link
      operationId: cancelPayoutLink
      description: >-
        Cancel a payout link. You can only cancel a link that hasn't been
        claimed yet. 

        A successful request does not get any content in response.


        :::note

        This feature is available in the UK, the EEA, AU, and SG.

        :::


        For more information, see the guides: [Send money via payout
        link](/docs/guides/manage-accounts/transfers/payout-links).
      security:
        - AccessToken:
            - READ
            - WRITE
      parameters:
        - name: payout_link_id
          in: path
          required: true
          description: The ID of the link to cancel.
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: Payout link has been cancelled
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                forbidden:
                  summary: Action forbidden
                  value:
                    message: This action is forbidden
                    code: 9002
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Payout links
  /sandbox/transactions/{id}/{action}:
    servers:
      - url: https://sandbox-b2b.revolut.com/api/1.0
        description: Sandbox server (uses test data)
    post:
      summary: Simulate a transfer state update (Sandbox only)
      operationId: simulateTransferStateUpdate
      description: |-
        Simulate a transfer state change in the Sandbox environment. 

        For example, after you make a transfer in Sandbox, you can change its state to `completed`. The resulting state is final and cannot be changed.

        For more information, see the guides: [Test your flows with simulations (Sandbox only)](/docs/guides/manage-accounts/api-usage-and-testing/test-flows-with-simulations).
      parameters:
        - name: id
          in: path
          schema:
            type: string
            format: uuid
          description: The ID of the transfer whose state you want to update.
          required: true
        - name: action
          in: path
          schema:
            type: string
            enum:
              - complete
              - revert
              - decline
              - fail
            description: >-
              Indicates the transaction state update. Possible values:

              - `complete` - Transaction is successfully processed.

              - `revert` - Transaction is reverted by the system or company, but
              not the user. This can happen for a variety of reasons, for
              example, the receiver being inaccessible.

              - `decline` - Transaction is declined to the user for a good
              reason, such as insufficient account balance, wrong receiver
              information, etc.

              - `fail` - Transaction fails during initiation or completion. This
              can happen for a variety of reasons, for example, invalid API
              calls, blocked payments, etc.
          required: true
      security:
        - AccessToken:
            - WRITE
      responses:
        "200":
          description: Information about the updated transfer state
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    description: The ID of the transfer whose state was updated.
                  state:
                    type: string
                    enum:
                      - completed
                      - reverted
                      - declined
                      - failed
                    description: >-
                      Indicates the simulated transaction state. Possible
                      values:

                      - `completed` - Transaction was successfully processed.

                      - `reverted` - Transaction was reverted by the system or
                      company, but not the user. This can happen for a variety
                      of reasons, for example, the receiver being inaccessible.

                      - `declined` - Transaction was declined to the user for a
                      good reason, such as insufficient account balance, wrong
                      receiver information, etc.

                      - `failed` - Transaction failed during initiation or
                      completion. This can happen for a variety of reasons, for
                      example, invalid API calls, blocked payments, etc.
                  created_at:
                    type: string
                    format: date-time
                    description: The date and time the transfer was created in [ISO
                      8601](https://en.wikipedia.org/wiki/ISO_8601) format.
                  completed_at:
                    type: string
                    format: date-time
                    description: The date and time the transfer was completed in [ISO
                      8601](https://en.wikipedia.org/wiki/ISO_8601) format.
                required:
                  - id
                  - state
                  - created_at
              examples:
                default:
                  value:
                    id: a6ea39d7-62c9-481c-8ba6-8a887a44c486
                    state: completed
                    created_at: 2023-01-23T08:39:35.811005Z
                    completed_at: 2023-01-23T08:39:35.811005Z
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Simulations
  /sandbox/topup:
    servers:
      - url: https://sandbox-b2b.revolut.com/api/1.0
        description: Sandbox server (uses test data)
    post:
      summary: Simulate an account top-up (Sandbox only)
      operationId: simulateTopUp
      description: |-
        Simulate a top-up of your account in the Sandbox environment. 

        This is useful during testing, when you run out of money in your test account and need to add more.

        For more information, see the guides: [Test your flows with simulations (Sandbox only)](/docs/guides/manage-accounts/api-usage-and-testing/test-flows-with-simulations).
      requestBody:
        description: Top-up details
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                account_id:
                  type: string
                  format: uuid
                  description: The ID of the account that you want to top up.
                amount:
                  type: number
                  format: double
                  description: The amount with which you want to top up the account.
                  maximum: 10000
                currency:
                  $ref: "#/components/schemas/Currency"
                  description: The currency of the account that you want to top up.
                reference:
                  type: string
                  description: A short description for your top up.
                  default: Test Top-up
                state:
                  type: string
                  description: The state to which you want to set the top-up transaction.
                  enum:
                    - pending
                    - completed
                    - reverted
                    - failed
                  default: completed
              required:
                - account_id
                - amount
                - currency
            examples:
              default:
                value:
                  account_id: e042f1fe-f721-49cc-af82-db7a6c46944f
                  amount: 100
                  currency: GBP
                  reference: Test Top-up
                  state: completed
      security:
        - AccessToken:
            - WRITE
      responses:
        "200":
          description: Information about the top-up state
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    format: uuid
                    description: The ID of the account that was topped up.
                  state:
                    type: string
                    description: The state of the top-up transaction.
                    enum:
                      - pending
                      - completed
                      - reverted
                      - failed
                  created_at:
                    type: string
                    format: date-time
                    description: The date and time the transaction was created in [ISO
                      8601](https://en.wikipedia.org/wiki/ISO_8601) format.
                  completed_at:
                    type: string
                    format: date-time
                    description: The date and time the transaction was completed in [ISO
                      8601](https://en.wikipedia.org/wiki/ISO_8601) format.
                required:
                  - id
                  - state
                  - created_at
              examples:
                default:
                  value:
                    id: 330953b8-b089-4cfd-9f03-e88173d64248
                    state: completed
                    created_at: 2023-01-23T08:39:35.811005Z
                    completed_at: 2023-01-23T08:39:35.811005Z
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Simulations
  /tax-rates:
    post:
      summary: Create a new tax rate
      operationId: createTaxRate
      description: |-
        Add a new tax rate to the list of tax rates that can be applied to your financial records, such as expenses.

        :::note
        This operation is not supported for [externally managed tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates#externally-managed-settings).
        :::

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates).
      security:
        - AccessToken:
            - WRITE
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateTaxRateRequest"
            examples:
              default:
                value:
                  name: 20% (VAT on Expenses)
                  percentage: 20
      responses:
        "201":
          description: >-
            Resource created


            On successful creation, the response returns only the ID of the new
            resource (i.e. the tax rate), even if the resource has more
            properties.

            To get all the details of the tax rate, use the returned resource ID
            with a [GET request](/docs/api/business#get-tax-rate).
          $ref: "#/components/responses/ResourceCreatedResponse"
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                param_required:
                  summary: Required parameter is missing
                  value:
                    error_id: fa12f45e-0ebf-4f7c-88e0-ebb7a1441a18
                    code: 2101
                    message: "'percentage' is required"
                bad_param_type:
                  summary: Incorrect parameter type
                  value:
                    error_id: 29146977-8042-446f-b362-675e2921d71c
                    code: 2101
                    message: "'percentage' must be a number"
                param_value_too_low:
                  summary: Parameter value too low
                  value:
                    error_id: b5a51cd1-9d0f-4074-adae-af224b14c830
                    code: 2101
                    message: "'percentage' must be at least 0"
                param_value_too_high:
                  summary: Parameter value too high
                  value:
                    error_id: 89ceb92e-4633-4f78-8d40-42dadc380511
                    code: 2101
                    message: "'percentage' must be at most 100"
                invalid_json:
                  summary: Invalid JSON
                  value:
                    error_id: df7b76b2-1313-42f0-8c0b-3673c665f135
                    code: 2101
                    message: Request body is not valid JSON
                param_value_too_short:
                  summary: Parameter value too short
                  value:
                    error_id: 7acc6073-5290-45f8-8956-c79d487ef1e5
                    code: 2101
                    message: "'name' must be at least 1 character"
                param_value_too_long:
                  summary: Parameter value too long
                  value:
                    error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
                    code: 2101
                    message: "'name' must be at most 20 characters"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "409":
          description: >-
            Conflict


            Request conflicts with the current state of the resource.

            Returned, for example, when a tax rate with the provided name
            already exists.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: 8c08b656-4e57-4768-ab6e-f281da25aa2b
                    code: 3505
                    message: Tax rate with name My Unique Rate already exists
        "422":
          description: >-
            Unprocessable entity - tax rate cannot be created due to business
            rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and tax
            rates are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_modify_externally_managed_resource:
                  summary: Tax rates are managed by integration, cannot be created manually
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Tax rates are managed by your connected accounting integration and
                      cannot be modified manually
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Tax rates
    get:
      summary: Retrieve a list of tax rates
      operationId: getTaxRates
      description: |-
        Get available tax rates based on the provided query criteria.

        :::note
        The API returns a maximum of 500 tax rates per request. 
        The default page size is 100.
        :::

        The tax rates are sorted by the `created_at` date in reverse chronological order, and they're **paginated**.
        The page size, that is, the maximum number of tax rates returned per page is specified by the `limit` parameter. 
        - If the number of results exceeds the page size, the response also returns a cursor for the next page under `next_page_token`.        
          To get the next page of results, make a new request using that `next_page_token` value in `page_token`.
        - If the number of results is smaller than the page size, `next_page_token` is not returned.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: limit
          in: query
          required: false
          description: >-
            The page size, that is, the maximum number of tax rates to return
            per page.


            To get the next page of results, use `page_token`.
          schema:
            type: integer
            minimum: 1
            maximum: 500
            default: 100
            examples:
              - 10
        - $ref: "#/components/parameters/PageToken"
      responses:
        "200":
          description: List of tax rates
          content:
            application/json:
              schema:
                type: object
                properties:
                  next_page_token:
                    $ref: "#/components/schemas/PageToken"
                  tax_rates:
                    type: array
                    items:
                      $ref: "#/components/schemas/TaxRateResponse"
                required:
                  - tax_rates
              examples:
                results_with_next_page:
                  summary: Results exceed page size (when limit=5) & next page available
                  value:
                    next_page_token: MjAyNi0wMS0wMVQwOToxMzoxNS40MDZaN2RhNTFjZGY0LTZiYjctNDRkNi04OWU1LTc2OWEzZGYxZDc5ZA
                    tax_rates:
                      - id: f0e1d2c3-b4a5-4678-9012-3456789abcde
                        name: Import Duty Surcharge
                        created_at: 2026-03-19T07:15:00.000000Z
                        updated_at: 2026-03-19T08:45:22.111444Z
                        percentage: 12.75
                      - id: f09ad1ad3-a1c0-4c09-b8f8-24b439e72690
                        name: 20% (VAT on Expenses)
                        created_at: 2026-03-11T10:33:51.121090Z
                        updated_at: 2026-03-11T10:33:51.121090Z
                        percentage: 20
                      - id: a1b2c3d4-e5f6-4a5b-bc6d-7e8f9a0b1c2d
                        name: Reduced Rate Food & Beverage
                        created_at: 2026-02-01T08:00:00.000000Z
                        updated_at: 2026-02-01T08:00:00.000000Z
                        percentage: 5.5
                      - id: 5f4e3d2c-1b0a-4987-8765-43210fedcba9
                        name: Standard Output Tax (High)
                        created_at: 2026-01-15T10:20:30.123456Z
                        updated_at: 2026-03-10T14:45:12.987654Z
                        percentage: 20
                      - id: 98765432-abcd-ef01-2345-67890abcdef0
                        name: Exempt Financial Services
                        created_at: 2025-12-20T11:11:11.000Z
                        updated_at: 2026-03-15T09:30:00.555222Z
                        percentage: 0
                results_single_page:
                  summary: Results fit within page size, no more pages available
                  value:
                    tax_rates:
                      - id: 7e6d5c4b-3a2b-1c0d-9e8f-7a6b5c4d3e2f
                        name: Luxury Goods Tax
                        created_at: 2026-03-23T14:30:00.000000Z
                        updated_at: 2026-03-23T14:30:00.000000Z
                        percentage: 25
                      - id: 8a7b6c5d-4e3f-2g1h-0i9j-8k7l6m5n4o3p
                        name: Environmental Levy
                        created_at: 2026-03-22T09:15:22.000000Z
                        updated_at: 2026-03-22T10:00:00.000000Z
                        percentage: 3.5
                      - id: 1f2e3d4c-5b6a-7988-7766-554433221100
                        name: Digital Services Tax
                        created_at: 2026-03-21T11:45:00.000000Z
                        updated_at: 2026-03-21T11:45:00.000000Z
                        percentage: 7
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_type:
                  summary: Incorrect query parameter type
                  value:
                    error_id: 29146977-8042-446f-b362-af224b14c830
                    code: 2101
                    message: Query parameter 'limit' must be an integer
                param_value_too_low:
                  summary: Query parameter value too low
                  value:
                    error_id: b5a51cd1-9d0f-4074-adae-675e2921d71c
                    code: 2101
                    message: Query parameter 'limit' must be at least 1
                param_value_too_high:
                  summary: Query parameter value too high
                  value:
                    error_id: fa12f45e-4633-4f78-8d40-42dadc380511
                    code: 2101
                    message: Query parameter 'limit' must be at most 500
                multiple_values_not_allowed:
                  summary: Multiple values provided for a single-value query parameter
                  value:
                    error_id: c4da2d3c-1cd8-4bbc-ac43-233575e471b7
                    code: 2101
                    message: Query parameter 'limit' must have a single value
                param_cannot_be_empty:
                  summary: Query parameter provided without a value
                  value:
                    error_id: fa12f45e-0ebf-4f7c-88e0-3673c665f135
                    code: 2101
                    message: Query parameter 'limit' must not be empty
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Tax rates
  /tax-rates/{tax_rate_id}:
    get:
      summary: Retrieve tax rate details
      operationId: getTaxRate
      description: |-
        Get the details of a specific tax rate based on the tax rate ID.

        The details include the tax rate name and percentage, as well as when the tax rate was added to your settings, and when it was last updated.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: tax_rate_id
          in: path
          description: The ID of the tax rate to retrieve.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
      responses:
        "200":
          description: Tax rate details
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TaxRateResponse"
              examples:
                default:
                  value:
                    id: 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
                    name: 20% (VAT on Expenses)
                    created_at: 2026-03-11T10:33:51.121090Z
                    updated_at: 2026-03-11T10:33:51.121090Z
                    percentage: 20
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_format:
                  summary: Incorrect path parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the tax rate that you're trying to retrieve cannot be
            found.

            This can happen, for example, when the tax rate has been deleted, or
            the provided tax rate ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: cbb15721-5f51-4588-a959-7494bb7ba827
                    code: 3006
                    message: Tax rate with id 8945879d-6854-4e10-88d6-ce92c5f010ac not found
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Tax rates
    patch:
      summary: Update tax rate settings
      operationId: updateTaxRate
      description: |-
        Update settings for a specific tax rate, based on its ID.

        :::note
        This operation is not supported for [externally managed tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates#externally-managed-settings).
        :::

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: tax_rate_id
          in: path
          description: The ID of the tax rate to update.
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateTaxRateRequest"
            examples:
              default:
                value:
                  name: 20% VAT
      responses:
        "204":
          description: Tax rate updated
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                param_required:
                  summary: Body is empty
                  value:
                    error_id: f1059c4b-4278-45d3-a17f-bd433ab33c15
                    code: 2101
                    message: Request body must not be empty
                bad_param_format:
                  summary: Incorrect parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
                invalid_json:
                  summary: Invalid JSON
                  value:
                    error_id: 36f3cec5-b4b9-431f-9c28-afd3899bc64f
                    code: 2101
                    message: Request body is not valid JSON
                param_value_too_short:
                  summary: Parameter value too short
                  value:
                    error_id: 32fd0697-2f3f-4308-b25d-c9230f99c589
                    code: 2101
                    message: "'name' must be at least 1 character"
                param_value_too_long:
                  summary: Parameter value too long
                  value:
                    error_id: d8d919b5-d667-4058-9bb3-17b6f7bcd6c8
                    code: 2101
                    message: "'name' must be at most 20 characters"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the tax rate that you're trying to update cannot be
            found.

            This can happen, for example, when the tax rate doesn't exist, or
            the provided tax rate ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: ca73d8a4-a5cb-4f03-9a95-4d53aa1731b0
                    code: 3006
                    message: Tax rate with id be6c9d90-df25-458a-b559-be61896c94b8 not found
        "409":
          description: >-
            Conflict


            Request conflicts with the current state of the resource.

            Returned, for example, when a tax rate with the provided name
            already exists.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: 8c08b656-4e57-4768-ab6e-f281da25aa2b
                    code: 3505
                    message: Tax rate with name My Unique Rate already exists
        "422":
          description: >-
            Unprocessable entity - tax rate cannot be updated due to business
            rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and tax
            rates are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_update_externally_managed_resource:
                  summary: Tax rate managed by integration, cannot be updated
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Tax rates are managed by your connected accounting integration and
                      cannot be modified manually
                state_mismatch:
                  summary: Tax rate is no longer available
                  value:
                    error_id: f1059c4b-4278-45d3-a17f-bd433ab33c15
                    code: 3100
                    message: Invalid request
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Tax rates
    delete:
      summary: Delete a tax rate
      operationId: deleteTaxRate
      description: |-
        Delete a specific tax rate, based on its ID.

        :::note
        This operation is not supported for [externally managed tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates#externally-managed-settings).
        :::

        Once the tax rate is deleted, it will not be returned by the API or in the Revolut Business app, and:
        - You will not be able to apply it to new financial records (e.g. expenses). 
        - Existing records with this tax rate that have not been completed will be marked as invalid, and you'll need to update them to use a different tax rate.
        - Completed records will not be affected by the change. 

        A successful response does not get any content in return.

        For more details, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: tax_rate_id
          description: The ID of the tax rate to delete.
          in: path
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 09ad1ad3-a1c0-4c09-b8f8-24b439e72690
      responses:
        "204":
          description: Tax rate deleted
        "400":
          description: >-
            Bad Request


            Returned, for example, when a required parameter is missing or
            malformatted.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                bad_param_format:
                  summary: Incorrect path parameter format
                  value:
                    error_id: f70973ea-c939-41f8-a106-1656ab5fae2f
                    code: 2101
                    message: Path parameter 'id' must be a valid UUID
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          description: >-
            Not found


            Returned when the tax rate that you're trying to delete cannot be
            found.

            This can happen, for example, when the tax rate doesn't exist, or
            the provided tax rate ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                default:
                  value:
                    error_id: ca73d8a4-a5cb-4f03-9a95-4d53aa1731b0
                    code: 3006
                    message: Tax rate with id be6c9d90-df25-458a-b559-be61896c94b8 not found
        "422":
          description: >-
            Unprocessable entity - tax rate cannot be deleted due to business
            rules 


            Returned, for example, when you have an accounting software
            integration connected to your Revolut Business account, and tax
            rates are managed by that integration.


            The request is well-formed and the server understands it, but the
            operation cannot be performed because the resource state doesn't
            permit it.

            Retrying the same request won't succeed.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
              examples:
                cannot_delete_externally_managed_resource:
                  summary: Tax rate managed by integration, cannot be deleted
                  value:
                    error_id: e950c41e-cfd6-4e04-bd79-2d57a3951774
                    code: 3514
                    message: Tax rates are managed by your connected accounting integration and
                      cannot be modified manually
        "429":
          $ref: "#/components/responses/TooManyRequests"
        "500":
          $ref: "#/components/responses/InternalServerError"
        "503":
          $ref: "#/components/responses/ServiceUnavailable"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorWithId"
      tags:
        - Accounting
        - Tax rates
  /team-members:
    get:
      summary: Retrieve a list of team members
      operationId: getTeamMembers
      description: >-
        Get information about all the team members of your business.


        The results are paginated and sorted by the `created_at` date in reverse
        chronological order.


        For more information, see the guides: [Manage team
        members](/docs/guides/manage-accounts/teams/manage-team-members).
      security:
        - AccessToken:
            - READ
      tags:
        - Team members
      parameters:
        - in: query
          name: created_before
          schema:
            type: string
            format: date-time
            default: the date-time at which the request is made
          description: >-
            Retrieves team members with `created_at` < `created_before`.

            The default value is the current date and time at which you are
            calling the endpoint.


            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.
        - name: limit
          in: query
          required: false
          description: >-
            The maximum number of team members returned per page.


            To get to the next page, make a new request and use the `created_at`
            date of the last team member returned in the previous response as
            the value for `created_before`.
          schema:
            type: number
            format: integer
            default: 100
            maximum: 1000
            minimum: 1
      responses:
        "200":
          description: Information about team members of the business
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/TeamMember"
              examples:
                default:
                  value:
                    - email: john.doe@example.com
                      id: 76969b71-a123-42dc-b874-a34688d7bba4
                      role_id: owner
                      state: active
                      first_name: John
                      last_name: Doe
                      created_at: 2022-09-07T09:19:31.592368Z
                      updated_at: 2022-09-07T09:21:24.346670Z
                    - email: john.smith@example.com
                      id: 168922e1-594f-4ca0-93b2-56b742f3936b
                      role_id: 024abb3d-06da-4701-9254-dfcc3da38385
                      state: active
                      created_at: 2022-09-07T09:19:32.592368Z
                      updated_at: 2022-09-07T09:21:25.346670Z
        "400":
          description: Bad pagination parameters
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 2101
                    message: "Parameter limit must be a valid integer in range: [1, 1000]."
        "401":
          description: >-
            Unauthorized


            Returned when the request was not fulfilled because authentication
            has failed or has not been provided
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 401
                    message: The request should be authorized.
        "403":
          description: >-
            Action forbidden


            Returned, for example, when you don't have permissions necessary to
            retrieve team members
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 9002
                    message: This action is forbidden
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
    post:
      summary: Invite a new member to your business
      operationId: inviteTeamMember
      description: >-
        Invite a new member to your business account.


        When you invite a new team member to your business account, an
        invitation is sent to their email address that you provided in this
        request.

        To join your business account, the new team member has to accept this
        invitation.


        For more information, see the guides: [Manage team
        members](/docs/guides/manage-accounts/teams/manage-team-members).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Team members
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  description: The email address of the invited member.
                  format: email
                role_id:
                  type: string
                  description: The ID of the [role](/docs/api/business#get-roles) to assign to the
                    new member.
              required:
                - email
                - role_id
            examples:
              default:
                value:
                  email: john.smith@example.com
                  role_id: 0098ac28-b92f-435e-a3a2-2829d3918dfb
      responses:
        "201":
          description: Information about the new member
          content:
            application/json:
              schema:
                type: object
                properties:
                  email:
                    type: string
                    description: The email address of the invited member.
                    format: email
                  id:
                    type: string
                    description: The ID of the invited member.
                  role_id:
                    type: string
                    description: The ID of the [role](/docs/api/business#get-roles) assigned to the
                      member.
                  created_at:
                    type: string
                    format: date-time
                    description: The date and time when the member was created.
                  updated_at:
                    type: string
                    format: date-time
                    description: The date and time when the member was last updated.
                required:
                  - email
                  - id
                  - role_id
                  - created_at
                  - updated_at
              examples:
                default:
                  value:
                    email: john.smith@example.com
                    id: 76969b71-a123-42dc-b874-a34688d7bba4
                    role_id: 0098ac28-b92f-435e-a3a2-2829d3918dfb
                    created_at: 2022-09-07T09:19:31.592368Z
                    updated_at: 2022-09-07T09:21:24.346670Z
        "400":
          description: Bad request, for example, invalid role ID or invalid email address
            provided
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                invalid_role_id_uuid:
                  summary: Invalid role ID (UUID)
                  value:
                    code: 3053
                    message: Business role 0098ac28-b92f-435e-a3a2-2829d3918dfb not found
                invalid_role_id_default:
                  summary: Invalid role ID (non-UUID)
                  value:
                    code: 3402
                    message: "Invalid role: nonexistent_role_id"
                invalid_email:
                  summary: Invalid email address
                  value:
                    code: 3000
                    message: "Invalid email address: (masked) ****.*******.*******.***"
        "401":
          description: >-
            Unauthorized


            Returned when the request was not fulfilled because authentication
            has failed or has not been provided
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 401
                    message: The request should be authorized.
        "403":
          description: >-
            Action forbidden


            Returned, for example, when you don't have permissions necessary to
            invite team members
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 9002
                    message: This action is forbidden
        "422":
          description: Team member with the given email cannot be invited
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                user_already_invited:
                  summary: Team member already invited
                  value:
                    code: 33005
                    message: Team member with given email has already been invited.
                user_is_member_of_another_business:
                  summary: Team member cannot be invited
                  value:
                    code: 33008
                    message: Team member with given email cannot be invited.
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /team-members/{team_member_id}:
    delete:
      summary: Delete a team member
      operationId: deleteTeamMember
      description: >-
        Delete a specific member of your team.


        :::note

        This action does not delete the person’s Revolut Business user account –
        it only removes them from your team.

        They will lose access to your Revolut Business account and team but can
        still log in to Revolut Business.

        Their user account will remain linked to any other teams and accounts
        it’s associated with.

        :::


        For more information, see the guides: [Manage team
        members](/docs/guides/manage-accounts/teams/manage-team-members).
      security:
        - AccessToken:
            - WRITE
      tags:
        - Team members
      parameters:
        - name: team_member_id
          description: The ID of the team member to delete.
          in: path
          required: true
          schema:
            type: string
            format: uuid
            examples:
              - 76969b71-a123-42dc-b874-a34688d7bba4
      responses:
        "204":
          description: Team member was deleted
        "401":
          description: >-
            Unauthorized


            Returned when the request was not fulfilled because authentication
            has failed or has not been provided
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 401
                    message: The request should be authorized.
        "403":
          description: >-
            Action forbidden


            Returned, for example, when you don't have permissions necessary to
            delete team members
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 9002
                    message: This action is forbidden
        "404":
          description: >-
            Not found


            Returned when the team member that you're trying to delete doesn't
            exist.

            This can happen when, for example, the team member has already been
            deleted, or the provided team member ID is incorrect.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3006
                    message: Resource not found
        "422":
          description: Cannot modify owner
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 3547
                    message: Cannot modify owner
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /roles:
    get:
      summary: Retrieve team roles
      operationId: getRoles
      description: >-
        Get the list of roles for your business.


        The results are paginated and sorted by the `created_at` date in reverse
        chronological order.


        For more information, see the guides: [Manage team
        members](/docs/guides/manage-accounts/teams/manage-team-members).
      security:
        - AccessToken:
            - READ
      tags:
        - Team members
      parameters:
        - in: query
          name: created_before
          schema:
            type: string
            format: date-time
            default: the date-time at which the request is made
          description: >-
            Retrieves roles with `created_at` < `created_before`.

            The default value is the current date and time at which you are
            calling the endpoint.


            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.
        - name: limit
          in: query
          required: false
          description: >-
            The maximum number of roles returned per page.


            To get to the next page, make a new request and use the `created_at`
            date of the last role returned in the previous response as the value
            for `created_before`.
          schema:
            type: number
            format: integer
            default: 100
            maximum: 1000
            minimum: 1
      responses:
        "200":
          description: Information about roles of the business
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Role"
              examples:
                default:
                  value:
                    - id: owner
                      name: Owner
                      created_at: 2023-09-07T09:21:12.962303Z
                      updated_at: 2023-09-07T09:21:12.962303Z
                    - id: member
                      name: Member
                      created_at: 2023-09-07T09:21:12.962303Z
                      updated_at: 2023-09-07T09:21:12.962303Z
                    - id: viewer
                      name: Viewer
                      created_at: 2023-09-07T09:21:12.962303Z
                      updated_at: 2023-09-07T09:21:12.962303Z
                    - id: a40b6121-350b-4d2e-9ba1-9dab61a18d46
                      name: Example custom role
                      created_at: 2023-09-07T09:21:12.963143Z
                      updated_at: 2023-09-07T09:21:12.963143Z
        "400":
          description: Bad pagination parameters
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: "2101"
                    message: "Parameter limit must be a valid integer in range: [1, 1000]."
        "401":
          description: >-
            Unauthorized


            Returned when the request was not fulfilled because authentication
            has failed or has not been provided
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 401
                    message: The request should be authorized.
        "403":
          description: >-
            Action forbidden


            Returned, for example, when you don't have permissions necessary to
            retrieve roles
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    code: 9002
                    message: This action is forbidden
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /transactions:
    get:
      summary: Retrieve a list of transactions
      operationId: getTransactions
      description: |-
        Retrieve the historical transactions based on the provided query criteria.

        The transactions are sorted by the `created_at` date in reverse chronological order, and they're **paginated**. 
        The maximum number of transactions returned per page is specified by the `count` parameter. 
        To get the next page of results, make a new request and use the `created_at` date from the last item of the previous page as the value for the `to` parameter.

        :::note
        The API returns a maximum of 1,000 transactions per request.
        :::

        For more details, see the guides: [Retrieve transaction data](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-transactions).
      security:
        - AccessToken:
            - READ
      parameters:
        - in: query
          name: from
          schema:
            type: string
            format: date-time or date
          description: >-
            The date and time you retrieve the historical transactions from,
            including this date-time.

            Corresponds to the `created_at` value of the transaction.

            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.


            Used also for pagination.

            To get back to the previous page of results, make a new request and
            use the `created_at` date from the first item of the current page as
            the value for the `from` parameter.
        - in: query
          name: to
          schema:
            type: string
            format: date-time or date
            default: the date-time at which the request is made
          description: >-
            The date and time you retrieve the historical transactions to,
            excluding this date-time. 

            Corresponds to the `created_at` value of the transaction.

            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.

            The default value is the date and time at which you're calling the
            endpoint.


            Used also for pagination.

            To get the next page of results, make a new request and use the
            `created_at` date from the last item of the previous (current) page
            as the value for the `to` parameter.
        - in: query
          name: account
          schema:
            type: string
            format: uuid
          description: The ID of the account
        - in: query
          name: count
          schema:
            type: integer
            default: 100
            maximum: 1000
          description: >-
            The maximum number of the historical transactions to retrieve per
            page.


            To get the next page of results, make a new request and use the
            `created_at` date from the last item of the previous page as the
            value for the `to` parameter.
        - in: query
          name: type
          schema:
            $ref: "#/components/schemas/TransactionType"
          description: The type of the historical transactions to retrieve.
      responses:
        "200":
          description: List of historical transactions retrieved
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Transactions"
              examples:
                default:
                  value:
                    - id: 630f9890-95e3-add1-be4a-95f126988221
                      type: transfer
                      state: pending
                      request_id: invoice00912345
                      created_at: 2024-08-31T17:21:20.364171Z
                      updated_at: 2024-08-31T17:21:20.364171Z
                      reference: invoice00912345
                      legs:
                        - leg_id: 630f9890-95e3-add1-0000-95f1269f0000
                          account_id: 812fff9a-3b0c-4ad1-b41a-cc60899d9900
                          counterparty:
                            account_type: revolut
                            account_id: e0af9f24-504c-4c5d-bd1d-07edf9f49876
                          amount: -1.16
                          currency: EUR
                          bill_amount: -1
                          bill_currency: GBP
                          description: To John Doe
                    - id: 640c2b97-aaaa-1234-aaaa-c47a165c2e7e
                      type: card_payment
                      state: completed
                      request_id: REVP:8988a9a0-aaaa-1234-aaaa-5bcc66d938bf
                      created_at: 2024-03-11T07:19:51.302559Z
                      updated_at: 2024-03-12T02:13:36.842322Z
                      completed_at: 2024-03-12T02:13:36.836595Z
                      merchant:
                        name: Acme Corp.
                        city: New York
                        category_code: "7311"
                        country: USA
                      legs:
                        - leg_id: 640c2b97-aaaa-1234-aaaa-c47a165c2e7e
                          account_id: 92e43866-aaaa-1234-aaaa-6e31dd23f024
                          amount: -47.8
                          fee: 0.66
                          currency: AED
                          bill_amount: -13
                          bill_currency: USD
                          description: Acm *1234mn1ha2
                          balance: 7.74
                      card:
                        id: 2b1a31bc-4795-4f95-b939-ae9cf911dc6e
                        card_number: 516760******1234
                        first_name: John
                        last_name: Smith
                        phone: "+12412341234"
                    - id: 6886001b-c4a4-4920-912b-c9d7d2575bf7
                      type: card_payment
                      state: completed
                      request_id: REVP:5b3dc80d-f77b-4073-b245-d05f0acd348f
                      created_at: 2025-09-11T07:19:51.302559Z
                      updated_at: 2025-09-12T02:13:36.842322Z
                      completed_at: 2025-03-12T02:13:36.836595Z
                      merchant:
                        name: Alfa
                        city: Paris
                        category_code: "7311"
                        country: FRA
                      legs:
                        - leg_id: 0e82681d-10db-40b7-b6c8-f99c595f1c82
                          account_id: 5e85a129-74c9-4714-bbd2-d762b42b15fb
                          amount: -153.32
                          fee: 0
                          currency: EUR
                          description: Al 1234abcxyz0
                          balance: 3210.43
                      card:
                        id: 12d6d4c2-288b-4670-8297-444720bd811b
                        card_number: 456230******1433
                        references:
                          - name: PNR
                            value: RT12345
                          - name: Traveller
                            value: John Smith
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Transactions
  /transaction/{id}:
    get:
      summary: Retrieve a transaction
      operationId: getTransaction
      description: |-
        Retrieve the details of a specific transaction.
        The details can include, for example, cardholder details for card payments.

        You can retrieve a transaction with its details either by its **transaction ID** or by the **request ID** that was provided for this transaction at the time of its creation, for example, when you [created a payment](/docs/api/business#create-payment).

        - To retrieve a transaction by its **transaction ID**, use:

          `/transaction/{transaction_id}`

        - To retrieve a transaction by a **request ID** provided at transaction creation, use:

          `/transaction/{request_id}?id_type=request_id`

          :::warning
          Due to idempotency expiry, only transactions created within the last 2 weeks can be retrieved using their `request_id`.
          :::

        For more details, see the guides: [Retrieve transaction data](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-transactions).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: id
          in: path
          required: true
          description: The ID of the transaction, or the [request
            ID](/docs/api/business#create-payment#response) provided at payment
            creation if `id_type` = `request_id`.
          schema:
            type: string
        - name: id_type
          in: query
          required: false
          description: The type of the ID to retrieve the transaction by.
          schema:
            enum:
              - request_id
            type: string
      responses:
        "200":
          description: The information about a specific transaction
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Transaction"
              examples:
                exchange:
                  summary: Exchange
                  value:
                    id: 640dc0b7-1234-aaaa-1234-92ac4de1dacd
                    type: exchange
                    state: completed
                    request_id: d8f041ab-1234-aaaa-1234-78b6a0b2801f
                    created_at: 2023-03-12T12:08:07.833414Z
                    updated_at: 2023-03-12T12:08:07.833414Z
                    completed_at: 2023-03-12T12:08:07.833705Z
                    legs:
                      - leg_id: 640dc0a7-aaaa-a5b5-aaaa-92ac4de1dacd
                        account_id: 0d1848dc-aaaa-4a9a-aaaa-cae53cbd4baf
                        amount: -1
                        currency: GBP
                        bill_amount: -8.39
                        bill_currency: DKK
                        description: Exchanged to DKK
                        balance: 8.74
                      - leg_id: 640dc0a7-aaaa-a5b5-aaaa-92ac4de1dacd
                        account_id: 246bc9de-aaaa-4f86-aaaa-4d291a5d0390
                        amount: 8.39
                        fee: 0.08
                        currency: DKK
                        description: Exchanged from GBP Main
                        balance: 19.33
                card_payment:
                  summary: Card payment
                  value:
                    id: 640c2b97-aaaa-1234-aaaa-c47a165c2e7e
                    type: card_payment
                    state: completed
                    request_id: REVP:8988a9a0-aaaa-1234-aaaa-5bcc66d938bf
                    created_at: 2023-03-11T07:19:51.302559Z
                    updated_at: 2023-03-12T02:13:36.842322Z
                    completed_at: 2023-03-12T02:13:36.836595Z
                    merchant:
                      name: Acme Corp.
                      city: New York
                      category_code: "7311"
                      country: USA
                    legs:
                      - leg_id: 640c2b97-aaaa-1234-aaaa-c47a165c2e7e
                        account_id: 92e43866-aaaa-1234-aaaa-6e31dd23f024
                        amount: -47.8
                        fee: 0.66
                        currency: AED
                        bill_amount: -13
                        bill_currency: USD
                        description: Acm *1234mn1ha2
                        balance: 7.74
                    card:
                      id: 2b1a31bc-4795-4f95-b939-ae9cf911dc6e
                      card_number: 516760******1234
                      first_name: John
                      last_name: Smith
                      phone: "+12412341234"
                company_card_payment:
                  summary: Payment by card with no holder
                  value:
                    id: 6886001b-c4a4-4920-912b-c9d7d2575bf7
                    type: card_payment
                    state: completed
                    request_id: REVP:5b3dc80d-f77b-4073-b245-d05f0acd348f
                    created_at: 2025-09-11T07:19:51.302559Z
                    updated_at: 2025-09-12T02:13:36.842322Z
                    completed_at: 2025-03-12T02:13:36.836595Z
                    merchant:
                      name: Alfa
                      city: Paris
                      category_code: "7311"
                      country: FRA
                    legs:
                      - leg_id: 0e82681d-10db-40b7-b6c8-f99c595f1c82
                        account_id: 5e85a129-74c9-4714-bbd2-d762b42b15fb
                        amount: -153.32
                        fee: 0
                        currency: EUR
                        description: Al 1234abcxyz0
                        balance: 3210.43
                    card:
                      id: 12d6d4c2-288b-4670-8297-444720bd811b
                      card_number: 456230******1433
                      references:
                        - name: PNR
                          value: RT12345
                        - name: Traveller
                          value: John Smith
                outbound_transfer:
                  summary: Outbound transfer
                  value:
                    id: 640c1963-aaaa-1234-aaaa-a6b451197c6a
                    type: transfer
                    state: completed
                    request_id: 8cc6f5db-aaaa-1234-aaaa-068a05af424e
                    created_at: 2023-03-11T06:02:11.785704Z
                    updated_at: 2023-03-11T06:02:14.628964Z
                    completed_at: 2023-03-11T06:02:14.624946Z
                    reference: Reference example
                    legs:
                      - leg_id: 640c1963-aaaa-1234-aaaa-a6b451197c6a
                        account_id: 0d1848dc-aaaa-1234-aaaa-cae53cbd4baf
                        counterparty:
                          id: f5a9a06b-aaaa-1234-aaaa-c51df843e30d
                          account_type: external
                          account_id: 25c9d813-aaaa-1234-aaaa-28334fc4d133
                        amount: -100
                        fee: 0.1
                        currency: GBP
                        description: To John Smith
                        balance: 9.74
                inbound_transfer:
                  summary: Inbound transfer
                  value:
                    id: 63f3a305-aaaa-1234-aaaa-54f06420ae58
                    type: transfer
                    state: completed
                    request_id: 7d3a3358-aaaa-1234-aaaa-c332c49b6431
                    created_at: 2023-02-20T16:42:45.897576Z
                    updated_at: 2023-02-20T16:42:45.897576Z
                    completed_at: 2023-02-20T16:42:45.897845Z
                    reference: Reference 1234
                    legs:
                      - leg_id: 63f3a305-aaaa-1234-aaaa-54f06420ae58
                        account_id: 74d4d6cb-aaaa-1234-aaaa-9604b94e3019
                        counterparty:
                          account_type: revolut
                        amount: 10
                        currency: GBP
                        description: From JOHN SMITH
                        balance: 3.7
                internal_transfer:
                  summary: Internal transfer
                  value:
                    id: 640b4fbf-aaaa-1234-aaaa-17a2d10142af
                    type: transfer
                    state: completed
                    request_id: f8bbea44-aaaa-1234-aaaa-113df56660f7
                    created_at: 2023-03-10T15:41:51.304765Z
                    updated_at: 2023-03-10T15:41:51.395348Z
                    completed_at: 2023-03-10T15:41:51.388279Z
                    legs:
                      - leg_id: 640b4fbf-aaaa-1234-aaaa-17a2d10142af
                        account_id: 0d1848dc-aaaa-1234-aaaa-cae53cbd4baf
                        amount: 100
                        currency: GBP
                        description: To GBP Deposit pocket
                        balance: 100.84
                      - leg_id: 640b4fbf-aaaa-1234-aaaa-17a2d10142af
                        account_id: 87f2f697-aaaa-1234-aaaa-a20c78c0d24f
                        amount: 100
                        currency: GBP
                        description: From GBP Regular pocket
                        balance: 100.65
                atm_withdrawal:
                  summary: ATM withdrawal
                  value:
                    id: 62d5161d-aaaa-1234-aaaa-219f88258175
                    type: atm
                    state: completed
                    request_id: REVP:b46e51ca-aaaa-1234-aaaa-e54321796ff0
                    created_at: 2022-07-18T08:13:17.025950Z
                    updated_at: 2022-07-19T16:21:22.521625Z
                    completed_at: 2022-07-19T16:21:22.515565Z
                    merchant:
                      name: Barclays
                      city: Canary Wharf
                      category_code: "6011"
                      country: GBR
                    legs:
                      - leg_id: c84cec91-aaaa-1234-aaaa-62d1979dcf3a
                        account_id: dbd3c68b-aaaa-1234-aaaa-5621a117ecbf
                        amount: -21.22
                        fee: 0.48
                        currency: GBP
                        bill_amount: -25
                        bill_currency: EUR
                        description: Cash at Barclays
                        balance: 9.9
                    card:
                      id: 2b1a31bc-4795-4f95-b939-ae9cf911dc6e
                      card_number: 516760******1234
                      first_name: John
                      last_name: Smith
                      phone: "+447712341234"
                top_up:
                  summary: Top up
                  value:
                    id: 63c95e75-aaaa-1234-aaaa-4e7a7768c663
                    type: topup
                    state: completed
                    request_id: 9d4d90c5-aaaa-1234-aaaa-ac65bf589532
                    created_at: 2023-01-19T15:15:01.895737Z
                    updated_at: 2023-01-19T15:16:14.839234Z
                    completed_at: 2023-01-19T15:16:14.833964Z
                    reference: Top up Revolut account
                    legs:
                      - leg_id: 63c95e75-aaaa-1234-aaaa-4e7a7768c663
                        account_id: 6ce35350-aaaa-1234-aaaa-006d3f739b80
                        amount: 100
                        currency: EUR
                        description: Payment from John Smith
                        balance: 1
                card_chargeback:
                  summary: Card chargeback
                  value:
                    id: 6409e928-aaaa-1234-aaaa-872a41309af1
                    type: card_chargeback
                    state: completed
                    request_id: CARD_CHARGEBACK_eabeb099-aaaa-1234-aaaa-ce72583866bb_0
                    created_at: 2023-03-09T14:11:52.453528Z
                    updated_at: 2023-03-09T14:11:52.453528Z
                    completed_at: 2023-03-09T14:11:52.453740Z
                    legs:
                      - leg_id: 6409e928-aaaa-1234-aaaa-872a41309af1
                        account_id: 0d1848dc-aaaa-1234-aaaa-cae53cbd4baf
                        amount: 4.68
                        currency: GBP
                        description: Card chargeback for Rev*www.revolut.com
                        balance: 13.08
                refund:
                  summary: Refund
                  value:
                    id: 172884ea-a529-4d5f-8a81-8ebab9f23e33
                    type: refund
                    state: completed
                    request_id: 79fb7626-df83-46eb-b89a-b31b1e1ae2d7
                    created_at: 2024-03-17T06:05:10.575740Z
                    updated_at: 2024-03-17T06:05:10.575740Z
                    completed_at: 2024-03-17T06:05:10.575740Z
                    related_transaction_id: 640c1963-aaaa-1234-aaaa-a6b451197c6a
                    legs:
                      - leg_id: 172884ea-a529-4d5f-8a81-8ebab9f23e33
                        account_id: 74d4d6cb-aaaa-1234-aaaa-9604b94e3019
                        amount: 100
                        currency: GBP
                        description: A sample refund description
                        balance: 109.74
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Transactions
  /pay:
    post:
      summary: Create a transfer to another account or card
      operationId: createPayment
      description: >-
        Make a payment to a counterparty. You can choose either a bank transfer
        or a card transfer. The resulting transaction has the type `transfer`.


        If you make the payment to another Revolut account, either business or
        personal, the transaction is executed instantly.


        If the counterparty has multiple payment methods available, for example,
        2 accounts, or 1 account and 1 card, you **must specify the account or
        card** to which you want to transfer the money (`receiver.account_id` or
        `receiver.card_id` respectively) .


        For more details, see the guides: [Send money via bank
        transfer](/docs/guides/manage-accounts/transfers/bank-transfers) and
        [Card transfers](/docs/guides/manage-accounts/transfers/card-transfers).
      security:
        - AccessToken:
            - READ
            - PAY
      requestBody:
        description: Create a transfer
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TransactionPaymentRequest"
            examples:
              generic_transfer:
                summary: Bank transfer
                value:
                  request_id: A1pH4num3ric
                  account_id: af98333c-ea53-482b-93c2-1fa5e4eae671
                  receiver:
                    counterparty_id: 49c6a48b-6b58-40a0-b974-0b8c4888c8a7
                    account_id: 9116f03a-c074-4585-b261-18a706b3768b
                  amount: 10
                  charge_bearer: shared
                  currency: EUR
                  reference: To John Doe
              transfer_to_card_p2c:
                summary: Card transfer
                value:
                  request_id: A1pH4num3ric
                  account_id: af98333c-ea53-482b-93c2-1fa5e4eae671
                  receiver:
                    counterparty_id: 1099791d-8980-401f-8417-b9d66eeb6d93
                  amount: 15
                  currency: EUR
                  reference: To John Doe
              transfer_with_reason_code:
                summary: Transfer with reason code
                value:
                  request_id: A1pH4num3ric
                  account_id: f2efd687-1084-45a6-ace6-8abc1352f0d3
                  receiver:
                    counterparty_id: 03153735-d49c-4f8b-ac42-1fe40aeb4167
                    account_id: 8b9eff51-2bd1-4ce2-9974-b87385092e3e
                  amount: 2500
                  currency: INR
                  charge_bearer: shared
                  reference: To John Doe
                  transfer_reason_code: advertising
      responses:
        "200":
          description: The information about the created transfer
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TransferResponse"
              examples:
                pending:
                  summary: Pending transfer
                  value:
                    id: 630f9a62-e488-a9ce-a2d3-a30kkkke03f0
                    state: pending
                    created_at: 2022-08-31T17:29:06.625613Z
                completed:
                  summary: Completed transfer
                  value:
                    id: 630f9a62-e488-a9ce-a2d3-a30kkkke03f0
                    state: completed
                    created_at: 2022-08-31T17:29:06.625613Z
                    completed_at: 2022-09-01T17:29:06.625613Z
        "400":
          description: >-
            Bad request


            For example:

            - the specified `charge_bearer` is not supported

            - the transfer reason is required and `transfer_reason_code` is
            missing

            - the exchange reason is required and `exchange_reason_code` is
            missing

            - a duplicate `request_id` is being used
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                unsupported_charge_bearer:
                  summary: Unsupported charge_bearer
                  value:
                    code: 3287
                    message: Specified 'charge_bearer' is not supported for this transaction.
                missing_transfer_reason_code:
                  summary: Missing transfer_reason_code
                  value:
                    code: 4100
                    message: Please provide a reason for the transaction.
                missing_exchange_reason_code:
                  summary: Missing exchange_reason_code
                  value:
                    code: 3448
                    message: Exchange reason is required
                duplicate_request:
                  summary: Duplicate request_id
                  value:
                    code: 3020
                    message: "Duplicate request: 1f0f3850-9627-42de-8ad4-a2c497c37d0b"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Transfers
  /transfer:
    post:
      summary: Move money between your accounts
      operationId: createTransfer
      description: >-
        Move money between the Revolut accounts of the business in the same
        currency.


        The resulting transaction has the type `transfer`.


        For more information, see the guides: [Send
        money](/docs/guides/manage-accounts/transfers/send-money).
      security:
        - AccessToken:
            - READ
            - PAY
      requestBody:
        description: Create a transfer
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/TransferRequest"
            examples:
              default:
                value:
                  request_id: "129999"
                  source_account_id: 2e6de1bf-97ad-478d-aad1-9d7a3cdf1234
                  target_account_id: ae2e1241-81dd-498d-868e-075484785678
                  amount: 10
                  currency: GBP
                  reference: John's transfer
      responses:
        "200":
          description: The information about the transfer created
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TransferResponse"
              examples:
                default:
                  value:
                    id: 630f95f7-a3f9-abf2-b4e4-3f65281234dc
                    state: completed
                    created_at: 2020-11-23T08:39:35.811005Z
                    completed_at: 2020-11-23T08:39:35.811005Z
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Transfers
  /transfer-reasons:
    get:
      summary: Get transfer reasons
      description: >-
        In order to initiate a transfer in certain currencies and countries, you
        must provide a transfer reason. 

        With this endpoint you can retrieve all transfer reasons available to
        your business account per country and currency.


        After you retrieve the results, use the appropriate reason code in the
        `transfer_reason_code` field when [making a transfer to a
        counterparty](/docs/api/business#create-payment) or [creating a payout
        link](/docs/api/business#create-payout-link).
      operationId: getTransferReasons
      security:
        - AccessToken:
            - READ
      tags:
        - Transfers
        - Payout links
      responses:
        "200":
          description: List of transfer reasons
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TransferReasons"
              examples:
                default:
                  value:
                    - country: IN
                      currency: INR
                      code: advertising
                      description: Advertising
                    - country: IN
                      currency: INR
                      code: advisor_fees
                      description: Advisor fees
                    - country: IN
                      currency: INR
                      code: construction
                      description: Construction
                    - country: IN
                      currency: INR
                      code: delivery
                      description: Delivery
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
  /webhook:
    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)
    get:
      summary: Retrieve a webhook
      operationId: getWebhookV1
      description: Get your webhook URL.
      deprecated: true
      security:
        - AccessToken:
            - READ
      responses:
        "200":
          description: The existing webhook
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook-v1"
              examples:
                default:
                  value:
                    url: https://www.revolut.com
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v1) (deprecated)
    post:
      summary: Set a webhook
      operationId: setUpWebhook
      description: Set up a webhook URL so that event notifications are pushed to the
        specified URL. Only HTTPS URLs are supported.
      deprecated: true
      security:
        - AccessToken:
            - READ
            - WRITE
      requestBody:
        description: URL to set up as a webhook
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/Webhook-v1"
            examples:
              default:
                value:
                  url: https://www.revolut.com
      responses:
        "204":
          description: The webhook has been set up
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v1) (deprecated)
    delete:
      summary: Delete a webhook
      operationId: deleteWebhookV1
      description: Delete a webhook so that events are not sent to the specified URL
        any more.
      deprecated: true
      security:
        - AccessToken:
            - READ
            - WRITE
      responses:
        "204":
          description: The webhook has been deleted
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v1) (deprecated)
  /webhooks:
    servers:
      - url: https://b2b.revolut.com/api/2.0
        description: Production server (uses live data)
      - url: https://sandbox-b2b.revolut.com/api/2.0
        description: Sandbox server (uses test data)
    post:
      summary: Create a new webhook
      operationId: createWebhook
      description: |-
        Create a new webhook to receive event notifications to the specified URL. Provide a list of event types that you want to subscribe to and a URL for the webhook.
        Only HTTPS URLs are supported.

        For more information, see the guides: [About webhooks](/docs/guides/manage-accounts/webhooks/about-webhooks) and [Manage webhooks](/docs/guides/manage-accounts/webhooks/manage-webhooks#create-a-webhook).
      security:
        - AccessToken:
            - WRITE
      requestBody:
        description: The webhook to create.
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/CreateWebhookRequest"
            examples:
              default:
                value:
                  $ref: "#/components/examples/webhookV2BasicSelectedEventsRequest"
      responses:
        "201":
          description: The successfully created webhook
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook-v2"
              examples:
                default:
                  value:
                    $ref: "#/components/examples/webhookV2SelectedEvents"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Required 'url' is missing
                    code: 3000
        "422":
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Owner [ownerId=a3e64c3f-eedd-4487-9ab3-246e23c9ec3e,ownerType=BUSINESS]
                      already has 10 webhooks. Only 10 are allowed.
                    code: 3352
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v2)
    get:
      summary: Retrieve a list of webhooks
      operationId: getWebhooks
      description: |-
        Get the list of all your existing webhooks and their details.

        For more information, see the guides: [About webhooks](/docs/guides/manage-accounts/webhooks/about-webhooks) and [Manage webhooks](/docs/guides/manage-accounts/webhooks/manage-webhooks#retrieve-a-list-of-webhooks).
      security:
        - AccessToken:
            - READ
      responses:
        "200":
          description: The list of all your existing webhooks
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhooks"
              examples:
                default:
                  value:
                    - $ref: "#/components/examples/webhookV2BasicSelectedEvents"
                    - $ref: "#/components/examples/webhookV2BasicAllEvents"
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v2)
  /webhooks/{webhook_id}:
    servers:
      - url: https://b2b.revolut.com/api/2.0
        description: Production server (uses live data)
      - url: https://sandbox-b2b.revolut.com/api/2.0
        description: Sandbox server (uses test data)
    get:
      summary: Retrieve a webhook
      operationId: getWebhook
      description: |-
        Get the information about a specific webhook by ID.

        For more information, see the guides: [About webhooks](/docs/guides/manage-accounts/webhooks/about-webhooks) and [Manage webhooks](/docs/guides/manage-accounts/webhooks/manage-webhooks#retrieve-a-specific-webhook).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: webhook_id
          in: path
          required: true
          description: The ID of the webhook to retrieve.
          schema:
            type: string
            format: uuid
      responses:
        "200":
          description: The information about the webhook
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook-v2"
              examples:
                default:
                  value:
                    $ref: "#/components/examples/webhookV2SelectedEvents"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Something went wrong
                    code: 2101
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Webhook not found
                    code: 3040
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v2)
    patch:
      summary: Update a webhook
      operationId: updateWebhook
      description: |-
        Update an existing webhook. Change the URL to which event notifications are sent or the list of event types to be notified about.

        You must specify at least one of these two. The fields that you don't specify are not updated.

        For more information, see the guides: [About webhooks](/docs/guides/manage-accounts/webhooks/about-webhooks) and [Manage webhooks](/docs/guides/manage-accounts/webhooks/manage-webhooks#update-a-webhook).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: webhook_id
          in: path
          required: true
          description: The ID of the webhook to update.
          schema:
            type: string
            format: uuid
      requestBody:
        description: The new webhook URL for the given webhook
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UpdateWebhookRequest"
            examples:
              modify_url:
                summary: Modify the URL
                value:
                  url: https://www.example.com/
              modify_events:
                summary: Modify the subscribed event types
                value:
                  events:
                    - TransactionCreated
                    - PayoutLinkCreated
              modify_all:
                summary: Modify both the URL and event types
                value:
                  url: https://www.example.com/
                  events:
                    - TransactionCreated
                    - PayoutLinkCreated
      responses:
        "200":
          description: The successfully updated webhook
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook-v2-basic"
              examples:
                default:
                  value:
                    $ref: "#/components/examples/webhookV2BasicSelectedEvents"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: url or events must be provided
                    code: 3000
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v2)
    delete:
      summary: Delete a webhook
      operationId: deleteWebhook
      description: |-
        Delete a specific webhook.

        A successful response does not get any content in return.

        For more information, see the guides: [About webhooks](/docs/guides/manage-accounts/webhooks/about-webhooks) and [Manage webhooks](/docs/guides/manage-accounts/webhooks/manage-webhooks#delete-a-webhook).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: webhook_id
          in: path
          required: true
          description: The ID of the webhook to delete.
          schema:
            type: string
            format: uuid
      responses:
        "204":
          description: The webhook has been deleted
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Webhook not found
                    code: 3040
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v2)
  /webhooks/{webhook_id}/rotate-signing-secret:
    servers:
      - url: https://b2b.revolut.com/api/2.0
        description: Production server (uses live data)
      - url: https://sandbox-b2b.revolut.com/api/2.0
        description: Sandbox server (uses test data)
    post:
      summary: Rotate a webhook signing secret
      operationId: rotateWebhookSigningSecret
      description: |-
        Rotate a signing secret for a specific webhook.

        For more information, see the guides: [About webhooks](/docs/guides/manage-accounts/webhooks/about-webhooks) and [Manage webhooks](/docs/guides/manage-accounts/webhooks/manage-webhooks#rotate-a-webhook-signing-secret).
      security:
        - AccessToken:
            - WRITE
      parameters:
        - name: webhook_id
          in: path
          required: true
          description: The ID of the webhook for which to rotate the secret.
          schema:
            type: string
            format: uuid
      requestBody:
        description: Webhook signing secret rotation request
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/WebhookSigningSecretRotateRequest"
      responses:
        "200":
          description: The details of the webhook for which you rotated the signing secret
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Webhook-v2"
              examples:
                default:
                  value:
                    $ref: "#/components/examples/webhookV2SelectedEvents"
        "400":
          description: |-
            Bad Request

            Returned, for example, for an incorrect expiration period provided.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Something went wrong
                    code: 2101
        "404":
          description: Not Found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Webhook not found
                    code: 3040
        "422":
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Webhook bf6c61eb-a4b0-4e0d-afb1-d6d2f3d27a9e can't have more than 3
                      active signing keys
                    code: 3355
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v2)
  /webhooks/{webhook_id}/failed-events:
    servers:
      - url: https://b2b.revolut.com/api/2.0
        description: Production server (uses live data)
      - url: https://sandbox-b2b.revolut.com/api/2.0
        description: Sandbox server (uses test data)
    get:
      summary: Retrieve a list of failed webhook events
      operationId: getFailedWebhookEvents
      description: |-
        Get the list of all your failed webhook events, or use the query parameters to filter the results.

        The events are sorted by the `created_at` date in reverse chronological order.

        The returned failed events are **paginated**. 
        The maximum number of events returned per page is specified by the `limit` parameter.
        To get to the next page, make a new request and use the `created_at` date of the last event returned in the previous response.

        For more information, see the guides: [About webhooks](/docs/guides/manage-accounts/webhooks/about-webhooks) and [Manage webhooks](/docs/guides/manage-accounts/webhooks/manage-webhooks#retrieve-a-list-of-failed-webhook-events).
      security:
        - AccessToken:
            - READ
      parameters:
        - name: webhook_id
          in: path
          required: true
          description: The ID of the webhook for which to get the failed events.
          schema:
            type: string
            format: uuid
        - name: limit
          in: query
          description: >-
            The maximum number of events returned per page.


            To get to the next page, make a new request and use the `created_at`
            date of the last event returned in the previous response as value
            for `created_before`.
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 100
        - name: created_before
          in: query
          description: >-
            Retrieves events with `created_at` < `created_before`. 

            Cannot be older than the current date minus 21 days. 

            The default value is the current date and time at which you are
            calling the endpoint.


            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.
          schema:
            type: string
            format: date-time or date
            minimum: "'created_at' - 21 days"
            default: the date-time at which the request is made
      responses:
        "200":
          description: The list of all your existing failed webhook events
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/WebhookEvents"
              examples:
                default:
                  value:
                    - id: d6d04ec2-2a48-4825-8fba-3603cdacdba7
                      created_at: 2023-01-26T16:22:21.297570Z
                      updated_at: 2023-01-26T16:22:21.534872Z
                      webhook_id: c8083529-fb91-4de0-a66d-9fc3ccc1da10
                      webhook_url: https://www.example.com
                      payload:
                        data:
                          id: 63d2a8bd-8b67-a2de-b1d2-b58ee21d7073
                          legs:
                            - fee: 0.2
                              amount: -10
                              leg_id: 63d2a8bd-8b67-a2de-0000-b58ee21d7073
                              currency: GBP
                              account_id: 05018b0d-e67c-4fec-bea6-415e9da9432c
                              description: To Acme Corp
                              counterparty:
                                id: 7e18625a-3e6c-4d4f-8429-216c25309a5f
                                account_id: ff29e658-f07f-4d81-bc0f-7ad0ff141357
                                account_type: external
                          type: transfer
                          state: pending
                          reference: To John Doe
                          created_at: 2023-01-26T16:22:21.232551Z
                          request_id: 6a8b2ad9-d8b9-4348-9207-1c5737ccf11b
                          updated_at: 2023-01-26T16:22:21.232551Z
                        event: TransactionCreated
                        timestamp: 2023-01-26T16:22:21.230599Z
                      last_sent_date: 2023-01-26T16:52:21.534798Z
                    - id: d6d04ec2-2a48-4825-8fba-3603cdacdba7
                      created_at: 2023-07-22T11:52:21.297570Z
                      updated_at: 2023-07-22T11:52:21.534872Z
                      webhook_id: c8083529-fb91-4de0-a66d-9fc3ccc1da10
                      webhook_url: https://www.example.com
                      payload:
                        data:
                          id: 0e1a8d4b-1d1e-457d-9f10-3e7007a82ea8
                          request_id: 2e2837f5-828d-473f-85e8-5614afd3f8e8
                          old_state: active
                          new_state: processed
                        event: PayoutLinkStateChanged
                        timestamp: 2023-07-22T12:31:18.534798Z
                      last_sent_date: 2023-07-22T12:52:21.534798Z
        "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
                bad_created_before:
                  summary: Bad created_before
                  value:
                    message: "created_before must be after 2023-07-11T13:11:39.623178Z, but is:
                      2023-07-10T16:22:21.297570Z"
                    code: 2101
        "404":
          description: Webhook not found
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
              examples:
                default:
                  value:
                    message: Webhook not found
                    code: 3040
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Error"
      tags:
        - Webhooks (v2)
components:
  securitySchemes:
    AccessToken:
      type: http
      scheme: bearer
      description: >-
        Each Business API request must contain an authorization header in the
        following format to make a call: `Bearer <your_access_token>`.


        The access token will be obtained the first time you set up your
        application and has an expiration of 40 minutes. 

        During setup, a `refresh_token` will also be obtained which allows to
        obtain a new `access_token`.


        :::danger

        Never share your client-assertion JWT (JSON web token), `access_token`
        and `refresh_token` with anyone, as these can be used to access your
        banking data and initiate transactions.

        :::


        Access tokens can be issued with four security scopes and require a JWT
        (JSON Web Token) signature to be obtained:

        - `READ`: Permissions for `GET` operations.

        - `WRITE`: Permissions to update counterparties, webhooks, and issue
        payment drafts.

        - `PAY`: Permissions to initiate or cancel transactions and currency
        exchanges.    

        - `READ_SENSITIVE_CARD_DATA`: Permissions to retrieve sensitive card
        details.

          :::warning
          If you enable the `READ_SENSITIVE_CARD_DATA` scope for your access token, you must set up IP whitelisting. 
          Failing to do so will prevent you from accessing **any** Business API endpoint. 

          IP whitelisting means that you must specify an IP or a set of IPs which will be the only IPs from which requests to the API will be accepted. 
          To do so:
          1. Go to the Revolut Business web app [settings](https://business.revolut.com/settings) → **APIs** → **Business API**.
          2. Select the corresponding API certificate.
          3. In **Production IP whitelist**, provide the IP(s) which should be whitelisted.
              Make sure that the IPs you provide are **not** [local (i.e. private) IP addresses](https://www.okta.com/en-sg/identity-101/understanding-private-ip-ranges/). 
          4. Save the new settings.
          :::

        To configure your JWT and obtain the refresh and first access tokens,
        complete the following steps:

          1. [Sign up for a Revolut Business account](/docs/guides/manage-accounts/get-started/sign-up-for-revolut-business-account)
          2. [Prepare your Sandbox environment](/docs/guides/manage-accounts/get-started/prepare-sandbox-environment)
          3. [Make your first API request](/docs/guides/manage-accounts/get-started/make-your-first-api-request)
  schemas:
    AccountingCategoryResponse:
      type: object
      required:
        - id
        - name
        - created_at
        - updated_at
      properties:
        id:
          type: string
          format: uuid
          description: The unique ID of the accounting category.
          examples:
            - 8d831292-f950-4c5a-83f9-030df8cacd3f
        name:
          type: string
          description: The name of the accounting category.
          examples:
            - Transportation
        code:
          type: string
          description: The code of the accounting category.
          examples:
            - "305"
        created_at:
          type: string
          format: date-time
          description: The date and time the accounting category was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          examples:
            - 2025-10-20T15:09:24Z
        updated_at:
          type: string
          format: date-time
          description: The date and time the accounting category was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          examples:
            - 2025-10-20T15:09:24Z
        default_tax_rate_id:
          type: string
          format: uuid
          description: The ID of the default [tax rate](/docs/api/business#get-tax-rate)
            applied to items in this accounting category unless overridden for a
            specific item.
          examples:
            - 2a3520af-e6f7-416c-821e-0e83ffac1dfa
    AccountingTaxRate:
      type: object
      description: The tax rate that can be applied to financial records, such as expenses.
      required:
        - name
      properties:
        name:
          type: string
          description: The name of the tax.
          minLength: 1
          maxLength: 20
        percentage:
          type: number
          format: double
          minimum: 0
          maximum: 100
          description: The tax rate percentage applied to the taxable amount. For example,
            `23` for 23%.
    Account:
      type: object
      description: ""
      properties:
        id:
          type: string
          format: uuid
          description: The account ID.
        name:
          type: string
          description: The account name.
        balance:
          type: number
          format: double
          description: The current balance on the account.
        currency:
          $ref: "#/components/schemas/AccountCurrency"
        state:
          type: string
          enum:
            - active
            - inactive
          description: Indicates the state of the account.
        public:
          type: boolean
          description: Indicates whether the account is visible to other businesses on
            Revolut.
        created_at:
          type: string
          format: date-time
          description: The date and time the account was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        updated_at:
          type: string
          format: date-time
          description: The date and time the account was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
      required:
        - id
        - balance
        - currency
        - state
        - public
        - created_at
        - updated_at
    Accounts:
      type: array
      items:
        $ref: "#/components/schemas/Account"
    AccountBankDetailsItem:
      type: object
      description: ""
      properties:
        iban:
          type: string
          description: The IBAN number.
        bic:
          type: string
          description: The BIC number, also known as SWIFT code.
        account_no:
          type: string
          description: The account number.
        sort_code:
          type: string
          description: The sort code of the account.
        routing_number:
          type: string
          description: The routing number of the account.
        beneficiary:
          type: string
          description: The name of the counterparty.
        beneficiary_address:
          $ref: "#/components/schemas/BeneficiaryAddress"
        bank_country:
          $ref: "#/components/schemas/BankCountryCode"
        pooled:
          type: boolean
          description: Indicates whether the account address is pooled or unique.
        unique_reference:
          type: string
          description: The reference of the pooled account.
        schemes:
          type: array
          description: The schemes that are available for this currency account.
          uniqueItems: false
          items:
            $ref: "#/components/schemas/PaymentSystem"
        estimated_time:
          $ref: "#/components/schemas/EstimatedTime"
      required:
        - beneficiary
        - beneficiary_address
        - schemes
        - estimated_time
    AccountBankDetailsItems:
      type: array
      description: Indicates the payment scheme used to execute transactions.
      items:
        $ref: "#/components/schemas/AccountBankDetailsItem"
    AccountCurrency:
      type: string
      pattern: ^[A-Z]{3}$
      description: "[ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code
        in upper case."
    AccountNameValidationReasonUK:
      type: object
      description: >-
        A code which explains why a given result was returned, and the service
        that returned it.

        For example, it might happen that the details you provided match the
        account details, but you specified the counterparty as an individual,
        and the account type is business.
      properties:
        type:
          type: string
          description: |-
            The reason type.
            Determines the [service](/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services) used for the validation that returned the reason code.
            For UK, the values is: `uk_cop`.
          enum:
            - uk_cop
            - eu_cop
            - ro_cop
            - au_cop
        code:
          type: string
          description: >-
            The reason code. Possible values for UK:

            - **`close_match`**: The provided name is similar to the account
            name, the account type is correct.
              The actual name is returned.
            - **`individual_account_name_matched`**: The names match but the
            counterparty is an individual, not a business.

            - **`company_account_name_matched`**: The names match but the
            counterparty is a business, not an individual.

            - **`individual_account_close_match`**: The provided name is similar
            to the account name, and the account type is incorrect – the
            counterparty is an individual, not a business.
              The actual name is returned.
            - **`company_account_close_match`**: The provided name is similar to
            the account name, and the account type is incorrect - the
            counterparty is a business, not an individual.
              The actual name is returned.
            - **`not_matched`**: The account details don't match the provided
            values.

            - **`account_does_not_exist`**: The account does not exist.

            - **`account_switched`**: The account has been switched using the
            Current Account Switching Service.
              Please contact the recipient for updated account details.
            - **`cannot_be_checked`**: The account cannot be checked.
          enum:
            - close_match
            - individual_account_name_matched
            - company_account_name_matched
            - individual_account_close_match
            - company_account_close_match
            - not_matched
            - account_does_not_exist
            - account_switched
            - cannot_be_checked
    AccountNameValidationReasonAU:
      type: object
      description: >-
        A code which explains why a given result was returned, and the service
        that returned it.

        In some cases, it may provide more details about the result.
      properties:
        type:
          type: string
          description: |-
            The reason type.
            Determines the [service](/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services) used for the validation that returned the reason code.
            For AU, the value is: `au_cop`.
          enum:
            - uk_cop
            - eu_cop
            - ro_cop
            - au_cop
        code:
          type: string
          description: >-
            The reason code. Possible values for AU:

            - **`close_match`** (business accounts): The provided name is
            similar to the account name.
              The actual name is returned. Mismatched account type is corrected.
            - **`not_matched`**: The account details don't match the provided
            values.

            - **`account_does_not_exist`**: The account does not exist.

            - **`account_switched`**: The account has been switched using the
            Current Account Switching Service.
              Please contact the recipient for updated account details.
            - **`cannot_be_checked`**: The account cannot be checked.
          enum:
            - close_match
            - individual_account_name_matched
            - company_account_name_matched
            - individual_account_close_match
            - company_account_close_match
            - not_matched
            - account_does_not_exist
            - account_switched
            - cannot_be_checked
    AccountNameValidationReasonRO:
      type: object
      description: A code which explains why a given result was returned, and the
        service that returned it.
      properties:
        type:
          type: string
          description: |-
            The reason type.
            Determines the [service](/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services) used for the validation that returned the reason code.
            For RO, the value is: `ro_cop`.
          enum:
            - uk_cop
            - eu_cop
            - ro_cop
            - au_cop
        code:
          type: string
          description: |-
            The reason code. Possible values for RO:
            - **`cannot_be_checked`**: The account cannot be checked.
          enum:
            - close_match
            - individual_account_name_matched
            - company_account_name_matched
            - individual_account_close_match
            - company_account_close_match
            - not_matched
            - account_does_not_exist
            - account_switched
            - cannot_be_checked
    AccountNameValidationReasonEUR:
      type: object
      description: >-
        A code which explains why a given result was returned, and the service
        that returned it.

        For example, it might happen that the details you provided match the
        account details, but you specified the counterparty as an individual,
        and the account type is business.
      properties:
        type:
          type: string
          description: |-
            The reason type.
            Determines the [service](/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services) used for the validation that returned the reason code.
            For EUR, the value is: `eu_cop`.
          enum:
            - uk_cop
            - eu_cop
            - ro_cop
            - au_cop
        code:
          type: string
          description: >-
            The reason code. Possible values for EUR:

            - **`close_match`**: The provided name is similar to the account
            name.
              The actual name is returned.
            - **`not_matched`**: The account details don't match the provided
            values.

            - **`account_does_not_exist`**: The account does not exist.

            - **`account_switched`**: The account has been switched using the
            Current Account Switching Service.
              Please contact the recipient for updated account details.
            - **`cannot_be_checked`**: The account cannot be checked.
          enum:
            - close_match
            - individual_account_name_matched
            - company_account_name_matched
            - individual_account_close_match
            - company_account_close_match
            - not_matched
            - account_does_not_exist
            - account_switched
            - cannot_be_checked
    Amount:
      description: The amount of money.
      type: number
      format: double
    AmountWithCurrency:
      type: object
      description: ""
      properties:
        amount:
          type: number
          format: double
          description: The amount of the transaction.
        currency:
          $ref: "#/components/schemas/Currency"
    BankCountryCode:
      type: string
      pattern: ^[A-Z]{2}$
      description: The country of the bank, provided as a 2-letter [ISO
        3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
        code.
      examples:
        - GB
    BeneficiaryAddress:
      type: object
      description: The address of the counterparty.
      properties:
        street_line1:
          type: string
          description: Street line 1 information.
          examples:
            - Revolut LTD
        street_line2:
          type: string
          description: Street line 2 information.
          examples:
            - 1 Canada Square
        region:
          type: string
          description: The name of the region (state or province), for example, Ontario
            for Canada.
          examples:
            - Ontario
        city:
          type: string
          description: The name of the city.
          examples:
            - London
        country:
          type: string
          pattern: ^[A-Z]{2}$
          description: The country of the counterparty, provided as a 2-letter [ISO
            3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
            code.
          examples:
            - GB
        postcode:
          type: string
          description: The postcode of the counterparty address.
          examples:
            - E14 5AB
      required:
        - country
        - postcode
    BusinessMerchantCategory:
      enum:
        - health
        - general
        - services
        - airlines
        - transport
        - accommodation
        - utilities
        - shopping
        - financial
        - furniture
        - hardware
        - groceries
        - fuel
        - entertainment
        - software
        - restaurants
        - advertising
        - cash
        - education
        - government
      type: string
    CardInvitationId:
      type: string
      description: The ID of the card invitation.
      format: uuid
    CardInvitationState:
      type: string
      enum:
        - created
        - expired
        - failed
        - redeemed
      description: |-
        The current state of the card invitation:
        - **`created`**: Invitation has been created but not yet claimed.
        - **`expired`**: Invitation has expired due to expiry date being reached or manual cancellation.
        - **`failed`**: Invitation claim attempt failed.
        - **`redeemed`**: Invitation has been successfully claimed.

        To learn more about card invitation lifecycle, see the guide: [Manage card invitations → Card invitation state](/docs/guides/manage-accounts/cards/manage-card-invitations#card-invitation-state).
    CardInvitationCreatedAt:
      type: string
      description: The date and time the card invitation was created in [ISO
        8601](https://en.wikipedia.org/wiki/ISO_8601) format.
      format: date-time
    CardInvitationUpdatedAt:
      type: string
      description: The date and time the card invitation was last updated in [ISO
        8601](https://en.wikipedia.org/wiki/ISO_8601) format.
      format: date-time
    CardInvitationExpiryDate:
      type: string
      format: date-time
      description: |-
        The date and time after which this card invitation expires if not claimed or cancelled before then.
        Specified in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        :::note
        Only returned for invitations in state `created`.
        :::tip
        For other states, to find out when a card invitation transitioned to its [final state](/docs/guides/manage-accounts/cards/manage-card-invitations#card-invitation-state), check the `updated_at` value. 
        :::
      examples:
        - 2025-10-20T15:09:24Z
    CardInvitationCardId:
      type: string
      format: uuid
      description: |
        The ID of the card issued after this invitation was claimed. 
        :::note
        Only returned for invitations in state `redeemed`.
        :::
    CardInvitationCreatedHolderId:
      type: string
      description: The ID of the team member to be assigned as the holder of the card
        after the invitation is claimed.
      format: uuid
    CardInvitationHolderId:
      type: string
      description: >-
        The ID of the team member to be assigned as the holder of the card after
        the invitation is claimed.


        :::note

        If the team member has been deleted since the invitation was created,
        the `holder_id` is not returned.

        :::
      format: uuid
    CardInvitationVirtual:
      type: boolean
      description: Specifies whether the issued card will be a virtual (`true`) or
        physical (`false`) one.
    CardInvitationLabel:
      type: string
      description: The label of the card.
    CardInvitationSpendProgram:
      $ref: "#/components/schemas/SpendProgram"
    CardInvitationSpendingLimits:
      $ref: "#/components/schemas/SpendingLimits"
    CardInvitationSpendingPeriod:
      description: >-
        The controls for the card's spending period.


        They specify the dates when the card will become available or
        unavailable for spending, and define what happens after the end date.
      type: object
      allOf:
        - $ref: "#/components/schemas/SpendingPeriodSchema"
    CardInvitationCategories:
      type: array
      description: >-
        The list of merchant categories that will be available for card
        spending.             

        If this parameter is not specified, categories are not restricted.
      items:
        $ref: "#/components/schemas/BusinessMerchantCategory"
    CardInvitationMerchantControls:
      description: >-
        The merchant-level controls for card spending.


        They block or allow the card to only transact with specific merchants: 

        - `allow`: permits only the specified merchants (cannot be used if the
        `categories` parameter is set)

        - `block`: blocks the specified merchants (can be used with or without
        `categories`)
      type: object
      $ref: "#/components/schemas/MerchantControlsSchema"
    CardInvitationCountries:
      description: >-
        The list of countries where the team member will be able to use the
        card.

        Specified as 2-letter [ISO
        3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
        codes.
      type: array
      items:
        type: string
        pattern: ^[A-Z]{2}$
        examples:
          - GB
    CardInvitationAccounts:
      type: array
      description: The list of accounts that will be linked to the card.
      items:
        type: string
        format: uuid
    CardInvitationCreatedResponse:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/CardInvitationId"
        state:
          $ref: "#/components/schemas/CardInvitationState"
        created_at:
          $ref: "#/components/schemas/CardInvitationCreatedAt"
        updated_at:
          $ref: "#/components/schemas/CardInvitationUpdatedAt"
        expiry_date:
          $ref: "#/components/schemas/CardInvitationExpiryDate"
        holder_id:
          $ref: "#/components/schemas/CardInvitationCreatedHolderId"
        virtual:
          $ref: "#/components/schemas/CardInvitationVirtual"
        label:
          $ref: "#/components/schemas/CardInvitationLabel"
        spending_limits:
          $ref: "#/components/schemas/SpendingLimits"
        spending_period:
          $ref: "#/components/schemas/CardInvitationSpendingPeriod"
        categories:
          $ref: "#/components/schemas/CardInvitationCategories"
        merchant_controls:
          $ref: "#/components/schemas/CardInvitationMerchantControls"
        countries:
          $ref: "#/components/schemas/CardInvitationCountries"
        accounts:
          $ref: "#/components/schemas/CardInvitationAccounts"
      required:
        - id
        - created_at
        - updated_at
        - virtual
        - state
        - accounts
    CardInvitationUpdatedResponse:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/CardInvitationId"
        state:
          $ref: "#/components/schemas/CardInvitationState"
        created_at:
          $ref: "#/components/schemas/CardInvitationCreatedAt"
        updated_at:
          $ref: "#/components/schemas/CardInvitationUpdatedAt"
        expiry_date:
          $ref: "#/components/schemas/CardInvitationExpiryDate"
        holder_id:
          $ref: "#/components/schemas/CardInvitationCreatedHolderId"
        virtual:
          $ref: "#/components/schemas/CardInvitationVirtual"
        label:
          $ref: "#/components/schemas/CardInvitationLabel"
        spend_program:
          $ref: "#/components/schemas/SpendProgram"
        spending_limits:
          $ref: "#/components/schemas/SpendingLimits"
        spending_period:
          $ref: "#/components/schemas/CardInvitationSpendingPeriod"
        categories:
          $ref: "#/components/schemas/CardInvitationCategories"
        merchant_controls:
          $ref: "#/components/schemas/CardInvitationMerchantControls"
        countries:
          $ref: "#/components/schemas/CardInvitationCountries"
        accounts:
          $ref: "#/components/schemas/CardInvitationAccounts"
      required:
        - id
        - created_at
        - updated_at
        - virtual
        - state
        - accounts
    CardInvitationResponse:
      type: object
      properties:
        id:
          $ref: "#/components/schemas/CardInvitationId"
        state:
          $ref: "#/components/schemas/CardInvitationState"
        created_at:
          $ref: "#/components/schemas/CardInvitationCreatedAt"
        updated_at:
          $ref: "#/components/schemas/CardInvitationUpdatedAt"
        expiry_date:
          $ref: "#/components/schemas/CardInvitationExpiryDate"
        card_id:
          $ref: "#/components/schemas/CardInvitationCardId"
        holder_id:
          $ref: "#/components/schemas/CardInvitationHolderId"
        virtual:
          $ref: "#/components/schemas/CardInvitationVirtual"
        label:
          $ref: "#/components/schemas/CardInvitationLabel"
        spend_program:
          $ref: "#/components/schemas/SpendProgram"
        spending_limits:
          $ref: "#/components/schemas/SpendingLimits"
        spending_period:
          $ref: "#/components/schemas/CardInvitationSpendingPeriod"
        categories:
          $ref: "#/components/schemas/CardInvitationCategories"
        merchant_controls:
          $ref: "#/components/schemas/CardInvitationMerchantControls"
        countries:
          $ref: "#/components/schemas/CardInvitationCountries"
        accounts:
          $ref: "#/components/schemas/CardInvitationAccounts"
      required:
        - id
        - created_at
        - updated_at
        - virtual
        - state
        - accounts
    CardInvitationsResponse:
      type: array
      items:
        $ref: "#/components/schemas/CardInvitationResponse"
      description: A list of card invitations
    CardCreatedResponse:
      type: object
      properties:
        id:
          type: string
          description: The ID of the card.
          format: uuid
        holder_id:
          type: string
          description: |-
            The ID of the team member who is the holder of the card.
            If the card belongs to the business, this will be empty.

            For more information, see the guides: [Manage Cards - Create a virtual card](/docs/guides/manage-accounts/cards/manage-cards#create-a-virtual-card).
          format: uuid
        contact_ids:
          $ref: "#/components/schemas/CardContacts"
        created_at:
          type: string
          description: The date and time the card was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          format: date-time
        updated_at:
          type: string
          description: The date and time the card was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          format: date-time
        product:
          $ref: "#/components/schemas/CardProduct"
        virtual:
          type: boolean
          description: Specifies whether the card is virtual (`true`) or physical (`false`).
        last_digits:
          type: string
          description: The last 4 digits of the card's PAN.
          pattern: ^[0-9]{4}$
        expiry:
          type: string
          format: DD/YYYY
          description: The card expiration date.
          pattern: ^[0-9]{2}/[0-9]{4}$
        label:
          type: string
          description: The label of the card.
        references:
          $ref: "#/components/schemas/CardReferences"
        state:
          $ref: "#/components/schemas/CardState"
          description: The state that the card is in.
        can_be_unlocked:
          $ref: "#/components/schemas/CardCanBeUnlocked"
        spending_limits:
          $ref: "#/components/schemas/SpendingLimits"
        spending_period:
          description: >-
            The controls for the card's spending period.


            They specify the dates when the card becomes available or
            unavailable for spending, and define what happens after the end
            date.
          type: object
          allOf:
            - $ref: "#/components/schemas/SpendingPeriodSchema"
        categories:
          type: array
          description: >-
            The list of merchant categories that are available for card
            spending.             

            If this parameter is not specified, categories are not restricted.
          items:
            $ref: "#/components/schemas/BusinessMerchantCategory"
        merchant_controls:
          description: >-
            The merchant-level controls for card spending.


            They block or allow the card to only transact with specific
            merchants: 

            - `allow`: permits only the specified merchants (cannot be used if
            the `categories` parameter is set)

            - `block`: blocks the specified merchants (can be used with or
            without `categories`)
          type: object
          $ref: "#/components/schemas/MerchantControlsSchema"
        countries:
          description: The list of countries where the card can be used, specified as
            2-letter [ISO
            3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
            codes.
          type: array
          items:
            type: string
            pattern: ^[A-Z]{2}$
            examples:
              - GB
        accounts:
          type: array
          description: The list of linked accounts.
          items:
            type: string
            format: uuid
      required:
        - id
        - created_at
        - updated_at
        - virtual
        - last_digits
        - expiry
        - state
        - accounts
    CardResponse:
      type: object
      properties:
        id:
          type: string
          description: The ID of the card.
          format: uuid
        holder_id:
          type: string
          description: |-
            The ID of the team member who is the holder of the card.
            If the card belongs to the business, this will be empty.

            For more information, see the guides: [Manage Cards - Create a virtual card](/docs/guides/manage-accounts/cards/manage-cards#create-a-virtual-card).
          format: uuid
        contact_ids:
          $ref: "#/components/schemas/CardContacts"
        created_at:
          type: string
          description: The date and time the card was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          format: date-time
        updated_at:
          type: string
          description: The date and time the card was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          format: date-time
        product:
          $ref: "#/components/schemas/CardProduct"
        virtual:
          type: boolean
          description: Specifies whether the card is virtual (`true`) or physical (`false`).
        last_digits:
          type: string
          description: The last 4 digits of the card's PAN.
          pattern: ^[0-9]{4}$
        expiry:
          type: string
          format: DD/YYYY
          description: The card expiration date.
          pattern: ^[0-9]{2}/[0-9]{4}$
        label:
          type: string
          description: The label of the card.
        references:
          $ref: "#/components/schemas/CardReferences"
        state:
          $ref: "#/components/schemas/CardState"
        can_be_unlocked:
          $ref: "#/components/schemas/CardCanBeUnlocked"
        spend_program:
          $ref: "#/components/schemas/SpendProgram"
        spending_limits:
          $ref: "#/components/schemas/SpendingLimits"
        spending_period:
          description: >-
            The controls for the card's spending period.


            They specify the dates when the card becomes available or
            unavailable for spending, and define what happens after the end
            date.
          type: object
          allOf:
            - $ref: "#/components/schemas/SpendingPeriodSchema"
        categories:
          type: array
          description: The list of merchant categories that are available for card
            spending. If not specified, categories are not restricted.
          items:
            $ref: "#/components/schemas/BusinessMerchantCategory"
        merchant_controls:
          description: >-
            The merchant-level controls for card spending.


            They block or allow the card to only transact with specific
            merchants: 

            - `allow`: permits only the specified merchants (cannot be used if
            the `categories` parameter is set)

            - `block`: blocks the specified merchants (can be used with or
            without `categories`)
          type: object
          $ref: "#/components/schemas/MerchantControlsSchema"
        countries:
          description: The list of countries where the card can be used, specified as
            2-letter [ISO
            3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
            codes.
          type: array
          items:
            type: string
            pattern: ^[A-Z]{2}$
            examples:
              - GB
        accounts:
          type: array
          description: The list of linked accounts.
          items:
            type: string
            format: uuid
      required:
        - id
        - created_at
        - updated_at
        - virtual
        - last_digits
        - expiry
        - state
        - accounts
    CardsResponse:
      type: array
      items:
        $ref: "#/components/schemas/CardResponse"
      description: A list of cards.
    CardCanBeUnlocked:
      type: boolean
      description: |-
        Returned for locked cards (`state=locked`).
        Indicates whether the card can be [unlocked](/docs/api/business#unlock-card) manually (via API or in-app).
        If `true`, you'll still need the [necessary scope or permission](/docs/guides/manage-accounts/cards/manage-cards#lock-or-unlock-cards) to unlock the card.

        :::info
        Cards can be locked for various reasons.
        For example, a card can be locked by the user, due to spending period settings, or automatically by the system.
        Only certain types of lock can be lifted manually.
        :::
    CardContact:
      description: One of the card's contacts.
      type: string
      format: uuid
    CardContacts:
      description: The list of contacts for a [company
        card](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards).
      type: array
      minItems: 1
      maxItems: 5
      uniqueItems: true
      items:
        $ref: "#/components/schemas/CardContact"
    CardProduct:
      description: >-
        The card product offered by the card provider for this card.

        In other words, the program that the card was issued under.


        :::note

        This property is only available to travel intermediaries using our
        travel solution.

        To use it, please contact [Revolut API
        Support](mailto:api-requests@revolut.com).

        :::
      type: object
      properties:
        code:
          type: string
          description: The code of the card product.
      required:
        - code
    CardReference:
      description: |-
        Reference for the card.
        One of the name-value pairs assigned to the card for tracking.

        :::info
        Each time the card is used, the references are recorded in the [transaction details](/docs/api/business#get-transaction#response) (`card.references`), helping track transactions made with this card.
        :::

        The names must be unique.
        The references can be [amended](/docs/api/business#update-card-references) up to 10 times.
        References are only supported for cards owned by the business (i.e. [company](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) or [auto-issued cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)).
        They are **not** supported for [team member cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (i.e. with `holder_id` present). 

        :::note
        The references recorded on a transaction are those assigned to the card at the time the transaction took place.
        If the references are amended, the new references are only applied to future transactions.
        Existing transaction are not affected.
        :::
      type: object
      required:
        - name
        - value
      properties:
        name:
          description: |-
            The name of the card reference.
            Must be unique.
          type: string
          minLength: 1
          maxLength: 30
        value:
          description: The value for this reference.
          type: string
          minLength: 1
          maxLength: 30
      examples:
        - name: PNR
          value: RT12345
    CardReferences:
      description: |-
        References for the card.
        Up to 5 name-value pairs assigned to the card for tracking.

        :::info
        Each time the card is used, the references are recorded in the [transaction details](/docs/api/business#get-transaction#response) (`card.references`), helping track transactions made with this card.
        :::

        The names must be unique.
        The references can be [amended](/docs/api/business#update-card-references) up to 10 times.

        References are only supported for cards owned by the business (i.e. [company](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) or [auto-issued cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards)).
        They are **not** supported for [team member cards](/docs/guides/manage-accounts/cards/manage-cards#different-types-of-cards) (i.e. with `holder_id` present).

        :::note
        The references recorded on a transaction are those assigned to the card at the time the transaction took place.
        If the references are amended, they will only be applied to future transactions.
        Existing transaction are not affected.
        :::
      type: array
      minItems: 1
      maxItems: 5
      uniqueItems: true
      items:
        $ref: "#/components/schemas/CardReference"
      examples:
        - - name: PNR
            value: RT12345
          - name: Traveller
            value: John Smith
    CardState:
      enum:
        - created
        - pending
        - active
        - frozen
        - locked
      description: >-
        The state that the card is in.


        Possible values:

        - `active`: The card is available for spending. 
          Newly created cards typically go into `active` unless subject to certain conditions, for example, spending period starting in the future.
        - `frozen`: The card has been frozen and is temporarily unavailable for
        spending. 

        - `locked`: The card is locked, typically due to an [admin
        lock](/docs/api/business#lock-card) or spending period settings, i.e.
        when its `spending_period.start_date` is in the future or
        `spending_period.end_date` is in the past.
          A locked card is unavailable for spending until it's [unlocked](/docs/api/business#unlock-card) and active.
          :::tip
          To see if the card can be unlocked, check the `can_be_unlocked` parameter.
          Note that you'll still need the [necessary scope or permission](/docs/guides/manage-accounts/cards/manage-cards#lock-or-unlock-cards) to unlock it.
          :::
        - `created`: The card has been created but is not yet active.
          Used only for a specific type of cards.
        - `pending`: This status is currently not in use.
      type: string
    Category:
      type: object
      description: The [accounting
        category](/docs/api/business#delete-accounting-category) of the expense
        split.
      required:
        - id
        - name
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the accounting category.
        name:
          type: string
          description: The name of the accounting category.
        code:
          type: string
          description: The code of the accounting category.
    ChargeBearer:
      type: string
      enum:
        - shared
        - debtor
      description: >-
        The party to which any transaction fees are charged if the resulting
        transaction route has associated fees. 

        Some transactions with fees might not be possible with the specified
        option, in which case error `3287` is returned.
    Counterparty:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the counterparty.
        name:
          type: string
          description: The name of the counterparty.
        revtag:
          type: string
          description: The
            [Revtag](https://help.revolut.com/help/transfers/internal-transfers/username-payments/revtags/)
            of the counterparty.
        profile_type:
          $ref: "#/components/schemas/ProfileType"
        country:
          $ref: "#/components/schemas/CountryCode"
        state:
          enum:
            - created
            - draft
            - deleted
          description: Indicates the state of the counterparty.
          type: string
        created_at:
          type: string
          format: date-time
          description: The date and time the counterparty was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        updated_at:
          type: string
          format: date-time
          description: The date and time the counterparty was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        accounts:
          type: array
          description: The list of public accounts associated with this counterparty.
          items:
            $ref: "#/components/schemas/CounterpartyAccount"
        cards:
          type: array
          description: The list of cards associated with this counterparty.
          items:
            $ref: "#/components/schemas/CounterpartyCard"
      required:
        - id
        - name
        - state
        - created_at
        - updated_at
    Counterparties:
      type: array
      items:
        $ref: "#/components/schemas/Counterparty"
    CounterpartyAccount:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the counterparty's account.
        name:
          type: string
          description: The name of the counterparty.
        bank_country:
          $ref: "#/components/schemas/BankCountryCode"
        currency:
          $ref: "#/components/schemas/AccountCurrency"
        type:
          enum:
            - revolut
            - external
          description: Indicates the type of account.
          type: string
        account_no:
          type: string
          description: The bank account number of the counterparty.
        iban:
          type: string
          description: The IBAN number of the counterparty's account if applicable.
        sort_code:
          type: string
          description: The sort code of the counterparty's account if applicable.
        routing_number:
          type: string
          description: The routing number of the counterparty's account if applicable.
        bic:
          type: string
          description: The BIC number of the counterparty's account if applicable.
        clabe:
          type: string
          description: The CLABE number of the counterparty's account if applicable.
        ifsc:
          type: string
          description: The IFSC number of the counterparty's account if applicable.
        bsb_code:
          type: string
          description: The BSB number of the counterparty's account if applicable.
        recipient_charges:
          enum:
            - no
            - expected
          description: |-
            Indicates the possibility of the recipient charges.

            :::warning
            This field is deprecated and should be disregarded.
            It is returned for legacy purposes only.
            :::
          type: string
          deprecated: true
      required:
        - id
        - currency
        - type
    CounterpartyCard:
      type: object
      required:
        - id
        - name
        - last_digits
        - scheme
        - country
        - currency
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the counterparty's card.
        name:
          type: string
          description: The name of the counterparty.
        last_digits:
          type: string
          description: The last four digits of the card number.
        scheme:
          type: string
          enum:
            - visa
            - mastercard
          description: The card brand.
        country:
          $ref: "#/components/schemas/CountryCodeCard"
        currency:
          $ref: "#/components/schemas/Currency"
    CounterpartyError:
      type: object
      properties:
        code:
          type: integer
          description: The error code.
        message:
          type: string
          description: The description of the error.
        params:
          $ref: "#/components/schemas/CounterpartyErrorParams"
      required:
        - code
        - message
    CounterpartyErrorParams:
      type: object
      description: Additional parameters related to the error.
      properties:
        counterparty_id:
          type: string
          format: uuid
          description: The ID of the Revolut counterparty (i.e. internal counterparty)
            that already exists.
    CountryCode:
      type: string
      pattern: ^[A-Z]{2}$
      description: The counterparty's bank country, provided as a 2-letter [ISO
        3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
        code.
    CountryCodeCard:
      type: string
      pattern: ^[A-Z]{2}$
      description: The country of the card issuer, provided as a 2-letter [ISO
        3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
        code.
    CountryCodeMerchant:
      type: string
      pattern: ^[A-Z]{2,3}$
      description: >-
        The bank country of the merchant, provided as an [ISO
        3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
        code.

        Typically 3 letters, though in some cases, card networks might provide
        it as a 2-letter code.
    CreateAccountingCategoryRequest:
      type: object
      description: The accounting category to create.
      required:
        - name
        - code
      properties:
        name:
          type: string
          description: The full name for the accounting category.
          minLength: 1
          maxLength: 60
          examples:
            - Work From Home equipment
        code:
          type: string
          description: The code name for the accounting category.
          minLength: 1
          maxLength: 50
          examples:
            - WFH
        default_tax_rate_id:
          type: string
          format: uuid
          description: The ID of the default [tax rate](/docs/api/business#get-tax-rate)
            that should be applied to items in this accounting category unless
            overridden for a specific item.
          examples:
            - f93f6c3e-bf95-4b58-bfcd-e642c4fc098e
    CreateCounterpartyRequest:
      type: object
      description: ""
      properties:
        profile_type:
          type: string
          enum:
            - personal
            - business
          description: >-
            The type of the Revolut profile.

            Indicates whether the counterparty is a personal or business
            account.

            Provide it when adding a Revolut counterparty via Revtag.
        revtag:
          type: string
          description: The
            [Revtag](https://help.revolut.com/help/transfers/internal-transfers/username-payments/revtags/)
            of the counterparty to add.
        name:
          type: string
          description: >
            The name of the counterparty, provided when the counterparty is
            being added via **Revtag**.


            If specified, `individual_name` and `company_name` must be empty.


            :::note

            The name that you provide must match or closely match the actual
            name associated with the account that you're trying to add.

            Otherwise, the creation fails and a `404` error is returned.

            :::
        company_name:
          type: string
          description: >-
            The name of the counterparty, provided when the counterparty is a
            **company** (business account type) and is **not** being added via
            Revtag.


            If specified, `individual_name` and `name` must be empty.


            :::warning

            The `company_name` must contain at least 2 letters (not just
            characters).

            For example, names like `12` will fail validation because they are
            two characters but not two letters.

            :::
        individual_name:
          $ref: "#/components/schemas/IndividualName"
        bank_country:
          $ref: "#/components/schemas/BankCountryCode"
        currency:
          $ref: "#/components/schemas/Currency"
        account_no:
          type: string
          description: The bank account number of the counterparty.
        iban:
          type: string
          description: The IBAN number of the counterparty's account. This field is
            displayed for IBAN countries.
        sort_code:
          type: string
          description: The sort code of the counterparty's account. This field is required
            for GBP accounts.
        routing_number:
          type: string
          description: The routing number of the counterparty's account. This field is
            required for USD accounts.
        bic:
          type: string
          description: The BIC number of the counterparty's account. This field is
            required for non-SEPA IBAN/SWIFT.
        clabe:
          type: string
          description: The CLABE number of the counterparty's account. This field is
            required for SWIFT MX.
        ifsc:
          type: string
          description: The IFSC number of the counterparty's account. This field is
            required for INR accounts.
        bsb_code:
          type: string
          description: The BSB number of the counterparty's account. This field is
            required for AUD accounts.
        address:
          $ref: "#/components/schemas/BeneficiaryAddress"
    CreateLabelGroupRequest:
      type: object
      required:
        - name
        - labels
      properties:
        name:
          description: The name for the new label group.
          type: string
          minLength: 1
          maxLength: 100
        labels:
          description: >-
            The labels to create in the new group.


            The maximum number of labels you can create for a new group is 200.

            If you need to add more, you can add them later by [creating new
            labels individually](/docs/api/business#create-label).
          type: array
          minItems: 1
          maxItems: 200
          items:
            $ref: "#/components/schemas/CreateLabelRequest"
    CreateLabelRequest:
      type: object
      required:
        - name
      properties:
        name:
          description: The name for the new label.
          type: string
          minLength: 1
          maxLength: 100
    CreatePaymentDraftRequest:
      type: object
      properties:
        title:
          type: string
          description: The title of the payment draft.
        schedule_for:
          type: string
          format: date
          description: The scheduled date of the payment draft in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        payments:
          type: array
          description: The details of the payment(s) to be made.
          items:
            $ref: "#/components/schemas/PaymentRequest"
      required:
        - payments
    CreatePaymentDraftResponse:
      type: object
      properties:
        id:
          type: string
          format: number
          description: The ID of the payment draft created.
      required:
        - id
    CreatePayoutLinkRequest:
      type: object
      required:
        - counterparty_name
        - request_id
        - account_id
        - amount
        - currency
        - reference
      properties:
        counterparty_name:
          $ref: "#/components/schemas/PayoutLinkCounterpartyName"
        save_counterparty:
          type: boolean
          description: >-
            Indicates whether to save the recipient as your counterparty upon
            link claim.

            If `false` then the counterparty will not show up on your
            counterparties list, for example, when you retrieve your
            counterparties. 

            However, you will still be able to retrieve this counterparty by its
            ID.


            If you don't choose to save the counterparty on link creation, you
            can do it later from your transactions list in the Business app.
          default: false
        request_id:
          $ref: "#/components/schemas/PayoutLinkRequestId"
          description: >-
            The ID of the request, provided by the sender.


            :::warning

            To ensure that a link payment is not processed multiple times if
            there are network or system errors, the same `request_id` should be
            used for requests related to the same link.

            :::
          examples:
            - 5a7fcb46-4be4-47d4-a56f-27a2e5b78dd1
        account_id:
          $ref: "#/components/schemas/PayoutLinkAccountId"
        amount:
          $ref: "#/components/schemas/PayoutLinkAmount"
        currency:
          $ref: "#/components/schemas/Currency"
          examples:
            - GBP
        reference:
          type: string
          minLength: 1
          maxLength: 100
          description: >-
            The reference for the payout link.

            A piece of text or number you provide to help identify what the
            payment relates to.

            It can be used, for example, for reconciliation or tracking
            purposes.


            You might include an invoice number, account or transaction ID, or
            any other reference meaningful to you or the recipient.
        payout_methods:
          $ref: "#/components/schemas/PayoutLinkPayoutMethods"
          default:
            - revolut
            - bank_account
        expiry_period:
          $ref: "#/components/schemas/PayoutLinkExpiryPeriod"
        transfer_reason_code:
          $ref: "#/components/schemas/TransferReasonCode"
    CreateTaxRateRequest:
      allOf:
        - $ref: "#/components/schemas/AccountingTaxRate"
        - description: The tax rate to create.
          required:
            - name
            - percentage
    CreateWebhookRequest:
      type: object
      required:
        - url
      properties:
        url:
          $ref: "#/components/schemas/Url"
          description: A valid webhook URL to which to send event notifications. The
            supported protocol is `https`.
        events:
          description: |-
            A list of event types to subscribe to.
            If you don't provide it, you're automatically subscribed to the [default event types](/docs/guides/manage-accounts/webhooks/about-webhooks#default-event-types).
          type: array
          items:
            $ref: "#/components/schemas/WebhookEventType"
          default:
            - TransactionCreated
            - TransactionStateChanged
    Currency:
      type: string
      pattern: ^[A-Z]{3}$
      description: "[ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code
        in upper case."
    Error:
      type: object
      properties:
        code:
          type: integer
          description: The error code.
        message:
          type: string
          description: The description of the error.
      required:
        - code
        - message
    ErrorWithId:
      required:
        - code
        - message
        - error_id
      type: object
      properties:
        error_id:
          type: string
          description: The ID of the specific error instance. Used for traceability.
        code:
          type: integer
          description: The error code.
        message:
          type: string
          description: The description of the error.
    ErrorUnauthorized:
      type: object
      description: >-
        Unauthorised


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

        For more information, see the **Authorization** section.
      allOf:
        - $ref: "#/components/schemas/ErrorWithStatus"
    ErrorUnprocessableEntity:
      type: object
      description: >-
        Unprocessable entity


        Returned, for example, when you try to modify a resource which is not a
        in state that would allow for modifications, e.g. a card invitation in
        state `failed`.
      properties:
        code:
          type: integer
          description: The error code.
        message:
          type: string
          description: The description of the error.
      required:
        - message
    ErrorWithStatus:
      type: object
      description: Error returning a status instead of code.
      properties:
        status:
          type: integer
          description: The error code.
        message:
          type: string
          description: The description of the error.
      required:
        - status
        - message
    EstimatedTime:
      type: object
      description: The estimated time of the inbound transfer of the funds, i.e. when
        we expect the recipient to receive the transfer.
      properties:
        unit:
          type: string
          description: The estimated time unit of the inbound transfer of the funds.
          enum:
            - days
            - hours
          examples:
            - days
        min:
          type: integer
          description: The minimum time estimate.
          examples:
            - 1
        max:
          type: integer
          description: The maximum time estimate.
          examples:
            - 3
      required:
        - unit
    ExchangePartFrom:
      type: object
      description: The details of the currency to exchange from.
      properties:
        account_id:
          type: string
          format: uuid
          description: The ID of the account to sell currency from.
        currency:
          $ref: "#/components/schemas/Currency"
        amount:
          type: number
          format: double
          description: |-
            The amount of currency.
            Specify **only** if you want to sell currency.
      required:
        - account_id
        - currency
    ExchangePartTo:
      type: object
      description: The details of the currency to exchange to.
      properties:
        account_id:
          type: string
          format: uuid
          description: The ID of the account to receive exchanged currency into.
        currency:
          $ref: "#/components/schemas/Currency"
        amount:
          type: number
          format: double
          description: |-
            The amount of currency.
            Specify **only** if you want to buy currency.
      required:
        - account_id
        - currency
    ExchangeRateResponse:
      type: object
      properties:
        from:
          description: The money to sell.
          $ref: "#/components/schemas/AmountWithCurrency"
        to:
          description: The money to receive.
          $ref: "#/components/schemas/AmountWithCurrency"
        rate:
          type: number
          format: double
          description: The proposed exchange rate.
        fee:
          description: The expected fee for the transaction.
          $ref: "#/components/schemas/Fee"
        rate_date:
          type: string
          format: date-time
          description: The date of the proposed exchange rate in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
      required:
        - from
        - to
        - rate
        - fee
        - rate_date
    ExchangeReason:
      type: object
      required:
        - code
        - name
      properties:
        code:
          type: string
          enum:
            - business_expense_and_claims
            - fees_and_charges
            - fund_transfer_and_intracompany_payment
            - gifts_and_donations
            - government_services_and_tax
            - insurance
            - inventory
            - investment_dividend_and_interest
            - loan_and_loan_repayment
            - marketing
            - payment_for_goods_and_services
            - payroll
            - refund
            - rental_and_property
            - sales
            - service_provider_and_software
            - travel_and_transportation
            - utilities
          description: Category code of the reason for the exchange.
        name:
          type: string
          description: Category name of the reason for the exchange.
    ExchangeReasons:
      type: array
      items:
        $ref: "#/components/schemas/ExchangeReason"
      description: The list of available exchange reasons.
      examples:
        - $ref: "#/components/examples/exchangeReasons"
    ExchangeReasonCode:
      type: string
      description: >-
        The reason code for the exchange.

        Depending on the country and the amount of funds to be exchanged, you
        might be required to provide an exchange reason. 

        You can check available reason codes with the [`GET /exchange-reasons`
        operation](/docs/api/business#get-exchange-reasons).


        If an exchange reason is not required, this field is ignored.
      examples:
        - fund_transfer_and_intracompany_payment
    ExchangeRequest:
      type: object
      description: The exchange information.
      properties:
        from:
          $ref: "#/components/schemas/ExchangePartFrom"
        to:
          $ref: "#/components/schemas/ExchangePartTo"
        reference:
          type: string
          description: >-
            The reference for the exchange transaction, provided by you.

            It helps you to identify the transaction if you want to look it up
            later.
        request_id:
          type: string
          description: >-
            The ID of the request, provided by you.

            It helps you identify the transaction in your system.


            :::warning

            To ensure that an exchange transaction is not processed multiple
            times if there are network or system errors,

            the same `request_id` should be used for requests related to the
            same transaction.

            :::
          maxLength: 40
        exchange_reason_code:
          $ref: "#/components/schemas/ExchangeReasonCode"
      required:
        - from
        - to
        - request_id
    ExchangeResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the created transaction.
        type:
          type: string
          description: The type of the transaction. For money exchange, it is `exchange`.
        reason_code:
          type: string
          description: >-
            The reason why the transaction was failed or declined.


            Present only when the `state` parameter of the transaction is
            `declined` or `failed`.
        created_at:
          type: string
          format: date-time
          description: The date and time the transaction was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        completed_at:
          type: string
          format: date-time
          description: The date and time the transaction was completed in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        state:
          $ref: "#/components/schemas/TransactionState"
    Expense:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the expense.
        state:
          $ref: "#/components/schemas/ExpenseState"
        transaction_type:
          $ref: "#/components/schemas/ExpenseTransactionType"
        description:
          type: string
          description: The description of the expense.
        submitted_at:
          type: string
          format: date-time
          description: The date and time the expense was submitted in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        completed_at:
          type: string
          format: date-time
          description: The date and time the expense was completed in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        payer:
          type: string
          description: The name of the [team
            member](/docs/api/business#delete-team-member) who made the
            transaction, refund request, or ATM withdrawal, or the name of the
            business if the related transaction is of type `fee`.
        merchant:
          type: string
          description: The name of the merchant.
        transaction_id:
          type: string
          format: uuid
          description: The ID of the [transaction](/docs/api/business#get-transaction)
            related to the expense. Not available for transactions of type
            `external`.
        expense_date:
          type: string
          format: date-time
          description: >-
            The expense data depends on the type of the expense and whether it
            has been completed.


            Typically, it's the date and time of the expense
            [transaction](/docs/api/business#get-transaction) in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.

            - If the transaction related to the expense is completed, it is the
            date and time of its completion
            ([`completed_at`](/docs/api/business#get-transaction#response)).

            - Otherwise, it is the date and time of its creation
            ([`created_at`](/docs/api/business#get-transaction#response)).


            For reimbursements, it's the payment date provided in the
            reimbursement request.
        labels:
          type: object
          description: >-
            The [labels](/docs/api/business#delete-label) added to the expense,
            organised in groups.


            You can have up to 5 label groups, with max. 1 label per group.


            The labels are provided as an object, where each key is the name of
            a label group, and each value is a single-element array containing
            the selected label from that group.
          maxProperties: 5
          additionalProperties:
            $ref: "#/components/schemas/LabelGroup"
        splits:
          type: array
          description: >-
            The splits of the expense.


            A single expense can be divided into multiple parts (splits), for
            example, to allocate different portions of the expense to different
            categories.
          items:
            $ref: "#/components/schemas/ExpenseSplit"
        receipt_ids:
          type: array
          description: The IDs of the receipts related to the expense.
          items:
            type: string
            format: uuid
        spent_amount:
          type: object
          description: The expense amount in billed currency.
          properties:
            amount:
              $ref: "#/components/schemas/Amount"
            currency:
              $ref: "#/components/schemas/Currency"
          required:
            - amount
            - currency
      required:
        - id
        - state
        - transaction_type
        - expense_date
        - labels
        - splits
        - spent_amount
        - receipt_ids
    Expenses:
      type: array
      items:
        $ref: "#/components/schemas/Expense"
    ExpenseSplit:
      type: object
      required:
        - amount
        - category
        - tax_rate
      properties:
        amount:
          type: object
          description: The original amount of the expense split.
          properties:
            amount:
              $ref: "#/components/schemas/Amount"
            currency:
              $ref: "#/components/schemas/Currency"
        category:
          $ref: "#/components/schemas/Category"
        tax_rate:
          $ref: "#/components/schemas/TaxRate"
    ExpenseState:
      enum:
        - missing_info
        - awaiting_review
        - rejected
        - pending_reimbursement
        - refund_requested
        - refunded
        - approved
        - reverted
      description: |-
        Indicates the state of the expense. Possible values:

          - `missing_info`: The expense is missing some required information.

            This is the initial state of the expense when it's first created.
            Once the missing information is provided, the expense is ready to be submitted.

          - `awaiting_review`: The expense is awaiting approval before it can be completed.

            The approver can approve, reject, or request repayment for the expense.
            It is also possible for the submitter to undo the submission at this stage.

          - `rejected`: The expense has been rejected by the approver. 

            The expense submitter (typically, the payer) should fix the issue that was the reason for the rejection and resubmit the expense.

          - `pending_reimbursement`: The reimbursement request has been approved, and the expense is awaiting reimbursement.

            This state is possible for reimbursements (transaction type = `External`). 

          - `refund_requested`: The expense has been rejected and repayment has been requested.*

            This state is possible for card transactions.
            It indicates that following the review, the approver rejected the expense and requested that it be paid back to the business account.
            This can happen, for example, if an employee accidentally makes a personal purchase with their business card.
            Once the money has been returned, the **admin** can mark this expense as repaid.

          - `refunded`: The expense has been repaid.*

            This state indicates that the admin has marked the expense as repaid.

          - `approved`: The expense has been approved and is now completed.*

          - `reverted`: The expense has been reverted. 

            This status indicates that the transaction related to the expense has been reverted.
            In such a case, the expense status is automatically set to `reverted`, and the expense is completed.
            This can happen, for example, when the transaction has been reverted by the merchant.

        _*Additionally, if an admin has previously approved the expense, marked it as repaid/completed, or requested repayment, they can revert their decision.
        In such a case, the expense goes back to the initial `missing_info` state._

        For more information, see the guides: [Retrieve expenses and receipts](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses#expense-state).
      type: string
    ExpenseTransactionType:
      enum:
        - atm
        - card_payment
        - fee
        - transfer
        - external
        - mileage_reimbursement
      description: The type of the [transaction](/docs/api/business#get-transaction)
        related to the expense.
      type: string
    Fee:
      type: object
      properties:
        amount:
          type: number
          format: double
          description: The fee amount.
        currency:
          $ref: "#/components/schemas/Currency"
    IndividualName:
      type: object
      description: >-
        The name of the counterparty, provided when the counterparty is an
        **individual** (personal account type) and is **not** being added via
        Revtag.


        If specified, `company_name` and `name` must be empty.
      properties:
        first_name:
          type: string
          description: The first name of the individual counterparty.
        last_name:
          type: string
          description: The last name of the individual counterparty.
    MerchantControlsSchema:
      type: object
      required:
        - control_type
        - merchant_ids
      properties:
        control_type:
          type: string
          enum:
            - block
            - allow
          description: The type of control to apply.
        merchant_ids:
          type: array
          minItems: 1
          maxItems: 20
          description: >-
            The list of IDs of merchants to which the control applies.


            :::tip

            To find merchant IDs, check transaction details (→ `merchant.id`).

            You can fetch transaction details for a [specific
            transaction](/docs/api/business#get-transaction#response) or for
            [all transactions](/docs/api/business#get-transactions#response).

            :::
          items:
            type: string
            format: uuid
    LabelGroup:
      type: array
      minItems: 1
      maxItems: 1
      items:
        type: string
      description: A label group with the selected label from that group.
    LabelGroupResponse:
      type: object
      required:
        - id
        - name
        - created_at
        - updated_at
      properties:
        id:
          type: string
          format: uuid
          description: The unique ID of the label group.
          readOnly: true
        name:
          type: string
          description: The name of the label group.
          minLength: 1
          maxLength: 100
        created_at:
          type: string
          format: date-time
          description: The date and time the label group was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: The date and time the label group was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          readOnly: true
    LabelResponse:
      type: object
      required:
        - id
        - name
        - created_at
        - updated_at
      properties:
        id:
          type: string
          format: uuid
          description: The unique ID of the label.
          readOnly: true
        name:
          type: string
          description: The name of the label.
          minLength: 1
          maxLength: 100
        created_at:
          type: string
          format: date-time
          description: The date and time the label was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: The date and time the label was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          readOnly: true
    PaymentDraftResponse:
      type: object
      properties:
        scheduled_for:
          type: string
          format: date
          description: The scheduled date of the payment draft in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        title:
          type: string
          description: The title of the payment draft.
        payments:
          type: array
          description: The list of payments in the bulk.
          items:
            $ref: "#/components/schemas/PaymentInfo"
      required:
        - payments
    PageToken:
      type: string
      description: >-
        Cursor for the next page. 

        Used for pagination when the total number of results exceeds the maximum
        number per page.


        To get the next page of results, make a new request and set `page_token`
        to the `next_page_token` value returned in the previous response.

        :::note

        If there are no more results to fetch, `next_page_token` is not returned
        in the response.

        :::
      examples:
        - MjAyNi0wMS0wMVQwOToxMzoxNS40MDZaN2RhNTFjZGY0LTZiYjctNDRkNi04OWU1LTc2OWEzZGYxZDc5ZA
      contentEncoding: base64
    PaymentDraftsResponse:
      type: object
      required:
        - payment_orders
      properties:
        payment_orders:
          type: array
          description: The list of payment drafts that haven't been sent for processing.
          items:
            $ref: "#/components/schemas/PaymentOrderInfo"
    PaymentInfo:
      type: object
      description: The details of the payment draft.
      properties:
        id:
          type: string
          format: uuid
          description: >-
            The ID of the payment.


            Do not confuse it with the [payment draft
            ID](/docs/api/business#get-payment-drafts#response) or [transaction
            ID](/docs/api/business#get-transaction).
        amount:
          $ref: "#/components/schemas/AmountWithCurrency"
        currency:
          $ref: "#/components/schemas/Currency"
        account_id:
          type: string
          format: uuid
          description: The ID of the account to pay from.
        receiver:
          $ref: "#/components/schemas/PaymentReceiver"
        state:
          $ref: "#/components/schemas/PaymentState"
        reason:
          type: string
          description: The reason for the current state.
        error_message:
          type: string
          description: The description of the error message.
        current_charge_options:
          type: object
          description: The explanation of conversion process.
          required:
            - from
            - to
          properties:
            from:
              $ref: "#/components/schemas/AmountWithCurrency"
            to:
              $ref: "#/components/schemas/AmountWithCurrency"
            rate:
              type: string
            fee:
              $ref: "#/components/schemas/AmountWithCurrency"
        reference:
          type: string
          description: The description of the transaction.
      required:
        - id
        - amount
        - account_id
        - receiver
        - state
        - current_charge_options
    PaymentOrderInfo:
      type: object
      description: A list of payments.
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the payment draft.
        scheduled_for:
          type: string
          format: date
          description: The scheduled date of the payment draft in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        title:
          type: string
          description: The title of the payment draft.
        payments_count:
          type: integer
          description: The number of payments in the payment draft.
      required:
        - id
        - payments_count
    PaymentReceiver:
      type: object
      description: >-
        The details of the transfer recipient.


        If the counterparty has multiple payment methods available (e.g. 2
        accounts, or 1 account and 1 card), you must specify the account
        (`account_id`) or card (`card_id`) to which you want to transfer the
        money.
      properties:
        counterparty_id:
          type: string
          format: uuid
          description: The ID of the receiving counterparty.
        account_id:
          type: string
          format: uuid
          description: >-
            The ID of the receiving counterparty's account. Used for bank
            transfers.


            If the counterparty has multiple payment methods available, use it
            to specify the account to which you want to send the money.
        card_id:
          type: string
          format: uuid
          description: >-
            The ID of the receiving counterparty's card.

            Used for card transfers.


            If the counterparty has multiple payment methods available, use it
            to specify the card to which you want to send the money.
      required:
        - counterparty_id
    PaymentRequest:
      type: object
      description: The details of the draft payment.
      properties:
        account_id:
          type: string
          description: >-
            The ID of the account to pay from. 


            :::note

            You can specify only one account ID for multiple payments in the
            same payment draft.

            :::
        receiver:
          $ref: "#/components/schemas/PaymentReceiver"
        amount:
          type: number
          format: double
          description: The amount of the payment.
        currency:
          $ref: "#/components/schemas/Currency"
        reference:
          type: string
          description: >-
            The reference for the payment.

            A piece of text or number you provide to help identify what the
            payment relates to.

            It can be used, for example, for reconciliation or tracking
            purposes.


            You might include an invoice number, account or transaction ID, or
            any other reference meaningful to you.
        charge_bearer:
          type: string
          description: |-
            The party that should bear the transaction fees related to the selected transaction route if applied.
            Possible options are: 
            - `shared`: Also known as **SHA**. The transaction route fees are split between the sender and the recipient. 
              The sender pays the fees charged by their bank, while the recipient pays the fees charged by the receiving and any intermediary banks.
            - `debtor`: Also known as **OUR**. The sender pays all explicit transaction fees.

            :::note
            - This field is not supported for [bulk payments](/docs/guides/manage-accounts/transfers/payment-drafts#use-cases). 
            - Some transactions with fees might not support charge bearer selection.
              If this is the case, the request will return error `3287`.
              To proceed with the default fee handling, remove this field from your request and try again.
            :::
          enum:
            - shared
            - debtor
      required:
        - account_id
        - receiver
        - amount
        - currency
        - reference
    PaymentState:
      enum:
        - CREATED
        - PENDING
        - COMPLETED
        - REVERTED
        - DECLINED
        - CANCELLED
        - FAILED
        - DELETED
      type: string
      description: Indicates the state of the transaction.
    PaymentSystem:
      enum:
        - chaps
        - bacs
        - faster_payments
        - sepa
        - swift
        - ach
        - elixir
        - sorbnet
        - nics
        - rix
        - sumclearing
      type: string
      description: Indicates the payment scheme used to execute transactions.
      examples:
        - swift
    PayoutLinkInitialProps:
      type: object
      required:
        - id
        - state
        - created_at
        - updated_at
        - counterparty_name
        - request_id
        - payout_methods
        - account_id
        - amount
        - currency
        - reference
        - save_counterparty
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the payout link.
        state:
          $ref: "#/components/schemas/PayoutLinkState"
        created_at:
          type: string
          format: date-time
          description: The date and time the payout link was created in [ISO 8601
            format](https://en.wikipedia.org/wiki/ISO_8601).
        updated_at:
          type: string
          format: date-time
          description: The date and time the payout link was last updated in [ISO 8601
            format](https://en.wikipedia.org/wiki/ISO_8601).
        counterparty_name:
          $ref: "#/components/schemas/PayoutLinkCounterpartyName"
        save_counterparty:
          type: boolean
          default: false
          description: >-
            Indicates whether you chose to save the recipient as your
            counterparty upon link claim. 

            If `false` then the counterparty will not show up on your
            counterparties list, for example, when you [retrieve your
            counterparties](/docs/api/business#get-counterparties). 

            However, you can still [retrieve this counterparty by its
            ID](/docs/api/business#get-counterparty).


            If you didn't choose to save the counterparty on link creation, you
            can still do it from your transactions list in the Business app.
        request_id:
          $ref: "#/components/schemas/PayoutLinkRequestId"
        expiry_date:
          $ref: "#/components/schemas/PayoutLinkExpiryDate"
        payout_methods:
          $ref: "#/components/schemas/PayoutLinkPayoutMethods"
        account_id:
          $ref: "#/components/schemas/PayoutLinkAccountId"
        amount:
          $ref: "#/components/schemas/PayoutLinkAmount"
        currency:
          $ref: "#/components/schemas/Currency"
        url:
          type: string
          format: uri
          description: The URL of the payout link. Returned only for active payout links.
        reference:
          $ref: "#/components/schemas/PayoutLinkReference"
        transfer_reason_code:
          $ref: "#/components/schemas/TransferReasonCode"
    PayoutLinkAdditionalProps:
      type: object
      properties:
        counterparty_id:
          type: string
          format: uuid
          description: >-
            The ID of the counterparty created based on the recipient's
            details. 


            :::note

            By default, the newly created counterparty is hidden from your
            counterparties list. 


            To automatically save it when the link is claimed, pass the
            `save_counterparty` parameter set to `true`. 


            Alternatively, you can add the recipient to your counterparties
            later from the list of transactions in the Business app.

            :::
        transaction_id:
          type: string
          format: uuid
          description: The ID of the created transaction. Returned only if the payout has
            been claimed.
        cancellation_reason:
          type: string
          readOnly: true
          enum:
            - too_many_name_check_attempts
          description: The reason for which the payout link was cancelled.
    PayoutLink:
      allOf:
        - $ref: "#/components/schemas/PayoutLinkInitialProps"
        - $ref: "#/components/schemas/PayoutLinkAdditionalProps"
    PayoutLinks:
      type: array
      items:
        $ref: "#/components/schemas/PayoutLink"
      description: A list of payout links
    PayoutLinkAccountId:
      type: string
      format: uuid
      description: The ID of the sender's account.
      examples:
        - 85f515e4-588f-4496-a6a5-a7615a193e6b
    PayoutLinkAmount:
      type: number
      format: double
      description: >-
        The amount of money to be transferred.


        :::note

        The amount must be between £1 and £2,500, or equivalent in the selected
        currency.

        :::
      examples:
        - 105.6
    PayoutLinkCounterpartyName:
      type: string
      description: The name of the counterparty provided by the sender.
      examples:
        - John Smith
    PayoutLinkExpiryDate:
      type: string
      format: date-time
      description: >-
        The date and time after which the payout link expires in [ISO 8601
        format](https://en.wikipedia.org/wiki/ISO_8601).

        If the recipient doesn't claim the money before then, the payout link
        expires and is no longer available.


        The default and maximum value is the date and time of creating the link
        + 7 days.
      default: now + 7 days
      maximum: now + 7 days
      minimum: now + 1 day
      examples:
        - 2023‐07‐20T15:09:24Z
    PayoutLinkExpiryPeriod:
      type: string
      format: duration
      description: >-
        The period after which the payout link expires if not claimed before,
        provided in [ISO 8601 format](https://en.wikipedia.org/wiki/ISO_8601).


        The default and maximum value is 7 days from the link creation.
      default: P7D
      maximum: P7D
      minimum: P1D
      examples:
        - P3D
    PayoutLinkPayoutMethods:
      type: array
      items:
        $ref: "#/components/schemas/PayoutMethod"
      explode: true
      description: >-
        The list of payout methods that the recipient can use to claim the
        payout, where:

        - `revolut`: Revolut peer-to-peer (P2P) transfer

        - `bank_account`: External bank transfer

        - `card`: Card transfer
          :::note
          - This payout method is available in the UK and the EEA.
          - This payout method is not available in Sandbox.
          :::
      examples:
        - - revolut
          - bank_account
          - card
    PayoutLinkReference:
      type: string
      description: The reference for the payout transaction, provided by the sender.
      examples:
        - Rent
    PayoutLinkRequestId:
      type: string
      description: The ID of the request, provided by the sender.
      examples:
        - 5a7fcb46-4be4-47d4-a56f-27a2e5b78dd1
    PayoutLinkState:
      enum:
        - created
        - failed
        - awaiting
        - active
        - expired
        - cancelled
        - processing
        - processed
      type: string
      description: |-
        The state that the payout link is in. Possible states are:
        - `created`: The payout link has been created, but the amount has not yet been [blocked](/docs/guides/manage-accounts/transfers/payout-links#sender-link-generation).
        - `failed`: The payout link couldn't be generated due to a failure during transaction booking.
        - `awaiting`: The payout link is awaiting approval.
        - `active`: The payout link can be redeemed.
        - `expired`: The payout link cannot be redeemed because it wasn't claimed before its expiry date.
        - `cancelled`: The payout link cannot be redeemed because it was cancelled.
        - `processing`: The payout link has been redeemed and is being processed.
        - `processed`: The payout link has been redeemed and the money has been transferred to the recipient.
    PayoutMethod:
      type: string
      description: The payout method that the recipient can use to claim the payout.
      enum:
        - revolut
        - bank_account
        - card
    ProfileType:
      type: string
      enum:
        - personal
        - business
      description: |-
        The type of the counterparty.
        Indicates whether the recipient is an individual or a company.
    ResourceCreatedResponse:
      description: Successfully created resource.
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the created resource.
    Role:
      type: object
      properties:
        id:
          type: string
          description: The ID of the role. This can be a UUID or other default role such
            as `OWNER`.
        name:
          type: string
          description: The name of the role.
        created_at:
          type: string
          description: The date and time the role was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          format: date-time
        updated_at:
          type: string
          description: The date and time the role was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          format: date-time
      required:
        - id
        - name
        - created_at
        - updated_at
    SpendProgram:
      description: |-
        The [spend program](https://help.revolut.com/business/help/making-paymentsbusiness/spend-controls/setting-card-presets-for-my-team-members/) assigned to the card.
        :::note
        To use this property, please contact [Revolut API Support](mailto:api-requests@revolut.com).
        :::
      type: object
      readOnly: true
      properties:
        label:
          description: The name of the spend program.
          type: string
          maxLength: 30
      required:
        - label
    SpendingLimitPeriodic:
      type: object
      description: The limit for transactions within a given period.
      properties:
        amount:
          type: number
          format: double
          description: The value of the spending limit.
        currency:
          $ref: "#/components/schemas/TransactionLimitCurrency"
      required:
        - amount
        - currency
    SpendingLimitSingleTransaction:
      type: object
      description: The limit for a single transaction.
      properties:
        amount:
          type: number
          format: double
          description: The value of the spending limit.
        currency:
          $ref: "#/components/schemas/TransactionLimitCurrency"
      required:
        - amount
        - currency
    SpendingLimits:
      description: All spending limits set for the card.
      type: object
      $ref: "#/components/schemas/SpendingLimitsSchema"
    SpendingLimitsSchema:
      type: object
      properties:
        single:
          description: The limit for a single transaction.
          $ref: "#/components/schemas/SpendingLimitSingleTransaction"
        day:
          description: The daily limit for transactions.
          $ref: "#/components/schemas/SpendingLimitPeriodic"
        week:
          description: The weekly limit for transactions.
          $ref: "#/components/schemas/SpendingLimitPeriodic"
        month:
          description: The monthly limit for transactions.
          $ref: "#/components/schemas/SpendingLimitPeriodic"
        quarter:
          description: The quarterly limit for transactions.
          $ref: "#/components/schemas/SpendingLimitPeriodic"
        year:
          description: The yearly limit for transactions.
          $ref: "#/components/schemas/SpendingLimitPeriodic"
        all_time:
          description: The all-time limit for transactions.
          $ref: "#/components/schemas/SpendingLimitPeriodic"
      examples:
        - single:
            amount: 200.22
            currency: GBP
          week:
            amount: 200.44
            currency: GBP
    SpendingPeriodSchema:
      type: object
      properties:
        start_date:
          type: string
          format: date
          description: >-
            The start date (inclusive) of the spending period, in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`).

            Uses the [timezone set by the
            business](https://business.revolut.com/settings/appearance), or
            defaults to `Europe/London`.
          examples:
            - 2025-09-26
        end_date:
          type: string
          format: date
          description: >-
            The end date (inclusive) of the spending period, in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format (`YYYY-MM-DD`).

            Uses the [timezone set by the
            business](https://business.revolut.com/settings/appearance), or
            defaults to `Europe/London`.
          examples:
            - 2030-12-31
        end_date_action:
          type: string
          enum:
            - lock
            - terminate
          description: The action to take after the end date of the spending period.
      anyOf:
        - required:
            - start_date
        - required:
            - end_date
            - end_date_action
    TaxRate:
      type: object
      description: The [tax rate](/docs/api/business#delete-tax-rate) applied to the
        expense split.
      required:
        - id
        - name
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the tax rate.
        name:
          type: string
          description: The name of the tax.
          minLength: 1
          maxLength: 20
        percentage:
          type: number
          format: double
          minimum: 0
          maximum: 100
          description: The tax rate percentage applied to the taxable amount. For example,
            `23` for 23%.
    TaxRateResponse:
      type: object
      required:
        - id
        - name
        - created_at
        - updated_at
      properties:
        id:
          type: string
          format: uuid
          description: The unique ID of the tax rate.
          readOnly: true
        name:
          type: string
          description: The name of the tax.
          minLength: 1
          maxLength: 20
        created_at:
          type: string
          format: date-time
          description: The date and time the tax rate was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          readOnly: true
        updated_at:
          type: string
          format: date-time
          description: The date and time the tax rate was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          readOnly: true
        percentage:
          type: number
          format: double
          description: >-
            The tax rate percentage applied to the taxable amount. For example,
            `23` for 23%.


            :::note

            You cannot create negative tax rates manually. 

            However, negative tax rates might be synced from your accounting
            software, if integrated. 

            :::
          minimum: -100
          maximum: 100
    TeamMember:
      type: object
      properties:
        id:
          type: string
          description: The ID of the team member.
          format: uuid
        email:
          type: string
          description: The email of the team member.
          format: email
        first_name:
          type: string
          description: The team member's first name.
        last_name:
          type: string
          description: The team member's last name.
        state:
          $ref: "#/components/schemas/TeamMemberState"
        role_id:
          type: string
          description: The ID of the team member's [role](/docs/api/business#get-roles).
            This can be a UUID or other default role such as `Owner`.
        created_at:
          type: string
          description: The date and time the team member was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          format: date-time
        updated_at:
          type: string
          description: The date and time the team member was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
          format: date-time
      required:
        - id
        - email
        - state
        - role_id
        - created_at
        - updated_at
    TeamMemberState:
      description: The state that the team member is in.
      enum:
        - created
        - confirmed
        - waiting
        - active
        - locked
        - disabled
      type: string
    Transaction:
      type: object
      properties:
        id:
          type: string
          description: The ID of the transaction.
        type:
          $ref: "#/components/schemas/TransactionType"
        request_id:
          type: string
          description: The request ID that you provided previously.
        state:
          $ref: "#/components/schemas/TransactionState"
        reason_code:
          type: string
          description: The reason code when the transaction `state` is `declined` or
            `failed`.
        created_at:
          type: string
          format: date-time
          description: The date and time the transaction was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        updated_at:
          type: string
          format: date-time
          description: The date and time the transaction was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        completed_at:
          type: string
          format: date-time
          description: >-
            The date and time the transaction was completed in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format. 

            This is required when the transaction `state` is `completed`.
        scheduled_for:
          type: string
          format: date
          description: >-
            The scheduled date of the payment, if applicable.

            Provided in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)
            format.
        related_transaction_id:
          type: string
          format: uuid
          description: >-
            The ID of the original transaction to which this transaction is
            related. 

            Returned, for example, when this transaction is a refund of the
            related transaction, or for transactions related to cashback.
        merchant:
          $ref: "#/components/schemas/TransactionMerchant"
        reference:
          type: string
          description: The payment reference.
        legs:
          type: array
          description: >-
            The legs of the transaction:

            - For transactions between your Revolut accounts, there can be 2
            legs, for example, an internal transfer made out of the GBP account
            and into the EUR account.

            - For transactions in other cases, there is only 1 leg.
          items:
            $ref: "#/components/schemas/TransactionLeg"
        card:
          $ref: "#/components/schemas/TransactionCard"
      required:
        - id
        - type
        - state
        - created_at
        - updated_at
        - legs
    Transactions:
      type: array
      items:
        $ref: "#/components/schemas/Transaction"
    TransactionCard:
      type: object
      description: The details of the card associated with the transaction.
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the card.
        card_number:
          type: string
          description: The masked card number.
        first_name:
          type: string
          description: The first name of the cardholder.
        last_name:
          type: string
          description: The last name of the cardholder.
        phone:
          type: string
          description: The phone number of the cardholder in
            [E.164](https://en.wikipedia.org/wiki/E.164) format.
        references:
          type: array
          description: >-
            Card references
            ([`references`](/docs/api/business#get-card#response)).


            :::note

            These are the references that were assigned to the card at the time
            the transaction was made.

            Any [update](/docs/api/business#update-card-references) to card
            references does not affect existing transactions.

            :::
          minItems: 1
          maxItems: 5
          items:
            $ref: "#/components/schemas/CardReference"
          required:
            - id
            - card_number
    TransactionCounterparty:
      type: object
      properties:
        account_id:
          type: string
          format: uuid
          description: The ID of the counterparty account.
        account_type:
          $ref: "#/components/schemas/TransactionCounterpartyAccountType"
        id:
          type: string
          format: uuid
          description: The ID of the counterparty.
      required:
        - account_type
    TransactionCounterpartyAccountType:
      enum:
        - self
        - revolut
        - external
      description: Indicates the type of the account.
      type: string
    TransactionLeg:
      type: object
      description: >-
        The legs of the transaction:

        - For transactions between your Revolut accounts, there can be 2 legs,
        for example, an internal transfer made out of the BGP account and into
        the EUR account.

        - For transactions in other cases, there is only 1 leg.
      properties:
        leg_id:
          type: string
          format: uuid
          description: The ID of the leg.
        amount:
          type: number
          format: double
          description: The amount of the transaction.
        fee:
          type: number
          format: double
          description: The amount of the transaction fee.
        currency:
          $ref: "#/components/schemas/Currency"
        bill_amount:
          type: number
          format: double
          description: The billing amount for cross-currency payments.
        bill_currency:
          $ref: "#/components/schemas/Currency"
        account_id:
          type: string
          format: uuid
          description: The ID of the account that the transaction is associated with.
        counterparty:
          $ref: "#/components/schemas/TransactionCounterparty"
        description:
          type: string
          description: The transaction leg purpose.
        balance:
          type: number
          format: double
          description: The total balance of the account that the transaction is associated
            with.
      required:
        - leg_id
        - amount
        - currency
        - account_id
    TransactionLimitCurrency:
      type: string
      pattern: ^[A-Z]{3}$
      description: The currency of the spending limit, provided as [ISO
        4217](https://en.wikipedia.org/wiki/ISO_4217) code in upper case.
    TransactionMerchant:
      type: object
      description: The information about the merchant (only for card transactions).
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the merchant.
        name:
          type: string
          description: The name of the merchant.
        city:
          type: string
          description: The city of the merchant.
        category_code:
          type: string
          description: The category code of the merchant.
        country:
          $ref: "#/components/schemas/CountryCodeMerchant"
    TransactionPaymentRequest:
      type: object
      properties:
        request_id:
          type: string
          description: >-
            A unique identifier for the transaction, provided by you.  

            This is used for idempotency to prevent duplicate payments. 

            There are no strict format requirements, but we recommend using UUID
            v4 values.


            :::tip[Retrying requests safely with idempotency]

            If you do not receive a response (for example, due to a network
            error or timeout), you can safely retry the request using the same
            `request_id`. 


            If a transaction with the same `request_id` was already created, the
            API will not create a duplicate transaction.


            :::warning[Idempotency expiry]

            Idempotency checks apply only to transactions created **within the
            last 2 weeks**. 

            Reusing a `request_id` **after this period** may result in a **new
            transaction being created**.

            :::
          maxLength: 40
        account_id:
          type: string
          format: uuid
          description: The ID of the account that you send the funds from.
        receiver:
          $ref: "#/components/schemas/PaymentReceiver"
        amount:
          type: number
          format: double
          description: The amount to transfer.
        currency:
          $ref: "#/components/schemas/Currency"
        reference:
          type: string
          maxLength: 140
          description: >-
            The reference for the payment.

            A piece of text or number you provide to help identify what the
            payment relates to.

            It can be used, for example, for reconciliation or tracking
            purposes.


            You might include an invoice number, account or transaction ID, or
            any other reference meaningful to you.


            If the provided reference is longer than 140 characters, it will be
            truncated.

            Note that some recipient banks might truncate the reference even
            further.
        charge_bearer:
          $ref: "#/components/schemas/ChargeBearer"
        transfer_reason_code:
          $ref: "#/components/schemas/TransferReasonCode"
        exchange_reason_code:
          $ref: "#/components/schemas/ExchangeReasonCode"
      required:
        - request_id
        - account_id
        - receiver
        - amount
    TransactionState:
      enum:
        - created
        - pending
        - completed
        - declined
        - failed
        - reverted
      description: >-
        Indicates the transaction state. Possible values:
          - `created`: The transaction has been created and is either processed asynchronously or scheduled for a later time.
          - `pending`: The transaction is pending until it's being processed. If the transfer is made between Revolut accounts, this state is skipped and the transaction is executed instantly.
          - `completed`: The transaction was successful.
          - `declined`: The transaction was unsuccessful. This can happen for a variety of reasons, for example, insufficient account balance, wrong receiver information, etc.
          - `failed`: The transaction was unsuccessful. This can happen for a variety of reasons, for example, invalid API calls, blocked payments, etc.
          - `reverted`: The transaction was reverted. This can happen for a variety of reasons, for example, the receiver being inaccessible.
      type: string
    TransactionType:
      enum:
        - atm
        - card_payment
        - card_refund
        - card_chargeback
        - card_credit
        - charge
        - charge_refund
        - exchange
        - transfer
        - loan
        - fee
        - refund
        - topup
        - topup_return
        - tax
        - tax_refund
      description: Indicates the transaction type.
      type: string
    TransferReason:
      type: object
      properties:
        country:
          $ref: "#/components/schemas/CountryCode"
        currency:
          $ref: "#/components/schemas/Currency"
        code:
          type: string
          description: Category name of the transfer reason.
          enum:
            - advertising
            - advisor_fees
            - business_insurance
            - construction
            - delivery
            - education
            - family
            - fund_investment
            - goods
            - homesend
            - hotel
            - exports
            - insurance_claims
            - insurance_premium
            - loan_repayment
            - medical
            - office
            - other_fees
            - personal_transfer
            - property_purchase
            - property_rental
            - royalties
            - services
            - share_investment
            - tax
            - transfer
            - transportation
            - travel
            - utilities
        description:
          type: string
          description: The description of the given transfer reason.
      required:
        - country
        - currency
        - code
        - description
    TransferReasons:
      type: array
      items:
        $ref: "#/components/schemas/TransferReason"
    TransferReasonCode:
      type: string
      description: >-
        The reason code for the transaction. Transactions to certain countries
        and currencies might require you to provide a transfer reason. 

        You can check available reason codes with the [`GET /transfer-reasons`
        operation](/docs/api/business#get-transfer-reasons).


        If a transfer reason is not required for the given currency and country,
        this field is ignored.
      examples:
        - property_rental
    TransferRequest:
      type: object
      description: Transfer the funds between accounts of the business in the same currency.
      properties:
        request_id:
          type: string
          description: >-
            The ID of the request, provided by you.

            It helps you identify the transaction in your system.


            :::warning

            To ensure that a transfer is not processed multiple times if there
            are network or system errors,

            the same `request_id` should be used for requests related to the
            same transfer.

            :::
          maxLength: 40
        source_account_id:
          type: string
          format: uuid
          description: The ID of the source account that you transfer the funds from.
        target_account_id:
          type: string
          format: uuid
          description: The ID of the target account that you transfer the funds to.
        amount:
          type: number
          format: double
          description: The amount of the funds to be transferred.
        currency:
          $ref: "#/components/schemas/Currency"
        reference:
          type: string
          description: The reference for the funds transfer.
      required:
        - request_id
        - source_account_id
        - target_account_id
        - amount
        - currency
    TransferResponse:
      type: object
      properties:
        id:
          type: string
          description: The ID of the transaction created.
        state:
          $ref: "#/components/schemas/TransactionState"
        created_at:
          type: string
          format: date-time
          description: The date and time the transaction was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        completed_at:
          type: string
          format: date-time
          description: The date and time the transaction was completed in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
      required:
        - id
        - state
        - created_at
    UpdateAccountingCategoryRequest:
      type: object
      description: The new settings for the accounting category.
      minProperties: 1
      properties:
        name:
          type: string
          description: The new full name for the accounting category.
          minLength: 1
          maxLength: 60
          examples:
            - Work From Home equipment
        code:
          type: string
          description: The new code name for the accounting category.
          minLength: 1
          maxLength: 50
          examples:
            - WFH
        default_tax_rate_id:
          type: string
          format: uuid
          description: The ID of the new default [tax
            rate](/docs/api/business#get-tax-rate) that should be applied to
            items in this accounting category unless overridden for a specific
            item.
          examples:
            - f93f6c3e-bf95-4b58-bfcd-e642c4fc098e
    UpdateLabelGroupRequest:
      type: object
      description: The new name for the label group.
      required:
        - name
      properties:
        name:
          description: The new name for the label group.
          type: string
          minLength: 1
          maxLength: 100
    UpdateLabelRequest:
      type: object
      description: The new name for the label.
      required:
        - name
      properties:
        name:
          description: The new name for the label.
          type: string
          minLength: 1
          maxLength: 100
    UpdateTaxRateRequest:
      type: object
      description: The new setting for the tax rate.
      minProperties: 1
      properties:
        name:
          description: The new name for the tax rate.
          type: string
          minLength: 1
          maxLength: 20
    UpdateWebhookRequest:
      type: object
      properties:
        url:
          $ref: "#/components/schemas/Url"
          description: A valid webhook URL to which to send event notifications. The
            supported protocol is `https`.
        events:
          description: A list of event types to subscribe to.
          type: array
          items:
            $ref: "#/components/schemas/WebhookEventType"
    Url:
      description: A valid webhook URL to which to send event notifications. The
        supported protocol is `https`.
      type: string
      format: uri
    ValidateAccountNameRequest:
      discriminator:
        mapping:
          UK: "#/components/schemas/ValidateAccountNameRequestUK"
          AU: "#/components/schemas/ValidateAccountNameRequestAU"
          RO: "#/components/schemas/ValidateAccountNameRequestRO"
          EUR: "#/components/schemas/ValidateAccountNameRequestEUR"
      oneOf:
        - $ref: "#/components/schemas/ValidateAccountNameRequestUK"
        - $ref: "#/components/schemas/ValidateAccountNameRequestAU"
        - $ref: "#/components/schemas/ValidateAccountNameRequestRO"
        - $ref: "#/components/schemas/ValidateAccountNameRequestEUR"
    ValidateAccountNameRequestUK:
      title: UK
      type: object
      properties:
        account_no:
          type: string
          description: The account number of the counterparty.
        sort_code:
          type: string
          description: The sort code of the counterparty's account.
        company_name:
          type: string
          description: >
            The name of the business counterparty.


            **Required** when the account type is business (`individual_name` is
            not specified).
        individual_name:
          type: object
          description: >
            The name of the individual counterparty, split into first name and
            last name.


            **Required** when the account type is personal (`company_name` isn't
            specified).
          required:
            - first_name
            - last_name
          properties:
            first_name:
              type: string
              description: The first name of the recipient.
            last_name:
              type: string
              description: The last name of the recipient.
      required:
        - account_no
        - sort_code
    ValidateAccountNameRequestAU:
      title: AU
      type: object
      properties:
        account_no:
          type: string
          description: The account number of the counterparty.
        bsb:
          type: string
          description: |-
            The BSB (Bank-State-Branch) number for the counterparty's account.
            Used to identify the bank and branch in Australia.
        company_name:
          type: string
          description: >
            The name of the business counterparty.


            **Required** when the account type is business (`individual_name` is
            not specified).
        individual_name:
          type: object
          description: >
            The name of the individual counterparty, split into first name and
            last name.


            **Required** when the account type is personal (`company_name` isn't
            specified).
          required:
            - first_name
            - last_name
          properties:
            first_name:
              type: string
              description: The first name of the recipient.
            last_name:
              type: string
              description: The last name of the recipient.
      required:
        - account_no
        - bsb
    ValidateAccountNameRequestRO:
      title: RO
      type: object
      properties:
        iban:
          type: string
          description: The IBAN (International Bank Account Number) for the counterparty's
            account.
        bic:
          type: string
          description: >-
            The BIC (Bank Identifier Code) for the counterparty's account.

            Also known as the SWIFT code.

            This value is optional. 

            It can be provided, for example, when the automatic BIC detection
            fails and the check is unsuccessful.
        recipient_country:
          type: string
          pattern: ^[A-Z]{2}$
          description: >-
            The counterparty's bank country, provided as a 2-letter [ISO
            3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
            code.


            For RO CoP, the **possible value** is `RO`.
          examples:
            - RO
        recipient_currency:
          type: string
          pattern: ^[A-Z]{3}$
          description: >
            The counterparty account’s currency, provided as a 3-letter [ISO
            4217](https://en.wikipedia.org/wiki/ISO_4217) code.


            For RO CoP, the **possible value** is `RON`.
          examples:
            - RON
        company_name:
          type: string
          description: |
            The name of the business counterparty.

            **Required** when the account type is business (`individual_name` is not specified).

            ⓘ Note that for [RO](/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services), the name you provide helps identify the request, but is **not** used for the actual check.
            The API simply returns the partially masked name associated with the IBAN for you to validate.
            Therefore, the returned name may differ from the one you provide.
        individual_name:
          type: object
          description: |
            The name of the individual counterparty, split into first name and last name.

            **Required** when the account type is personal (`company_name` isn't specified).

            ⓘ Note that for [RO](/docs/guides/manage-accounts/counterparties/confirmation-of-payee#supported-regions-and-services), the name you provide helps identify the request, but is **not** used for the actual check.
            The API simply returns the partially masked name associated with the IBAN for you to validate.
            Therefore, the returned name may differ from the one you provide.
          required:
            - first_name
            - last_name
          properties:
            first_name:
              type: string
              description: The first name of the recipient.
            last_name:
              type: string
              description: The last name of the recipient.
      required:
        - iban
        - recipient_country
        - recipient_currency
    ValidateAccountNameRequestEUR:
      title: EUR
      type: object
      properties:
        iban:
          type: string
          description: The IBAN (International Bank Account Number) for the counterparty's
            account.
        bic:
          type: string
          description: >-
            The BIC (Bank Identifier Code) for the counterparty's account.

            Also known as the SWIFT code.

            It can be provided, for example, when the automatic BIC detection
            fails and the check is unsuccessful.
        recipient_country:
          type: string
          pattern: ^[A-Z]{2}$
          description: The counterparty's bank country, provided as a 2-letter [ISO
            3166](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes)
            code.
          examples:
            - FR
        recipient_currency:
          type: string
          pattern: ^[A-Z]{3}$
          description: >
            The counterparty account’s currency, provided as a 3-letter [ISO
            4217](https://en.wikipedia.org/wiki/ISO_4217) code.


            For VoP, the **possible value** is `EUR`.
          examples:
            - EUR
        company_name:
          type: string
          description: >
            The name of the business counterparty.


            **Required** when the account type is business (`individual_name` is
            not specified).
        individual_name:
          type: object
          description: >
            The name of the individual counterparty, split into first name and
            last name.


            **Required** when the account type is personal (`company_name` isn't
            specified).
          required:
            - first_name
            - last_name
          properties:
            first_name:
              type: string
              description: The first name of the recipient.
            last_name:
              type: string
              description: The last name of the recipient.
      required:
        - iban
        - recipient_country
        - recipient_currency
    ValidateAccountNameResponse:
      discriminator:
        mapping:
          UK: "#/components/schemas/ValidateAccountNameResponseUK"
          AU: "#/components/schemas/ValidateAccountNameResponseAU"
          RO: "#/components/schemas/ValidateAccountNameResponseRO"
          EUR: "#/components/schemas/ValidateAccountNameResponseEUR"
      oneOf:
        - $ref: "#/components/schemas/ValidateAccountNameResponseUK"
        - $ref: "#/components/schemas/ValidateAccountNameResponseAU"
        - $ref: "#/components/schemas/ValidateAccountNameResponseRO"
        - $ref: "#/components/schemas/ValidateAccountNameResponseEUR"
    ValidateAccountNameResponseUK:
      title: UK
      type: object
      properties:
        result_code:
          description: >-
            The result of the check. 


            Possible values for UK:

            - **`matched`:** The name and account type match the provided
            details.

            - **`close_match`:** The name and/or account type are similar to the
            provided values:
              - The name is a match, but the account type is incorrect.
                For example, an individual recipient's name was provided under `company_name`.
                The **actual account type** is returned.
              - The name is similar to the provided values.
                Account type is correct.
                The **actual name** is returned.
              - The name is similar to the provided values, and the account type is incorrect.
                The **actual values** are returned.

              The actual values are returned.
            - **`not_matched`:** The name and account type don't match the
            provided values.

            - **`cannot_be_checked`:** The check cannot be performed and retries
            won't help.
              For example, the recipient's bank doesn't support CoP.
            - **`temporarily_unavailable`:** The check cannot be performed right
            now.
              For example, the recipient's bank didn't respond to our request.
              You should retry the request later.
          type: string
          enum:
            - matched
            - close_match
            - not_matched
            - cannot_be_checked
            - temporarily_unavailable
        reason:
          $ref: "#/components/schemas/AccountNameValidationReasonUK"
        company_name:
          type: string
          description: >-
            The name of the recipient when the account type is business.

            Provided only if `individual_name` is not specified.


            When the name is a close match, the actual full name is returned,
            otherwise, the name you provided is returned.
        individual_name:
          type: object
          required:
            - first_name
            - last_name
          description: >-
            The name of the recipient when the account type is personal.

            Provided only if `company_name` is not specified.


            When the name is a close match, the actual first and last names are
            returned in full.
          properties:
            first_name:
              type: string
              description: The first name of the recipient.
            last_name:
              type: string
              description: The last name of the recipient.
      required:
        - result_code
    ValidateAccountNameResponseAU:
      title: AU
      type: object
      properties:
        result_code:
          description: >-
            The result of the check. 


            Possible values for AU:

            - **`matched`:** The name matches the provided details.
              For personal accounts, this also covers **close matches**, in which case the **actual name** is returned.
            - **`close_match` (business account):** The name is similar to the
            provided value.

            - **`not_matched`:** The name doesn't match the provided values.

            - **`cannot_be_checked`:** The check cannot be performed and retries
            won't help.
              For example, the recipient's bank doesn't support CoP.
            - **`temporarily_unavailable`:** The check cannot be performed right
            now.
              For example, the recipient's bank didn't respond to our request.
              You should retry the request later.
          type: string
          enum:
            - matched
            - close_match
            - not_matched
            - cannot_be_checked
            - temporarily_unavailable
        reason:
          $ref: "#/components/schemas/AccountNameValidationReasonAU"
        company_name:
          type: string
          description: >-
            The name of the recipient when the account type is business.

            Provided only if `individual_name` is not specified.


            When the name is a close match, the actual full name is returned.

            Otherwise, the name you provided is returned.


            :::tip[Mismatched name type is corrected]

            The mismatched name type in the request is corrected in the
            response.

            This means that, for example, if an individual recipient's name was
            provided under `company_name`, in the response it is returned under
            `individual_name`.

            :::
        individual_name:
          type: object
          required:
            - first_name
            - last_name
          description: >-
            The name of the recipient when the account type is personal.

            Provided only if `company_name` is not specified.


            When the name is a close match, the actual first and last names are
            returned.

            Otherwise, the name you provided is returned.


            :::tip[Mismatched name type is corrected]

            The mismatched name type in the request is corrected in the
            response.

            This means that, for example, if an individual recipient's name was
            provided under `company_name`, in the response it is returned under
            `individual_name`.

            :::
          properties:
            first_name:
              type: string
              description: The first name of the recipient.
            last_name:
              type: string
              description: The last name of the recipient.
      required:
        - result_code
    ValidateAccountNameResponseRO:
      title: RO
      type: object
      properties:
        result_code:
          description: >-
            The result of the check. 


            For RO CoP, the API **checks if an account exists for the provided
            IBAN**.

            Possible results are:

            - **`matched`:** An account with the provided IBAN was found.
              When this status is returned, the API also returns a partial name of the account holder.
              Use this returned name to validate your recipient's details.
            - **`cannot_be_checked`:** The check cannot be performed and retries
            won't help.
                For example, the recipient's bank doesn't support CoP.
            - **`temporarily_unavailable`:** The check cannot be performed right
            now.
              For example, the recipient's bank didn't respond to our request.
              You should retry the request later.
          type: string
          enum:
            - matched
            - close_match
            - not_matched
            - cannot_be_checked
            - temporarily_unavailable
        reason:
          $ref: "#/components/schemas/AccountNameValidationReasonRO"
        company_name:
          type: string
          description: >-
            The **partially masked** name of the recipient when the account type
            is business.

            Provided only if `individual_name` is not specified.


            :::warning[Name considerations]

            - The name you provide helps identify the request, but is not used
            for the actual check.
              The API simply returns the partial name associated with the IBAN for you to validate.
              Therefore, the **returned name may differ** from the one you provided.
            - **Mismatched name type is not corrected**.
              This means that the name type in the response is returned as it was provided in the request.
              For example, if an individual recipient's name was provided under `company_name`, in the response it's still returned under `company_name` (instead of `individual_name`).
            :::
          examples:
            - Rodri**** SA
        individual_name:
          type: object
          required:
            - first_name
            - last_name
          description: >-
            The partial name of the recipient when the account type is personal,
            that is, the first name and the last name's initial.

            Provided only if `company_name` is not specified.


            :::warning[Name considerations]

            - The name you provide helps identify the request, but is not used
            for the actual check.
              The API simply returns the partial name associated with the IBAN for you to validate.
              Therefore, the **returned name may differ** from the one you provided.
            - **Mismatched name type is not corrected**.
              This means that the name type in the response is returned as it was provided in the request.
              For example, if an individual recipient's name was provided under `company_name`, in the response it's still returned under `company_name` (instead of `individual_name`).
            :::
          properties:
            first_name:
              type: string
              description: The first name of the recipient.
              examples:
                - Alexandru
            last_name:
              type: string
              description: The initial of the last name of the recipient.
              examples:
                - I.
      required:
        - result_code
    ValidateAccountNameResponseEUR:
      title: EUR
      type: object
      properties:
        result_code:
          description: >-
            The result of the check. 


            Possible values for EUR:

            - **`matched`:** The name matches the provided details.

            - **`close_match`:** The recipient's name is similar to the provided
            value.
              The **actual name** is returned.
            - **`not_matched`:** The name and account type don't match the
            provided values.
              The **name provided in the request** is returned.
            - **`cannot_be_checked`:** The check cannot be performed and retries
            won't help.
              For example, the recipient's bank doesn't support VoP.
            - **`temporarily_unavailable`:** The check cannot be performed right
            now.
              For example, the recipient's bank didn't respond to our request.
              You should retry the request later.
          type: string
          enum:
            - matched
            - close_match
            - not_matched
            - cannot_be_checked
            - temporarily_unavailable
        reason:
          $ref: "#/components/schemas/AccountNameValidationReasonEUR"
        company_name:
          type: string
          description: >-
            The name of the recipient when the account type is business.

            Provided only if `individual_name` is not specified.


            When the name is a close match, the actual name is returned.

            Otherwise, the name you provided is returned.


            :::warning[Mismatched name type is not corrected]

            The name type in the response is returned as it was provided in the
            request.

            For example, if an individual recipient's name was provided under
            `company_name`, in the response it's still returned under
            `company_name` (instead of `individual_name`).

            :::
        individual_name:
          type: object
          required:
            - first_name
            - last_name
          description: >-
            The name of the recipient when the account type is personal.

            Provided only if `company_name` is not specified.


            When the name is a close match, the actual name is returned.

            Otherwise, the name you provided is returned.


            :::warning[Mismatched name type is not corrected]

            The name type in the response is returned as it was provided in the
            request.

            For example, if an individual recipient's name was provided under
            `company_name`, in the response it's still returned under
            `company_name` (instead of `individual_name`).

            :::
          properties:
            first_name:
              type: string
              description: The first name of the recipient.
            last_name:
              type: string
              description: The last name of the recipient.
      required:
        - result_code
    Webhook-v1:
      type: object
      properties:
        url:
          type: string
          format: uri
          description: The valid webhook URL that event notifications are sent to. The
            supported protocol is `https`.
      required:
        - url
    Webhook-v2-basic:
      type: object
      required:
        - id
        - url
        - events
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the webhook.
        url:
          type: string
          format: uri
          description: The valid webhook URL that event notifications are sent to. The
            supported protocol is `https`.
        events:
          type: array
          items:
            $ref: "#/components/schemas/WebhookEventType"
          description: The list of event types that you are subscribed to.
      examples:
        - id: 6fc346be-5cb5-4c14-aadc-e8aba6a655d7
          url: https://www.example.com/
          events:
            - TransactionCreated
    Webhook-v2:
      type: object
      required:
        - id
        - url
        - events
        - signing_secret
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the webhook.
        url:
          type: string
          format: uri
          description: The valid webhook URL that event notifications are sent to. The
            supported protocol is `https`.
        events:
          type: array
          items:
            $ref: "#/components/schemas/WebhookEventType"
          description: The list of event types that you are subscribed to.
        signing_secret:
          type: string
          description: The signing secret for the webhook.
      examples:
        - id: 6fc346be-5cb5-4c14-aadc-e8aba6a655d7
          url: https://www.example.com/
          events:
            - TransactionCreated
          signing_secret: wsk_4jETWMz1g1b37gCONjNp84t2KSSIT7dK
    Webhooks:
      type: array
      items:
        $ref: "#/components/schemas/Webhook-v2-basic"
    WebhookEvent:
      type: object
      required:
        - id
        - created_at
        - updated_at
        - webhook_id
        - webhook_url
        - payload
      description: A webhook event
      properties:
        id:
          type: string
          format: uuid
          description: The ID of the webhook event.
        created_at:
          type: string
          format: date-time
          description: The date and time the event was created in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        updated_at:
          type: string
          format: date-time
          description: The date and time the event was last updated in [ISO
            8601](https://en.wikipedia.org/wiki/ISO_8601) format.
        webhook_id:
          type: string
          format: uuid
          description: The ID of the webhook for which the event failed.
        webhook_url:
          type: string
          format: uri
          description: The valid webhook URL that event notifications are sent to. The
            supported protocol is `https`.
        payload:
          type: object
          description: The details of the failed event.
        last_sent_date:
          type: string
          format: date-time
          description: The date and time the last attempt at the event delivery occurred
            in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.
    WebhookEvents:
      type: array
      items:
        $ref: "#/components/schemas/WebhookEvent"
    WebhookEventType:
      enum:
        - TransactionCreated
        - TransactionStateChanged
        - PayoutLinkCreated
        - PayoutLinkStateChanged
      description: The type of the webhook event to subscribe to.
    WebhookSigningSecretRotateRequest:
      type: object
      properties:
        expiration_period:
          type: string
          format: duration
          description: The expiration period for the signing secret in [ISO 8601
            format](https://en.wikipedia.org/wiki/ISO_8601#Durations). If set,
            when you rotate the secret, it continues to be valid until the
            expiration period has passed. Otherwise, on rotation, the secret is
            invalidated immediately. The maximum value is 7 days.
          maximum: P7D
          default: P0D
          examples:
            - PT5H30M
  parameters:
    PageToken:
      in: query
      name: page_token
      required: false
      schema:
        $ref: "#/components/schemas/PageToken"
  responses:
    Unauthorized:
      description: >-
        Unauthorized – authentication credentials are missing or invalid


        Returned when the request was not fulfilled because authentication has
        failed or has not been provided.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorWithId"
          examples:
            access_token_invalid_or_expired:
              summary: Access token invalid or expired
              value:
                error_id: 9d66499d-3fc5-45e9-92f6-3ddcad4793c6
                code: 1000
                message: Access token is invalid or has expired. Please refresh your access
                  token or generate a new one following the 'Get a new access
                  token' guide in the Revolut API docs.
            invalid_token:
              summary: Invalid token
              value:
                error_id: 7835beae-98ed-42dc-b993-95f4ded951a1
                code: 1000
                message: Invalid token. The authorization header must follow the 'Bearer
                  <token>' format.
    Forbidden:
      description: >-
        Action forbidden - insufficient permissions to perform this action


        Returned, for example, when you don't have permissions necessary to
        perform this action.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorWithId"
          examples:
            default:
              value:
                error_id: c5deadcc-1934-4438-818a-3c7ca1e6c01c
                code: 9002
                message: This action is forbidden
    UnprocessableEntity:
      description: >-
        Unprocessable entity - request cannot be processed due to business rules


        The request is well-formed and the server understands it, but the
        operation cannot be performed because the resource state doesn't permit
        it.

        Retrying the same request will not succeed.

        This can happen, for example, when you try to modify a resource that is
        managed externally (for example, by a connected accounting integration),
        freeze an admin-blocked card, or cancel an already claimed invitation.

        It can also be returned with specific validation responses on specific
        fields, for example, invalid percentage for a tax rate.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorWithId"
          examples:
            resource_managed_externally_:
              summary: Resource managed externally, cannot be modified manually
              value:
                error_id: 049c53f6-8356-4355-8d90-daef62310092
                code: 3514
                message: Tax rates are managed by your connected accounting integration and
                  cannot be modified manually
    TooManyRequests:
      description: >-
        Too many requests


        Returned, for example, when the rate limit has been exceeded.

        If the response includes the `Retry-After` instruction, please respect
        it and refrain from earlier retry attempts.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorWithId"
          examples:
            rateLimitExceededNoRetryAfter:
              summary: Rate limit exceeded (no Retry-After)
              value:
                error_id: 06153eec-c5cd-4db8-8898-7ae96b9d89ab
                code: 3162
                message: Request rate limit has been reached. Try again later.
            rateLimitExceededWithRetryAfter:
              summary: Rate limit exceeded (with Retry-After)
              value:
                error_id: 06153eec-c5cd-4db8-8898-7ae96b9d89ab
                code: 3162
                message: Request rate limit has been reached. Try again after 30 seconds.
    InternalServerError:
      description: |-
        Internal server error

        An unexpected application error occurred.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorWithId"
          examples:
            default:
              value:
                error_id: 7f96652e-7518-4229-872b-4e4c867fb4da
                code: 5000
                message: An unexpected error occurred while processing your request. If the
                  issue persists, please contact support
    ServiceUnavailable:
      description: >-
        Service Unavailable


        The system is temporarily unavailable.

        If the response includes the `Retry-After` header instruction, please
        respect it and refrain from earlier retry attempts.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorWithId"
          examples:
            service_unavailable:
              summary: System temporarily unavailable
              value:
                error_id: 201768bc-c5cd-4db8-8898-7ae96b9d89ab
                code: 5003
                message: The service is temporarily unavailable. Try again in a few moments. If
                  the issue persists, please contact support
    ResourceCreatedResponse:
      description: >-
        Resource created


        On successful creation, the response returns only the ID of the new
        resource, even if the resource has more properties.

        To get all details, use the returned resource ID with a GET request.
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ResourceCreatedResponse"
          examples:
            resource_created:
              summary: Resource created
              value:
                id: 6a37383e-cfd3-4a2f-aa81-e3a6e6939efa
  examples:
    cardErrorBadId:
      summary: Invalid ID - the path parameter must be UUID
      value:
        message: "Invalid path parameter 'id': expected UUID"
        code: 2101
    cardErrorBadCountryCode:
      summary: Invalid country code (when countries=["GB", "USA"])
      value:
        code: 3000
        message: "Invalid value for 'countries[1]': expected a 2-letter ISO country code
          (e.g. 'US')."
    cardInvitationMinCreate:
      summary: Card invitation for an onboarding team member - minimal example
      value:
        request_id: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
        holder_id: 3791712d-e5b5-4d5f-b1f1-79a93d57e08b
        virtual: true
    cardInvitationMaxCreate:
      summary: Card invitation for an onboarding team member - full example
      value:
        request_id: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
        expiry_period: P14D
        holder_id: 3791712d-e5b5-4d5f-b1f1-79a93d57e08b
        virtual: true
        label: Dariel Pattie
        spending_limits:
          single:
            amount: 50
            currency: GBP
          week:
            amount: 250
            currency: GBP
        spending_period:
          end_date: 2026-12-31
          end_date_action: terminate
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 14c8d663-2093-4086-96ed-334a4011333f
            - 06e0f7fa-38a2-4fcf-a115-df5caf190b55
        countries:
          - GB
        accounts:
          - 26a852b8-4046-4e71-949d-22f4cb6be26a
    cardInvitationUpdatedAllProperties:
      summary: Update all properties
      value:
        id: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
        state: created
        created_at: 2025-11-21T00:00:00Z
        updated_at: 2025-11-21T10:27:15Z
        expiry_date: 2025-12-06T00:00:00Z
        holder_id: 3791712d-e5b5-4d5f-b1f1-79a93d57e08b
        virtual: true
        label: New card label
        spending_limits:
          single:
            amount: 100
            currency: GBP
          week:
            amount: 300
            currency: GBP
        spending_period:
          start_date: 2025-12-20
          end_date: 2027-12-20
          end_date_action: lock
        categories:
          - services
          - shopping
          - furniture
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
            - 3f09819f-63d1-473a-966c-54d8b9f43a93
        countries:
          - GB
          - SG
          - ES
        accounts:
          - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
          - 9ae4345a-5ee5-496b-b776-241fcc5a5ba4
    cardInvitationUpdatedEraseSpendingPeriodStartDate:
      summary: Erase spending period start date and update end date
      value:
        id: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
        state: created
        created_at: 2025-11-21T00:00:00Z
        updated_at: 2025-11-21T10:27:15Z
        expiry_date: 2025-12-06T00:00:00Z
        holder_id: 3791712d-e5b5-4d5f-b1f1-79a93d57e08b
        virtual: true
        label: Dariel Pattie
        spending_limits:
          single:
            amount: 50
            currency: GBP
          week:
            amount: 250
            currency: GBP
        spending_period:
          end_date: 2027-12-20
          end_date_action: terminate
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 14c8d663-2093-4086-96ed-334a4011333f
            - 06e0f7fa-38a2-4fcf-a115-df5caf190b55
        countries:
          - GB
        accounts:
          - 26a852b8-4046-4e71-949d-22f4cb6be26a
    cardInvitationUpdatedEraseAllSpendingLimits:
      summary: Erase all spending limits
      value:
        id: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
        state: created
        created_at: 2025-11-21T00:00:00Z
        updated_at: 2025-11-21T10:27:15Z
        expiry_date: 2025-12-06T00:00:00Z
        holder_id: 3791712d-e5b5-4d5f-b1f1-79a93d57e08b
        virtual: true
        label: Dariel Pattie
        spending_period:
          start_date: 2025-12-20
          end_date: 2026-12-31
          end_date_action: lock
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 14c8d663-2093-4086-96ed-334a4011333f
            - 06e0f7fa-38a2-4fcf-a115-df5caf190b55
        countries:
          - GB
        accounts:
          - 26a852b8-4046-4e71-949d-22f4cb6be26a
    cardInvitationUpdatedAllowSpecificMerchants:
      summary: Erase single-transaction limit
      value:
        id: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
        state: created
        created_at: 2025-11-21T00:00:00Z
        updated_at: 2025-11-21T10:27:15Z
        expiry_date: 2025-12-06T00:00:00Z
        holder_id: 3791712d-e5b5-4d5f-b1f1-79a93d57e08b
        virtual: true
        label: Dariel Pattie
        spending_limits:
          single:
            amount: 50
            currency: GBP
          week:
            amount: 250
            currency: GBP
        spending_period:
          start_date: 2025-12-20
          end_date: 2026-12-31
          end_date_action: lock
        merchant_controls:
          control_type: allow
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
        accounts:
          - 26a852b8-4046-4e71-949d-22f4cb6be26a
    cardInvitationUpdatedEraseSingleTransactionLimit:
      summary: Erase single-transaction limit
      value:
        id: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
        state: created
        created_at: 2025-11-21T00:00:00Z
        updated_at: 2025-11-21T10:27:15Z
        expiry_date: 2025-12-06T00:00:00Z
        holder_id: 3791712d-e5b5-4d5f-b1f1-79a93d57e08b
        virtual: true
        label: Dariel Pattie
        spending_limits:
          week:
            amount: 250
            currency: GBP
        spending_period:
          start_date: 2025-12-20
          end_date: 2026-12-31
          end_date_action: lock
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 14c8d663-2093-4086-96ed-334a4011333f
            - 06e0f7fa-38a2-4fcf-a115-df5caf190b55
        countries:
          - GB
        accounts:
          - 26a852b8-4046-4e71-949d-22f4cb6be26a
    cardInvitationCreatedDetails:
      summary: Created (active) invitation (example with spending limits)
      value:
        id: 4016b891-bb50-4bd2-8a1b-adb74f4aacdd
        state: created
        created_at: 2025-11-21T00:00:00Z
        updated_at: 2025-11-21T00:00:00Z
        expiry_date: 2025-12-06T00:00:00Z
        holder_id: 3791712d-e5b5-4d5f-b1f1-79a93d57e08b
        virtual: true
        label: Dariel Pattie
        spending_limits:
          single:
            amount: 50
            currency: GBP
          week:
            amount: 250
            currency: GBP
        spending_period:
          end_date: 2026-12-31
          end_date_action: lock
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 14c8d663-2093-4086-96ed-334a4011333f
            - 06e0f7fa-38a2-4fcf-a115-df5caf190b55
        countries:
          - GB
        accounts:
          - 26a852b8-4046-4e71-949d-22f4cb6be26a
    cardInvitationRedeemedDetails:
      summary: Redeemed invitation (example with spend program)
      value:
        id: 809d745d-9598-4680-8464-d82113e9024b
        state: redeemed
        created_at: 2025-11-21T00:00:00Z
        updated_at: 2025-11-23T09:01:13Z
        card_id: 744b29d4-19e9-40f8-89e6-bfb264ef5710
        holder_id: 19c76bef-3583-4848-af09-4b2a96c75a14
        virtual: true
        label: Manuel Haleigh - WFH
        spend_program:
          label: WFH equipment
        spending_period:
          start_date: 2025-11-23
          end_date: 2025-12-23
          end_date_action: terminate
        categories:
          - furniture
          - hardware
        countries:
          - GB
        accounts:
          - 6b472c0e-f595-4681-88b4-76eaa0522824
    cardInvitationExpiredDetails:
      summary: Expired or cancelled invitation
      value:
        id: 0c0d252e-5fff-498e-83f8-f9b635904275
        state: expired
        created_at: 2025-11-22T00:00:00Z
        updated_at: 2025-11-30T00:00:00Z
        holder_id: 5ea0ffa1-5dc5-43c4-ac5e-b9e0deb9ec12
        virtual: true
        label: Valeria Keone - meals
        spending_limits:
          single:
            amount: 50
            currency: GBP
          week:
            amount: 250
            currency: GBP
        spending_period:
          start_date: 2025-11-29
          end_date: 2025-12-29
          end_date_action: terminate
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 14c8d663-2093-4086-96ed-334a4011333f
            - 06e0f7fa-38a2-4fcf-a115-df5caf190b55
        countries:
          - GB
        accounts:
          - 6b472c0e-f595-4681-88b4-76eaa0522824
    cardInvitationFailedDetails:
      summary: Failed invitation
      value:
        id: 9ab6019a-6a26-41f8-b034-44b591f8b1a8
        state: failed
        created_at: 2025-11-27T00:00:00Z
        updated_at: 2025-11-27T00:00:00Z
        holder_id: af686385-4ec0-4139-a4a0-963ee9fa5bc8
        virtual: true
        label: Connor Thato - meals
        spending_period:
          start_date: 2025-12-01
          end_date: 2026-01-01
          end_date_action: terminate
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 14c8d663-2093-4086-96ed-334a4011333f
            - 06e0f7fa-38a2-4fcf-a115-df5caf190b55
        countries:
          - GB
        accounts:
          - 6b472c0e-f595-4681-88b4-76eaa0522824
    cardInvitationFailedNoHolderDetails:
      summary: Invitation that failed because team member was deleted
      value:
        id: bfc40b73-1e8b-4cba-ad7d-2f54ee707a21
        state: failed
        created_at: 2025-11-28T00:00:00Z
        updated_at: 2025-12-02T11:31:15Z
        virtual: true
        label: Natália Popović - offb
        spending_period:
          start_date: 2025-11-30
          end_date: 2026-11-30
          end_date_action: terminate
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 14c8d663-2093-4086-96ed-334a4011333f
            - 06e0f7fa-38a2-4fcf-a115-df5caf190b55
        countries:
          - GB
        accounts:
          - 6b472c0e-f595-4681-88b4-76eaa0522824
    cardInvitationsList:
      summary: List of card invitations
      value:
        - $ref: "#/components/examples/cardInvitationCreatedDetails/value"
        - $ref: "#/components/examples/cardInvitationRedeemedDetails/value"
        - $ref: "#/components/examples/cardInvitationExpiredDetails/value"
        - $ref: "#/components/examples/cardInvitationFailedDetails/value"
        - $ref: "#/components/examples/cardInvitationFailedNoHolderDetails/value"
    cardsListSimple:
      summary: List of cards - virtual and physical
      value:
        - $ref: "#/components/examples/cardVirtualDetails/value"
        - $ref: "#/components/examples/cardPhysicalDetails/value"
    cardsListVirtual:
      summary: List of cards - Team member card, Company card, Auto-issued card, Card
        with spending period start date, Card with spend program
      value:
        - $ref: "#/components/examples/cardIndividualDetails/value"
        - $ref: "#/components/examples/cardCompanyDetails/value"
        - $ref: "#/components/examples/cardAutogeneratedDetails/value"
        - $ref: "#/components/examples/cardWithSpendingPeriodStartDateDetails/value"
        - $ref: "#/components/examples/cardWithSpendProgramDetails/value"
    cardIndividualCreate:
      summary: Team member card
      value:
        request_id: 7a10f3eb-fe56-4699-9bd0-044a63508828
        holder_id: 173ab846-de2a-1234-5678-160bd2e660e6
        virtual: true
        label: Kirby Janette
        spending_limits:
          single:
            amount: 200.22
            currency: GBP
          week:
            amount: 200.44
            currency: GBP
        spending_period:
          end_date: 2026-12-15
          end_date_action: terminate
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - 75aa436d-2a04-4ab9-af14-ed0955769b8c
    cardIndividualDetails:
      summary: Team member card
      value:
        id: aa14a9af-d7a7-4214-a743-lok818f74bd0
        holder_id: 173ab846-de2a-1234-5678-160bd2e660e6
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-15T11:04:11.047305Z
        virtual: true
        last_digits: "2671"
        expiry: 09/2030
        label: Kirby Janette
        state: active
        spending_limits:
          single:
            amount: 200.22
            currency: GBP
        spending_period:
          end_date: 2026-12-15
          end_date_action: terminate
          week:
            amount: 200.44
            currency: GBP
        categories:
          - restaurants
          - groceries
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
    cardCompanyCreate:
      summary: Company card
      value:
        request_id: 7a10f3eb-fe56-4699-9bd0-044a63508829
        contact_ids:
          - 3ea984a5-d599-4c97-b2b3-c6c12bb9b5e9
          - 02b969cb-b984-4a70-873d-f93220805e5e
          - 36d9604d-4821-45fc-bf1a-a2881f6336c0
        virtual: true
        label: Engagement team
        spending_limits:
          single:
            amount: 200
            currency: GBP
          week:
            amount: 1000
            currency: GBP
        spending_period:
          end_date: 2026-12-15
          end_date_action: terminate
        categories:
          - accommodation
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - 75aa436d-2a04-4ab9-af14-ed0955769b8c
    cardCompanyDetails:
      summary: Company card
      value:
        id: 448b9493-8bd7-48f9-a7ce-59293b5118ec
        contact_ids:
          - 3ea984a5-d599-4c97-b2b3-c6c12bb9b5e9
          - 02b969cb-b984-4a70-873d-f93220805e5e
          - 36d9604d-4821-45fc-bf1a-a2881f6336c0
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-15T11:04:11.047305Z
        virtual: true
        last_digits: "4321"
        expiry: 09/2030
        label: Engagement team
        state: active
        spending_limits:
          single:
            amount: 200
            currency: GBP
          week:
            amount: 1000
            currency: GBP
        spending_period:
          end_date: 2026-12-15
          end_date_action: terminate
        categories:
          - accommodation
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - 75aa436d-2a04-4ab9-af14-ed0955769b8c
    cardAutogeneratedCreate:
      summary: Auto-issued card
      value:
        request_id: 7a10f3eb-fe56-4699-9bd0-044a63508830
        product:
          code: MBJ
        virtual: true
        label: Reservation 123456
        references:
          - name: PNR
            value: RT12345
          - name: Traveller
            value: John Smith
        spending_limits:
          single:
            amount: 1500
            currency: GBP
          week:
            amount: 3000
            currency: GBP
        spending_period:
          end_date: 2026-12-15
          end_date_action: terminate
        categories:
          - airlines
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - 75aa436d-2a04-4ab9-af14-ed0955769b8c
    cardAutogeneratedDetails:
      summary: Auto-issued card
      value:
        id: f296f3b6-d28c-44e7-aae5-3d540e6a20e9
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-15T11:04:11.047305Z
        product:
          code: MBJ
        virtual: true
        last_digits: "9876"
        expiry: 09/2030
        label: Reservation 123456
        references:
          - name: PNR
            value: RT12345
          - name: Traveller
            value: John Smith
        state: active
        spending_limits:
          single:
            amount: 1500
            currency: GBP
          week:
            amount: 3000
            currency: GBP
        spending_period:
          end_date: 2026-12-15
          end_date_action: terminate
        categories:
          - airlines
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - 75aa436d-2a04-4ab9-af14-ed0955769b8c
    cardWithSpendingPeriodStartDateCreate:
      summary: Card with a spending period start date
      value:
        request_id: 7a10f3eb-fe56-4699-9bd0-044a63508831
        holder_id: d2d68875-55b4-42d9-a816-19449b8e0840
        virtual: true
        label: Kim Took
        spending_limits:
          single:
            amount: 200.22
            currency: GBP
          week:
            amount: 200.44
            currency: GBP
        spending_period:
          start_date: 2025-11-16
          end_date: 2026-12-15
          end_date_action: terminate
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - 75aa436d-2a04-4ab9-af14-ed0955769b8c
    cardWithSpendingPeriodStartDateDetails:
      summary: Card with a spending period start date
      value:
        id: e466e17f-7727-46b3-be0f-56acf9209195
        holder_id: d2d68875-55b4-42d9-a816-19449b8e0840
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-15T11:04:11.047305Z
        virtual: true
        last_digits: "1289"
        expiry: 09/2030
        label: Kim Took
        state: locked
        can_be_unlocked: true
        spending_limits:
          single:
            amount: 200.22
            currency: GBP
          week:
            amount: 200.44
            currency: GBP
        spending_period:
          start_date: 2025-11-16
          end_date: 2026-12-15
          end_date_action: terminate
        categories:
          - groceries
          - restaurants
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - 75aa436d-2a04-4ab9-af14-ed0955769b8c
    cardWithSpendProgramDetails:
      summary: Card with a spend program
      value:
        id: f9bea0b8-ddbd-47c8-bccd-40c60c8fa266
        contact_ids:
          - 3ea984a5-d599-4c97-b2b3-c6c12bb9b5e9
          - 02b969cb-b984-4a70-873d-f93220805e5e
          - 36d9604d-4821-45fc-bf1a-a2881f6336c0
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-15T11:04:11.047305Z
        virtual: true
        last_digits: "3467"
        expiry: 09/2030
        label: Company lunches
        state: locked
        spend_program:
          label: Lunch
        merchant_controls:
          control_type: allow
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
        accounts:
          - 75aa436d-2a04-4ab9-af14-ed0955769b8c
    cardPhysicalDetails:
      summary: Physical card details
      value:
        id: b8b56da4-1fde-4320-a8d7-cb7560252f7e
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-15T11:04:11.047305Z
        virtual: false
        last_digits: "2672"
        expiry: 09/2030
        state: active
    cardUpdatedAllPropertiesDetails:
      summary: Update all properties
      value:
        id: aa14a9af-d7a7-4214-a743-lok818f74bd0
        holder_id: 173ab846-de2a-1234-5678-160bd2e660e6
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-17T08:32:11.024721Z
        virtual: true
        last_digits: "2671"
        expiry: 09/2030
        label: New card label
        state: locked
        spending_limits:
          single:
            amount: 100
            currency: GBP
          week:
            amount: 300
            currency: GBP
        spending_period:
          start_date: 2025-09-18
          end_date: 2026-12-20
          end_date_action: lock
        categories:
          - services
          - shopping
          - furniture
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
            - 3f09819f-63d1-473a-966c-54d8b9f43a93
        countries:
          - GB
          - SG
          - ES
        accounts:
          - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
          - 9ae4345a-5ee5-496b-b776-241fcc5a5ba4
    cardUpdatedEraseSpendingPeriodStartDateDetails:
      summary: Erase spending period start date
      value:
        id: aa14a9af-d7a7-4214-a743-lok818f74bd0
        holder_id: 173ab846-de2a-1234-5678-160bd2e660e6
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-17T08:32:11.024721Z
        virtual: true
        last_digits: "2671"
        expiry: 09/2030
        label: Kirby Janette
        state: active
        spending_period:
          end_date: 2026-12-20
          end_date_action: lock
        categories:
          - restaurants
          - groceries
        accounts:
          - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
    cardUpdatedCompanyDetails:
      summary: Update contacts and references
      value:
        id: 448b9493-8bd7-48f9-a7ce-59293b5118ec
        contact_ids:
          - 3ea984a5-d599-4c97-b2b3-c6c12bb9b5e9
          - 02b969cb-b984-4a70-873d-f93220805e5e
          - 36d9604d-4821-45fc-bf1a-a2881f6336c0
          - 20b8070a-7057-4516-92b9-f50be777bc81
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-17T11:04:11.047305Z
        virtual: true
        last_digits: "4321"
        expiry: 09/2030
        label: Engagement team
        references:
          - name: Budget
            value: Engagement
          - name: New sample reference
            value: Sample reference value
        state: active
        spending_limits:
          single:
            amount: 200
            currency: GBP
          week:
            amount: 1000
            currency: GBP
        spending_period:
          end_date: 2026-12-15
          end_date_action: terminate
        categories:
          - accommodation
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - 75aa436d-2a04-4ab9-af14-ed0955769b8c
    cardUpdatedEraseAllSpendingLimitsDetails:
      summary: Erase all spending limits
      value:
        id: aa14a9af-d7a7-4214-a743-lok818f74bd0
        holder_id: 173ab846-de2a-1234-5678-160bd2e660e6
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-17T08:32:11.024721Z
        virtual: true
        last_digits: "2671"
        expiry: 09/2030
        label: Kirby Janette
        state: active
        categories:
          - restaurants
          - groceries
        accounts:
          - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
    cardUpdatedEraseSingleTransactionLimitDetails:
      summary: Erase the single-transaction limit
      value:
        id: aa14a9af-d7a7-4214-a743-lok818f74bd0
        holder_id: 173ab846-de2a-1234-5678-160bd2e660e6
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-17T08:32:11.024721Z
        virtual: true
        last_digits: "2671"
        expiry: 09/2030
        label: Kirby Janette
        state: active
        spending_limits:
          month:
            amount: 200.44
            currency: GBP
        categories:
          - restaurants
          - groceries
        accounts:
          - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
    cardUpdatedAllowSpecificMerchantsDetails:
      summary: Allow only specific merchants
      value:
        id: aa14a9af-d7a7-4214-a743-lok818f74bd0
        holder_id: 173ab846-de2a-1234-5678-160bd2e660e6
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-17T08:32:11.024721Z
        virtual: true
        last_digits: "2671"
        expiry: 09/2030
        label: Kirby Janette
        state: active
        spending_limits:
          single:
            amount: 200.22
            currency: GBP
          month:
            amount: 200.44
            currency: GBP
        merchant_controls:
          control_type: allow
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        accounts:
          - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
    cardVirtualDetails:
      summary: Virtual card details
      value:
        id: aa14a9af-d7a7-4214-a743-lok818f74bd0
        holder_id: 173ab846-de2a-1234-5678-160bd2e660e6
        created_at: 2025-09-15T11:04:11.047305Z
        updated_at: 2025-09-17T08:32:11.024721Z
        virtual: true
        last_digits: "2671"
        expiry: 09/2030
        label: Kirby Janette
        state: active
        spending_limits:
          single:
            amount: 200.22
            currency: GBP
          month:
            amount: 200.44
            currency: GBP
        spending_period:
          start_date: 2025-09-20
          end_date: 2026-12-20
          end_date_action: terminate
        categories:
          - restaurants
          - groceries
        merchant_controls:
          control_type: block
          merchant_ids:
            - 46df0a1b-3678-4ded-9cf5-9f4da1b5019d
            - e8a87432-f71e-4deb-be84-969a02792929
        countries:
          - GB
          - SG
        accounts:
          - f52c6c84-26b9-4e95-bbcf-99ed6523fb51
    CardContacts:
      summary: Company card contacts (max.5)
      value:
        - 3ea984a5-d599-4c97-b2b3-c6c12bb9b5e9
        - 02b969cb-b984-4a70-873d-f93220805e5e
        - 36d9604d-4821-45fc-bf1a-a2881f6336c0
    CardReferences:
      summary: References for the card (max.5)
      value:
        - name: Budget
          value: Engagement
        - name: Department
          value: Business
    cardProduct:
      code: MBJ
    errorUnauthorized:
      summary: Unauthorized
      value:
        status: 401
        message: The request should be authorized.
    exchangeReasons:
      - code: business_expense_and_claims
        name: Business expense and claims
      - code: fees_and_charges
        name: Fees and charges
      - code: fund_transfer_and_intracompany_payment
        name: Fund transfer and intracompany payment
      - code: gifts_and_donations
        name: Gifts and donations
      - code: government_services_and_tax
        name: Government services and tax
      - code: insurance
        name: Insurance
      - code: inventory
        name: Inventory
      - code: investment_dividend_and_interest
        name: Investment, dividend and interest
      - code: loan_and_loan_repayment
        name: Loan and loan repayment
      - code: marketing
        name: Marketing
      - code: payment_for_goods_and_services
        name: Payment for goods and services
      - code: payroll
        name: Payroll
      - code: refund
        name: Refund
      - code: rental_and_property
        name: Rental and property
      - code: sales
        name: Sales
      - code: service_provider_and_software
        name: Service provider and software
      - code: travel_and_transportation
        name: Travel and transportation
      - code: utilities
        name: Utilities
    payoutLinks:
      - id: 8e32b08a-e012-4530-bd15-c4e9ebde953d
        state: processed
        created_at: 2024-01-11T14:02:53.472318Z
        updated_at: 2024-01-11T14:05:02.962886Z
        counterparty_name: Jane Doe
        request_id: 5a7fcb46-4be4-47d4-a56f-27a2e5b78dMM
        expiry_date: 2023-07-18T14:02:53.717626Z
        payout_methods:
          - revolut
          - bank_account
          - card
        account_id: 85f515e4-588f-4496-a6a5-a7615a193e6b
        amount: 5.6
        currency: GBP
        counterparty_id: 2ef4618a-f258-4ac5-a846-ca6e089214f6
        transaction_id: 64ad618e-655a-a925-8425-2284c03f6c08
        reference: Bus ticket
        transfer_reason_code: travel
      - id: 12dcd8c2-6408-458f-98a9-3f4abc180898
        state: active
        created_at: 2023-07-11T13:55:54.834963Z
        updated_at: 2023-07-11T14:02:12.868346Z
        counterparty_name: John Doe
        request_id: 5a7fcb46-4be4-47d4-a56f-27a2e5b78dd1
        expiry_date: 2023-07-18T13:55:55.082280Z
        payout_methods:
          - revolut
          - bank_account
        account_id: 85f515e4-588f-4496-a6a5-a7615a193e6b
        amount: 105.6
        currency: GBP
        url: https://business.revolut.com/p/uSJVAd5SnP1
        reference: Rent
        transfer_reason_code: property_rental
      - id: d3b02315-044c-471f-ad41-59d9a4e3c538
        state: active
        created_at: 2023-07-11T13:53:45.986248Z
        updated_at: 2023-07-11T13:53:46.475470Z
        counterparty_name: John Smith
        request_id: rev-001
        expiry_date: 2023-07-18T13:53:46.474777Z
        payout_methods:
          - revolut
        account_id: 85f515e4-588f-4496-a6a5-a7615a193e6b
        amount: 15.6
        currency: GBP
        url: https://business.revolut.com/p/DPYtd2BUUwP
        reference: meal delivery
    payoutLinkActive:
      id: 12dcd8c2-6408-458f-98a9-3f4abc180898
      state: active
      created_at: 2023-07-11T13:55:54.834963Z
      updated_at: 2023-07-11T13:55:55.082655Z
      counterparty_name: John Smith
      request_id: 5a7fcb46-4be4-47d4-a56f-27a2e5b78dd1
      expiry_date: 2023-07-18T13:55:55.082280Z
      payout_methods:
        - revolut
        - bank_account
        - card
      account_id: 85f515e4-588f-4496-a6a5-a7615a193e6b
      amount: 105.6
      currency: GBP
      url: https://business.revolut.com/p/uSJVAd5SnP1
      reference: Rent
      transfer_reason_code: property_rental
    payoutLinkCancelled:
      id: 12dcd8c2-6408-458f-98a9-3f4abc180898
      state: cancelled
      created_at: 2023-07-11T13:55:54.834963Z
      updated_at: 2023-07-11T15:01:20.236508Z
      counterparty_name: John Doe
      request_id: 5a7fcb46-4be4-47d4-a56f-27a2e5b78dd1
      expiry_date: 2023-07-18T13:55:55.082280Z
      payout_methods:
        - revolut
        - bank_account
      account_id: 85f515e4-588f-4496-a6a5-a7615a193e6b
      amount: 105.6
      currency: GBP
      reference: Rent
      transfer_reason_code: property_rental
    payoutLinkProcessed:
      id: 8e32b08a-e012-4530-bd15-c4e9ebde953d
      state: processed
      created_at: 2024-01-11T14:02:53.472318Z
      updated_at: 2024-01-11T14:05:02.962886Z
      counterparty_name: Jane Doe
      request_id: 5a7fcb46-4be4-47d4-a56f-27a2e5b78dMM
      expiry_date: 2023-07-18T14:02:53.717626Z
      payout_methods:
        - revolut
      account_id: 85f515e4-588f-4496-a6a5-a7615a193e6b
      amount: 5.6
      currency: GBP
      counterparty_id: 2ef4618a-f258-4ac5-a846-ca6e089214f6
      transaction_id: 64ad618e-655a-a925-8425-2284c03f6c08
      reference: Bus ticket
      transfer_reason_code: travel
    ResourceCreated:
      summary: Resource created
      value:
        id: 6a37383e-cfd3-4a2f-aa81-e3a6e6939efa
    webhookV2BasicAllEvents:
      id: 9f9919a2-932d-498f-a088-3a01b9080c4a
      url: https://www.revolut.com
      events:
        - TransactionCreated
        - TransactionStateChanged
        - PayoutLinkCreated
        - PayoutLinkStateChanged
    webhookV2BasicSelectedEventsRequest:
      url: https://www.example.com
      events:
        - TransactionCreated
        - PayoutLinkCreated
    webhookV2BasicSelectedEvents:
      id: c6db947e-e9ce-41c2-b445-02e6eb741d21
      url: https://www.example.com
      events:
        - TransactionCreated
        - PayoutLinkCreated
    webhookV2SelectedEvents:
      id: c6db947e-e9ce-41c2-b445-02e6eb741d21
      url: https://www.example.com
      events:
        - TransactionCreated
        - PayoutLinkCreated
      signing_secret: wsk_4jETWMz1g1b37gCONjNp84t2KSSIT7dK
tags:
  - name: Accounting
    description: |-
      Manage [accounting settings](https://business.revolut.com/settings/accounting) for your business that can be assigned to your financial records such as [expenses](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses) or bills*.

      Create, retrieve, update, and delete settings such as accounting categories, tax rates, and labels.

      For more information, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings), [Manage accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories), [Manage tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates) and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups), .

      See also the Revolut Help Centre: [Expenses](https://help.revolut.com/business/help/managing-my-business/expenses/) and [BillPay](https://help.revolut.com/business/help/integrating-with-external-apps/introduction-to-billpay/).

      _*<small>Some settings are not supported for certain types of financial records.
      For example, labels cannot be applied to bills.
      Check the guides for details.
      </small>_
  - name: Accounting categories
    description: |-
      Manage accounting categories for your business.
      You can create, retrieve, and delete accounting categories that can be assigned to your financial records such as [expenses](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses) or bills.

      For more information, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage accounting categories](/docs/guides/manage-accounts/accounting/manage-accounting-categories).

      See also the Revolut Help Centre: [Expenses](https://help.revolut.com/business/help/managing-my-business/expenses/) and [BillPay](https://help.revolut.com/business/help/integrating-with-external-apps/introduction-to-billpay/).
  - name: Accounts
    description: |-
      Get the balances, full banking details, and other details of your business accounts. 

      For more information, see the guides: [Get your account details](/docs/guides/manage-accounts/accounts-and-transactions/manage-your-accounts).
  - name: Cards
    description: >-
      Manage cards issued for your business, freeze, unfreeze, lock, unlock,
      terminate and update card settings, such as spending limits and merchant
      controls.


      :::note

      - This feature is not available in Sandbox.

      - To increase your account's card limits, please contact [Revolut API
      Support](mailto:api-requests@revolut.com).

      :::


      For more information, see the guides: [Manage cards for your
      business](/docs/guides/manage-accounts/cards/manage-cards).


      :::tip [Card invitations for onboarding team members]

      To prepare virtual cards for team members who have not completed
      onboarding yet, use [Card
      invitations](/docs/api/business#update-card-invitation) instead.

      :::
  - name: Card invitations
    description: >-
      Use card invitations to pre-create cards for [team
      members](/docs/guides/manage-accounts/teams/manage-team-members) who have
      not yet onboarded.

      Once the team member completes onboarding, the card is automatically
      issued as per the configuration specified in the invitation.

      You can also retrieve and update the invitations, or cancel them if
      they're no longer needed.


      :::note

      - This feature is not available in Sandbox.

      - To increase your account's card limits, please contact [Revolut API
      Support](mailto:api-requests@revolut.com).

      :::


      For more information, see the guides: [Manage card
      invitations](/docs/guides/manage-accounts/cards/manage-card-invitations).
  - name: Counterparties
    description: |-
      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](/docs/guides/manage-accounts/counterparties/create-a-counterparty).

      :::note
      In the Sandbox environment, you cannot add real people and businesses as Revolut counterparties. 
      Therefore, to help you simulate [Create a counterparty](/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`
      :::
  - name: Expenses
    description: |-
      Get the list of all the expenses, or use the filters to narrow down the results.
      You can also get a specific expense, or get a receipt related to an expense by providing their respective IDs.

      :::note
      This feature is not available in Sandbox.
      :::

      For more information, see the guides: [Retrieve expenses and receipts](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses).
  - name: Foreign exchange
    description: >-
      Retrieve information on exchange rates between currencies, buy and sell
      currencies.


      For more information, see the guides: [Exchange
      money](/docs/guides/manage-accounts/exchange-money).
  - name: Labels
    description: |-
      Manage accounting labels and label groups for your business.
      Create, retrieve, update, and delete label groups and labels that can be added to your financial records such as [expenses](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses).

      For more information, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings), and [Manage labels and label groups](/docs/guides/manage-accounts/accounting/manage-labels-and-label-groups).

      See also the Revolut Help Centre: [Expenses](https://help.revolut.com/business/help/managing-my-business/expenses/).
  - name: Payment drafts
    description: |-
      Payment drafts let you prepare payments for future processing, prepare payments that require an approval, or prepare bulk or scheduled payments.

      Simply create a draft, and when you're ready, [send it for processing as payment](/docs/guides/manage-accounts/transfers/payment-drafts#send-drafts-for-processing).
      If you or the payment you're making is subject to an [approval process](https://help.revolut.com/business/help/managing-my-business/users-and-employees/how-can-i-set-payment-approval-rules/), another team member designated as an approver must approve it in the [Revolut Business app](https://business.revolut.com/) before the payment can be processed.

      You can also retrieve or delete the drafts created with the API.

      For more information on use cases and other details, see the guides: [Payment drafts](/docs/guides/manage-accounts/transfers/payment-drafts).
  - name: Payout links
    description: >-
      Use payout links to send money without having to request full banking
      details of the recipient.  

      The recipient must claim the money before the link expires.


      :::note

      This feature is available in the UK, the EEA, AU, and SG.

      :::


      For more information, see the guides: [Send money via payout
      link](/docs/guides/manage-accounts/transfers/payout-links).
  - name: Simulations
    description: |-
      The Simulations API is only available in the Sandbox environment. 
      It lets you simulate certain events that are otherwise only possible in the production environment, such as your account's top-up and transfer state changes. 

      For more information, see the guides: [Test your flows with simulations (Sandbox only)](/docs/guides/manage-accounts/api-usage-and-testing/test-flows-with-simulations).

      :::note
      To play around with Sandbox, [create a Sandbox account](https://sandbox-business.revolut.com/).
      :::
  - name: Tax rates
    description: |-
      Manage tax rates for your business.
      Create, retrieve, update, and delete tax rates that can be assigned to your financial records such as [expenses](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses) or bills.

      For more information, see the guides: [Manage accounting settings](/docs/guides/manage-accounts/accounting/manage-accounting-settings) and [Manage tax rates](/docs/guides/manage-accounts/accounting/manage-tax-rates).

      See also the Revolut Help Centre: [Expenses](https://help.revolut.com/business/help/managing-my-business/expenses/) and [BillPay](https://help.revolut.com/business/help/integrating-with-external-apps/introduction-to-billpay/).
  - name: Team members
    description: >-
      Retrieve information on existing team members of your organisation, delete
      team members, and invite new members.


      For more information, see the guides: [Manage team
      members](/docs/guides/manage-accounts/teams/manage-team-members).
  - name: Transactions
    description: |-
      Get the details of your transactions.

      :::note
      An incoming or outgoing payment is represented as a transaction.
      :::

      For more information, see the guides: [Retrieve transactions](/docs/guides/manage-accounts/accounts-and-transactions/retrieve-transactions).
  - name: Transfers
    description: >-
      Move funds in the same currency between accounts of your business, or make
      payments to your counterparties.


      For more details, see the guides: [Send
      money](/docs/guides/manage-accounts/transfers/send-money).
  - name: Webhooks (v1) (deprecated)
    description: >-
      :::warning

      This is the v1 of the Webhooks API. This version is deprecated. For the
      latest version of the API, see [Webhooks
      (v2)](/docs/api/business#tag-webhooks-v2).

      :::


      A webhook (also called a web callback) allows your system to receive
      updates about your account to an HTTPS endpoint that you provide. 

      When a supported event occurs, a notification is posted via HTTP `POST`
      method to the specified endpoint. 


      If the receiver returns an HTTP error response, Revolut will retry the
      webhook event two more times.


      The following events are supported:


      - `TransactionCreated`

      - `TransactionStateChanged`


      You cannot choose which event type to subscribe to. When you create a
      webhook, you automatically subscribe to all supported events.
  - name: Webhooks (v2)
    description: >-
      :::note

      This is the latest version of the Webhooks API, v2. For the previous
      version of the API, see [Webhooks (v1)
      (deprecated)](/docs/api/business#tag-webhooks-v1-deprecated).

      :::


      A webhook (also called a web callback) allows your system to receive
      updates about your account to an HTTPS endpoint that you provide.

      When a supported event occurs, a notification is posted via HTTP `POST`
      method to the specified endpoint. 


      If the receiver returns an HTTP error response, Revolut will retry the
      webhook event three more times, each with a 10-minute interval.


      The following events are supported:


      - `TransactionCreated`

      - `TransactionStateChanged`

      - `PayoutLinkCreated`

      - `PayoutLinkStateChanged`


      For more information, see the guides: [About
      webhooks](/docs/guides/manage-accounts/webhooks/about-webhooks) and
      [Manage webhooks](/docs/guides/manage-accounts/webhooks/manage-webhooks).
x-ext-urls: {}
