Concur Expense Event
Overview
This page will host the documentation for all the Concur Expense related events that are publicly available on the public.concur.expense.report
topic in the Event Subscription Service (ESS). Subscribers will be able to subscribe to these events by following the steps described on the Event Subscription Service v4 page.
Limitations
This event subscription is only available to partners who have been granted access by SAP Concur. Access to this documentation does not provide access to the subscription.
Scope Usage
Name | Description |
---|---|
expense.report.read |
Get information about expense reports. |
expense.report.readwrite |
Read and write expense report headers. |
Events
This section lists all the publicly available events.
Report Status Changed Event
The statusChanged
event is intended to publish a message whenever the status of an expense report changes as it traverses the approval workflow during its life cycle. Subscribers of the event are able to leverage the data in the message to perform synchronous or asynchronous actions depending on their business processes. For example, this could trigger an application to make API calls to Concur Expense or start of a process in a third party application.
The statusChanged
event will always be published for the following status changes without any additional configuration:
- Whenever a report is submitted.
- Whenever a report is sent back to the employee by an approver/processor.
- Whenever a report is recalled by the employee.
- Whenever a report stops in the legacy external validation step that is configured using the application connector.
- Whenever a report is paid.
In addition to the above, any workflow step configured for notifications by the administrator will also be published. Please refer to the Procedure: Creating External Validations and Workflow Event Notifications section of the Workflow General - Setup Guide for more information on how the events can be configured and optimized.
Filtering of events by subscribers:
- Subscribers only interested in the report submitted event should filter by
previousApprovalStatus
attribute in the payload and should specifically filter for valuesA_NOTF
andA_RESU
. - Subscribers interested in the report recalled or sent back events should filter by the
stepCode
attribute in the payload with a value ofSENDBACK
. - Subscribers interested in the reports that are pending processing in the legacy external validation step events should filter by the
stepCode
attribute in the payload with a value ofEXTVAL
. - Subscribers interested in the paid report events should filter by the
currentPaymentStatus
attribute in the payload with a value ofP_PAID
. - Subscribers interested in all other events can filter by the
stepCode
attribute with the values entered by the administrator in the workflows Admin UI screens.
Schema
statusChangd Event Payload Schema
Name | Type | Format | Description |
---|---|---|---|
id |
UUID |
RFC 4122 | Required Randomly generated unique identifier of this event. |
correlationId |
UUID |
RFC 4122 | Required Unique identifier used for logging/traceability. |
eventType |
string |
string |
Required Event Type: statusChanged - Identifies the event type on the topic. |
topic |
string |
enum |
Required Identifies the topic that the event belongs to public.concur.expense.report . |
subtopic |
string |
- | Required Subtopic is assigned the company ID, which is also populated as companyId . |
timeStamp |
timeStamp |
RFC 3339 | Required Current system time (UTC) when the event notification is issued. |
Facts |
map |
Facts Schema | Required Key-value pairs providing the content of the event. |
transactionTimestamp |
string |
dateTime |
A key linking to a definition for the format. |
arrayOfThings |
array |
Schema Two |
A key linking to another schema for the format. |
Status Changed Facts Schema
Name | Type | Format | Description |
---|---|---|---|
companyId |
UUID |
RFC 4122 | Required Company unique identifier from profile service. |
userId |
UUID |
RFC 4122 | Unique identifier from profile service for the User acting on the report resources. This may or may not be the report owner depending on the status change. This could be NULL when a system acts on the report. |
actingUserId |
UUID |
RFC 4122 | User unique identifier from profile service - If delegate or expense proxy is working on report resources on behalf of the user then this will be populated, else it will be NULL . |
reportId |
String |
alphanumeric |
Required Unique identifier of the expense report whose status has changed. Maximum characters: 20 |
previousApprovalStatus |
String |
enum |
Required Unique identifier of the previous approval status of the expense report whose status has changed. Supported values: Not Submitted - A_NOTF , Sent Back to Employee - A_RESU , Recalled by Employee - A_RESU , Submitted & Pending Approval - A_PEND , Approved - A_APPR , Pending External Validation - A_EXTV , Pending Budget Approval - A_PBDG , Pending Cost Object Approval - A_PECO , Approved & In Accounting Review - A_ACCO |
currentApprovalStatus |
String |
enum |
Required Unique identifier of the current approval status of the expense report whose status has changed. Supported values: Sent Back to Employee - A_RESU , Recalled by Employee: A_RESU , Submitted & Pending Approval: A_PEND , Approved: A_APPR , Pending External Validation: A_EXTV , Pending Budget Approval: A_PBDG , Pending Cost Object Approval: A_PECO , Approved & In Accounting Review: A_ACCO |
previousPaymentStatus |
String |
enum |
Required Unique identifier of the previous payment status of the expense report whose status has changed. Supported values: Not Paid - P_NOTP , Processing Payment - P_PROC , Payment Confirmed - P_PAYC (may depend on configuration) |
currentPaymentStatus |
String |
enum |
Required Unique identifier of the current payment status of the expense report whose status has changed. Supported values: Not Paid - P_NOTP , Processing Payment - P_PROC , Paid - P_PAID , Payment Confirmed - P_PAYC (may depend on configuration) |
stepCode |
String |
enum |
Code provided by the admin that the client can use to differentiate between the steps. Report Submit - If the target step (the next workflow step that the report stops at) is not configured for notifications, then step code will be NULL . Report Send Back or Report Recall - SENDBACK Legacy External validation post submit - EXTVAL Legacy External validation pre-extract - EXTVAL Report Paid - If the target step (the next workflow step that the report stops at) is not configured for notifications, then step code will be PAIDREPORT . All other cases code step code as configured by admin in workflow configuration will be populated. |
href |
string |
RFC 3986 | URI of the report resource that can be called via the Expense v4 API. |
Sample Events
{
"id": "0490b3fb-04ad-4919-b299-afb9fa75e07c",
"correlationId": "7e38939d-62f1-4bb4-9eef-5ea71fcbb1d8",
"eventType": "statusChanged",
"topic": "public.concur.expense.report",
"timeStamp": "2021-03-18T23:11:51.034Z",
"subtopic": "685fa226-b72d-47f9-b9ad-e621de12d094",
"facts": {
"currentApprovalStatus": "A_PEND",
"companyId": "685fa226-b72d-47f9-b9ad-e621de12d094",
"reportId": "57EE1FDA348046E8A08B",
"stepCode": null,
"currentPaymentStatus": "P_NOTP",
"previousApprovalStatus": "A_NOTF",
"actingUserId": null,
"href": "https://us.api.concursolutions.com/expensereports/v4/users/08a39ab2-9998-465d-b2f7-588dbe636ce2/context/TRAVELER/reports/57EE1FDA348046E8A08B",
"userId": "08a39ab2-9998-465d-b2f7-588dbe636ce2",
"previousPaymentStatus": "P_NOTP"
}
},
{
"id": "3eabdcbf-07df-4acd-99de-7f5aef0f673d",
"correlationId": "Viswa-test",
"eventType": "statusChanged",
"topic": "public.concur.expense.report",
"timeStamp": "2021-03-19T00:37:39.550Z",
"subtopic": "0ffa9ce0-f00b-408a-8344-8eaad502b0d7",
"facts": {
"currentApprovalStatus": "A_APPR",
"companyId": "0ffa9ce0-f00b-408a-8344-8eaad502b0d7",
"reportId": "1B5A6194DFB047DAB0BD",
"stepCode": "EXRTREADY",
"currentPaymentStatus": "P_PROC",
"previousApprovalStatus": "A_ACCO",
"actingUserId": null,
"href": "https://us.api.concursolutions.com/expensereports/v4/users/22f91cc6-581c-488c-8573-d2c208136d8b/context/TRAVELER/reports/1B5A6194DFB047DAB0BD",
"userId": "13fa626b-9563-4013-886c-9fd730545277",
"previousPaymentStatus": "P_NOTP"
}
},
{
"id": "be3a6976-00e7-4b06-9c95-b4f2c3330ea6",
"correlationId": "Viswa-test",
"eventType": "statusChanged",
"topic": "public.concur.expense.report",
"timeStamp": "2021-03-19T01:11:57.169Z",
"subtopic": "0ffa9ce0-f00b-408a-8344-8eaad502b0d7",
"facts": {
"currentApprovalStatus": "A_RESU",
"companyId": "0ffa9ce0-f00b-408a-8344-8eaad502b0d7",
"reportId": "1B5A6194DFB047DAB0BD",
"stepCode": "SENDBACK",
"currentPaymentStatus": "P_NOTP",
"previousApprovalStatus": "A_ACCO",
"actingUserId": null,
"href": "https://us.api.concursolutions.com/expensereports/v4/users/22f91cc6-581c-488c-8573-d2c208136d8b/context/TRAVELER/reports/1B5A6194DFB047DAB0BD",
"userId": "22f91cc6-581c-488c-8573-d2c208136d8b",
"previousPaymentStatus": "P_NOTP"
}
}