Emburse expense-approval-controller-v2 API

Approve, return and reassign expense reports using username or email of approver.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/emburse-expense-approval-controller-v2-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

emburse-expense-approval-controller-v2-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  description: Api Documentation
  version: '1.0'
  title: Api Documentation Accounts expense-approval-controller-v2 API
  termsOfService: urn:tos
  contact: {}
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0
servers:
- url: https://service.chromeriver.com
tags:
- name: expense-approval-controller-v2
  description: Approve, return and reassign expense reports using username or email of approver.
paths:
  /v2/expense-report-approvals:
    get:
      tags:
      - expense-approval-controller-v2
      summary: Get list of reports for approval
      description: This web service allows an external application to get a list of expense reports awaiting approval by a user
      operationId: getApprovalsUsingGET_1
      parameters:
      - name: chain-id
        in: header
        description: Used for tracking the flow of the request
        required: false
        schema:
          type: string
      - name: customer-code
        in: header
        description: Unique customer identifier provided by Chrome River
        required: true
        schema:
          type: string
      - name: email-address
        in: header
        description: Unique email of the approver making a request
        required: false
        schema:
          type: string
      - name: person-unique-id
        in: header
        description: Unique ID of the approver making a request
        required: false
        schema:
          type: string
      - name: username
        in: header
        description: Unique user-name of the approver making a request
        required: false
        schema:
          type: string
      - name: x-api-key
        in: header
        description: 'API key for Authentication '
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json;charset=UTF-8:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ExpenseReport'
        '400':
          description: Customer Code is invalid.
        '401':
          description: Customer Code is not authorized.  Cannot get list of expense reports for approval.
        '403':
          description: Logged in user does not exist.
        '503':
          description: Service unavailable.
      deprecated: false
  /v2/expense-report-approvals/count:
    get:
      tags:
      - expense-approval-controller-v2
      summary: Get count of reports for approval
      description: This web service returns a count of expense reports awaiting approval by a user.
      operationId: getExpenseReportCountUsingGET_1
      parameters:
      - name: chain-id
        in: header
        description: Used for tracking the flow of the request
        required: false
        schema:
          type: string
      - name: customer-code
        in: header
        description: Unique customer identifier provided by Chrome River
        required: true
        schema:
          type: string
      - name: email-address
        in: header
        description: Unique email of the approver making a request
        required: false
        schema:
          type: string
      - name: person-unique-id
        in: header
        description: Unique ID of the approver making a request
        required: false
        schema:
          type: string
      - name: username
        in: header
        description: Unique user-name of the approver making a request
        required: false
        schema:
          type: string
      - name: x-api-key
        in: header
        description: 'API key for Authentication '
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/CountModel'
        '400':
          description: Customer Code is invalid
        '401':
          description: Customer Code is not authorized.  Cannot get expense report count.
        '403':
          description: Logged in user does not exist.
        '503':
          description: Service unavailable.
      deprecated: false
  /v2/expense-report-approvals/{reportId}:
    get:
      tags:
      - expense-approval-controller-v2
      summary: Get expense report details
      description: This web service allows an external application to get the details of an expense report
      operationId: getExpenseReportUsingGET_1
      parameters:
      - name: chain-id
        in: header
        description: Used for tracking the flow of the request
        required: false
        schema:
          type: string
      - name: customer-code
        in: header
        description: Unique customer identifier provided by Chrome River
        required: true
        schema:
          type: string
      - name: email-address
        in: header
        description: Unique email of the approver making a request
        required: false
        schema:
          type: string
      - name: person-unique-id
        in: header
        description: Unique ID of the approver making a request
        required: false
        schema:
          type: string
      - name: reportId
        in: path
        description: Report ID for report
        required: true
        schema:
          type: string
      - name: username
        in: header
        description: Unique user-name of the approver making a request
        required: false
        schema:
          type: string
      - name: x-api-key
        in: header
        description: 'API key for Authentication '
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExpenseReport'
        '400':
          description: Customer Code is invalid.
        '401':
          description: Customer Code is not authorized.  Cannot get expense report.
        '403':
          description: Logged in user is not allowed to view details expense report or Logged in user does not exist
        '404':
          description: Expense Report does not exist.
        '503':
          description: Service unavailable.
      deprecated: false
  /v2/expense-reports/{reportId}/approve:
    post:
      tags:
      - expense-approval-controller-v2
      summary: Approve an expense report
      description: This web service allows an external application to approve a specified expense report
      operationId: approveExpenseReportUsingPOST_1
      parameters:
      - name: chain-id
        in: header
        description: Used for tracking the flow of the request
        required: false
        schema:
          type: string
      - name: customer-code
        in: header
        description: Unique customer identifier provided by Chrome River
        required: true
        schema:
          type: string
      - name: email-address
        in: header
        description: Unique email of the approver making a request
        required: false
        schema:
          type: string
      - name: person-unique-id
        in: header
        description: Unique ID of the approver making a request
        required: false
        schema:
          type: string
      - name: reportId
        in: path
        description: Report ID for report
        required: true
        schema:
          type: string
      - name: username
        in: header
        description: Unique user-name of the approver making a request
        required: false
        schema:
          type: string
      - name: x-api-key
        in: header
        description: 'API key for Authentication '
        required: true
        schema:
          type: string
      requestBody:
        $ref: '#/components/requestBodies/NotesModel2'
      responses:
        '200':
          description: OK
          content:
            application/json;charset=UTF-8:
              schema:
                type: object
        '400':
          description: Customer Code is invalid.
        '401':
          description: Customer Code is not authorized.  Cannot approve expense report.
        '403':
          description: Logged in user is not authorized to approve report or Logged in user does not exist.
        '503':
          description: Service unavailable.
      deprecated: false
  /v2/expense-reports/{reportId}/reassign:
    post:
      tags:
      - expense-approval-controller-v2
      summary: Reassign an expense report
      description: This web service allows an external application to reassign a specified expense report to another approver for review
      operationId: reassignExpenseReportUsingPOST_1
      parameters:
      - name: chain-id
        in: header
        description: Used for tracking the flow of the request
        required: false
        schema:
          type: string
      - name: customer-code
        in: header
        description: Unique customer identifier provided by Chrome River
        required: true
        schema:
          type: string
      - name: email-address
        in: header
        description: Unique email of the approver making a request
        required: false
        schema:
          type: string
      - name: person-unique-id
        in: header
        description: Unique ID of the approver making a request
        required: false
        schema:
          type: string
      - name: reportId
        in: path
        description: Report ID for report
        required: true
        schema:
          type: string
      - name: username
        in: header
        description: Unique user-name of the approver making a request
        required: false
        schema:
          type: string
      - name: x-api-key
        in: header
        description: 'API key for Authentication '
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReassignModelV2'
        description: Payload required to do a reassign
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json;charset=UTF-8:
              schema:
                type: object
        '400':
          description: Customer Code is invalid.
        '401':
          description: Customer Code is not authorized.  Cannot reassign expense report.
        '403':
          description: Logged in user is not authorized to reassign report or Logged in user does not exist.
        '503':
          description: Service unavailable.
      deprecated: false
  /v2/expense-reports/{reportId}/return:
    post:
      tags:
      - expense-approval-controller-v2
      summary: Return an expense report
      description: This web service allows an external application to return a specified expense report to the expense owner
      operationId: returnExpenseReportUsingPOST_1
      parameters:
      - name: chain-id
        in: header
        description: Used for tracking the flow of the request
        required: false
        schema:
          type: string
      - name: customer-code
        in: header
        description: Unique customer identifier provided by Chrome River
        required: true
        schema:
          type: string
      - name: email-address
        in: header
        description: Unique email of the approver making a request
        required: false
        schema:
          type: string
      - name: person-unique-id
        in: header
        description: Unique ID of the approver making a request
        required: false
        schema:
          type: string
      - name: reportId
        in: path
        description: Report ID for report
        required: true
        schema:
          type: string
      - name: username
        in: header
        description: Unique user-name of the approver making a request
        required: false
        schema:
          type: string
      - name: x-api-key
        in: header
        description: 'API key for Authentication '
        required: true
        schema:
          type: string
      requestBody:
        $ref: '#/components/requestBodies/NotesModel'
      responses:
        '200':
          description: OK
          content:
            application/json;charset=UTF-8:
              schema:
                type: object
        '400':
          description: Customer Code is invalid.
        '401':
          description: Customer Code is not authorized.  Cannot return expense report.
        '403':
          description: Logged in user is not authorized to return report or Logged in user does not exist.
        '503':
          description: Service unavailable.
      deprecated: false
  /v2/expense-reports/{reportId}/submit:
    post:
      tags:
      - expense-approval-controller-v2
      summary: Submit an expense report
      description: This web service allows an external application to submit a specified expense report
      operationId: submitExpenseReportUsingPOST_1
      parameters:
      - name: chain-id
        in: header
        description: Used for tracking the flow of the request
        required: false
        schema:
          type: string
      - name: customer-code
        in: header
        description: Unique customer identifier provided by Chrome River
        required: true
        schema:
          type: string
      - name: email-address
        in: header
        description: Unique email of the submitter making a request
        required: false
        schema:
          type: string
      - name: person-unique-id
        in: header
        description: Unique ID of the submitter making a request
        required: false
        schema:
          type: string
      - name: reportId
        in: path
        description: Report ID for report
        required: true
        schema:
          type: string
      - name: username
        in: header
        description: Unique user-name of the submitter making a request
        required: false
        schema:
          type: string
      - name: x-api-key
        in: header
        description: 'API key for Authentication '
        required: true
        schema:
          type: string
      requestBody:
        $ref: '#/components/requestBodies/ExpenseSubmit'
      responses:
        '200':
          description: OK
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExpenseSubmitResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseSubmitResponse'
        '400':
          description: Customer Code is invalid.
        '401':
          description: Customer Code is not authorized.  Cannot submit expense report.
        '403':
          description: Logged in user is not authorized to submit report or Logged in user does not exist.
        '422':
          description: Expense report has not been submitted. Report have some business rules violations
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExpenseSubmitResponse'
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseSubmitResponse'
        '503':
          description: Service unavailable.
      deprecated: false
