SAP Concur Workflows API

Operations for submitting, approving, recalling, and sending back expense reports through the approval workflow.

Documentation

Specifications

Schemas & Data

Other Resources

OpenAPI Specification

sap-concur-workflows-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: SAP Concur Expense Report Allocations Workflows API
  description: The SAP Concur Expense Report v4 API enables integration with Concur Expense for creating, retrieving, updating, and managing expense reports, expenses (entries), allocations, comments, and workflow actions. This API follows RESTful conventions with JSON Merge Patch (RFC 7386) for partial updates and HATEOAS links for resource navigation.
  version: 4.0.0
  contact:
    name: SAP Concur Developer Support
    url: https://developer.concur.com/support/
  license:
    name: SAP Concur API Terms of Use
    url: https://www.concur.com/terms-of-use
  x-api-id: sap-concur-expense-report-v4
  x-audience: external-partner
servers:
- url: https://us.api.concursolutions.com
  description: US Production Datacenter
- url: https://us2.api.concursolutions.com
  description: US2 Production Datacenter
- url: https://emea.api.concursolutions.com
  description: EMEA Production Datacenter
- url: https://cn.api.concursolutions.com
  description: China Production Datacenter
security:
- bearerAuth: []
tags:
- name: Workflows
  description: Operations for submitting, approving, recalling, and sending back expense reports through the approval workflow.
