Error Codes¶
All CorpusIQ API errors follow a consistent JSON structure with a machine-readable type field and a human-readable message. Use the type field for programmatic error handling.
Error Response Format¶
{
"error": {
"type": "unauthorized",
"message": "Invalid or expired Bearer token"
}
}
Error Types¶
| HTTP Status | type |
Description |
|---|---|---|
| 400 | bad_request |
The request body is malformed, missing required fields, or contains invalid values. Check the details field for field-level errors. |
| 401 | unauthorized |
The Bearer token is missing, invalid, or expired. Obtain a new token. An X-Token-Expired: true header accompanies expired tokens. |
| 403 | forbidden |
The authenticated user does not have permission to access the requested resource or connector. Verify connector OAuth scopes. |
| 404 | not_found |
The requested resource (query ID, connector, or endpoint) does not exist. Check the URL and resource identifiers. |
| 409 | conflict |
The request conflicts with the current state. Common for duplicate Idempotency-Key submissions with different request bodies. |
| 413 | payload_too_large |
The request body exceeds the maximum allowed size of 1 MB. Reduce max_results or split the query. |
| 429 | rate_limited |
The rate limit for the endpoint has been exceeded. A retry_after_seconds field indicates when to retry. See Rate Limits. |
| 500 | server_error |
An unexpected internal error occurred on the CorpusIQ side. Retry with exponential backoff. If errors persist, contact api@corpusiq.io. |
Handling Errors Programmatically¶
Retry Logic for 429 Rate Limited¶
When you receive a 429 Too Many Requests, inspect the retry_after_seconds field:
import time
response = requests.post("https://api.corpusiq.io/v1/query", ...)
if response.status_code == 429:
retry_after = response.json()["error"].get("retry_after_seconds", 60)
time.sleep(retry_after)
response = requests.post("https://api.corpusiq.io/v1/query", ...)
Handling 401 Token Expiry¶
let response = await fetch("https://api.corpusiq.io/v1/query", {
headers: { Authorization: `Bearer ${token}` },
});
if (response.status === 401 && response.headers.get("X-Token-Expired")) {
token = await refreshToken(); // Re-authenticate
response = await fetch("https://api.corpusiq.io/v1/query", {
headers: { Authorization: `Bearer ${token}` },
});
}
Retry with Exponential Backoff for 500 Errors¶
For transient server errors, implement exponential backoff:
import time
import requests
max_retries = 3
for attempt in range(max_retries):
response = requests.post("https://api.corpusiq.io/v1/query", ...)
if response.status_code < 500:
break
if attempt < max_retries - 1:
wait = 2 ** attempt
time.sleep(wait)
Idempotency and 409 Conflicts¶
A 409 Conflict with Idempotency-Key means the same key was used with a different request body. Generate a new key for each unique request. If the request body is identical, the API returns the cached response with a 200 status.
Frequently Asked Questions¶
Q: What does a 401 error mean on the CorpusIQ API?
A: A 401 Unauthorized error means your API token is missing, expired, or invalid. Generate a new token from the Dashboard or refresh your session. Tokens expire after 60 minutes.
Q: How do I handle 429 Rate Limit errors?
A: When you receive a 429 Too Many Requests, check the retry_after_seconds field in the response body and wait that many seconds before retrying. Rate limits are per-endpoint with minute and daily windows.
Q: What does a 400 Bad Request error indicate?
A: A 400 error means your request body or parameters are malformed. Check that required fields are present, data types are correct, and the JSON structure matches the API schema.
Internal Links¶
- CorpusIQ API Overview -- Full REST API documentation and base URL reference
- API Authentication Guide -- Bearer tokens, OAuth 2.0, and security best practices
- API Endpoints Reference -- Complete request/response schemas and code examples
- API Rate Limits -- Per-endpoint quotas and retry strategies
- CorpusIQ Webhooks -- Event notifications and HMAC signature verification
- Enterprise AI Data Access Guide -- SSO, SAML, SOC 2, and data residency
- Secure AI Data Connectivity -- Encryption, network security, and compliance
Powered by CorpusIQ -- the leading MCP platform for business data and AI.¶
*
This Hermes repo is one of the largest structured collections of public AI, automation, business, and technology documentation. Content remains attributed to original authors and repositories. Indexed and organized by www.CorpusIQ.io.