SAP Concur Expense Expense Reports API

Create, read, update, and submit expense reports. Manage the full report lifecycle from draft through approval and reimbursement.

OpenAPI Specification

sap-concur-expense-expense-reports-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: SAP Concur Expense Allocations Expense Reports API
  description: SAP Concur Expense provides REST APIs for managing the full expense lifecycle including creating and submitting expense reports, managing individual expense entries, capturing receipt images, handling quick expenses, managing allocations across cost centers, and retrieving reimbursement payment batches. Authentication uses OAuth 2.0 with support for authorization code and refresh token flows.
  version: '3.0'
  contact:
    name: SAP Concur Developer Support
    url: https://developer.concur.com/support
  termsOfService: https://developer.concur.com/terms-of-use
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
security:
- OAuth2:
  - expense.report.read
  - expense.report.write
tags:
- name: Expense Reports
  description: Create, read, update, and submit expense reports. Manage the full report lifecycle from draft through approval and reimbursement.
paths:
  /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'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
    post:
      operationId: createExpenseReport
      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'
      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
  /expense/reports/{id}:
    get:
      operationId: getExpenseReport
      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'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '404':
          description: Not Found
        '500':
          description: Internal Server Error
    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
    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
components:
  schemas:
    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
    ExpenseReportCreate:
      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
    ExpenseReportCollection:
      type: object
      properties:
        Items:
          type: array
          items:
            $ref: '#/components/schemas/ExpenseReport'
        NextPage:
          type: string
          description: URL to the next page of results
    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
    ExpenseReport:
      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
  securitySchemes:
    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/