Exceptions v4
The Exceptions v4 API GETs, PUTs, and DELETEs exceptions on a Report, Expense, and Allocation.
Prior Versions
- Post report exceptions v1.1 documentation is available here
Limitations
This API is only available to partners who have been granted access by SAP Concur. Access to this documentation does not provide access to the API.
Products and Editions
- Concur Expense Professional Edition
- Concur Expense Standard Edition
Scope Usage
Name |
Description |
Endpoint |
expense.report.read |
Get information about exceptions(s). |
GET |
expense.report.readwrite |
Read, write, and delete exception(s). |
GET, PUT, DELETE |
Dependencies
SAP Concur clients must purchase Concur Expense in order to use this API. User based API requires the use of the Identity v4 API. Please contact your SAP Concur representative for more information.
Access Token Usage
This API supports both company level and user level access tokens.
Retrieves the exceptions on the specific report header.
Scopes
expense.report.read
- Refer to Scope Usage for full details.
expense.report.readwrite
- Refer to Scope Usage for full details.
Request
URI Template
https://{datacenterURI}/expensereports/v4/users/{userID}/context/{contextType}/reports/{reportId}/exceptions
Parameters
Name |
Type |
Format |
Description |
userID |
string |
- |
Required The unique identifier of the SAP Concur user. Use Identity v4 to retrieve the userID . |
contextType |
string |
- |
Required The access level of the SAP Concur user, which determines the form fields they can view/modify. Supported values: TRAVELER , PROXY |
reportId |
string |
- |
Required The unique identifier of the report that is being read. |
excludeExpenses |
boolean |
true or false |
Include only exceptions for the report header. Default value: false |
Response
Status Codes
Payload
Example
Request
curl --location --request GET 'https://us.api.concursolutions.com/expensereports/v4/users/32C2FCC3-B2E8-4907-9672-5B3F49B1C643/context/TRAVELER/reports/764428DD6A664AF0BFCB/exceptions?excludeExpenses=true' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
Response
200 OK
[
{
"exceptionCode": "ITEMDIFF",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "The itemization amounts do not add up to the expense amount.",
"allocationId": null,
"expenseId": "99F8CC6B1AEE6049B03652F018CAF096",
"parentExpenseId": null
},
{
"exceptionCode": "MISSREQFLD",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "Missing required field: Receipt Status. ",
"allocationId": null,
"expenseId": "50279352D5F0DD469EC8899A636971B1",
"parentExpenseId": null
},
{
"exceptionCode": "MISSALLOCREQFLD",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "Missing required allocation field: Custom 05. ",
"allocationId": "6E23ECF391221145898792F926D4E7A5",
"expenseId": "9F6D943AB10E314D86D67011F5FD1C1E",
"parentExpenseId": "6ECACC1ACF202E4FB7326AE9C328AE83"
}
]
Retrieves the exceptions on the specific report header using a system user.
Scopes
expense.report.read
expense.report.readwrite
Request
URI Template
https://{datacenterURI}/expensereports/v4/reports/{reportId}/exceptions
Parameters
Name |
Type |
Format |
Description |
reportId |
string |
- |
Required The unique identifier of the report that is being read. |
excludeExpenses |
boolean |
true or false |
Include only exceptions for the report header. Default value: false |
Response
Status Codes
Payload
Example
Request
curl --location --request GET 'https://us.api.concursolutions.com/expensereports/v4/reports/764428DD6A664AF0BFCB/exceptions?excludeExpenses=true' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
Response
200 OK
[
{
"exceptionCode": "ITEMDIFF",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "The itemization amounts do not add up to the expense amount.",
"allocationId": null,
"expenseId": "99F8CC6B1AEE6049B03652F018CAF096",
"parentExpenseId": null
},
{
"exceptionCode": "MISSREQFLD",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "Missing required field: Receipt Status. ",
"allocationId": null,
"expenseId": "50279352D5F0DD469EC8899A636971B1",
"parentExpenseId": null
},
{
"exceptionCode": "MISSALLOCREQFLD",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "Missing required allocation field: Custom 05. ",
"allocationId": "6E23ECF391221145898792F926D4E7A5",
"expenseId": "9F6D943AB10E314D86D67011F5FD1C1E",
"parentExpenseId": "6ECACC1ACF202E4FB7326AE9C328AE83"
}
]
Adds an exception on the specified report using a system user.
Scopes
expense.report.readwrite
- Refer to Scope Usage for full details.
Request
URI Template
https://{datacenterURI}/expensereports/v4/reports/{reportId}/exceptions
Parameters
Name |
Type |
Format |
Description |
reportId |
string |
- |
Required The unique identifier of the report. |
Payload
Response
Status Codes
Example
Request
curl --location --request 'PUT' \
'https://us.api.concursolutions.com/expensereports/v4/reports/93B9D238A6864C019258/exceptions' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
--data-raw '{
"exceptionCode": "MISSREQFLD",
"exceptionVisibility": "ALL"
}'
Response
Deletes an exception on the specified report specified by exceptionCode using a system user.
Scopes
expense.report.readwrite
- Refer to Scope Usage for full details.
Request
URI Template
https://{datacenterURI}/expensereports/v4/reports/{reportId}/exceptions/{exceptionCode}
Parameters
Name |
Type |
Format |
Description |
reportId |
string |
- |
Required The unique identifier of the report. |
exceptionCode |
string |
- |
Required The code for the exception. |
Response
Status Codes
Example
Request
curl --location --request 'DELETE' \
'https://us.api.concursolutions.com/expensereports/v4/reports/93B9D238A6864C019258/exceptions/MISSREQFLD' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
Response
Retrieve Expense Exceptions
Retrieves the exceptions on a specific expense.
Scopes
expense.report.read
- Refer to Scope Usage for full details.
expense.report.readwrite
- Refer to Scope Usage for full details.
Request
URI Template
https://{datacenterURI}/expensereports/v4/users/{userID}/context/{contextType}/reports/{reportId}/expenses/{expenseId}/exceptions?excludeItemizations=false
Parameters
Name |
Type |
Format |
Description |
userID |
string |
- |
Required The unique identifier of the SAP Concur user. Use Identity v4 to retrieve the userID . |
contextType |
string |
- |
Required The access level of the SAP Concur user, which determines the form fields they can view/modify. Supported values: TRAVELER , PROXY |
reportId |
string |
- |
Required The unique identifier of the report that is being read. |
expenseId |
string |
- |
Required The unique identifier of the expense entry to which the exceptions belong. |
excludeItemizations |
boolean |
true or false |
Include only exceptions for non-itemized and parent expenses. Default value: false |
Response
Status Codes
Payload
Example
Request
curl --location --request GET 'https://us.api.concursolutions.com/expensereports/v4/users/32C2FCC3-B2E8-4907-9672-5B3F49B1C643/context/TRAVELER/reports/764428DD6A664AF0BFCB/expenses/99F8CC6B1AEE6049B03652F018CAF096/exceptions?excludeItemizations=true' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
Response
200 OK
[
{
"exceptionCode": "ITEMDIFF",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "The itemization amounts do not add up to the expense amount.",
"allocationId": null,
"expenseId": "99F8CC6B1AEE6049B03652F018CAF096",
"parentExpenseId": null
},
{
"exceptionCode": "MISSREQFLD",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "Missing required field: Receipt Status. ",
"allocationId": null,
"expenseId": "50279352D5F0DD469EC8899A636971B1",
"parentExpenseId": null
}
]
Retrieve Expense Exceptions Using System User
Retrieves the exceptions on a specific expense using a system user.
Scopes
expense.report.read
expense.report.readwrite
Request
URI Template
https://{datacenterURI}/expensereports/v4/reports/{reportId}/expenses/{expenseId}/exceptions?excludeItemizations=false
Parameters
Name |
Type |
Format |
Description |
reportId |
string |
- |
Required The unique identifier of the report that is being read. |
expenseId |
string |
- |
Required The unique identifier of the expense entry to which the exceptions belong. |
excludeItemizations |
boolean |
true or false |
Include only exceptions for non-itemized and parent expenses. Default value: false |
Response
Status Codes
Payload
Example
Request
curl --location --request GET 'https://us.api.concursolutions.com/expensereports/v4/reports/764428DD6A664AF0BFCB/expenses/99F8CC6B1AEE6049B03652F018CAF096/exceptions?excludeItemizations=true' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
Response
200 OK
[
{
"exceptionCode": "ITEMDIFF",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "The itemization amounts do not add up to the expense amount.",
"allocationId": null,
"expenseId": "99F8CC6B1AEE6049B03652F018CAF096",
"parentExpenseId": null
},
{
"exceptionCode": "MISSREQFLD",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "Missing required field: Receipt Status. ",
"allocationId": null,
"expenseId": "50279352D5F0DD469EC8899A636971B1",
"parentExpenseId": null
}
]
Add Expense Exception
Adds an exception on the specified expense using a system user.
Scopes
expense.report.readwrite
- Refer to Scope Usage for full details.
Request
URI Template
https://{datacenterURI}/expensereports/v4/reports/{reportId}/expenses/{expenseId}/exceptions
Parameters
Name |
Type |
Format |
Description |
reportId |
string |
- |
Required The unique identifier of the report. |
expenseId |
string |
- |
Required The unique identifier of the expense entry. |
Payload
Response
Status Codes
Example
Request
curl --location --request 'PUT' \
'https://us.api.concursolutions.com/expensereports/v4/reports/93B9D238A6864C019258/expenses/99F8CC6B1AEE6049B03652F018CAF096/exceptions' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
--data-raw '{
"exceptionCode": "MISSREQFLD",
"exceptionVisibility": "ALL"
}'
Response
Delete Expense Exception
Deletes an exception on the specified expense specified by exceptionCode
using a system user.
Scopes
expense.report.readwrite
- Refer to Scope Usage for full details.
Request
URI Template
https://{datacenterURI}/expensereports/v4/reports/{reportId}/expenses/{expenseId}/exceptions/{exceptionCode}
Parameters
Name |
Type |
Format |
Description |
reportId |
string |
- |
Required The unique identifier of the report. |
expenseId |
string |
- |
Required The unique identifier of the expense entry. |
exceptionCode |
string |
- |
Required The code for the exception. |
Response
Status Codes
Example
Request
curl --location --request 'DELETE' \
'https://us.api.concursolutions.com/expensereports/v4/reports/93B9D238A6864C019258/expenses/99F8CC6B1AEE6049B03652F018CAF096/exceptions/MISSREQFLD' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
Response
Retrieve Allocation Exceptions
Retrieves the exceptions on a specific allocation.
Scopes
expense.report.read
- Refer to Scope Usage for full details.
expense.report.readwrite
- Refer to Scope Usage for full details.
Request
URI Template
https://{datacenterURI}/expensereports/v4/users/{userID}/context/{contextType}/reports/{reportId}/expenses/{expenseId}/allocations/{allocationId}/exceptions
Parameters
Name |
Type |
Format |
Description |
userID |
string |
- |
Required The unique identifier of the SAP Concur user. Use Identity v4 to retrieve the userID . |
contextType |
string |
- |
Required The access level of the SAP Concur user, which determines the form fields they can view/modify. Supported values: TRAVELER , PROXY |
reportId |
string |
- |
Required The unique identifier of the report that is being read. |
expenseId |
string |
- |
Required The unique identifier of the expense entry to which the exceptions belong. |
allocationId |
string |
- |
Required The unique identifier of the expense allocation to which the exceptions belong. |
Response
Status Codes
Payload
Example
Request
curl --location --request GET 'https://us.api.concursolutions.com/expensereports/v4/users/32C2FCC3-B2E8-4907-9672-5B3F49B1C643/context/TRAVELER/reports/764428DD6A664AF0BFCB/expenses/99F8CC6B1AEE6049B03652F018CAF096/allocations/6E23ECF391221145898792F926D4E7A5/exceptions' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
Response
200 OK
[
{
"exceptionCode": "MISSALLOCREQFLD",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "Missing required allocation field: Custom 05. ",
"allocationId": "6E23ECF391221145898792F926D4E7A5",
"expenseId": "9F6D943AB10E314D86D67011F5FD1C1E",
"parentExpenseId": null
}
]
Retrieve Allocation Exceptions Using System User
Retrieves the exceptions on a specific allocation using a system user.
Scopes
expense.report.read
expense.report.readwrite
Request
URI Template
https://{datacenterURI}/expensereports/v4/reports/{reportId}/expenses/{expenseId}/allocations/{allocationId}/exceptions
Parameters
Name |
Type |
Format |
Description |
reportId |
string |
- |
Required The unique identifier of the report that is being read. |
expenseId |
string |
- |
Required The unique identifier of the expense entry to which the exceptions belong. |
allocationId |
string |
- |
Required The unique identifier of the expense allocation to which the exceptions belong. |
Response
Status Codes
Payload
Example
Request
curl --location --request GET 'https://us.api.concursolutions.com/expensereports/v4/reports/764428DD6A664AF0BFCB/expenses/99F8CC6B1AEE6049B03652F018CAF096/allocations/6E23ECF391221145898792F926D4E7A5/exceptions' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
Response
200 OK
[
{
"exceptionCode": "MISSALLOCREQFLD",
"exceptionVisibility": "ALL",
"isBlocking": true,
"message": "Missing required allocation field: Custom 05. ",
"allocationId": "6E23ECF391221145898792F926D4E7A5",
"expenseId": "9F6D943AB10E314D86D67011F5FD1C1E",
"parentExpenseId": null
}
]
Add Allocation Exception
Adds an exception on the specified allocation using a system user.
Scopes
expense.report.readwrite
- Refer to Scope Usage for full details.
Request
URI Template
https://{datacenterURI}/expensereports/v4/reports/{reportId}/expenses/{expenseId}/allocations/{allocationId}/exceptions
Parameters
Name |
Type |
Format |
Description |
reportId |
string |
- |
Required The unique identifier of the report. |
expenseId |
string |
- |
Required The unique identifier of the expense entry. |
allocationId |
string |
- |
Required The unique identifier of the expense allocation to which the exceptions belong. |
Payload
Response
Status Codes
Example
Request
curl --location --request 'PUT' \
'https://us.api.concursolutions.com/expensereports/v4/reports/93B9D238A6864C019258/expenses/99F8CC6B1AEE6049B03652F018CAF096/allocations/6E23ECF391221145898792F926D4E7A5/exceptions' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
--data-raw '{
"exceptionCode": "MISSREQFLD",
"exceptionVisibility": "ALL"
}'
Response
Delete Allocation Exception
Deletes an exception on the specified allocation specified by exceptionCode
using a system user.
Scopes
expense.report.readwrite
- Refer to Scope Usage for full details.
Request
URI Template
https://{datacenterURI}/expensereports/v4/reports/{reportId}/expenses/{expenseId}/allocations/{allocationId}/exceptions/{exceptionCode}
Parameters
Name |
Type |
Format |
Description |
reportId |
string |
- |
Required The unique identifier of the report. |
expenseId |
string |
- |
Required The unique identifier of the expense entry. |
allocationId |
string |
- |
Required The unique identifier of the expense allocation to which the exceptions belong. |
exceptionCode |
string |
- |
Required The code for the exception. |
Response
Status Codes
Example
Request
curl --location --request 'DELETE' \
'https://us.api.concursolutions.com/expensereports/v4/reports/93B9D238A6864C019258/expenses/99F8CC6B1AEE6049B03652F018CAF096/allocations/6E23ECF391221145898792F926D4E7A5/exceptions/MISSREQFLD' \
--header 'Authorization: Bearer {access_token}' \
--header 'Content-Type: application/json'
Response
Schema
Exceptions Response
Name |
Type |
Format |
Description |
exceptionCode |
string |
- |
Required The unique identifier of the exception type. |
exceptionVisibility |
string |
- |
Required The visibility of the exception. Possible values: ‘ALL’ - The exception is visible to the Traveler, Approver, and Processor, ‘APPROVER_PROCESSOR’ - The exception is visible only to the Approver and Processor, ‘PROCESSOR’ - The exception is visible only to the Processor. |
isBlocking |
boolean |
true /false |
Required Whether the exception will prevent the report from being submitted. |
message |
string |
- |
Description of the exception, in the user’s language. |
allocationId |
string |
- |
The unique identifier of the allocation to which the exception relates. |
expenseId |
string |
- |
The unique identifier of the expense to which the exception relates. |
parentExpenseId |
string |
- |
The unique identifier of the parent expense when the exception relates to an itemized expense. |
Exception Request
Name |
Type |
Format |
Description |
exceptionCode |
string |
- |
Required The code for the exception. |
exceptionVisibility |
string |
- |
Required The visibility of the exception. Possible values: ‘ALL’ - The exception is visible to the Traveler, Approver, and Processor, ‘APPROVER_PROCESSOR’ - The exception is visible only to the Approver and Processor, ‘PROCESSOR’ - The exception is visible only to the Processor. |
Error Message
Name |
Type |
Format |
Description |
customResponseData |
object |
- |
The custom parameters related to error. |
errorId |
string |
- |
The unique identifier of the error associated with the response. |
errorMessage |
string |
- |
Required The detailed error message. |
httpStatus |
string |
- |
Required The HTTP response code and phrase for the response. |
path |
string |
- |
Required The URI of the attempted request. |
timestamp |
string |
date-time |
Required The time when the error was captured. |
validationErrors |
ValidationError |
- |
The validation error messages. |
Validation Error
Name |
Type |
Format |
Description |
id |
string |
- |
The ID of the validation error. |
message |
string |
- |
The detailed message of the validation error. |
source |
string |
- |
The type of validation which failed. |