SAP Concur Expense Reports API

Manage expense reports

Operations 8

GET /expensereports/v4/users/{userId}/context/{contextType}/reports SAP Concur Get Expense Reports #
POST /expensereports/v4/users/{userId}/context/{contextType}/reports SAP Concur Create Expense Report #
GET /expensereports/v4/reports/{reportId} SAP Concur Get Expense Report by ID #
GET /expense/reports List Expense Reports #
POST /expense/reports Create Expense Report #
GET /expense/reports/{id} Get Expense Report #
PUT /expense/reports/{id} Update Expense Report #
DELETE /expense/reports/{id} Delete Expense Report #

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/concur:concur-expense-reports-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 form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

concur-expense-reports-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Concur Expense Reports API
  x-refined-note:
  - x-generated-from differs across the merged source definitions and was not carried
  - x-last-validated differs across the merged source definitions and was not carried
  version: '1.0'
  description: 'Operations tagged Expense Reports across 2 of this provider''s published API definitions: concur-expense-api.yaml, sap-concur-expense-expense-reports-api-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://us.api.concursolutions.com
  description: US Production
- url: https://emea.api.concursolutions.com
  description: EMEA Production
- url: https://us.api.concursolutions.com/api/v3.0
  description: United States Production
- url: https://eu.api.concursolutions.com/api/v3.0
  description: Europe Production
- url: https://cn.api.concursolutions.com/api/v3.0
  description: China Production
tags:
- name: Expense Reports
  description: Manage expense reports
