Revolut Expenses API

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](https://developer.revolut.com/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses).

OpenAPI Specification

revolut-expenses-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  version: '1.0'
  title: Business Accounting Expenses API
  description: "As a Revolut Business customer with a Business Account, you can use the Business API to automate your own business processes.\nSave time, reduce your costs, and avoid errors by using the Business API. \n\n:::tip[Before you get started]\nTo learn more about the Business API and its features, check the [**user guides**](https://developer.revolut.com/docs/guides/manage-accounts/introduction).\n\nYou can reach them at any time from the main navigation bar **→ Guides → Business**.\n:::\n\nYou can view accounts, manage counterparties, make payments or currency exchanges without manual effort in the Web UI:\n\n- Accounting: [Account management](https://developer.revolut.com/docs/api/business#get-account), [Accounting settings](https://developer.revolut.com/docs/api/business#tag-accounting), [Expense management](https://developer.revolut.com/docs/api/business#get-expense), [Transactions](https://developer.revolut.com/docs/api/business#get-transactions) \n- Payments: \n  - [Counterparty management](https://developer.revolut.com/docs/api/business#get-counterparties)\n  - Payment management: [Payment drafts](https://developer.revolut.com/docs/api/business#delete-payment-draft), [Payout links](https://developer.revolut.com/docs/api/business#get-payout-link), [Transfers](https://developer.revolut.com/docs/api/business#tag-transfers)\n  - [Foreign exchange](https://developer.revolut.com/docs/api/business#tag-foreign-exchange)\n- Business team: [Card management](https://developer.revolut.com/docs/api/business#delete-card), [Card invitation management](https://developer.revolut.com/docs/api/business#update-card-invitation), [Team member management](https://developer.revolut.com/docs/api/business#delete-team-member)\n- Developer tools: [Sandbox simulations](https://developer.revolut.com/docs/api/business#tag-simulations), [Webhook management](https://developer.revolut.com/docs/api/business#tag-webhooks-v2)\n\nTo see the reference for the specific endpoints and operations of this API, browse the menu on the left.\n\n### Test the Business API\n\nYou can test the Business API in Postman by forking this collection:\n\n[![View in Postman](https://run.pstmn.io/button.svg)](https://www.postman.com/revolut-api/workspace/revolut-developers/overview)"
  contact: {}
servers:
- url: https://b2b.revolut.com/api/1.0
  description: Production server (uses live data)
- url: https://sandbox-b2b.revolut.com/api/1.0
  description: Sandbox server (uses test data)
tags:
- name: 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](https://developer.revolut.com/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses).'
paths:
  /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](https://developer.revolut.com/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
          - rev_payment
      responses:
        '200':
          description: List of expenses
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expenses'
              example:
              - 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'
              example:
                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'
              example:
                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](https://developer.revolut.com/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](https://developer.revolut.com/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'
              example:
                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'
              example:
                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](https://developer.revolut.com/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](https://developer.revolut.com/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](https://developer.revolut.com/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
                format: binary
              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](https://developer.revolut.com/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'
              example:
                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'
              example:
                message: Expenses feature is not enabled
                code: 3470
        default:
          description: Unexpected error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    Category:
      type: object
      description: The [accounting category](https://developer.revolut.com/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.
    ExpenseState:
      enum:
      - missing_info
      - awaiting_review
      - rejected
      - pending_reimbursement
      - refund_requested
      - refunded
      - approved
      - reverted
      description: "Indicates the state of the expense. Possible values:\n\n  - `missing_info`: The expense is missing some required information.\n\n    This is the initial state of the expense when it's first created.\n    Once the missing information is provided, the expense is ready to be submitted.\n\n  - `awaiting_review`: The expense is awaiting approval before it can be completed.\n\n    The approver can approve, reject, or request repayment for the expense.\n    It is also possible for the submitter to undo the submission at this stage.\n\n  - `rejected`: The expense has been rejected by the approver. \n\n    The expense submitter (typically, the payer) should fix the issue that was the reason for the rejection and resubmit the expense.\n\n  - `pending_reimbursement`: The reimbursement request has been approved, and the expense is awaiting reimbursement.\n\n    This state is possible for reimbursements (transaction type = `External`). \n\n  - `refund_requested`: The expense has been rejected and repayment has been requested.*\n\n    This state is possible for card transactions.\n    It indicates that following the review, the approver rejected the expense and requested that it be paid back to the business account.\n    This can happen, for example, if an employee accidentally makes a personal purchase with their business card.\n    Once the money has been returned, the **admin** can mark this expense as repaid.\n\n  - `refunded`: The expense has been repaid.*\n\n    This state indicates that the admin has marked the expense as repaid.\n\n  - `approved`: The expense has been approved and is now completed.*\n\n  - `reverted`: The expense has been reverted. \n\n    This status indicates that the transaction related to the expense has been reverted.\n    In such a case, the expense status is automatically set to `reverted`, and the expense is completed.\n    This can happen, for example, when the transaction has been reverted by the merchant.\n\n_*Additionally, if an admin has previously approved the expense, marked it as repaid/completed, or requested repayment, they can revert their decision.\nIn such a case, the expense goes back to the initial `missing_info` state._\n\nFor more information, see the guides: [Retrieve expenses and receipts](https://developer.revolut.com/docs/guides/manage-accounts/accounts-and-transactions/retrieve-expenses#expense-state)."
      type: string
    ExpenseTransactionType:
      enum:
      - atm
      - card_payment
      - fee
      - transfer
      - external
      - mileage_reimbursement
      - rev_payment
      description: The type of the [transaction](https://developer.revolut.com/docs/api/business#get-transaction) related to the expense.
      type: string
    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'
    Expenses:
      type: array
      items:
        $ref: '#/components/schemas/Expense'
    TaxRate:
      type: object
      description: The [tax rate](https://developer.revolut.com/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%.
    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](https://developer.revolut.com/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](https://developer.revolut.com/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](https://developer.revolut.com/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`](https://developer.revolut.com/docs/api/business#get-transaction#response)).

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


            For reimbursements, it''s the payment date provided in the reimbursement request.'
        labels:
          type: object
          description: 'The [labels](https://developer.revolut.com/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'
          example:
            Office supplies:
            - Photocopying
            Department:
            - HR
        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
    Currency:
      type: string
      pattern: ^[A-Z]{3}$
      description: '[ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code in upper case.'
    Amount:
      description: The amount of money.
      type: number
      format: double
    Error:
      type: object
      properties:
        code:
          type: integer
          description: The error code.
        message:
          type: string
          description: The description of the error.
      required:
      - code
      - message
    LabelGroup:
      type: array
      description: 'A label group 

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