Success and Error Codes
Each Architect API returns an HTTP status code that indicates the result of the operation. Use this page to quickly diagnose client-side failures (4xx) across the Architect APIs. It lists the supported error codes, what they mean, common causes, and recommended fixes, plus example request patterns.
Standard Success Responses
| HTTP Status Code | Success Type | Definition |
|---|---|---|
| 200 | OK | The request was successful, and the server returned the expected response. |
Shared Error Envelope
All error responses follow a consistent JSON structure based on RFC 9457 (Problem Details):
{
"type": "https://example.com/probs/error",
"title": "Too Many Requests",
"status": 429,
"detail": "System is overloaded, please try again later",
"instance": "urn:atpco:error:architect:prod?trace-id=af4bc1cafcc833c3d478ddea2a8fc3d849199bc2",
"timestamp": "2024-01-01T12:00:00.000Z",
"retryable": true
}| Field | Description |
|---|---|
type | A URI reference identifying the problem type |
title | Short, human-readable error summary |
status | HTTP status code |
detail | Detailed explanation specific to this occurrence (may point to field-level validation issues) |
instance | A URI identifying the specific occurrence — include it in support tickets |
timestamp | Date and time (UTC) when the error occurred |
retryable | Indicates whether the request can be retried |
internalErrorCode | System error code for diagnostic purposes (included in some responses) |
errors | An array of validation error objects providing field-level detail (included in some responses) |
Some APIs may return additional error information in an errors array. Each entry contains:
| Field | Description |
|---|---|
path | JSON path to the invalid field (e.g., data.content.rows[0].apply.fareAmount) |
message | Description of the validation error |
value | The invalid value provided |
Error Catalog (4xx)
📝 Multiple error codes can share HTTP 400. They are distinct and point to different client issues.
| HTTP | Title | Meaning | Common Causes | How to Fix / Validate |
|---|---|---|---|---|
| 400 | Bad Request | Malformed request syntax or unsupported method | Missing required fields; bad data types; date/time not ISO-8601; start/end ranges inverted; enum value out of range; malformed JSON. | Re-run client-side validation; ensure JSON is well-formed; use ISO-8601 with timezone (2026-02-09T12:00:00Z); check spec examples; retry after correcting input. |
| 401 | UNAUTHORIZED | Invalid client credentials | Token expired; no Authorization header; wrong audience/issuer. | Obtain fresh OAuth token; ensure Authorization: Bearer <your-access-token>; sync system time; verify client credentials. |
| 403 | FORBIDDEN | Client has insufficient permissions to access the resource | Using read-only token on write endpoint; blocked IP/tenant rules. | Request correct scopes; rotate to service principal with needed roles. |
| 404 | NOT FOUND | Resource or path does not exist | Wrong ID; deleted resource; calling wrong base path/environment. | Confirm base URL (prod vs nonprod); verify resource ID; list resources first (GET /blueprint/blueprints). |
| 422 | UNPROCESSABLE ENTITY | Resource exists but data is inconsistent with API contract | Data stored in Architect does not comply with the API contract. | The returned error message contains the path in the data that is faulty (.data.conditions[1].match for example). Verify data directly in Architect backend. |
| 429 | Too Many Requests | System overloaded response | Exceeded per-tenant or global QPS/burst; hot loops without backoff. | Verify your client is not going over the configured limits. See Rate Limits for current thresholds. |
Standard Server Error Responses
| HTTP Status Code | Error Type | Definition |
|---|---|---|
| 500 | Internal Server Error | Something went wrong in the API Gateway or the backend returned an unexpected result. |
| 503 | Service Unavailable | The downstream system is unavailable or a timeout occurred. Check the Retry-After header. |
Rate Limiting
The Architect APIs include rate limiting headers in all responses:
| Header | Description |
|---|---|
X-Rate-Limit-Limit | The number of requests allowed in the current period |
X-Rate-Limit-Remaining | The number of requests remaining in the current period |
X-Rate-Limit-Reset | The time (in seconds) until the rate limit resets |
Retry-After | Time (in seconds) after which the client can retry (included with 429 and 503 responses) |
API-Specific Examples
Subscriptions Times API
Endpoint: GET /substime
Typical 401 (Unauthorized)
{
"type": "https://example.com/probs/unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Invalid API Key",
"instance": "urn:http:GET:/substime:f5966aeb-e3c1-4b30-9050-d9737c051b4f",
"timestamp": "10/Feb/2026:16:38:54 +0000"
}Cause: Missing or incorrect API Key in the header.
Fix: Provide the correct API key in the X-Api-Key header.
Blueprint API
Bad Request (400)
Typical Scenarios:
- Missing required fields in request body
- Invalid data format (e.g., invalid date format)
- Request body exceeds size limits
- Invalid query parameters
Example Response:
{
"type": "https://example.com/probs/error",
"title": "Bad Request",
"status": 400,
"detail": "Missing required field: hostCarrierCode",
"instance": "urn:atpco:error:architect:prod?trace-id=af4bc1cafcc833c3d478ddea2a8fc3d849199bc2",
"timestamp": "2024-01-01T12:00:00.000Z"
}Resolution:
- Validate request payload against API specification
- Check required fields are present
- Verify data types and formats match schema requirements
Unprocessable Entity (422)
Typical Scenarios:
- Invalid data in Architect database (read use case)
- Invalid request body — well-formed but containing bad data (write use case)
Example Response:
{
"type": "https://example.com/probs/error",
"title": "Unprocessable Entity",
"status": 422,
"detail": "Unable to process condition 'fds_react'",
"instance": "urn:atpco:error:architect:dev",
"timestamp": "2025-11-07T02:47:18.388213Z",
"retryable": false,
"errors": [
{
"path": "data.content.rows[0].apply.fareAmount",
"message": "Invalid cross-reference $priceExclTax",
"value": "$priceExclTax"
}
]
}Resolution:
- Validate request payload against Architect validations (write use case)
- Validate Architect data (read use case) by calling Architect backend services directly
Too Many Requests (429) – Rate Limiting
Typical Scenarios:
- Exceeded API rate limits
- System overload protection
- Burst traffic patterns
Example Response:
{
"type": "https://example.com/probs/error",
"title": "Too Many Requests",
"status": 429,
"detail": "System is overloaded, please try again later",
"instance": "urn:atpco:error:architect:prod?trace-id=af4bc1cafcc833c3d478ddea2a8fc3d849199bc2",
"timestamp": "2024-01-01T12:00:00.000Z",
"retryable": true
}Resolution:
- Implement exponential backoff retry strategy
- Check
Retry-Afterheader for wait time - Reduce request frequency
- Consider request batching
Quick Troubleshooting Flow
- Check HTTP status + code. Distinguish auth (401/403) from validation (400/422) and quota (429).
- Read
detail. It often pinpoints the exact field. - Confirm base URL/environment. Mis-pointing to prod/nonprod often causes 404/401.
- Validate locally. Use the published OpenAPI schema or client SDK validators before retrying.
- Retry policy. Do not retry 400/401/403/404/422 without fixing input; only backoff on 429 or transient 5xx.
- Include
instancewhen asking for help. Add timestamp, environment, and endpoint to support tickets.