| Status | Meaning | Common causes | Resolution |
|---|---|---|---|
| 200 | Success | — | — |
| 400 | Bad request | Missing credentials fields · incomplete draft run (per-field warnings) · AI model errors (reported in warnings) · invalid test ID format | Fix the payload; on draft runs, resolve every entry in warnings[] first |
| 401 | Unauthorized | Invalid credentials · missing Bearer header · expired token (after 3600 s) · expired magic link | Re-authenticate and retry once with the new token |
| 403 | Forbidden | Test belongs to a different organization | Check you are using the ID returned to your org; do not retry |
| 404 | Not found | Unknown test ID · report requested before the test was run | Verify the GUID; run the test before requesting results/reports |
| 500 | Server error | Internal failure | contact support if persistent |
status: "error" and per-field errors. CCS endpoints return a flat { "message": "…" }, with a warnings[] array on validation failures:{
"warnings": [
"Age must be at least 18 years",
"SystolicBloodPressure is required"
]
}ℹ️ Note: AI-model failures surface the same way — a 400whosewarningsarray contains"AI Model API Error: …". The draft remains intact and can simply be re-run.
400 with "AI Model API Error" in warnings is retryable).rateLimitPerHour); queue requests rather than hammering, and cache tokens instead of re-authenticating per call.💡 Tip: Log the entryUrlvalues fromrejectedItems— they carry thefullUrlof the exact FHIR entries your EHR export needs to fix.