paths:
  /expensereports/v4/users/{userId}/context/{contextType}/reports:
    get:
      operationId: getExpenseReports
      summary: SAP Concur Get Expense Reports
      description: Retrieves all expense reports for the specified user and context.
      tags:
      - Expense Reports
      parameters:
      - name: userId
        in: path
        required: true
        description: The unique identifier of the user.
        schema:
          type: string
      - name: contextType
        in: path
        required: true
        description: The context type for the reports (TRAVELER, PROXY, etc.).
        schema:
          type: string
          enum:
          - TRAVELER
          - PROXY
          - APPROVER
      responses:
        '200':
          description: Successfully retrieved expense reports.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseReportCollection'
              examples:
                GetExpenseReports200Example:
                  summary: Default getExpenseReports 200 response
                  x-microcks-default: true
                  value:
                    reports:
                    - reportId: '500123'
                      reportName: Q1 Travel Expenses
                      ownerName: Jane Smith
                      submitDate: '2026-03-15T14:30:00Z'
                      approvalStatus: SUBMITTED
                      total: 2450.75
                      currencyCode: USD
        '401':
          description: Unauthorized - invalid or missing authentication.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
      security:
      - bearerAuth: []
    post:
      operationId: createExpenseReport
      summary: SAP Concur Create Expense Report
      description: Creates a new expense report for the specified user.
      tags:
      - Expense Reports
      parameters:
      - name: userId
        in: path
        required: true
        description: The unique identifier of the user.
        schema:
          type: string
      - name: contextType
        in: path
        required: true
        description: The context type for the report.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpenseReportCreate'
            examples:
              CreateExpenseReportRequestExample:
                summary: Default createExpenseReport request
                x-microcks-default: true
                value:
                  reportName: Q1 Travel Expenses
                  businessPurpose: Client meetings in New York
                  countryCode: US
                  currencyCode: USD
                  reportDate: '2026-03-15'
      responses:
        '201':
          description: Expense report created successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseReport'
        '400':
          description: Bad request - invalid report data.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
      security:
      - bearerAuth: []
    servers:
    - url: https://us.api.concursolutions.com
      description: US Production
    - url: https://emea.api.concursolutions.com
      description: EMEA Production
  /expensereports/v4/reports/{reportId}:
    get:
      operationId: getExpenseReport
      summary: SAP Concur Get Expense Report by ID
      description: Retrieves a specific expense report by its identifier.
      tags:
      - Expense Reports
      parameters:
      - name: reportId
        in: path
        required: true
        description: The unique identifier of the expense report.
        schema:
          type: string
      responses:
        '200':
          description: Successfully retrieved the expense report.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseReport'
        '404':
          description: Report not found.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
      security:
      - bearerAuth: []
    servers:
    - url: https://us.api.concursolutions.com
      description: US Production
    - url: https://emea.api.concursolutions.com
      description: EMEA Production
  /expense/reports:
    get:
      operationId: listExpenseReports
      summary: List Expense Reports
      description: Returns a collection of expense reports belonging to the current user or accessible via company-level access. Supports filtering by approval status, submission date, payment status, and reimbursement method.
      tags:
      - Expense Reports
      parameters:
      - name: offset
        in: query
        description: Starting page offset for pagination
        required: false
        schema:
          type: string
      - name: limit
        in: query
        description: Number of records to return per page (max 100)
        required: false
        schema:
          type: integer
          maximum: 100
      - name: approvalStatusCode
        in: query
        description: 'Filter by approval status code. Valid values: A_AAFH, A_AAPH, A_ADMIN, A_APPR, A_EXTV, A_FILE, A_NOTF, A_PBDG, A_PECO, A_PEND, A_PVAL, A_RESU, A_RHLD, A_TEXP'
        required: false
        schema:
          type: string
      - name: paymentStatusCode
        in: query
        description: 'Filter by payment status code. Valid values: P_HOLD, P_NOTP, P_PAID, P_PAYC, P_PROC'
        required: false
        schema:
          type: string
      - name: modifiedDateBefore
        in: query
        description: Return reports modified before this date (ISO 8601 format)
        required: false
        schema:
          type: string
          format: date-time
      - name: modifiedDateAfter
        in: query
        description: Return reports modified after this date (ISO 8601 format)
        required: false
        schema:
          type: string
          format: date-time
      - name: userID
        in: query
        description: The login ID of the report owner. May only be used by company-level access token holders.
        required: false
        schema:
          type: string
      - name: reimbursementMethod
        in: query
        description: 'Filter by reimbursement method. Valid values: ADPPAYR, APCHECK, AVI, CNQRPAY, PMTSERV'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success - Returns list of expense reports
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseReportCollection_2'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
      security:
      - OAuth2:
        - expense.report.read
        - expense.report.write
    post:
      operationId: postExpenseReports
      summary: Create Expense Report
      description: Creates a new expense report header. After creating the report header, expense entries can be added using the expense entries endpoint.
      tags:
      - Expense Reports
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpenseReportCreate_2'
      responses:
        '200':
          description: Success - Returns the created expense report ID
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseReportCreateResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
      security:
      - OAuth2:
        - expense.report.read
        - expense.report.write
      x-operation-id-source: normalized
      x-operation-id-original: createExpenseReport
    servers:
    - url: https://us.api.concursolutions.com/api/v3.0
      description: United States Production
    - url: https://eu.api.concursolutions.com/api/v3.0
      description: Europe Production
    - url: https://cn.api.concursolutions.com/api/v3.0
      description: China Production
  /expense/reports/{id}:
    get:
      operationId: getExpenseReportsById
      summary: Get Expense Report
      description: Returns a single expense report by its ID. Includes report header information such as approval status, totals, and submission date.
      tags:
      - Expense Reports
      parameters:
      - name: id
        in: path
        description: The unique identifier of the expense report
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success - Returns the expense report
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseReport_2'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Not Found
        '500':
          description: Internal Server Error
      security:
      - OAuth2:
        - expense.report.read
        - expense.report.write
      x-operation-id-source: normalized
      x-operation-id-original: getExpenseReport
    put:
      operationId: updateExpenseReport
      summary: Update Expense Report
      description: Updates an existing expense report header. Only draft reports (not yet submitted) can be updated.
      tags:
      - Expense Reports
      parameters:
      - name: id
        in: path
        description: The unique identifier of the expense report
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExpenseReportUpdate'
      responses:
        '204':
          description: Success - No content returned
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Not Found
        '500':
          description: Internal Server Error
      security:
      - OAuth2:
        - expense.report.read
        - expense.report.write
    delete:
      operationId: deleteExpenseReport
      summary: Delete Expense Report
      description: Deletes an expense report. Only draft reports that have never been submitted can be deleted.
      tags:
      - Expense Reports
      parameters:
      - name: id
        in: path
        description: The unique identifier of the expense report
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Success - No content returned
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Not Found
        '500':
          description: Internal Server Error
      security:
      - OAuth2:
        - expense.report.read
        - expense.report.write
    servers:
    - url: https://us.api.concursolutions.com/api/v3.0
      description: United States Production
    - url: https://eu.api.concursolutions.com/api/v3.0
      description: Europe Production
    - url: https://cn.api.concursolutions.com/api/v3.0
      description: China Production
