Error Handling

Proper error handling is critical for debugging, monitoring, and providing a good integration experience. This document covers the three distinct error flows in External Actions integrations:

  1. Your service → Adobe — synchronous HTTP errors from /submitAsyncAction when your service cannot accept a request
  2. Your service → Adobe — callback payload errors sent to callbackUrl after asynchronous processing
  3. Adobe → Your service — error responses from Adobe's callback endpoint when your callback POST fails

1. Errors from Your Service (/submitAsyncAction)

When Adobe calls your /submitAsyncAction endpoint and your service cannot accept the request, return a synchronous HTTP error.

400 Bad Request

{
  "status": "error",
  "code": "INVALID_REQUEST",
  "message": "Missing required field: email",
  "details": [
    {
      "field": "objectData[0].objectContext.leadData.email",
      "message": "Field is required"
    }
  ]
}

Causes:

401 Unauthorized

{
  "status": "error",
  "code": "UNAUTHORIZED",
  "message": "Invalid or missing authentication credentials"
}

Causes:

2. Callback Error Payloads

After accepting the execution request (HTTP 200/201), your service processes the data asynchronously and POSTs results to the callbackUrl. There are two ways to report errors in the callback.

Top-Level Callback Error

Use this when your service cannot complete processing at all — for example, due to a timeout or system failure. Report the failure at the top level with an empty objectData array:

{
  "errorCode": "TIMEOUT",
  "errorMessage": "Processing exceeded the configured timeout limit",
  "objectData": []
}
Field
Type
Description
errorCode
string
Stable error code identifying the failure type
errorMessage
string
Human-readable description of the failure
objectData
array
Must be present as an empty array

Per-Entity Callback Error

Use this when processing fails for a specific entity but the callback can still be sent. Report the failure inside activityData within the objectData entry:

{
  "objectData": [
    {
      "activityData": {
        "success": false,
        "errorCode": "INVALID_DATA",
        "reason": "External API not able to process data"
      },
      "leadData": {
        "id": 12345
      }
    }
  ]
}

Always include:

Error Code Reference

Use meaningful, consistent error codes across both top-level and per-entity errors:

Code
Description
Use Case
TIMEOUT
Processing timeout
Service took too long
RATE_LIMIT_EXCEEDED
Rate limit hit
Too many downstream API calls
INVALID_DATA
Invalid input data
Data validation error
NOT_FOUND
Entity not found
No matching record in external system

3. Adobe Callback Endpoint Errors

When your service POSTs results to Adobe's callbackUrl, Adobe's endpoint may return an error. All Adobe error responses follow this format:

{
  "title": "ErrMissingOauthToken",
  "status": 403,
  "error_code": 403010,
  "message": "Oauth token is missing"
}
Field
Type
Description
title
string
Error name/identifier
status
integer
HTTP status code
error_code
integer
Adobe-specific numeric error code
message
string
Human-readable error description

400 Bad Request

Causes:

401 Unauthorized

Causes:

Response:

403 Forbidden

Causes:

Response:

429 Rate Limit Exceeded

Response:

500 Internal Server Error

Causes:

Response:

Best Practices