Processing CRA Response Files
After you submit records to a credit bureau, they send back a response (acknowledgment) file indicating which records were accepted and which were rejected. This guide covers how to upload, parse, and act on these response files.
1. What Are CRA Response Files
Credit Reporting Agencies (CRAs) — Equifax, Experian, and TransUnion — return acknowledgment files after processing your Metro 2 submissions. These files tell you the outcome for every record you submitted.
Accepted
The record passed all validation checks and was applied to the consumer's credit file.
Rejected
The record failed one or more validation rules and was not applied. A rejection reason code is provided.
Warning
The record was accepted but flagged with warnings about potential data quality issues that should be reviewed.
2. Uploading Response Files
Upload CRA response files to Metro 2 for automatic parsing and record matching. The API accepts files in the standard Metro 2 response format from all three bureaus:
// Upload a CRA response file
POST /api/v1/cra-responses/upload
Content-Type: multipart/form-data
Authorization: Bearer your_api_key
--boundary
Content-Disposition: form-data; name="file"; filename="equifax-response-202503.dat"
Content-Type: application/octet-stream
[binary file content]
--boundary
Content-Disposition: form-data; name="bureau"
equifax
--boundary--// Response
{
"responseFileId": "cra_resp_abc123",
"bureau": "equifax",
"uploadedAt": "2025-03-20T14:30:00Z",
"status": "processing",
"fileName": "equifax-response-202503.dat",
"fileSize": 245760
}
// Check processing status
GET /api/v1/cra-responses/cra_resp_abc123
{
"responseFileId": "cra_resp_abc123",
"status": "completed",
"summary": {
"totalRecords": 12450,
"accepted": 12380,
"rejected": 58,
"warnings": 12
},
"processedAt": "2025-03-20T14:31:15Z"
}3. Automatic Parsing and Record Matching
When you upload a response file, Metro 2 automatically:
Parses the Response Format
Each bureau has slightly different response formats. Metro 2 handles Equifax, Experian, and TransUnion response files and normalizes the data into a consistent structure.
Matches Records to Your Submission
Each response record is matched back to the original record in your submission using the account number and consumer identifiers. Matched records are updated with their acceptance or rejection status.
Flags Rejected Records
Rejected records are flagged in the dashboard with the bureau's rejection reason code and a human-readable explanation. You can filter your records by rejection status.
4. Understanding Rejection Reason Codes
Each rejected record includes one or more reason codes. These are the most common codes you will encounter:
| Code | Description | Common Fix |
|---|---|---|
01 | Invalid SSN | Verify SSN format (9 digits, no dashes) |
02 | Invalid date format | Use MMDDYYYY for all date fields |
03 | Missing required field | Check all required fields are populated |
04 | Invalid Account Status code | Use valid 2-char status code (e.g., 11, 13, 64) |
05 | Duplicate record | Record was already submitted this cycle |
06 | Invalid ECOA code | Use valid ECOA code (1, 2, 3, 5, 7, T, W, X, Z) |
07 | Payment History Profile invalid | Ensure 24-char profile with valid codes (0-6, B, D, E) |
08 | Consumer name mismatch | Name does not match SSN on file at the bureau |
5. Handling Rejected Records
When records are rejected, follow this workflow to correct and resubmit them:
// Step 1: Get rejected records from a response file
GET /api/v1/cra-responses/cra_resp_abc123/rejections
{
"rejections": [
{
"recordId": "rec_001",
"accountNumber": "ACCT-5678",
"reasonCode": "01",
"reasonDescription": "Invalid SSN",
"fieldName": "ssn",
"submittedValue": "12345678",
"suggestion": "SSN must be exactly 9 digits"
},
{
"recordId": "rec_002",
"accountNumber": "ACCT-9012",
"reasonCode": "03",
"reasonDescription": "Missing required field",
"fieldName": "dateOpened",
"submittedValue": null,
"suggestion": "dateOpened is required for Account Status 11"
}
]
}
// Step 2: Fix the records
PATCH /api/v1/records/rec_001
{
"consumer": {
"ssn": "123456789"
}
}
PATCH /api/v1/records/rec_002
{
"dateOpened": "2023-06-15"
}
// Step 3: Resubmit corrected records
POST /api/v1/submissions
{
"type": "correction",
"recordIds": ["rec_001", "rec_002"],
"bureaus": ["equifax"]
}6. Tracking Acceptance Rates Over Time
The dashboard provides monthly acceptance rate trends so you can identify and fix systemic issues. You can also retrieve this data via the API:
// Get acceptance rate history
GET /api/v1/analytics/acceptance-rates?months=6
{
"rates": [
{ "month": "2024-10", "total": 11200, "accepted": 11150, "rate": 99.55 },
{ "month": "2024-11", "total": 11350, "accepted": 11280, "rate": 99.38 },
{ "month": "2024-12", "total": 11500, "accepted": 11430, "rate": 99.39 },
{ "month": "2025-01", "total": 11800, "accepted": 11740, "rate": 99.49 },
{ "month": "2025-02", "total": 12100, "accepted": 12050, "rate": 99.59 },
{ "month": "2025-03", "total": 12450, "accepted": 12380, "rate": 99.44 }
],
"topRejectionReasons": [
{ "code": "01", "description": "Invalid SSN", "count": 34 },
{ "code": "03", "description": "Missing required field", "count": 28 },
{ "code": "07", "description": "Payment History Profile invalid", "count": 15 }
]
}Recommended Targets
- • 99%+ acceptance rate — Healthy portfolio with good data quality
- • 95–99% acceptance rate — Review top rejection reasons and fix systemic issues
- • Below 95% — Indicates a significant data quality problem that needs immediate attention
Warning
Process response files promptly—rejection patterns often indicate systematic data issues that affect multiple records. A single field mapping error can cause hundreds of rejections each month if left unaddressed.
Related Resources
API Reference
- • POST /api/v1/cra-responses/upload — Upload response file
- • GET /api/v1/cra-responses/:id — Check processing status
- • GET /api/v1/cra-responses/:id/rejections — List rejections
- • GET /api/v1/analytics/acceptance-rates — Rate trends