components:
  schemas:
    ExpenseSubmitResponse:
      type: object
      properties:
        complianceItems:
          type: array
          description: List of compliance issues associated with report
          items:
            $ref: '#/components/schemas/ComplianceItem'
        hasComplianceItems:
          type: boolean
          description: Indicates if compliance issues are associated with report
        submitted:
          type: boolean
      title: ExpenseSubmitResponse
    Entity:
      type: object
      properties:
        code:
          type: string
          example: 100
          description: Entity code. Max 50 characters
        extraData1:
          type: string
          example: Main
          description: Extra data field. Max 1000 characters
        extraData2:
          type: string
          example: Office
          description: Extra data field. Max 1000 characters
        extraData3:
          type: string
          example: 1000
          description: Extra data field. Max 1000 characters
        extraData4:
          type: string
          example: 900
          description: Extra data field. Max 1000 characters
        extraData5:
          type: string
          example: '0000'
          description: Extra data field. Max 1000 characters
        name:
          type: string
          example: Los Angeles
          description: Name of entity. Max 100 characters
      title: Entity
    Person:
      type: object
      properties:
        firstName:
          type: string
          example: Smith
          description: Person's last name. Max 100 characters
        lastName:
          type: string
          example: Jacob
          description: Person's first name. Max 100 characters
        personEntities:
          type: array
          description: List of person entities associated with person
          items:
            $ref: '#/components/schemas/PersonEntities'
        personUniqueId:
          type: string
          example: jsmith
          description: Unique identifier for person. Max 100 characters
        primaryEmailAddress:
          type: string
          example: jacob.smith@cpa.org
          description: Person's primary email address. Max 100 characters
        reportsToUniqueId:
          type: string
          example: lkemp
          description: Unique identifier for manager person reports to
        title:
          type: string
          example: Associate Accountant
          description: Person's title. Max 255 characters
        uniquePersonId:
          type: string
      title: Person
    CountModel:
      type: object
      properties:
        reportsToApprove:
          type: integer
          format: int32
          example: 9
          description: The number of expense reports awaiting approval by approver.
      title: CountModel
    PaLineItemType:
      type: object
      properties:
        externalRef:
          type: string
          example: 4320
          description: Reference to an external system's expense types. Max 50 characters
        id:
          type: integer
          format: int32
          example: 1398
          description: Internal ID of preapproval line item
        name:
          type: string
          example: Airfare
          description: Expense type of preapproval line item. Max 50 characters
        type:
          type: string
          example: LineItem
          enum:
          - LineItem
          - Header
      title: PaLineItemType
    ExpenseReportLineItemPersonGuest:
      type: object
      properties:
        amount:
          type: number
          example: 11.98
          description: Amount of expense spent by/for guest
        company:
          type: string
          example: CFA Consultants
          description: Company of guest. Max 100 characters
        firstName:
          type: string
          example: Jennifer
          description: First name of guest. Max 100 characters
        guestType:
          type: string
          example: InternalGuest
          description: Type of guest
          enum:
          - InternalGuest
          - ExternalGuest
          - HealthCareProvider
          - TemporaryHealthCareProvider
          - CRMGuest
        lastName:
          type: string
          example: Garth
          description: Last name of guest. Max 100 characters
        percentage:
          type: number
          example: 10
          description: Percentage of expense spent by/for guest
        title:
          type: string
          example: Legal Consultant
          description: Title of guest. Max 255 characters
      title: ExpenseReportLineItemPersonGuest
    ExpenseReportLineItem:
      type: object
      properties:
        allocations:
          type: array
          description: List of allocations selected for line item
          items:
            $ref: '#/components/schemas/LineItemAllocation'
        amount:
          type: number
          example: 119.81
          description: Amount of line item
        amountApproved:
          type: number
          example: 119.81
          description: Approved amount due to expense owner
        amountCustomer:
          type: number
          example: 0
          description: AmountSpent * customer's exchange rate
        amountSpent:
          type: number
          example: 119.81
          description: Amount spent of line item
        approvalStatus:
          type: string
          example: Pending Approval
          description: NULL for parent line items (parent == true)
          enum:
          - Draft
          - Pending Approval
          - Approved For Payment
          - Returned
          - Exported
          - Paid
          - Partially Paid
        businessPurpose:
          type: string
          example: Conference
          description: Business purpose of expense. Max 2500 characters
        children:
          type: array
          description: List of child expenses. Used for hotel items.
          items:
            $ref: '#/components/schemas/ExpenseReportLineItem'
        comments:
          type: array
          description: List of comments attached to line item
          items:
            $ref: '#/components/schemas/Comment'
        complianceItems:
          type: array
          description: List of compliance issues associated with the line item
          items:
            $ref: '#/components/schemas/ComplianceItem'
        createDate:
          type: string
          format: date-time
          example: 2022-01-03 05:53:39:000
          description: Date expense line item was created on report
        currencyCodeCustomer:
          type: string
          example: USD
          description: Customer's default ISO-4217 currency code
        currencySpent:
          type: string
          example: USD
          description: ' ISO-4217 Currency code spent'
        currentApprovers:
          type: array
          description: List of approvers where line item is currently pending
          items:
            $ref: '#/components/schemas/Person'
        description:
          type: string
          example: Flight to St. Louis
          description: Description of expense. Max 2500 characters
        expenseItemType:
          type: string
          example: Airfare
          description: Expense category of line item. Max 50 characters
        exportStatus:
          type: string
          example: Exported
          description: Export status of line item
          enum:
          - In Export
          - Waiting for Export
          - Exported
          - Paid
          - Partially Paid
        feedCode:
          type: string
          example: CreditCardAmex
          description: Name of feed for expense transaction
        feedName:
          type: string
          example: Amex Corporate Card
          description: Name of feed for expense transaction
        firmPaid:
          type: boolean
        guests:
          type: array
          description: List of guests for line item
          items:
            $ref: '#/components/schemas/ExpenseReportLineItemPersonGuest'
        hasReceipt:
          type: boolean
          example: true
          description: Is a receipt attached
        hasTaxReceipt:
          type: boolean
          example: true
          description: Is a tax receipt attached
        id:
          type: string
          example: b0dd069a-ce1a-45bf-b9dd-48cac24735ff
          description: Internal ID of expense report line item. 36 characters
        images:
          type: array
          description: Filenames of images attached to this line item
          items:
            type: string
        isCreditCard:
          type: boolean
          example: true
          description: Returns true if feed of expense transaction is a credit card feed
        paLineItemType:
          $ref: '#/components/schemas/PaLineItemType'
        parent:
          type: boolean
        perDiemLineItem:
          $ref: '#/components/schemas/PerDiemLineItem'
        personal:
          type: boolean
        transactionDate:
          type: string
          format: date-time
          example: 2022-01-03 05:53:39:000
          description: Date of transaction
        udas:
          type: array
          description: List of line item user defined attributes.
          items:
            $ref: '#/components/schemas/UserDefinedAttribute'
        updateDate:
          type: string
          format: date-time
          example: 2022-01-03 05:53:39:000
          description: Date expense line item was last updated on report
        vatAmount:
          type: number
          example: 5.99
          description: Amount of VAT tax
        vatAmount2:
          type: number
          example: 5.99
          description: Amount of 2nd VAT tax
        vatAmount3:
          type: number
          example: 5.99
          description: Amount of 3rd VAT tax
        vatAmountApplied:
          type: number
          example: 5.99
          description: VAT amount applied to expense
        vatAmountApplied2:
          type: number
          example: 5.99
          description: VAT amount applied to expense
        vatAmountApplied3:
          type: number
          example: 5.99
          description: VAT amount applied to expense
        vatAmountAppliedRemainder:
          type: number
          example: 5.99
          description: Remainder of VAT amount applied
        vatAmountAppliedRemainder2:
          type: number
          example: 5.99
          description: Remainder of VAT amount applied
        vatAmountAppliedRemainder3:
          type: number
          example: 5.99
          description: Remainder of VAT amount applied
        vatAmountEntered:
          type: number
          example: 5.99
          description: VAT amount as entered by user
        vatAmountEntered2:
          type: number
          example: 5.99
          description: VAT amount as entered by user
        vatAmountEntered3:
          type: number
          example: 5.99
          description: VAT amount as entered by user
        vatLocation:
          type: string
          example: Canada
          description: Location of VAT taxation. Max 50 characters
        vatTaxCode:
          type: string
          example: GST
          description: VAT tax code. Max 10 characters
        vatTaxCode2:
          type: string
          example: HST
          description: VAT tax code 2. Max 10 characters
        vatTaxCode3:
          type: string
          example: PST
          description: VAT tax code 3. Max 10 characters
        vatTaxPercentage:
          type: number
          example: 5
          description: Rate of VAT tax
        vatTaxPercentage2:
          type: number
          example: 5
          description: Rate of 2nd VAT tax
        vatTaxPercentage3:
          type: number
          example: 5
          description: Rate of 3rd VAT tax
        vatTaxPercentageReclaim:
          type: number
          example: 100
          description: Rate of VAT refund
        vatTaxPercentageReclaim2:
          type: number
          example: 100
          description: Rate of VAT refund for 2nd VAT tax code
        vatTaxPercentageReclaim3:
          type: number
          example: 100
          description: Rate of VAT refund for 3rd VAT tax code
      title: ExpenseReportLineItem
    ReassignModelV2:
      type: object
      required:
      - note
      properties:
        assignedEntityCode:
          type: string
          example: 4404291000
          description: Entity Code for the group to which the report is assigned.  Must be used with assignedRoleName, and assignedEntityTypeCode. Max 50 characters
        assignedEntityTypeCode:
          type: string
          example: DEPT
          description: Entity Type Code for the group to which the report is assigned.  Must be used with assignedRoleName, and assignedEntityCode. Max 32 characters
        assignedRoleName:
          type: string
          example: Part Of
          description: Role Name for the group to which the report is assigned.  Must be used with assignedEntityCode, and assignedEntityTypeCode. Max 50 characters
        assignedUserEmailAddress:
          type: string
          example: lsuarez@chromeriver.com
          description: Unique Email for user to whom the report is assigned to. If provided, 'assignedUserName' and 'assignedUserUniqueId' are not required. Max 100 characters
        assignedUserName:
          type: string
          example: lsuarez
          description: Unique username for user to whom the report is assigned to. If provided, 'assignedUserUniqueId' and 'assignedUserEmailAddress' are not required. Max 50 characters
        assignedUserUniqueId:
          type: string
          example: lsuarez
          description: Unique ID for user to whom the report is assigned to. If provided, 'assignedUserName' and 'assignedUserEmailAddress' are not required. Max 100 characters
        note:
          type: string
          example: Please review this pre-approval report
          description: Any comment/note that will be tied with the Reassign. Max 2000 characters
      title: ReassignModelV2
    ExpenseReport:
      type: object
      properties:
        budgetDetails:
          type: array
          description: Details of budget encumbrance/liquidation amounts associated with the preapproval attached to the report. Only relevant for customers using encumbrance/liquidation.
          items:
            $ref: '#/components/schemas/BudgetDetail'
        comments:
          type: array
          description: List of comments written on the expense report
          items:
            $ref: '#/components/schemas/Comment'
        complianceItems:
          type: array
          description: List of compliance item issues associated with the expense report
          items:
            $ref: '#/components/schemas/ComplianceItem'
        createDate:
          type: string
          format: date-time
          example: 2022-01-12 03:34:32:000
          description: Date expense report was created
        currencyCode:
          type: string
          example: USD
          description: Employee's PayMeInCurrency
        expenseReportUrl:
          type: string
          example: https://app.chromeriver.com/expense_reports_app/DEV034334052?customerCode=CF7H
          description: URL of expense report
        hasComplianceItems:
          type: boolean
          example: false
          description: Used in expense-report-approval summaries to notify if header, line item, or children items have compliance items
        images:
          type: array
          description: Filenames of images attached to expense report header
          items:
            type: string
        lineItems:
          type: array
          description: List of expense report line items
          items:
            $ref: '#/components/schemas/ExpenseReportLineItem'
        numberOfExpenseLineItems:
          type: integer
          format: int32
          example: 1
          description: Number of expense items in report
        preApprovalReportId:
          type: string
          example: 010038294829
          description: 12 character ID of preapproval attached to expense report
        receiptUrl:
          type: string
          example: https://chromeriver.com/v2/expense-report-receipts/010034331701?customerCode=ABCD
          description: URL of receipt attached to report
        reportId:
          type: string
          example: 010083927384
          description: 12 character ID of expense report
        reportName:
          type: string
          example: Trip to St. Louis 9/19-9/20
          description: Name of expense report. Max 45 characters
        reportOwner:
          $ref: '#/components/schemas/Person'
        reportStatus:
          type: string
          example: Submitted
          description: Status of expense report
          enum:
          - New
          - Draft
          - Submitted
          - Deleted
   

# --- truncated at 32 KB (49 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/emburse/refs/heads/main/openapi/emburse-expense-approval-controller-v2-api-openapi.yml