Remote Expenses API

The Expenses API from Remote — 7 operation(s) for expenses.

OpenAPI Specification

remote-expenses-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Remote Address Details Expenses API
  version: 0.1.0
servers:
- url: https://gateway.remote.com/
  variables: {}
- url: https://gateway.remote-sandbox.com/
  variables: {}
security:
- OAuth2: []
tags:
- name: Expenses
paths:
  /v1/expenses:
    get:
      callbacks: {}
      description: 'Lists all expenses records


        ## Scopes


        | Category | Read only Scope | Write only Scope (read access implicit) |

        |---|---|---|

        | Manage expenses (`employment_payments`) | View expenses (`expense:read`) | Manage expenses (`expense:write`) |

        '
      operationId: get_v1_expenses
      parameters:
      - description: 'Requires a Company-scoped access token obtained through the Authorization Code flow or the Refresh Token flow.


          The refresh token needs to have been obtained through the Authorization Code flow.

          '
        example: Bearer <COMPANY-SCOPED ACCESS TOKEN>
        in: header
        name: Authorization
        required: true
        schema:
          type: string
      - description: Starts fetching records after the given page
        example: 1
        in: query
        name: page
        required: false
        schema:
          type: integer
      - description: Change the amount of records returned per page, defaults to 20, limited to 100
        example: 30
        in: query
        name: page_size
        required: false
        schema:
          type: integer
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListExpenseResponse'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
          description: Too many requests
      security:
      - CustomerAPIToken:
        - https://gateway.remote.com/company.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
        OAuth2AuthorizationCode:
        - https://gateway.remote.com/company.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
      summary: List expenses
      tags:
      - Expenses
    post:
      callbacks: {}
      description: 'Creates an **approved** expense


        ## Scopes


        | Category | Read only Scope | Write only Scope (read access implicit) |

        |---|---|---|

        | Manage expenses (`employment_payments`) | - | Manage expenses (`expense:write`) |

        '
      operationId: post_v1_expenses
      parameters:
      - description: 'Requires a Company-scoped access token obtained through the Authorization Code flow or the Refresh Token flow.


          The refresh token needs to have been obtained through the Authorization Code flow.

          '
        example: Bearer <COMPANY-SCOPED ACCESS TOKEN>
        in: header
        name: Authorization
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParamsToCreateExpense'
        description: Expenses
        required: false
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseResponse'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
          description: Too many requests
      security:
      - CustomerAPIToken:
        - https://gateway.remote.com/company.manage
        - expense:write
        - employment_payments
        - all:write
        OAuth2AuthorizationCode:
        - https://gateway.remote.com/company.manage
        - expense:write
        - employment_payments
        - all:write
      summary: Create expense
      tags:
      - Expenses
  /v1/expenses/{expense_id}/receipt:
    get:
      callbacks: {}
      deprecated: true
      description: "  Downloads an expense receipt.\n\n  Deprecated since late February 2024 in favour of **[Download a receipt by id](#tag/Expenses/operation/get_download_by_id_expense_receipt)** endpoint.\n\n\n## Scopes\n\n| Category | Read only Scope | Write only Scope (read access implicit) |\n|---|---|---|\n| Manage expenses (`employment_payments`) | View expenses (`expense:read`) | Manage expenses (`expense:write`) |\n"
      operationId: get_v1_expenses_expense_id_receipt
      parameters:
      - description: The expense ID
        example: 3ab2e491-ad1c-47af-849c-3d0a53e20e0d
        in: path
        name: expense_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/pdf:
              schema:
                $ref: '#/components/schemas/GenericFile'
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/heic:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/jpeg:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/jpg:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/png:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/webp:
              schema:
                $ref: '#/components/schemas/GenericFile'
            text/csv:
              schema:
                $ref: '#/components/schemas/GenericFile'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
          description: Unprocessable Entity
      security:
      - CustomerAPIToken:
        - https://gateway.remote.com/company.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
        OAuth2AuthorizationCode:
        - https://gateway.remote.com/company.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
      summary: Download a receipt
      tags:
      - Expenses
  /v1/expenses/categories:
    get:
      callbacks: {}
      description: Lists the effective hierarchy of expense categories. At least one of employment_id, expense_id, or country_code must be provided.
      operationId: get_v1_expenses_categories
      parameters:
      - description: The employment ID for which to list categories. Required if neither expense_id nor country_code is provided.
        in: query
        name: employment_id
        required: false
        schema:
          type: string
      - description: The expense ID for which to list categories (includes the expense's category, even if it is not selectable by default). If provided without employment_id, will use the expense's employment context.
        in: query
        name: expense_id
        required: false
        schema:
          type: string
      - description: Include un-selectable intermediate categories in the response
        in: query
        name: include_parents
        required: false
        schema:
          type: boolean
      - description: Filter categories by country (ISO 3166-1 alpha-3 code, e.g. "GBR"). Only used when neither employment_id nor expense_id is provided.
        in: query
        name: country_code
        required: false
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListExpenseCategoriesResponse'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
          description: Too many requests
      security:
      - CustomerAPIToken: []
        OAuth2AuthorizationCode: []
      summary: List expense categories
      tags:
      - Expenses
  /v1/employee/expense-categories:
    get:
      callbacks: {}
      deprecated: false
      description: 'Returns the flat list of expense categories applicable to the current employee. Only active categories are returned, filtered by the employee''s country / legal-entity visibility rules. Leaf nodes have `is_selectable: true`; parent nodes are excluded unless `include_parents=true`.


        ## Scopes


        | Category | Read only Scope | Write only Scope (read access implicit) |

        |---|---|---|

        | Manage expenses (`employment_payments`) | View expenses (`expense:read`) | Manage expenses (`expense:write`) |

        '
      operationId: get_v1_employee_expense-categories
      parameters:
      - description: Include parent (non-selectable) categories in addition to selectable leaves
        in: query
        name: include_parents
        required: false
        schema:
          type: boolean
      - description: Expense ID (slug) whose category should be included in the result, even if it is not selectable by default
        in: query
        name: expense_id
        required: false
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListExpenseCategoriesResponse'
          description: Success
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
      security:
      - OAuth2Assertion:
        - https://gateway.remote.com/employment.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
      summary: List expense categories for the authenticated employee
      tags:
      - Expenses
  /v1/expenses/{id}:
    get:
      callbacks: {}
      description: 'Shows a single expense record


        ## Scopes


        | Category | Read only Scope | Write only Scope (read access implicit) |

        |---|---|---|

        | Manage expenses (`employment_payments`) | View expenses (`expense:read`) | Manage expenses (`expense:write`) |

        '
      operationId: get_v1_expenses_id
      parameters:
      - description: 'Requires a Company-scoped access token obtained through the Authorization Code flow or the Refresh Token flow.


          The refresh token needs to have been obtained through the Authorization Code flow.

          '
        example: Bearer <COMPANY-SCOPED ACCESS TOKEN>
        in: header
        name: Authorization
        required: true
        schema:
          type: string
      - description: Expense ID
        in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseResponse'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
          description: Too many requests
      security:
      - CustomerAPIToken:
        - https://gateway.remote.com/company.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
        OAuth2AuthorizationCode:
        - https://gateway.remote.com/company.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
      summary: Show expense
      tags:
      - Expenses
    patch:
      callbacks: {}
      description: 'Updates an expense


        ## Scopes


        | Category | Read only Scope | Write only Scope (read access implicit) |

        |---|---|---|

        | Manage expenses (`employment_payments`) | - | Manage expenses (`expense:write`) |

        '
      operationId: patch_v1_expenses_id (2)
      parameters:
      - description: Expense ID
        in: path
        name: id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateExpenseParams'
        description: Expenses
        required: false
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseResponse'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictResponse'
          description: Conflict
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
          description: Too many requests
      security:
      - CustomerAPIToken:
        - https://gateway.remote.com/company.manage
        - expense:write
        - employment_payments
        - all:write
        OAuth2AuthorizationCode:
        - https://gateway.remote.com/company.manage
        - expense:write
        - employment_payments
        - all:write
      summary: Update an expense
      tags:
      - Expenses
    put:
      callbacks: {}
      description: 'Updates an expense


        ## Scopes


        | Category | Read only Scope | Write only Scope (read access implicit) |

        |---|---|---|

        | Manage expenses (`employment_payments`) | - | Manage expenses (`expense:write`) |

        '
      operationId: patch_v1_expenses_id
      parameters:
      - description: Expense ID
        in: path
        name: id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateExpenseParams'
        description: Expenses
        required: false
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseResponse'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConflictResponse'
          description: Conflict
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
          description: Too many requests
      security:
      - CustomerAPIToken:
        - https://gateway.remote.com/company.manage
        - expense:write
        - employment_payments
        - all:write
        OAuth2AuthorizationCode:
        - https://gateway.remote.com/company.manage
        - expense:write
        - employment_payments
        - all:write
      summary: Update an expense
      tags:
      - Expenses
  /v1/expenses/{expense_id}/receipts/{receipt_id}:
    get:
      callbacks: {}
      deprecated: false
      description: 'Download a receipt by id.


        ## Scopes


        | Category | Read only Scope | Write only Scope (read access implicit) |

        |---|---|---|

        | Manage expenses (`employment_payments`) | View expenses (`expense:read`) | Manage expenses (`expense:write`) |

        '
      operationId: get_v1_expenses_expense_id_receipts_receipt_id
      parameters:
      - description: The expense ID
        example: 3ab2e491-ad1c-47af-849c-3d0a53e20e0d
        in: path
        name: expense_id
        required: true
        schema:
          type: string
      - description: The receipt ID
        example: 6ab2e49o-ad1c-47af-849c-3d0a53e21e0e
        in: path
        name: receipt_id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/pdf:
              schema:
                $ref: '#/components/schemas/GenericFile'
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/heic:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/jpeg:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/jpg:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/png:
              schema:
                $ref: '#/components/schemas/GenericFile'
            image/webp:
              schema:
                $ref: '#/components/schemas/GenericFile'
            text/csv:
              schema:
                $ref: '#/components/schemas/GenericFile'
          description: Success
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Unprocessable Entity
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TooManyRequestsResponse'
          description: Unprocessable Entity
      security:
      - CustomerAPIToken:
        - https://gateway.remote.com/company.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
        OAuth2AuthorizationCode:
        - https://gateway.remote.com/company.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
      summary: Download a receipt by id
      tags:
      - Expenses
  /v1/employee/expenses:
    get:
      callbacks: {}
      deprecated: false
      description: 'Returns a paginated list of expenses belonging to the current employee.


        ## Scopes


        | Category | Read only Scope | Write only Scope (read access implicit) |

        |---|---|---|

        | Manage expenses (`employment_payments`) | View expenses (`expense:read`) | Manage expenses (`expense:write`) |

        '
      operationId: get_v1_employee_expenses
      parameters: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
          description: Success
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NotFoundResponse'
          description: Not Found
      security:
      - OAuth2Assertion:
        - https://gateway.remote.com/employment.manage
        - expense:read
        - expense:write
        - employment_payments
        - all:write
        - all:read
      summary: List expenses for the authenticated employee
      tags:
      - Expenses
    post:
      callbacks: {}
      deprecated: false
      description: 'Creates a new expense record for the current employee.


        ## Scopes


        | Category | Read only Scope | Write only Scope (read access implicit) |

        |---|---|---|

        | Manage expenses (`employment_payments`) | - | Manage expenses (`expense:write`) |

        '
      operationId: post_v1_employee_expenses
      parameters: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ParamsToCreateEmployeeExpense'
        description: Expense params
        required: false
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SuccessResponse'
          description: Created
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ForbiddenResponse'
          description: Forbidden
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnprocessableEntityResponse'
          description: Unprocessable Entity
      security:
      - OAuth2Assertion:
        - https://gateway.remote.com/employment.manage
        - expense:write
        - employment_payments
        - all:write
      summary: Create an expense for the authenticated employee
      tags:
      - Expenses
components:
  schemas:
    ParamsToCreateExpense:
      description: "  All the params needed to create an expense.\n\n  An expense can be created using the `receipt` or `receipts` fields; however, these fields are not allowed together within the same object.\n\n  For category selection, you can use either:\n  - `category` (legacy enum values, deprecated but supported)\n  - `expense_category_slug` (new hierarchical categories, recommended)\n\n  If both are provided, `expense_category_slug` takes precedence.\n"
      example:
        amount: 8000
        currency: EUR
        employment_id: d4ebc714-4950-47a9-a464-28e1f1ab2a90
        expense_category_slug: uuid-tech-equipment-slug
        expense_date: '2020-12-11'
        receipt:
          content: UGVyaW9kIEVuZCBEYXRlLFBheSBEYXRlLEVtcG...5jZSBPZiBSZXNpZGVuYdXJyZW50LEFsbG93
          name: receipt.pdf
        reviewed_at: '2021-07-15T18:18:17Z'
        reviewer_id: 14c14128-f5f4-475a-8ec0-6329b4832a61
        tax_amount: 0
        timezone: Etc/UTC
        title: new keyboard
      properties:
        amount:
          description: The expense amount in the specified currency, in cents.
          type: integer
        category:
          deprecated: true
          description: 'Categories allowed for an expense (legacy, deprecated).<br/>

            Note: `coworking`, `home_office`, `phone_utilities`, `travel` are deprecated and will be removed in the future.

            '
          enum:
          - car_rental
          - coworking_office
          - education_training
          - entertainment
          - flight
          - fuel
          - gifts
          - insurance
          - lodging
          - meals
          - other
          - parking_toll
          - subscription
          - tech_equipment
          - telecommunication
          - transport
          - utilities
          - vaccination_testing
          - visa
          - wellness
          - coworking
          - home_office
          - phone_utilities
          - travel
          nullable: true
          type: string
        currency:
          description: "  The three-letter code for the expense currency.<br/>\n  Examples: `\"USD\"`, `\"EUR\"`, `\"CAD\"`\n"
          type: string
        employment_id:
          description: The ID for the employment to which this expense relates.
          type: string
        expense_category_slug:
          description: Slug of the expense category from the hierarchical categories system (recommended). Takes precedence over legacy category field.
          nullable: true
          type: string
        expense_date:
          description: Date of the purchase, which must be in the past
          type: string
        receipt:
          $ref: '#/components/schemas/Base64File'
        receipts:
          items:
            $ref: '#/components/schemas/Base64File'
          maxItems: 5
          type: array
        reviewed_at:
          description: The date and time that the expense was reviewed in ISO8601 format. If not provided, it defaults to the current datetime.
          format: date-time
          type: string
        reviewer_id:
          description: If the person reviewing the expense is a user in Remote, you can provide its user id for this field. If a value is not provided, defaults to the user that generated the API token.
          type: string
        tax_amount:
          description: The tax portion of the expense amount, in cents. Use 0 if no tax applies.
          type: integer
        timezone:
          $ref: '#/components/schemas/Timezone'
        title:
          description: A short description of the expense (e.g., "New keyboard", "Team dinner").
          type: string
      required:
      - expense_date
      - title
      - amount
      - currency
      - employment_id
      title: ParamsToCreateExpense
      type: object
    ParameterError:
      example:
        code: invalid_param
        message: Invalid parameter
        param: employment_id
      properties:
        code:
          description: An error code that describes the nature of the error.
          type: string
        message:
          description: A developer friendly error message that gives details on what the error was and how it may be remedied.
          type: string
        param:
          description: The parameter that lead to the error message.
          type: string
      required:
      - code
      - message
      - param
      title: ParameterError
      type: object
    UpdateExpenseParams:
      description: Update expense params
      example:
        status: approved
      oneOf:
      - $ref: '#/components/schemas/ApproveExpenseParams'
      - $ref: '#/components/schemas/DeclineExpen

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