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.

Retrieve Report Header Exceptions

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

Headers

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"
	}
]

Retrieve Report Header Exceptions Using System User

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

Headers

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"
	}
]

Add Report Header Exception

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.

Headers

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

200 OK No Content

Delete Report Header Exception

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.

Headers

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

204 No Content

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

Headers

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

Headers

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.

Headers

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

200 OK No Content

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.

Headers

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

204 No Content

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.

Headers

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.

Headers

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.

Headers

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

200 OK No Content

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.

Headers

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

204 No Content

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.

On this page