components:
  schemas:
    ExpenseReport:
      type: object
      description: An expense report containing expense entries.
      properties:
        reportId:
          type: string
          description: Unique identifier for the expense report.
          example: '500123'
        reportName:
          type: string
          description: Name of the expense report.
          example: Q1 Travel Expenses
        ownerName:
          type: string
          description: Full name of the report owner.
          example: Jane Smith
        businessPurpose:
          type: string
          description: Business purpose for the expenses.
          example: Client meetings in New York
        submitDate:
          type: string
          format: date-time
          description: Date the report was submitted.
          example: '2026-03-15T14:30:00Z'
        approvalStatus:
          type: string
          description: Current approval status of the report.
          enum:
          - NOT_SUBMITTED
          - SUBMITTED
          - APPROVED
          - SENT_BACK
          - RECALLED
          example: SUBMITTED
        total:
          type: number
          format: double
          description: Total amount of all expenses in the report.
          example: 2450.75
        currencyCode:
          type: string
          description: ISO 4217 currency code.
          example: USD
        countryCode:
          type: string
          description: ISO country code.
          example: US
        reportDate:
          type: string
          format: date
          description: Date of the report.
          example: '2026-03-15'
    ExpenseReportCollection:
      type: object
      description: Collection of expense reports.
      properties:
        reports:
          type: array
          items:
            $ref: '#/components/schemas/ExpenseReport'
    ExpenseReportCreate:
      type: object
      description: Request body for creating a new expense report.
      required:
      - reportName
      - currencyCode
      properties:
        reportName:
          type: string
          description: Name of the expense report.
          example: Q1 Travel Expenses
        businessPurpose:
          type: string
          description: Business purpose for the expenses.
          example: Client meetings in New York
        countryCode:
          type: string
          description: ISO country code.
          example: US
        currencyCode:
          type: string
          description: ISO 4217 currency code.
          example: USD
        reportDate:
          type: string
          format: date
          description: Date of the report.
          example: '2026-03-15'
    ExpenseReportUpdate:
      type: object
      properties:
        Name:
          type: string
          description: Updated name for the expense report
        Comment:
          type: string
          description: Updated comment
        Purpose:
          type: string
          description: Updated business purpose
    ExpenseReportCollection_2:
      type: object
      properties:
        Items:
          type: array
          items:
            $ref: '#/components/schemas/ExpenseReport_2'
        NextPage:
          type: string
          description: URL to the next page of results
    ExpenseReport_2:
      type: object
      properties:
        ID:
          type: string
          description: The unique identifier of the expense report
        Name:
          type: string
          description: The name of the expense report
        Total:
          type: number
          format: double
          description: Total amount of all expenses in the report
        CurrencyCode:
          type: string
          description: ISO 4217 currency code for the report total
        ApprovalStatusCode:
          type: string
          description: Current approval status code
        ApprovalStatusName:
          type: string
          description: Human-readable approval status name
        PaymentStatusCode:
          type: string
          description: Current payment status code
        PaymentStatusName:
          type: string
          description: Human-readable payment status name
        SubmitDate:
          type: string
          format: date-time
          description: Date the report was submitted for approval
        CreateDate:
          type: string
          format: date-time
          description: Date the report was created
        ProcessingPaymentDate:
          type: string
          format: date-time
          description: Date payment processing began
        OwnerLoginID:
          type: string
          description: Login ID of the report owner
        OwnerName:
          type: string
          description: Full name of the report owner
        PolicyID:
          type: string
          description: The expense policy ID applied to this report
        ReportNumber:
          type: string
          description: Human-readable report number
        HasException:
          type: boolean
          description: Whether the report has policy exceptions
        URI:
          type: string
          description: URI to retrieve this resource
    ExpenseReportCreate_2:
      type: object
      required:
      - Name
      properties:
        Name:
          type: string
          description: The name of the expense report
        Comment:
          type: string
          description: Additional comments for the report
        PolicyID:
          type: string
          description: The expense policy ID to apply
        Purpose:
          type: string
          description: Business purpose for the expenses
        UserDefinedDate:
          type: string
          format: date-time
          description: User-defined date for the report
    ExpenseReportCreateResponse:
      type: object
      properties:
        ID:
          type: string
          description: The unique identifier of the created expense report
        URI:
          type: string
          description: URI of the created resource
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: OAuth 2.0 Bearer Token authentication.
    OAuth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://us.api.concursolutions.com/oauth2/v0/authorize
          tokenUrl: https://us.api.concursolutions.com/oauth2/v0/token
          scopes:
            expense.report.read: Read expense reports
            expense.report.write: Create and modify expense reports
            expense.report.delete: Delete expense reports
externalDocs:
  description: SAP Concur Expense API Reference
  url: https://developer.concur.com/api-reference/expense/
x-refined-from:
- concur-expense-api.yaml
- sap-concur-expense-expense-reports-api-openapi.yml