Understanding AEP Data Ingestion
Adobe Experience Platform accepts data through two main channels: batch ingestion (files uploaded on schedule) and streaming ingestion (real-time events via API or SDK). Both methods require data to conform to XDM schemas—and that's where most failures occur.
When ingestion fails, AEP provides error codes and partial batches. The key is understanding what these errors mean and how to prevent them at scale.
Common Batch Ingestion Failures
1. XDM Schema Validation Errors
The most frequent failure. Your source data doesn't match the expected XDM schema structure.
🚨 Common Error Message
INGEST-1227-400: Invalid XDM format - field 'email' expects type 'string' but received 'object'
Root Causes:
- Data type mismatches (string vs. number vs. object)
- Missing required fields defined in the schema
- Array fields receiving single values (or vice versa)
- Nested object structure doesn't match field group hierarchy
How to Fix:
- Export your XDM schema as JSON from the Schema Registry
- Validate sample source data against the schema using a JSON Schema validator
- Check field-by-field mapping in your data prep workflows
- Use AEP's sample data preview before full ingestion
2. Identity Namespace Errors
Profile data requires at least one identity field. Failures occur when identity configuration is wrong.
🚨 Common Error Message
INGEST-1510-400: Identity descriptor missing for profile-enabled dataset
Root Causes:
- No identity field marked as "primary" in the schema
- Identity namespace doesn't exist in your sandbox
- Identity value is null or empty string
- Non-standard namespace without proper configuration
How to Fix:
// Ensure identity map structure is correct
{
"identityMap": {
"Email": [{
"id": "[email protected]",
"primary": true
}],
"ECID": [{
"id": "12345678901234567890",
"primary": false
}]
}
}
3. Timestamp Format Errors
AEP expects ISO 8601 timestamps. Common failures occur with non-standard date formats.
| Invalid Format | Valid Format |
|---|---|
2025-01-10 |
2025-01-10T00:00:00Z |
01/10/2025 14:30 |
2025-01-10T14:30:00.000Z |
1704844800 (epoch) |
2025-01-10T00:00:00Z |
💡 Pro Tip
Always convert timestamps to ISO 8601 with timezone (preferably UTC) in your ETL pipeline before sending to AEP. This prevents timezone ambiguity and parsing errors.
4. File Size and Format Issues
Batch ingestion has limits and format requirements that cause silent failures.
Common Issues:
- File too large: Single files over 512 MB may timeout. Split into smaller batches.
- Wrong compression: AEP expects GZIP for compressed JSON. Other formats fail.
- Encoding issues: Non-UTF-8 encoded files cause character corruption or failure.
- Malformed JSON: Trailing commas, unquoted keys, or single quotes instead of double.
Common Streaming Ingestion Failures
1. Rate Limiting (HTTP 429)
AEP enforces rate limits on streaming endpoints. Bursts of traffic cause temporary failures.
⚠️ Default Limits
Streaming ingestion: ~20,000 requests/second per sandbox. Individual inlet connections: ~6,000 requests/second. Exceeding these returns HTTP 429.
How to Handle:
- Implement exponential backoff with jitter in your client
- Use batch mode within streaming (bundle multiple events per request)
- Distribute load across multiple inlet connections
- Request limit increases through Adobe support for high-volume use cases
2. Authentication Failures (HTTP 401/403)
Streaming requires valid JWT tokens that expire periodically.
Checklist:
- JWT token not expired (default 24-hour expiry)
- Service account has "Data Ingestion" permission in Admin Console
- Correct IMS org ID in the request headers
- API key (client ID) matches the integration
3. Synchronous Validation Failures
Streaming with synchronous validation returns immediate errors but adds latency.
// Request with sync validation
POST /collection/{CONNECTION_ID}?synchronousValidation=true
// Error response
{
"type": "https://ns.adobe.com/aep/errors/INGEST-1227-400",
"title": "XDM validation failed",
"detail": "Field 'eventType' is required but missing"
}
💡 When to Use Sync Validation
Enable synchronous validation during development and testing. In production, use async mode for better throughput and handle failures via monitoring.
Diagnosing Ingestion Issues
Using the Monitoring Dashboard
AEP's Monitoring section shows batch and streaming health:
- Navigate to Monitoring → Batch/Streaming
- Filter by dataset, date range, or status (failed/partial)
- Click on failed batches to see error details
- Download failed records for local analysis
Checking Dataset Activity
At the dataset level:
- Go to Datasets and select your dataset
- Check the Batches tab for ingestion history
- Look at Records ingested vs Records failed
- Export failed records for debugging
API-Based Monitoring
// Get batch status via API
GET /batches/{BATCH_ID}
// Response includes:
{
"id": "batch123",
"status": "failed",
"errors": [{
"code": "INGEST-1227-400",
"description": "XDM validation error at row 1547"
}],
"metrics": {
"inputRecordCount": 10000,
"failedRecordCount": 23
}
}
Prevention Strategies
1. Pre-Ingestion Validation
Catch errors before they reach AEP:
- Validate JSON structure against XDM schema in your ETL
- Check required fields are present and non-null
- Verify data types match schema expectations
- Test with sample data in a development sandbox first
2. Data Prep Transformations
Use AEP's Data Prep to transform source data during ingestion:
- Map source fields to XDM paths
- Apply functions to convert data types
- Set default values for optional fields
- Filter out invalid records before ingestion
3. Alerting and Monitoring
Set up alerts for ingestion failures:
- Create alerts in AEP for batch failure rates > threshold
- Monitor streaming error rates via API
- Integrate with your observability platform (Datadog, New Relic, etc.)
- Set up PagerDuty/Slack notifications for critical failures
Quick Reference: Error Codes
| Error Code | Meaning | Fix |
|---|---|---|
INGEST-1227-400 |
XDM validation failed | Check field types and structure |
INGEST-1510-400 |
Identity descriptor missing | Add primary identity to schema |
INGEST-1232-400 |
Required field missing | Ensure all required fields have values |
INGEST-1020-400 |
Timestamp parse error | Use ISO 8601 format with timezone |
HTTP 429 |
Rate limit exceeded | Implement backoff, reduce request rate |