Errors

Model-call failures return OpenAI-compatible error objects:

1{
2 "error": {
3 "message": "missing api key",
4 "type": "missing_api_key"
5 }
6}

Status Codes

HTTP statuserror.typeCauseFix
400invalid_request_errorInvalid body, empty messages, or oversized bodyFix request; do not retry
401missing_api_keyNo API keyAdd Bearer key
403invalid_api_keyKey is invalid or not ACTIVEUse a valid key
403policy_rejectedIP, model, tier, or policy is not allowedAdjust key policy
402insufficient_quotaQuota or wallet balance is insufficientTop up or adjust budget
502routing_errorNo usable model or routing failedShort backoff retry
502upstream_errorUpstream model failedShort backoff retry
503 / 504upstream_errorDependency unavailable or timed outExponential backoff retry

Debug Fields

FieldSource
X-Request-IDRequest header
model / tierRequest body
HTTP statusResponse status
error.type / error.messageError response body
X-DAOE-Used-ModelSuccessful response header
X-DAOE-Used-ProviderSuccessful response header

Retry Check

1export function shouldRetryJoyTokenError(status: number, type?: string) {
2 if (status === 503 || status === 504) return true;
3 if (status === 502 && (type === "routing_error" || type === "upstream_error")) return true;
4 return false;
5}

Do not infinitely retry 400, 401, 402, or 403. Fix the request, auth, budget, or policy first.