paths:
  /expensereports/v4/users/{userId}/reports/{reportId}/submit:
    patch:
      operationId: submitReport
      summary: Sap Concur Submit an Expense Report for Approval
      description: Submits an unsubmitted expense report into the approval workflow. The report must have at least one expense entry and pass all configured validation rules.
      tags:
      - Workflows
      parameters:
      - name: userId
        in: path
        required: true
        description: The unique identifier of the report owner
        schema:
          type: string
          format: uuid
        example: '500123'
      - $ref: '#/components/parameters/reportId'
      responses:
        '204':
          description: Report submitted successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /expensereports/v4/users/{userID}/context/{contextType}/reports/{reportId}/approve:
    patch:
      operationId: approveReport
      summary: Sap Concur Approve an Expense Report
      description: Approves an expense report in the current workflow step. The authenticated user must be an assigned approver. Individual expenses can be rejected within the approval by specifying expenseRejectedComment.
      tags:
      - Workflows
      parameters:
      - $ref: '#/components/parameters/userID'
      - name: contextType
        in: path
        required: true
        description: Must be MANAGER for approval actions
        schema:
          type: string
          enum:
          - MANAGER
        example: MANAGER
      - $ref: '#/components/parameters/reportId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportApproveRequest'
            examples:
              ApprovereportRequestExample:
                summary: Default approveReport request
                x-microcks-default: true
                value:
                  comment: example_value
                  expenseRejectedComment: example_value
                  statusId: '500123'
                  expectedStepCode: example_value
                  expectedStepSequence: 10
      responses:
        '204':
          description: Report approved successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /expensereports/v4/users/{userID}/context/{contextType}/reports/{reportId}/sendBack:
    patch:
      operationId: sendBackReport
      summary: Sap Concur Send Back an Expense Report to the Submitter
      description: Returns a submitted expense report to the employee for corrections. A comment explaining the reason is required.
      tags:
      - Workflows
      parameters:
      - $ref: '#/components/parameters/userID'
      - name: contextType
        in: path
        required: true
        description: Must be MANAGER for send-back actions
        schema:
          type: string
          enum:
          - MANAGER
        example: MANAGER
      - $ref: '#/components/parameters/reportId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportSendBackRequest'
            examples:
              SendbackreportRequestExample:
                summary: Default sendBackReport request
                x-microcks-default: true
                value:
                  comment: example_value
                  expectedStepCode: example_value
                  expectedStepSequence: 10
      responses:
        '204':
          description: Report sent back successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /expensereports/v4/users/{userID}/context/{contextType}/reports/{reportId}/recall:
    patch:
      operationId: recallReport
      summary: Sap Concur Recall a Submitted Expense Report
      description: Recalls a previously submitted expense report back to unsubmitted status, removing it from the approval workflow. Only the report owner or a proxy can recall a report.
      tags:
      - Workflows
      parameters:
      - $ref: '#/components/parameters/userID'
      - $ref: '#/components/parameters/contextTypeWritable'
      - $ref: '#/components/parameters/reportId'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReportApproveRequest'
            examples:
              RecallreportRequestExample:
                summary: Default recallReport request
                x-microcks-default: true
                value:
                  comment: example_value
                  expenseRejectedComment: example_value
                  statusId: '500123'
                  expectedStepCode: example_value
                  expectedStepSequence: 10
      responses:
        '204':
          description: Report recalled successfully
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /expensereports/v4/users/{userId}/reports/{reportId}/costObjectsForApprover:
    get:
      operationId: getCostObjectsForApprover
      summary: Sap Concur Retrieve Cost Objects for an Approver
      description: Returns the cost objects (cost centers, departments, projects) associated with expenses on a report that are relevant to the specified approver.
      tags:
      - Workflows
      parameters:
      - name: userId
        in: path
        required: true
        description: The unique identifier of the approving manager
        schema:
          type: string
          format: uuid
        example: '500123'
      - $ref: '#/components/parameters/reportId'
      responses:
        '200':
          description: Cost objects retrieved successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CostObjectForApprover'
              examples:
                Getcostobjectsforapprover200Example:
                  summary: Default getCostObjectsForApprover 200 response
                  x-microcks-default: true
                  value:
                  - costObjectId: '500123'
                    name: Example Title
                    code: example_value
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  responses:
    Forbidden:
      description: The authenticated user does not have the required scope or permission to perform this operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: The requested resource (report, expense, allocation, or user) was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Conflict:
      description: The request conflicts with the current state of the resource. For example, attempting to delete a submitted report or approve a report that has already been processed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Unauthorized:
      description: Authentication failed. The bearer token is missing, expired, or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: The request was malformed or contained invalid parameters. Check the validationErrors array for field-level details.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalServerError:
      description: An unexpected server error occurred. Retry the request or contact SAP Concur support with the Concur-CorrelationId header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  parameters:
    reportId:
      name: reportId
      in: path
      required: true
      description: The unique identifier of the expense report
      schema:
        type: string
    contextTypeWritable:
      name: contextType
      in: path
      required: true
      description: The access context for write operations. TRAVELER for the report owner or PROXY for a delegate acting on behalf of the owner.
      schema:
        type: string
        enum:
        - TRAVELER
        - PROXY
    userID:
      name: userID
      in: path
      required: true
      description: The unique identifier (UUID) of the SAP Concur user. Obtain via the Identity v4 API.
      schema:
        type: string
        format: uuid
  schemas:
    ReportSendBackRequest:
      type: object
      description: Request body for sending a report back to the submitter
      required:
      - comment
      properties:
        comment:
          type: string
          description: Explanation of why the report is being returned for corrections
          example: example_value
        expectedStepCode:
          type: string
          description: The expected current workflow step code
          example: example_value
        expectedStepSequence:
          type: integer
          description: The expected current workflow step sequence number
          example: 10
    ErrorResponse:
      type: object
      description: Standard error response
      properties:
        errorId:
          type: string
          description: Unique identifier for this error occurrence
          example: '500123'
        errorMessage:
          type: string
          description: Human-readable error description
          example: example_value
        httpStatus:
          type: string
          description: The HTTP status code as a string
          example: example_value
        path:
          type: string
          description: The request path that triggered the error
          example: example_value
        timestamp:
          type: string
          format: date-time
          description: When the error occurred
          example: '2026-01-15T10:30:00Z'
        validationErrors:
          type: array
          description: Detailed field-level validation failures
          items:
            type: object
            properties:
              source:
                type: string
                description: The field or parameter that failed validation
              message:
                type: string
                description: Description of the validation failure
          example: []
    ReportApproveRequest:
      type: object
      description: Request body for approving or recalling a report
      properties:
        comment:
          type: string
          description: An optional comment accompanying the approval
          example: example_value
        expenseRejectedComment:
          type: string
          description: Comment explaining why specific expenses are being rejected within an otherwise approved report
          example: example_value
        statusId:
          type: string
          description: Target status identifier
          example: '500123'
        expectedStepCode:
          type: string
          description: The expected current workflow step code for optimistic concurrency control
          example: example_value
        expectedStepSequence:
          type: integer
          description: The expected current workflow step sequence number for optimistic concurrency control
          example: 10
    CostObjectForApprover:
      type: object
      description: A cost object relevant to an approver, representing how expenses on a report map to organizational cost structures.
      properties:
        costObjectId:
          type: string
          description: Unique identifier of the cost object
          example: '500123'
        name:
          type: string
          description: Display name of the cost object
          example: Example Title
        code:
          type: string
          description: Cost object code
          example: example_value
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: OAuth 2.0 Bearer token. Obtain tokens via the SAP Concur Authentication API using either Company or User level grants. Required scopes vary by operation.