---
title: "Register Testkit"
method: POST
path: "/v3/order/testkit/register"
tags: ["order"]
---

# Register Testkit

`POST /v3/order/testkit/register`

## Request body

- RegisterTestkitRequest
  - `user_id` string, uuid, nullable — The user ID of the patient. If it differs from the user currently associated with the unregistered testkit order, the order is rebound to this user at registration time. The user must exist on the same team as the order. If omitted, the order's existing user is kept.
  - `sample_id` string, required
  - `patient_details` PatientDetailsWithValidation, required — Patient details with validation for first_name, last_name, email, and dob.
    - `first_name` string, required
    - `last_name` string, required
    - `dob` string, date, required
    - `gender` 'female' | 'male' | 'other' | 'unknown', required — ℹ️ This enum is non-exhaustive.
    - `phone_number` string, required
    - `email` string, email, required
    - `medical_proxy` GuarantorDetails
      - `first_name` string, required
      - `last_name` string, required
      - `address` Address, required
        - `first_line` string, required
        - `second_line` string, nullable
        - `country` string, required
        - `zip` string, required
        - `city` string, required
        - `state` string, required
        - `access_notes` string, nullable
      - `phone_number` string, required
      - `household_income` integer, nullable
      - `household_size` integer, nullable
      - `email` string, nullable
    - `race` 'african_american_or_black' | 'asian' | 'indigenous_native_american_alaska_native' | 'other' | 'pacific_islander_or_hawaiian' | 'white_caucasian' — ℹ️ This enum is non-exhaustive.
    - `ethnicity` 'hispanic' | 'non_hispanic' | 'ashkenazi_jewish' | 'other' — ℹ️ This enum is non-exhaustive.
    - `sexual_orientation` 'lesbian_gay_or_homosexual' | 'heterosexual_or_straight' | 'bisexual' | 'dont_know' | 'other' — ℹ️ This enum is non-exhaustive.
    - `gender_identity` 'male' | 'female' | 'female_to_male_ftm_transgender_male_trans_man' | 'male_to_female_mtf_transgender_female_trans_woman' | 'genderqueer' | 'other' — ℹ️ This enum is non-exhaustive.
    - `household_income` integer, nullable — Household income in USD. If not provided, will be set to None
    - `household_size` integer, nullable — Household size. If not provided, will be set to None
  - `patient_address` PatientAddressWithValidation, required
    - `receiver_name` string
    - `first_line` string, required
    - `second_line` string, nullable
    - `city` string, required
    - `state` string, required
    - `zip` string, required
    - `country` string, required
    - `access_notes` string, nullable
    - `phone_number` string, nullable
  - `physician` PhysicianCreateRequestBase
    - `first_name` string, required
    - `last_name` string, required
    - `email` string, nullable
    - `npi` string, required
    - `licensed_states` string[]
  - `health_insurance` HealthInsuranceCreateRequest
    - `front_image` union — An image of the front of the patient insurance card.
      - Jpeg
        - `content` string, binary, required
        - `content_type` 'image/jpeg', required
      - Png
        - `content` string, binary, required
        - `content_type` 'image/png', required
    - `back_image` union — An image of the back of the patient insurance card.
      - Jpeg
        - `content` string, binary, required
        - `content_type` 'image/jpeg', required
      - Png
        - `content` string, binary, required
        - `content_type` 'image/png', required
    - `patient_signature_image` union — An image of the patient signature for health insurance billing.
      - Jpeg
        - `content` string, binary, required
        - `content_type` 'image/jpeg', required
      - Png
        - `content` string, binary, required
        - `content_type` 'image/png', required
    - `subjective` string, nullable — Textual description of what are the patient symptoms and attempted treatments.
    - `assessment_plan` string, nullable — Textual description of what are the physician assessments and testing plans.
    - `payor_code` string, nullable — Unique identifier representing a specific Health Insurance.
    - `insurance_id` string, nullable — Insurance unique number assigned to a patient, usually present on the insurance card.
    - `responsible_relationship` 'Self' | 'Spouse' | 'Other' — ℹ️ This enum is non-exhaustive.
    - `responsible_details` VitalCoreSchemasDbSchemasLabTestHealthInsurancePersonDetails
      - `first_name` string, required
      - `last_name` string, required
      - `address` Address, required
        - `first_line` string, required
        - `second_line` string, nullable
        - `country` string, required
        - `zip` string, required
        - `city` string, required
        - `state` string, required
        - `access_notes` string, nullable
      - `phone_number` string, required
      - `phone_type` string
    - `diagnosis_codes` string[], nullable — Diagnosis codes for insurance billing.
  - `consents` Consent[]
    - `consentType` 'terms-of-use' | 'telehealth-informed-consent' | 'mobile-terms-and-conditions' | 'notice-of-privacy-practices' | 'privacy-policy' | 'hipaa-authorization', required — ℹ️ This enum is non-exhaustive.
    - `version` string
    - `timeOfConsent` string, date-time

