1import{j as e}from"./vendor-ui-x7D0iLe8.js";import{L as t}from"./vendor-react-aMKJrssV.js";import{l as s,w as o,f as a}from"./index-CgmaCIwJ.js";import{C as i}from"./circle-alert-DSCfwMRe.js";import"./vendor-data-LOeL2b27.js";const d=[{code:"MISSING_API_KEY",http:401,meaning:"Request did not include the x-api-key header.",fix:"Add header: x-api-key: eqiqs_live_⦠(or eqiqs_sandbox_⦠for sandbox).",example:{error:{code:"MISSING_API_KEY",message:"Provide a valid API key via the x-api-key header."}}},{code:"INVALID_API_KEY",http:401,meaning:"Key is malformed, deactivated, or does not match our records.",fix:"Verify the key in your Partner Dashboard. If recently revoked, generate a new one."},{code:"INVALID_SIGNATURE",http:401,meaning:"HMAC signing is enabled on this key but x-eqiqs-signature is missing or wrong.",fix:"Compute sha256=HEX(HMAC_SHA256(signing_secret, raw_body)) and send as x-eqiqs-signature."},{code:"ORIGIN_NOT_ALLOWED",http:403,meaning:"Browser-based call from an Origin not in this key's CORS allowlist.",fix:"Add the domain to allowed_origins in your Partner Dashboard, or call from a server."},{code:"RATE_LIMIT_EXCEEDED",http:429,meaning:"You exceeded the per-hour rate limit for this key.",fix:"Wait until X-RateLimit-Reset, throttle client-side, or upgrade your tier. Check X-RateLimit-Remaining on every response."},{code:"MONTHLY_LIMIT_EXCEEDED",http:429,meaning:"Monthly call quota for this key's tier is fully consumed.",fix:"Upgrade your plan in the Partner Dashboard, or wait until the 1st of next month. Overages on paid tiers bill automatically."},{code:"VALIDATION_ERROR",http:400,meaning:"Request body or query failed schema validation (missing field, bad enum, etc.).",fix:"Read the message field for the specific issue. Check /openapi.json for required shapes.",example:{error:{code:"VALIDATION_ERROR",message:"pairs must be a non-empty array."}}},{code:"INSUFFICIENT_DATA",http:422,meaning:"Both subjects must have ⥠3 completed frameworks (Data Sufficiency rule). Confidence cannot be computed below this threshold.",fix:"Submit more framework results per subject before re-requesting compatibility. Use /v1/frameworks for the full list."},{code:"INVALID_FRAMEWORK",http:400,meaning:"A framework key in your payload is not recognized.",fix:"GET /v1/frameworks returns the canonical list of 21 supported framework keys."},{code:"NOT_FOUND",http:404,meaning:"The requested resource (report id, share token, framework) does not exist.",fix:"Check the URL path. Resources are scoped per key â sandbox keys cannot resolve live IDs and vice versa."},{code:"IDEMPOTENCY_CONFLICT",http:409,meaning:"An Idempotency-Key was reused with a different request body within 24h.",fix:"Use a fresh UUID per logical request, or send the exact same body to receive the cached response."},{code:"INTERNAL_ERROR",http:500,meaning:"Something failed on our side. We were paged.",fix:"Retry with exponential backoff. If it persists, email [email protected] with the request id from the response headers."}],n=r=>r>=500?"bg-destructive/15 text-destructive border-destructive/30":r===429?"bg-amber-500/15 text-amber-400 border-amber-500/30":r>=400?"bg-blue-500/15 text-blue-400 border-blue-500/30":"bg-muted text-muted-foreground",p=()=>e.jsxs("div",{className:"min-h-dvh bg-background py-12 px-4",children:[e.jsx(s,{title:"EQIQs Partner API â Error Code Catalog",description:"Complete reference of EQIQs Compatibility API error codes, HTTP status mapping, and remediation steps.",path:"/api-errors",noindex:!0}),e.jsxs("div",{className:"max-w-4xl mx-auto",children:[e.jsxs(t,{to:"/compatibility-api",className:"inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground mb-6",children:[e.jsx(o,{className:"h-4 w-4"})," Back to API overview"]}),e.jsx("h1",{className:"text-3xl font-bold font-display mb-2",children:"Error code catalog"}),e.jsxs("p",{className:"text-muted-foreground font-body mb-8",children:["Every error response from the Partner API has the shape"," ",e.jsx("code",{className:"bg-muted px-1.5 py-0.5 rounded text-xs",children:'{ "error": { "code": "...", "message": "..." } }'})," ","plus an HTTP status. Use the ",e.jsx("code",{className:"bg-muted px-1.5 py-0.5 rounded text-xs",children:"code"})," field â never parse the message â for programmatic handling."]}),e.jsx("div",{className:"border border-border rounded-xl p-5 mb-8 bg-muted/20",children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(i,{className:"h-5 w-5 text-primary mt-0.5 flex-shrink-0"}),e.jsxs("div",{className:"text-sm text-muted-foreground font-body",children:[e.jsx("strong",{className:"text-foreground",children:"Retry strategy:"})," retry only on ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"5xx"})," and ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"429"}),". Use exponential backoff (1s, 2s, 4s, 8s) and respect the ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"Retry-After"})," header. Never retry ",e.jsx("code",{className:"bg-muted px-1 rounded",children:"4xx"})," validation errors â fix the request instead."]})]})}),e.jsx("div",{className:"space-y-4",children:d.map(r=>e.jsxs("article",{className:"border border-border rounded-xl p-5",children:[e.jsxs("header",{className:"flex flex-wrap items-center gap-2 mb-2",children:[e.jsx("code",{className:"text-sm font-mono font-bold",children:r.code}),e.jsxs(a,{variant:"outline",className:`text-xs ${n(r.http)}`,children:["HTTP ",r.http]})]}),e.jsxs("p",{className:"text-sm font-body mb-2",children:[e.jsx("strong",{className:"text-foreground",children:"What it means:"})," ",r.meaning]}),e.jsxs("p",{className:"text-sm font-body text-muted-foreground mb-2",children:[e.jsx("strong",{className:"text-foreground",children:"How to fix:"})," ",r.fix]}),r.example&&e.jsx("pre",{className:"text-xs bg-muted/50 border border-border rounded p-3 overflow-x-auto font-mono",children:JSON.stringify(r.example,null,2)})]},r.code))}),e.jsxs("div",{className:"mt-10 text-center text-sm text-muted-foreground font-body",children:["Don't see your error? Email ",e.jsx("a",{className:"text-primary hover:underline",href:"mailto:[email protected]",children:"[email protected]"})," with the response body."]})]})]});
1export{p as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.