*** title: Content Gateway Errors description: Standard error codes and format for the Moveworks Content Gateway ------------------------------------------------------------------------------ ## Gateway Errors All gateways should expose the following error codes to Moveworks. The error code and message format should follow exactly as below. The API gateway should make limited-to-no changes to error messages exposed by underlying systems. ```json title="Error Response Format" { "error": { "code": "ERROR_CODE_IDENTIFIER", "message": "Description of the error." } } ``` ## Error Codes ### 400 `INPUT_VALIDATION_FAILED` Moveworks submitted an invalid request to the gateway. ```json { "error": { "code": "INPUT_VALIDATION_FAILED", "message": "Mandatory field not provided: submitted_by." } } ``` ### 401 `AUTHENTICATION_FAILED` The provided credential by Moveworks is invalid or missing. This is NOT the same as authentication failing between the gateway and your downstream systems. ```json { "error": { "code": "AUTHENTICATION_FAILED", "message": "Bearer token missing." } } ``` ### 404 `NOT_FOUND` The resource identifier Moveworks is requesting is missing. ```json { "error": { "code": "NOT_FOUND", "message": "Form ID 222 does not exist." } } ``` ### 429 `RATE_LIMIT_EXCEEDED` Moveworks has exceeded the allowable number of requests per minute. ```json { "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded." } } ``` All responses should include the following headers indicating rate limit consumption: ```yaml title="Rate Limit Headers" X-RateLimit-Limit: 600 # Max requests permitted per minute X-RateLimit-Remaining: 421 # Requests remaining in current window X-RateLimit-Reset: 18 # Seconds until rate limit fully resets ``` ### 500 `INTERNAL_SERVER_ERROR` Something went wrong in the gateway and threw an exception. ```json { "error": { "code": "INTERNAL_SERVER_ERROR", "message": "NoneType has no attribute 'records'" } } ``` ### 502 `EXTERNAL_REST_ERROR` Something went wrong between the gateway and your system. Should include the raw response from the source system's error. ```json { "error": { "code": "EXTERNAL_REST_ERROR", "message": "Service Cloud rejected the request. Raw response: SOQL insertion failed. Can not set Case Owner to Contact record." } } ```