Create Submissions
Accepts de-identified payload. partnerId MUST equal the authenticated PartnerCredential.id.
At least one of markers or reportDocuments MUST be present (non-empty). Extra keys on nested objects are rejected (.strict() Zod schemas).
canonical_submission_v1). Map your intake questionnaire and blood panel in your backend before calling this endpoint — see Canonical submission JSON and the Input Data Preparation Guide.
Request requirements
partnerIdmust equal the UUID of the PartnerCredential tied to your API key.- Include a non-empty
markers[]array with all 14 Health Yourself blood marker codes. - Structure questionnaire data under
subject(notmarkers.healthQuestionnaireMarkers). - Send
options.requestedOutputs(required) andoptions.requestedOutcomesfor the four HY wellbeing areas. - Provide
sourceMetadata.sourceTimestampfor when the intake was completed; optionalsourceMetadata.markerRangesfor lab reference intervals. - On every
POST, send non-emptyx-correlation-idandIdempotency-Keyheaders.
400 with field-level details — see Errors.
Top-level field reference
| Field | Required | Notes |
|---|---|---|
schemaVersion | Yes | canonical_submission_v1 |
partnerId | Yes | Partner credential UUID |
partnerSubmissionId | Yes | Your unique reference (max 512 characters) |
partnerSubjectId | Yes | De-identified subject reference |
subject | Yes | Demographics, measurements, history, family history |
markers | Yes | 14 blood observations (code, value, unit) |
options | Yes | requestedOutputs + requestedOutcomes |
sourceMetadata | Recommended | sourceTimestamp, markerRanges, lab metadata |
Health Yourself request example
submission.json:
Accepted response (202)
submissionId. Poll GET /v1/submissions/{submissionId} or wait for the result.ready webhook, then call GET /v1/results/{resultId}.Authorizations
Plaintext API key issued for the tenant (stored hashed server-side).
Headers
Client-supplied correlation id for writes; bound to error logs and payloads where applicable.
1Client key for at-most-once submit semantics (24h scope). Reuse with the same body returns the same submissionId/jobId; reuse with a different body returns 409.
1Optional; echoed when possible. Server generates when absent.
Body
Canonical Type A ingestion JSON (canonical_submission_v1). At least one of markers or reportDocuments
must be non-empty (Zod superRefine). Cross-field smoking and family-history rules are Zod-only.
canonical_submission_v1 1 - 5121 - 512Optional partner extensions; keys scanned for disallowed direct identifiers. Rules enforced in Zod.
Response
Accepted — submission persisted; pipeline job enqueued
Partner-facing ingestion outcome for this endpoint. The persisted Submission.status
in PostgreSQL continues to reflect pipeline state (e.g. PROCESSING).
accepted