Skip to main content

Error Codes

All API errors follow a consistent format.

Error Response Format

{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description",
"details": { ... }
}
}

Authentication Errors

CodeHTTPDescription
MISSING_API_KEY401No API key provided
INVALID_API_KEY401API key is invalid
INVALID_API_KEY_FORMAT401Key doesn't match expected format
API_KEY_EXPIRED401API key has expired
API_KEY_DISABLED401API key has been revoked

Authorization Errors

CodeHTTPDescription
INSUFFICIENT_PERMISSIONS403Key lacks required scope
ORGANIZATION_DISABLED403Organization is inactive

Rate Limiting Errors

CodeHTTPDescription
RATE_LIMIT_EXCEEDED429Too many requests per minute
DAILY_QUOTA_EXCEEDED429Daily limit reached
CONCURRENT_LIMIT_EXCEEDED429Too many concurrent requests

When rate limited, check these headers:

  • Retry-After: Seconds to wait
  • X-RateLimit-Reset: Unix timestamp when limit resets

Resource Errors

CodeHTTPDescription
MEMORY_NOT_FOUND404Memory ID doesn't exist
MEMORY_ID_EXISTS409Custom ID already taken
API_KEY_NOT_FOUND404API key ID not found
ORGANIZATION_NOT_FOUND404Organization not found

Validation Errors

CodeHTTPDescription
VALIDATION_ERROR400Request body validation failed
CONFIRMATION_REQUIRED400Destructive action needs confirm=true

Validation errors include details:

{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request data",
"details": {
"field": "text",
"errors": [
{"field": "text", "message": "field required"}
]
}
}
}

Server Errors

CodeHTTPDescription
INTERNAL_ERROR500Unexpected server error
EXTRACTION_FAILED500Memory extraction failed

Handling Errors

Python

import requests

response = requests.post(url, json=data, headers=headers)

if not response.ok:
error = response.json()["error"]
if error["code"] == "RATE_LIMIT_EXCEEDED":
time.sleep(int(response.headers["Retry-After"]))
# Retry request
elif error["code"] == "MEMORY_NOT_FOUND":
# Handle missing resource
pass

JavaScript

try {
const response = await fetch(url, options);
const data = await response.json();

if (!data.success) {
if (data.error.code === 'RATE_LIMIT_EXCEEDED') {
const retryAfter = response.headers.get('Retry-After');
await sleep(retryAfter * 1000);
// Retry
}
}
} catch (err) {
console.error('Request failed:', err);
}