## Response `200`

Successful Response

- PostOrderResponse
  - `order` ClientFacingOrder, required
    - `user_id` string, uuid, required — User id returned by vital create user request. This id should be stored in your database against the user and used for all interactions with the vital api.
    - `id` string, uuid, required — The Vital Order ID
    - `team_id` string, uuid, required — Your team id.
    - `patient_details` ClientFacingPatientDetailsCompatible, required
      - `first_name` string, nullable
      - `last_name` string, nullable
      - `dob` string, date-time, required
      - `gender` string, required
      - `phone_number` string, nullable
      - `email` string, nullable
      - `medical_proxy` GuarantorDetails
        - `first_name` string, required
        - `last_name` string, required
        - `address` Address, required
          - `first_line` string, required
          - `second_line` string, nullable
          - `country` string, required
          - `zip` string, required
          - `city` string, required
          - `state` string, required
          - `access_notes` string, nullable
        - `phone_number` string, required
        - `household_income` integer, nullable
        - `household_size` integer, nullable
        - `email` string, nullable
      - `race` 'african_american_or_black' | 'asian' | 'indigenous_native_american_alaska_native' | 'other' | 'pacific_islander_or_hawaiian' | 'white_caucasian' — ℹ️ This enum is non-exhaustive.
      - `ethnicity` 'hispanic' | 'non_hispanic' | 'ashkenazi_jewish' | 'other' — ℹ️ This enum is non-exhaustive.
      - `sexual_orientation` 'lesbian_gay_or_homosexual' | 'heterosexual_or_straight' | 'bisexual' | 'dont_know' | 'other' — ℹ️ This enum is non-exhaustive.
      - `gender_identity` 'male' | 'female' | 'female_to_male_ftm_transgender_male_trans_man' | 'male_to_female_mtf_transgender_female_trans_woman' | 'genderqueer' | 'other' — ℹ️ This enum is non-exhaustive.
    - `patient_address` PatientAddressCompatible, required
      - `receiver_name` string
      - `first_line` string, required
      - `second_line` string, nullable
      - `city` string, required
      - `state` string, required
      - `zip` string, required
      - `country` string, required
      - `access_notes` string, nullable
      - `phone_number` string, nullable
    - `lab_test` ClientFacingLabTest, required
      - `id` string, uuid, required
      - `slug` string, required
      - `name` string, required
      - `sample_type` 'dried_blood_spot' | 'arm_collector' | 'serum' | 'saliva' | 'urine' | 'stool', required — The type of sample used to perform a lab test. ℹ️ This enum is non-exhaustive.
      - `method` 'testkit' | 'walk_in_test' | 'at_home_phlebotomy' | 'on_site_collection', required — The method used to perform a lab test. ℹ️ This enum is non-exhaustive.
      - `price` number, required
      - `is_active` boolean, required — Deprecated. Use status instead.
      - `status` 'active' | 'pending_approval' | 'inactive', required — ℹ️ This enum is non-exhaustive.
      - `fasting` boolean — Defines whether a lab test requires fasting.
      - `lab` ClientFacingLab, required
        - `id` integer, required
        - `slug` string, required
        - `name` string, required
        - `first_line_address` string, required
        - `city` string, required
        - `zipcode` string, required
        - `collection_methods` LabTestCollectionMethod[], required
        - `sample_types` LabTestSampleType[], required
        - `logo_url` string, nullable
      - `markers` ClientFacingMarker[], nullable, required
        - `id` integer, required
        - `name` string, required
        - `slug` string, required
        - `description` string, nullable
        - `lab_id` integer, nullable
        - `provider_id` string, nullable
        - `type` 'biomarker' | 'panel' — ℹ️ This enum is non-exhaustive.
        - `unit` string, nullable
        - `price` string, nullable
        - `aoe` AoE
          - `questions` Question[], required
            - `id` integer, required
            - `required` boolean, required
            - `code` string, required
            - `value` string, required
            - `type` 'choice' | 'text' | 'numeric' | 'multi_choice', required — ℹ️ This enum is non-exhaustive.
            - `sequence` integer, required
            - `answers` Answer[], required
              - …
            - `constraint` string, nullable
            - `default` string, nullable
        - `a_la_carte_enabled` boolean
        - `common_tat_days` integer, nullable
        - `worst_case_tat_days` integer, nullable
        - `is_orderable` boolean, nullable
      - `is_delegated` boolean — Deprecated and always false. Delegation is now at the lab account level. Used to denote whether a lab test requires using non-Vital physician networks.
      - `auto_generated` boolean — Whether the lab test was auto-generated by Vital
      - `has_collection_instructions` boolean, nullable — Whether or not the lab test has collection instructions.
      - `common_tat_days` integer, nullable — The common turnaround time in days for the lab test. This is the expected time for the lab to process the test and return results.
      - `worst_case_tat_days` integer, nullable — The worst-case turnaround time in days for the lab test. This is the maximum time the lab may take to process the test and return results.
    - `details` union, required
      - ClientFacingWalkInOrderDetails
        - `type` 'walk_in_test', required
        - `data` ClientFacingWalkInTestOrder — Schema for a walk-in test order in the client facing API. To be used as part of a ClientFacingOrder.
          - `id` string, uuid, required — The Vital walk-in test Order ID
          - `created_at` string, date-time, required
          - `updated_at` string, date-time, required
          - `appointment_id` string, uuid, nullable
      - ClientFacingTestKitOrderDetails
        - `type` 'testkit', required
        - `data` ClientFacingTestkitOrder — Schema for a testkit order in the client facing API. To be used as part of a ClientFacingOrder.
          - `id` string, uuid, required — The Vital TestKit Order ID
          - `shipment` ClientFacingShipment, required — Schema for a Shipment in the client facing API. To be used as part of a ClientFacingTestkitOrder.
            - `id` string, uuid, required — The Vital Shipment ID
            - `outbound_tracking_number` string, nullable, required — Tracking number for delivery to customer
            - `outbound_tracking_url` string, nullable, required — Tracking url for delivery to customer
            - `inbound_tracking_number` string, nullable, required — Tracking number for delivery to lab
            - `inbound_tracking_url` string, nullable, required — Tracking url for delivery to lab
            - `outbound_courier` string, nullable, required — Courier used for delivery to customer
            - `inbound_courier` string, nullable, required — Courier used for delivery to lab
            - `notes` string, nullable, required — Notes associated to the Vital shipment
          - `created_at` string, date-time, required
          - `updated_at` string, date-time, required
      - ClientFacingAtHomePhlebotomyOrderDetails
        - `type` 'at_home_phlebotomy', required
        - `data` ClientFacingAtHomePhlebotomyOrder — Schema for a at-home-phlebotomy test order in the client facing API. To be used as part of a ClientFacingOrder.
          - `id` string, uuid, required — The Vital at-home phlebotomy Order ID
          - `appointment_id` string, uuid, nullable
          - `created_at` string, date-time, required
          - `updated_at` string, date-time, required
      - ClientFacingOnSiteCollectionOrderDetails
        - `type` 'on_site_collection', required
        - `data` ClientFacingOnSiteCollectionOrder — Schema for an on-site collection order in the client facing API. To be used as part of a ClientFacingOrder.
          - `id` string, uuid, required — The Junction on-site collection Order ID
          - `created_at` string, date-time, required
          - `updated_at` string, date-time, required
    - `sample_id` string, nullable, required — Sample ID
    - `notes` string, nullable, required — Notes associated with the order
    - `clinical_notes` string, nullable
    - `created_at` string, date-time, required — When your order was created
    - `updated_at` string, date-time, required — When your order was last updated.
    - `events` ClientFacingOrderEvent[], required
      - `id` integer, required
      - `created_at` string, date-time, required
      - `status` 'received.walk_in_test.ordered' | 'received.walk_in_test.requisition_created' | 'received.walk_in_test.requisition_bypassed' | 'completed.walk_in_test.completed' | 'sample_with_lab.walk_in_test.partial_results' | 'failed.walk_in_test.sample_error' | 'cancelled.walk_in_test.cancelled' | 'collecting_sample.walk_in_test.appointment_pending' | 'collecting_sample.walk_in_test.appointment_scheduled' | 'collecting_sample.walk_in_test.appointment_cancelled' | 'collecting_sample.walk_in_test.redraw_available' | 'received.at_home_phlebotomy.ordered' | 'received.at_home_phlebotomy.requisition_created' | 'received.at_home_phlebotomy.requisition_bypassed' | 'collecting_sample.at_home_phlebotomy.appointment_pending' | 'collecting_sample.at_home_phlebotomy.appointment_scheduled' | 'collecting_sample.at_home_phlebotomy.draw_completed' | 'collecting_sample.at_home_phlebotomy.appointment_cancelled' | 'completed.at_home_phlebotomy.completed' | 'sample_with_lab.at_home_phlebotomy.partial_results' | 'cancelled.at_home_phlebotomy.cancelled' | 'failed.at_home_phlebotomy.sample_error' | 'received.testkit.ordered' | 'received.testkit.awaiting_registration' | 'received.testkit.requisition_created' | 'received.testkit.requisition_bypassed' | 'received.testkit.registered' | 'collecting_sample.testkit.transit_customer' | 'collecting_sample.testkit.out_for_delivery' | 'collecting_sample.testkit.with_customer' | 'collecting_sample.testkit.transit_lab' | 'sample_with_lab.testkit.delivered_to_lab' | 'sample_with_lab.testkit.lab_processing_blocked' | 'completed.testkit.completed' | 'failed.testkit.failure_to_deliver_to_customer' | 'failed.testkit.failure_to_deliver_to_lab' | 'failed.testkit.sample_error' | 'failed.testkit.lost' | 'cancelled.testkit.cancelled' | 'cancelled.testkit.do_not_process' | 'collecting_sample.testkit.problem_in_transit_customer' | 'collecting_sample.testkit.problem_in_transit_lab' | 'received.on_site_collection.ordered' | 'received.on_site_collection.requisition_created' | 'received.on_site_collection.requisition_bypassed' | 'sample_with_lab.on_site_collection.draw_completed' | 'completed.on_site_collection.completed' | 'cancelled.on_site_collection.cancelled' | 'sample_with_lab.on_site_collection.partial_results' | 'failed.on_site_collection.sample_error' | 'completed.walk_in_test.corrected' | 'completed.at_home_phlebotomy.corrected' | 'completed.on_site_collection.corrected' | 'completed.testkit.corrected', required — ℹ️ This enum is non-exhaustive.
      - `status_detail` 'fulfillment_error' | 'date_of_collection_unspecified' | 'demographic_information_unspecified' | 'demographic_information_mismatch' | 'sample_quantity_not_sufficient' | 'sample_contaminated' | 'sample_stability_exceeded' | 'sample_hemolyzed' | 'sample_improper_collection' — A descriptive-only additional field to be used in combination with OrderStatus. Exposed in the API. ℹ️ This enum is non-exhaustive.
    - `status` 'received' | 'collecting_sample' | 'sample_with_lab' | 'completed' | 'cancelled' | 'failed' — ℹ️ This enum is non-exhaustive.
    - `last_event` ClientFacingOrderEvent, required
      - `id` integer, required
      - `created_at` string, date-time, required
      - `status` 'received.walk_in_test.ordered' | 'received.walk_in_test.requisition_created' | 'received.walk_in_test.requisition_bypassed' | 'completed.walk_in_test.completed' | 'sample_with_lab.walk_in_test.partial_results' | 'failed.walk_in_test.sample_error' | 'cancelled.walk_in_test.cancelled' | 'collecting_sample.walk_in_test.appointment_pending' | 'collecting_sample.walk_in_test.appointment_scheduled' | 'collecting_sample.walk_in_test.appointment_cancelled' | 'collecting_sample.walk_in_test.redraw_available' | 'received.at_home_phlebotomy.ordered' | 'received.at_home_phlebotomy.requisition_created' | 'received.at_home_phlebotomy.requisition_bypassed' | 'collecting_sample.at_home_phlebotomy.appointment_pending' | 'collecting_sample.at_home_phlebotomy.appointment_scheduled' | 'collecting_sample.at_home_phlebotomy.draw_completed' | 'collecting_sample.at_home_phlebotomy.appointment_cancelled' | 'completed.at_home_phlebotomy.completed' | 'sample_with_lab.at_home_phlebotomy.partial_results' | 'cancelled.at_home_phlebotomy.cancelled' | 'failed.at_home_phlebotomy.sample_error' | 'received.testkit.ordered' | 'received.testkit.awaiting_registration' | 'received.testkit.requisition_created' | 'received.testkit.requisition_bypassed' | 'received.testkit.registered' | 'collecting_sample.testkit.transit_customer' | 'collecting_sample.testkit.out_for_delivery' | 'collecting_sample.testkit.with_customer' | 'collecting_sample.testkit.transit_lab' | 'sample_with_lab.testkit.delivered_to_lab' | 'sample_with_lab.testkit.lab_processing_blocked' | 'completed.testkit.completed' | 'failed.testkit.failure_to_deliver_to_customer' | 'failed.testkit.failure_to_deliver_to_lab' | 'failed.testkit.sample_error' | 'failed.testkit.lost' | 'cancelled.testkit.cancelled' | 'cancelled.testkit.do_not_process' | 'collecting_sample.testkit.problem_in_transit_customer' | 'collecting_sample.testkit.problem_in_transit_lab' | 'received.on_site_collection.ordered' | 'received.on_site_collection.requisition_created' | 'received.on_site_collection.requisition_bypassed' | 'sample_with_lab.on_site_collection.draw_completed' | 'completed.on_site_collection.completed' | 'cancelled.on_site_collection.cancelled' | 'sample_with_lab.on_site_collection.partial_results' | 'failed.on_site_collection.sample_error' | 'completed.walk_in_test.corrected' | 'completed.at_home_phlebotomy.corrected' | 'completed.on_site_collection.corrected' | 'completed.testkit.corrected', required — ℹ️ This enum is non-exhaustive.
      - `status_detail` 'fulfillment_error' | 'date_of_collection_unspecified' | 'demographic_information_unspecified' | 'demographic_information_mismatch' | 'sample_quantity_not_sufficient' | 'sample_contaminated' | 'sample_stability_exceeded' | 'sample_hemolyzed' | 'sample_improper_collection' — A descriptive-only additional field to be used in combination with OrderStatus. Exposed in the API. ℹ️ This enum is non-exhaustive.
    - `physician` ClientFacingPhysician
      - `first_name` string, required
      - `last_name` string, required
      - `npi` string, required
    - `health_insurance_id` string, uuid, nullable, required — Vital ID of the health insurance.
    - `requisition_form_url` string, nullable, required — DEPRECATED. Requistion form url.
    - `priority` boolean — Defines whether order is priority or not. For some labs, this refers to a STAT order.
    - `shipping_details` ShippingAddress, required
      - `receiver_name` string, required
      - `first_line` string, required
      - `second_line` string, nullable
      - `city` string, required
      - `state` string, required
      - `zip` string, required
      - `country` string, required
      - `phone_number` string, required
    - `activate_by` string, date, nullable — Schedule an Order to be processed in a future date.
    - `passthrough` string, nullable
    - `billing_type` 'client_bill' | 'commercial_insurance' | 'patient_bill_passthrough' | 'patient_bill' — ℹ️ This enum is non-exhaustive.
    - `icd_codes` string[], nullable
    - `has_abn` boolean, required — Defines whether the order has an Advanced Beneficiary Notice (ABN) form or not.
    - `interpretation` 'normal' | 'abnormal' | 'critical' | 'unknown' — ℹ️ This enum is non-exhaustive.
    - `has_missing_results` boolean, nullable — Defines whether the order result has missing biomarkers.
    - `expected_result_by_date` string, date, nullable — The common-case date by which the order result is expected to be available.
    - `worst_case_result_by_date` string, date, nullable — The latest date by which the order result is expected to be available.
    - `origin` 'initial' | 'redraw' | 'recreation' — ℹ️ This enum is non-exhaustive.
    - `order_transaction` ClientFacingOrderTransaction — Order transaction info.
      - `id` string, uuid, required
      - `status` 'active' | 'completed' | 'cancelled', required — ℹ️ This enum is non-exhaustive.
      - `orders` ClientFacingOrderInTransaction[], required
        - `id` string, uuid, required
        - `low_level_status` 'ordered' | 'requisition_created' | 'requisition_bypassed' | 'transit_customer' | 'out_for_delivery' | 'with_customer' | 'transit_lab' | 'delivered_to_lab' | 'completed' | 'failure_to_deliver_to_lab' | 'failure_to_deliver_to_customer' | 'problem_in_transit_lab' | 'problem_in_transit_customer' | 'sample_error' | 'appointment_scheduled' | 'appointment_cancelled' | 'appointment_pending' | 'draw_completed' | 'cancelled' | 'lost' | 'do_not_process' | 'partial_results' | 'awaiting_registration' | 'registered' | 'redraw_available' | 'corrected' | 'lab_processing_blocked' — ℹ️ This enum is non-exhaustive.
        - `low_level_status_created_at` string, date-time, nullable
        - `origin` 'initial' | 'redraw' | 'recreation' — ℹ️ This enum is non-exhaustive.
        - `parent_id` string, uuid, nullable
        - `created_at` string, date-time, required
        - `updated_at` string, date-time, required
  - `status` string, required
  - `message` string, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/tryvital/apis/junction-api.md) · [All operations](https://skmtc.net/tryvital/apis/junction-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/tryvital/junction-api/revisions/1a22b97afb3a/schema)
