Thriva · Schema
Thriva Platform API V1 - component schemas
JSON Schema definitions extracted from the Thriva Platform API OpenAPI (components.schemas). Derived from openapi/thriva-platform-api-openapi.yml
CompanyHealthcareDiagnosticsBlood TestingAt-Home TestingDigital HealthLab TestingWebhooksUnited Kingdom
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/thriva/refs/heads/main/json-schema/thriva-platform-api-schemas.json",
"title": "Thriva Platform API V1 - component schemas",
"description": "JSON Schema definitions extracted from the Thriva Platform API OpenAPI (components.schemas). Derived from openapi/thriva-platform-api-openapi.yml",
"x-generated": "2026-07-21",
"x-method": "derived",
"x-source": "openapi/thriva-platform-api-openapi.yml",
"$defs": {
"OAuthToken": {
"type": "object",
"required": [
"access_token",
"scope",
"expires_in",
"token_type"
],
"properties": {
"access_token": {
"description": "The JWT Token",
"type": "string",
"example": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlUtQ3Brdmtaem9OLXhYeFE1bmpyVSJ9.eyJodHRwczovL3Rocml2YS5pby9vcmdhbml6YXRpb24iOiJ0ZXN0LW9yZ2FuaXNhdGlvbiIsImlzcyI6Imh0dHBzOi8vYXV0aC50aHJpdmEuaW8vIiwic3ViIjoiSzJXYVNPM1NCUkpxM1J6R0o1Y3dDYndJdzg3NFNJam9AY2xpZW50cyIsImF1ZCI6Imh0dHBzOi8vYXBpLmV1dzIudGhyaXZhLmlvIiwiaWF0IjoxNjU2MzIwODY1LCJleHAiOjE2NTYzMzE2NjUsImF6cCI6IlEyVGFTTzNTQlJVcTNaekdKNWN3R2J3SXc4OMKjU0lqbyIsInNjb3BlIjoib3JkZXI6Y3JlYXRlIG9yZGVyOnJlYWQgdGVzdF9wcm9maWxlOnJlYWQgcmVzdWx0X3NldDpyZWFkIiwiZ3R5IjoiY2xpZW50LWNyZWRlbnRpYWxzIn0.ADyC6-FZQu7hb-QTXifoECy3Nhmf58KIu0skAs2G7EGGgNIk3SNeS0QVSY7AOp9qWsfnqb6y3jakobkNHwXUwW_MYNePernmyOYGalXG-pGw0p2v-R0QwHQ_GKfcZCiF4Pzpu1EywHQuuqE68IWy4H8mCox32BsIQZRFTCPp3eaVML2huicrWDgGCFoT5PWwloLSrBpuZkPeP7pZvV6SM_pJoChL26QqdPBJ09pG3_6trJvummyadGptkupV84K4wuxfKXDg0TUSQhKJWJENTYDyj8WG5OlR5a4IQ-u6xRixxahD_Wc4S5Y4LYTSCfWPstRQvrHJxAy4d2sFaF1Ztg"
},
"scope": {
"description": "The permissions of the token",
"type": "string",
"example": "order:create order:read test_profile:read result_set:read"
},
"expires_in": {
"description": "Length of time in seconds within which the token expires",
"type": "integer",
"example": 10800
},
"token_type": {
"description": "Description of what type of token this is",
"type": "string",
"example": "Bearer"
}
}
},
"OAuthBadRequestError": {
"type": "object",
"required": [
"error",
"error_description"
],
"properties": {
"error": {
"type": "string",
"description": "Error type",
"example": "invalid_request"
},
"error_description": {
"type": "string",
"description": "Error description",
"example": "Missing required parameter: grant_type"
}
}
},
"OAuthUnauthorizedError": {
"type": "object",
"required": [
"error",
"error_description"
],
"properties": {
"error": {
"type": "string",
"description": "Error type",
"example": "access_denied"
},
"error_description": {
"type": "string",
"description": "Error description",
"example": "Unauthorized"
}
}
},
"OAuthForbiddenError": {
"type": "object",
"required": [
"error",
"error_description",
"error_uri"
],
"properties": {
"error": {
"type": "string",
"description": "Error type",
"example": "unauthorized_client"
},
"error_description": {
"type": "string",
"description": "Error description",
"example": "Grant type 'incorrect_grant_type' not allowed for the client."
},
"error_uri": {
"type": "string",
"description": "URI for the documentation",
"example": "https://auth0.com/docs/clients/client-grant-types"
}
}
},
"Pagination": {
"type": "object",
"required": [
"self",
"current"
],
"properties": {
"self": {
"type": "string",
"description": "The link that generated the current response document",
"example": "http://example.com/articles?page[number]=3&page[size]=1"
},
"current": {
"type": "string",
"description": "The link for the current page",
"example": "http://example.com/articles?page[number]=3&page[size]=1"
},
"first": {
"type": "string",
"description": "The link to the first page",
"example": "http://example.com/articles?page[number]=1&page[size]=1"
},
"prev": {
"type": "string",
"description": "The link to the previous page",
"example": "http://example.com/articles?page[number]=2&page[size]=1"
},
"next": {
"type": "string",
"description": "The link to the next page",
"example": "http://example.com/articles?page[number]=4&page[size]=1"
},
"last": {
"type": "string",
"description": "The link to the last page",
"example": "http://example.com/articles?page[number]=13&page[size]=1"
}
}
},
"Meta": {
"type": "object",
"required": [
"pagination"
],
"properties": {
"pagination": {
"type": "object",
"required": [
"current",
"records"
],
"properties": {
"current": {
"type": "number",
"description": "The current page number of the request",
"example": 5
},
"records": {
"type": "number",
"description": "The total number of records based on current filters",
"example": 100
},
"first": {
"type": "number",
"description": "The first page number",
"example": 1
},
"prev": {
"type": "number",
"description": "The the previous page number",
"example": 4
},
"next": {
"type": "number",
"description": "The next page number",
"example": 6
},
"last": {
"type": "number",
"description": "The last page number",
"example": 10
}
}
}
}
},
"Order": {
"type": "object",
"required": [
"id",
"type",
"attributes",
"relationships"
],
"properties": {
"id": {
"description": "Unique identifier for this Order",
"type": "string",
"example": "O-8719EAF0-6B39-46B5-86DA-AF11155F3B65"
},
"type": {
"description": "Specifies what type of object this is",
"type": "string",
"enum": [
"order"
],
"example": "order"
},
"attributes": {
"type": "object",
"properties": {
"delivery_address": {
"$ref": "#/components/schemas/DeliveryAddress"
},
"fulfillment_orders": {
"description": "Array of IDs for the linked Fulfillment Orders linked to this Order",
"type": "array",
"items": {
"type": "string",
"example": "FO-8719EAF0-6B39-46B5-86DA-AF11155F3B65"
}
},
"tests": {
"description": "Array of IDs for the linked Tests linked to this Order",
"type": "array",
"items": {
"type": "string",
"example": "T-8719EAF0-6B39-46B5-86DA-AF11155F3B65"
}
},
"outbound_tracking_code": {
"description": "The tracking code for the outbound delivery to the subject",
"type": "string",
"example": "9876543212345A67B8CDE"
},
"placed_at": {
"description": "The date and time, in ISO 8601 format, at which the Order was placed.",
"type": "string",
"example": "2021-06-11T08:00:00Z"
},
"fulfilled_at": {
"description": "The date and time, in ISO 8601 format, at which the Order was dispatched to the subject",
"type": "string",
"example": "2021-06-11T10:00:00Z"
}
}
}
}
},
"BulkOrder": {
"type": "object",
"required": [
"id",
"type",
"attributes",
"relationships"
],
"properties": {
"id": {
"description": "Unique identifier for this Bulk Order",
"type": "string",
"example": "BO-8719EAF0-6B39-46B5-86DA-AF11155F3B65"
},
"type": {
"description": "Specifies what type of object this is",
"type": "string",
"enum": [
"bulk_order"
],
"example": "bulk_order"
},
"attributes": {
"type": "object",
"properties": {
"delivery_address": {
"$ref": "#/components/schemas/DeliveryAddress"
},
"fulfillment_orders": {
"description": "Array of IDs for the linked Fulfillment Orders linked to this Order",
"type": "array",
"items": {
"type": "string",
"example": "FO-8719EAF0-6B39-46B5-86DA-AF11155F3B65"
}
},
"kits": {
"$ref": "#/components/schemas/Kits"
},
"outbound_tracking_code": {
"description": "The tracking code for the outbound delivery to the delivery address",
"type": "string",
"example": "9876543212345A67B8CDE"
},
"placed_at": {
"description": "The date and time, in ISO 8601 format, at which the Bulk Order was placed.",
"type": "string",
"example": "2024-06-11T08:00:00Z"
},
"fulfilled_at": {
"description": "The date and time, in ISO 8601 format, at which the Order was dispatched",
"type": "string",
"example": "2024-06-11T10:00:00Z"
},
"approved_at": {
"description": "The date and time, in ISO 8601 format, at which the Bulk Order was approved",
"type": "string",
"example": "2024-06-11T09:00:00Z"
},
"rejected_at": {
"description": "The date and time, in ISO 8601 format, at which the Bulk Order was rejected",
"type": "string",
"example": "2024-06-11T09:00:00Z"
},
"approval_status": {
"description": "The approval status of the Bulk Order",
"type": "string",
"enum": [
"pending",
"approved",
"rejected"
],
"example": "approved"
},
"status": {
"description": "The status of the Bulk Order",
"type": "string",
"enum": [
"validating",
"resolving_skus",
"awaiting_approval",
"creating_fulfillment_orders",
"awaiting_fulfillment",
"processed",
"complete",
"rejected",
"failed"
],
"example": "complete"
}
}
},
"relationships": {
"type": "object",
"properties": {
"sample_references": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"description": "Bulk Order Sample Reference ID",
"type": "string",
"example": "T00240XPA3"
},
"type": {
"type": "string",
"example": "bulk_order_sample_reference"
}
}
}
}
}
}
}
}
}
},
"SampleReference": {
"type": "object",
"required": [
"id",
"type",
"attributes"
],
"properties": {
"id": {
"description": "The identifier for a sample reference",
"type": "string",
"example": "T00240XPA3"
},
"type": {
"type": "string",
"enum": [
"bulk_order_sample_reference"
]
},
"attributes": {
"type": "object",
"properties": {
"kit_expiry": {
"description": "The expiry date of the test kit with this sample reference. The sample reference cannot be used to create a Test past this date. The lab will not analyse the sample past this date.",
"type": "string",
"format": "date",
"example": "2025-10-15"
},
"is_expired": {
"description": "If the test kit with this sample reference has expired",
"type": "boolean",
"example": false
},
"is_consumed": {
"description": "If the sample reference has been used to create a Test",
"type": "boolean",
"example": false
},
"sample_collection_method": {
"description": "The sample collection method for this sample reference",
"type": "string",
"enum": [
"finger_prick",
"swab",
"venous",
"automatic_capillary"
],
"example": "finger_prick"
},
"test_profiles": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"LFT",
"LIPP"
]
}
}
}
}
},
"FulfillmentOrder": {
"type": "object",
"required": [
"id",
"type",
"attributes"
],
"properties": {
"id": {
"description": "Immutable identifier for a fulfillment order",
"type": "string",
"example": "FO-8719EAF0-6B39-46B5-86DA-AF11155F3B65"
},
"type": {
"type": "string",
"example": "fulfillment_order"
},
"attributes": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"fulfilling",
"complete",
"failed"
]
},
"placed_at": {
"type": "string",
"description": "The date and time, in ISO 8601 format, at which the Fulfillment Order was placed.",
"example": "2021-06-11T08:00:00Z"
},
"dispatched_at": {
"type": "string",
"description": "The date and time, in ISO 8601 format, at which the Fulfillment Order was dispatched.",
"example": "2021-06-11T08:00:00Z"
}
}
}
}
},
"Test": {
"type": "object",
"required": [
"id",
"type",
"attributes"
],
"properties": {
"id": {
"description": "Immutable identifier for test",
"type": "string",
"example": "T-8719EAF0-6B39-46B5-86DA-AF11155F3B65"
},
"type": {
"type": "string",
"example": "test"
},
"attributes": {
"type": "object",
"properties": {
"test_profiles": {
"type": "array",
"items": {
"type": "string"
},
"example": [
"LFT",
"LIPP"
]
},
"user_id": {
"type": "string",
"description": "The user id if a user is attached to the test (optional)",
"example": "U-8719EAF0-6B39-46B5-86DA-AF11155F3B65"
},
"subject": {
"type": "object",
"properties": {
"contact": {
"description": "Contact details the subject.",
"type": "object",
"required": [
"first_name",
"last_name"
],
"properties": {
"first_name": {
"description": "The subject's first name.",
"type": "string",
"example": "Frasier"
},
"last_name": {
"description": "The subject's last name.",
"type": "string",
"example": "Crane"
},
"email": {
"description": "The subject's email address.",
"type": "string",
"example": "frasier.crane@example.com"
},
"mobile_phone_number": {
"description": "The subject's mobile phone number. Only GB numbers in the format +447123456789",
"type": "string",
"example": "+447123456789"
}
}
},
"date_of_birth": {
"description": "The date the subject was born, in ISO8601 format.",
"type": "string",
"example": "1953-03-07"
},
"sex": {
"description": "The sex of the subject",
"type": "string",
"enum": [
"female",
"male"
],
"example": "female"
}
}
},
"created_at": {
"type": "string",
"description": "The date and time, in ISO 8601 format, at which the test resource was created",
"example": "2021-06-11T06:00:00Z"
},
"status": {
"description": "Overview of the test's current state",
"type": "string",
"enum": [
"awaiting_sample_at_lab",
"processing_sample",
"complete",
"failed"
]
},
"inbound_tracking_code": {
"description": "Tracking code for the kit being sent from the subject to the lab for processing",
"type": "string",
"example": "ZB123456789GB"
},
"result_set_id": {
"description": "Immutable identifier for the results of an Order. Only present when results are available.",
"type": "string",
"example": "R-1E0EEDB2-E790-4D16-9EE7-14381E807B7E"
},
"sample_collection_methods": {
"type": "array",
"items": {
"type": "object",
"properties": {
"collection_method": {
"description": "The method used for sample collection.",
"type": "string",
"example": "finger_prick"
},
"sample_type": {
"description": "The type of sample collected.",
"type": "string",
"example": "blood"
}
}
}
},
"sample_reference": {
"description": "The reference number that will appear on the test kit is a unique number assigned to each kit. This reference will also be used by the lab to refer to the test results if a result were to be escalated due to falling outside of the expected ranges",
"type": "string",
"example": "T123456789"
},
"product_code": {
"description": "The identifier for the Product used to order the Test. Products are optionally made available to API partners.",
"type": "string",
"example": "P-12345"
},
"sample_booked_in_at": {
"type": "string",
"description": "The date and time, in ISO 8601 format, at which the test kit was received by the lab",
"example": "2021-06-11T06:00:00Z"
},
"completed_at": {
"type": "string",
"description": "The date and time, in ISO 8601 format, at which the Test was completed.",
"example": "2021-06-11T08:00:00Z"
},
"failure_cause": {
"type": "string",
"description": "If state is 'failed', this field describes the failure cause",
"example": "invalid collection method: venous, for test profile: OEST"
},
"source_test": {
"type": "object",
"nullable": true,
"properties": {
"reissue_reason": {
"type": "string",
"enum": [
"failed_analysis",
"failed_fulfillment",
"failed_sample_collection",
"failed_sample_return"
],
"example": "failed_fulfillment"
},
"id": {
"description": "The ID of the source test that was reissued",
"type": "string",
"example": "TST-04BD173A-770D-4C8F-8CEC-3C24FBF81692"
}
}
},
"reissued_test": {
"type": "object",
"nullable": true,
"properties": {
"reissue_reason": {
"type": "string",
"enum": [
"failed_analysis",
"failed_fulfillment",
"failed_sample_collection",
"failed_sample_return"
],
"example": "failed_analysis"
},
"id": {
"description": "The ID of the reissued test",
"type": "string",
"example": "TST-13F1ABE9-E2F4-4FF1-A5C4-53E0629C5D0B"
}
}
},
"bulk_order_id": {
"type": "string",
"description": "The ID of the Bulk Order this Test is associated with"
}
}
}
}
},
"TestProfile": {
"type": "object",
"required": [
"id",
"type",
"attributes",
"relationships"
],
"properties": {
"id": {
"description": "Immutable identifier for Test Profile",
"type": "string",
"example": "AB12"
},
"type": {
"type": "string",
"example": "test_profile"
},
"attributes": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "B12 (Active)"
},
"code": {
"type": "string",
"example": "AB12"
},
"description": {
"type": "string",
"example": "This is a short description of the test profile, how it affects the human body, and why it is helpful to be monitored."
},
"sample_type": {
"type": "string",
"enum": [
"blood",
"saliva"
]
},
"collection_methods": {
"type": "array",
"items": {
"example": [
"finger_prick",
"venous"
]
}
},
"collection_tube": {
"type": "string",
"description": "The collection tube needed to test this test profile",
"example": "EDTA/Purple tube"
}
}
},
"relationships": {
"type": "object",
"properties": {
"biomarkers": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"description": "Biomarker ID",
"type": "string",
"example": "ALP"
},
"type": {
"type": "string",
"example": "biomarker"
}
}
}
}
}
}
}
}
}
},
"Biomarker": {
"type": "object",
"required": [
"id",
"type",
"attributes"
],
"properties": {
"id": {
"description": "Immutable identifier for Biomarker",
"type": "string",
"example": "ALP"
},
"type": {
"type": "string",
"example": "biomarker"
},
"attributes": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "Alkaline phosphatase"
},
"code": {
"type": "string",
"example": "ALP"
}
}
}
}
},
"Reporter": {
"type": "object",
"required": [
"id",
"type",
"attributes"
],
"properties": {
"id": {
"description": "Immutable identifier for Reporter",
"type": "string",
"example": "RPTR-B4D0F0E2-C612-407C-A8FC-F9F31F44F226"
},
"type": {
"type": "string",
"example": "reporter"
},
"attributes": {
"type": "object",
"properties": {
"title": {
"type": "string",
"enum": [
"Dr Mr Mrs Ms Miss Mx"
],
"example": "Dr"
},
"first_name": {
"type": "string",
"example": "John"
},
"last_name": {
"type": "string",
"example": "Doe"
},
"email": {
"type": "string",
"example": "john.doe@example.com"
}
}
}
}
},
"BiomarkerComment": {
"description": "Beta feature, disabled by default. When not enabled for your organisation, `report.relationships.biomarker_comments.data` will be an empty array.",
"type": "object",
"required": [
"id",
"type",
"attributes"
],
"properties": {
"id": {
"description": "Immutable identifier for Biomarker Comment",
"type": "string",
"example": "1286"
},
"type": {
"type": "string",
"example": "biomarker_comment"
},
"attributes": {
"type": "object",
"properties": {
"comment": {
"description": "Beta feature, disabled by default. Automated rule-derived annotation for the associated biomarker result, based on the biomarker value, subject sex, and any previous result. Not authored by the clinician; the clinician's narrative is on `report.attributes.report_summary`.",
"type": "string",
"example": "Your ferritin levels are low. We would advise following up with your GP."
}
}
},
"relationships": {
"type": "object",
"properties": {
"biomarker_result": {
"$ref": "#/components/schemas/BiomarkerResult"
}
}
}
}
},
"Report": {
"type": "object",
"required": [
"id",
"type",
"attributes",
"relationships"
],
"properties": {
"id": {
"description": "Report ID",
"type": "string",
"example": "REP-CFD18A5C-4F68-4C45-BFBC-7D9A1C35A4C6"
},
"type": {
"type": "string",
"example": "report"
},
"attributes": {
"type": "object",
"properties": {
"report_summary": {
"description": "Clinician-authored narrative for the report. Populated once `status` is `complete`.",
"type": "string",
"example": "Hi John, these results are excellent."
},
"status": {
"description": "Status of the report",
"type": "string",
"enum": [
"complete"
],
"example": "complete"
}
}
},
"relationships": {
"type": "object",
"properties": {
"reporter": {
"$ref": "#/components/schemas/Reporter"
},
"biomarker_comments": {
"$ref": "#/components/schemas/BiomarkerComment"
}
}
}
}
},
"ResultSet": {
"type": "object",
"required": [
"id",
"type",
"attributes",
"relationships"
],
"properties": {
"id": {
"description": "Immutable identifier for Result Set",
"type": "string",
"example": "RS-8719EAF0-6B39-46B5-86DA-AF11155F3B65"
},
"type": {
"type": "string",
"example": "result_set"
},
"attributes": {
"type": "object",
"properties": {
"result_date": {
"description": "DateTime (in ISO8601 format) for when the result has been created",
"type": "string",
"example": "2023-02-12T11:00:00Z"
},
"sample_taken_at": {
"description": "DateTime (in ISO8601 format) for when the sample was received by the lab",
"type": "string",
"example": "2023-02-11T08:00:00Z"
},
"sample_booked_in_at": {
"description": "DateTime (in ISO8601 format) for when the sample was received by the lab and ready to be analysed",
"type": "string",
"example": "2023-02-12T10:00:00Z"
},
"sample_processed_at": {
"description": "DateTime (in ISO8601 format) for when the sample was analysed at the lab, and results have been made available",
"type": "string",
"example": "2023-02-12T11:00:00Z"
},
"sample_reference": {
"description": "The reference number that will appear on the test kit is a unique number assigned to each kit. This reference will also be used by the lab to refer to the test results if a result were to be escalated due to falling outside of the expected ranges",
"type": "string",
"example": "T123456789"
},
"status": {
"description": "The current status of the Result Set",
"type": "string",
"enum": [
"complete",
"results_to_follow"
]
}
}
},
"relationships": {
"type": "object",
"properties": {
"test_profiles": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"description": "Test Profile ID",
"type": "string",
# --- truncated at 32 KB (64 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/thriva/refs/heads/main/json-schema/thriva-platform-api-schemas.json