Error envelope
All error responses use a consistent JSON envelope:Canonical body validation (VALIDATION_ERROR)
POST /v1/submissions returns VALIDATION_ERROR when the JSON does not match canonical_submission_v1. Details use Zod flatten format:
details.formErrors— top-level issuesdetails.fieldErrors— map of JSON paths to message arrays
- Map questionnaire into
subject.*(not legacymarkers.healthQuestionnaireMarkers) - Use structured
sourceMetadata.markerRangesobjects{ unit, lowerBound, upperBound }(not display strings) - Omit
currentFrequencyforsmoking.status: "former" - Align
familyHistory.*.aliveStatuswithcurrentAge/deathAge(only send the age that applies)
Blood panel validation (SUBMISSION_VALIDATION_ERROR)
When the 14-marker panel fails code/unit/bounds checks, the code may be SUBMISSION_VALIDATION_ERROR with details as an array:
Partner id mismatch (PARTNER_ID_MISMATCH)
403 when partnerId in the body does not match the authenticated credential UUID.
HTTP status codes
Partner-safe notices
GET /v1/results may include notices[] on outcomes with informational messages. Notices are not errors. They never contain internal model codes or stack traces.
x-correlation-id
Include a uniquex-correlation-id on every POST. The platform binds it to logs and error responses. Provide it when reporting issues to partner@idunox.com.