> ## Documentation Index
> Fetch the complete documentation index at: https://api.docs.originone.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Create an order

> Creates an order at a location linked to the API token and returns it. When order matching finds an equivalent existing order, that order is returned instead with status 200 and a `matched` block. The participant’s `identifiers` are included only for tokens that also carry `order.participant.read`. Returns 400 at `/location` or `/package` for a reference that does not exist or is outside the token’s access, without distinguishing the two. A package `name` with no exact match is matched ignoring case; returns 409 when that matches more than one package and nothing else fails. Requires the `order.create` scope.



## OpenAPI

````yaml api-reference/openapi.json POST /api/v2/orders
openapi: 3.1.0
info:
  title: Origin One API
  description: REST API for integrating with the Origin One platform.
  version: '2'
  contact:
    name: Origin One
    url: https://origin.one
    email: support@originone.ai
servers:
  - url: https://api.stage.origin.one
    description: Staging
  - url: https://api.origin.one
    description: Production
security: []
tags:
  - name: agencies
    description: >-
      Regulatory agencies and the job categories they publish; the same for
      every API token.
  - name: jobCategories
    description: >-
      Job categories an agency publishes; an order under FAA, FRA or FTA names
      one.
  - name: clinics
    description: Collection sites where participants are tested.
  - name: companies
    description: Companies linked to your API token.
  - name: locations
    description: Company locations.
  - name: orders
    description: >-
      Drug and alcohol test orders: create them and follow their services to a
      result.
  - name: packages
    description: Packages of services that can be ordered.
  - name: services
    description: Services available to your API token.
  - name: webhooks
    description: Events delivered to the callback URL given when an order was created.
paths:
  /api/v2/orders:
    post:
      tags:
        - orders
      summary: Create an order
      description: >-
        Creates an order at a location linked to the API token and returns it.
        When order matching finds an equivalent existing order, that order is
        returned instead with status 200 and a `matched` block. The
        participant’s `identifiers` are included only for tokens that also carry
        `order.participant.read`. Returns 400 at `/location` or `/package` for a
        reference that does not exist or is outside the token’s access, without
        distinguishing the two. A package `name` with no exact match is matched
        ignoring case; returns 409 when that matches more than one package and
        nothing else fails. Requires the `order.create` scope.
      operationId: createOrder
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderCreate'
      responses:
        '200':
          description: An equivalent existing resource was returned instead; see `matched`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '201':
          description: Created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Order'
        '400':
          description: The request failed validation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: The bearer token is missing, invalid, or expired.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: The API token lacks the required scope.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: The request matched more than one resource.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        default:
          description: Unexpected error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - bearer: []
components:
  schemas:
    OrderCreate:
      type: object
      properties:
        callback:
          $ref: '#/components/schemas/OrderCallbackInput'
          description: Webhook that receives `order.updated` events for this order.
        deliveryMethods:
          minItems: 1
          maxItems: 1
          type: array
          items:
            $ref: '#/components/schemas/DeliveryMethodInput'
          description: >-
            How the participant receives the order. One entry for now; more
            channels may be allowed later.
        agency:
          type: object
          properties:
            code:
              type: string
              minLength: 1
              description: Agency code, in any case.
              example: FMCSA
            id:
              example: '1'
              description: Unique identifier of the agency.
              type: string
          description: >-
            Regulatory agency the order is placed under, one of `GET /agencies`.
            Required when the package includes a DOT service.
        jobCategory:
          type: object
          properties:
            id:
              type: string
              description: Unique identifier of the job category.
              example: 3987402f-e963-45a9-8799-b9ea6621adae
            name:
              type: string
              minLength: 1
              description: Exact job category name; use `id` when names are not unique.
              example: Flight Crewmember
          description: >-
            DOT job category of the participant, one of those `agency` publishes
            (see `GET /agencies`). Accepted only for an order with a DOT service
            under FAA, FRA or FTA, and required there when the package includes
            a DOT urine test.
        location:
          type: object
          properties:
            id:
              type: string
              description: Unique identifier of the location.
              example: '456'
            name:
              type: string
              minLength: 1
              description: Exact location name; use `id` when names are not unique.
              example: Acme Downtown
          description: >-
            Location the order is placed at; must be under a company linked to
            the API token.
        orderMatching:
          $ref: '#/components/schemas/OrderMatchingInput'
          description: >-
            Order matching overrides; defaults to the location or company
            setting.
        otherTestReason:
          type: string
          minLength: 1
          maxLength: 30
          description: >-
            Detail for a `testReason` of `other`, up to 30 characters; not
            allowed with any other `testReason`. Free text when the package
            includes a DOT drug, alcohol or occupational health service;
            otherwise one of `clinical`, `courtOrdered`, `criminalJustice`,
            `diversion`, `drugTreatment`, `employeeAnnual`, `forensic`,
            `personal`, `personalLegal`, `probableCause`, `proficiencyTesting`,
            `reversal`, `sendOut`, `specialForensic`.
          example: courtOrdered
        package:
          type: object
          properties:
            id:
              type: string
              description: Unique identifier of the package.
              example: '789'
            name:
              type: string
              minLength: 1
              description: >-
                Package name, matched exactly first and then ignoring case; use
                `id` when names are not unique.
              example: 5 Panel Urine
          description: Package to order; must be available at the location or its company.
        participant:
          $ref: '#/components/schemas/OrderParticipantInput'
          description: The person being tested.
        requester:
          $ref: '#/components/schemas/OrderRequesterInput'
          description: Who is placing the order.
        settings:
          $ref: '#/components/schemas/OrderSettingsInput'
          description: How the order is completed, and other order settings.
        testReason:
          type: string
          enum:
            - blindSample
            - fitnessForDuty
            - followUp
            - jobTransfer
            - notIndicated
            - other
            - periodic
            - periodicMedical
            - postAccident
            - preEmployment
            - preSiteAccess
            - probation
            - promotion
            - random
            - reasonableSuspicion
            - returnToDuty
            - splitSpecimen
            - sweep
            - unauthorizedTest
            - unknown
            - injury
          description: Reason for the test.
          example: preEmployment
      required:
        - deliveryMethods
        - location
        - package
        - participant
        - requester
        - settings
        - testReason
    Order:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the order.
          example: a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
        object:
          type: string
          description: Object type; always `order`.
          example: order
          enum:
            - order
        code:
          type: string
          description: Human-readable order code.
          example: CPmJ6QbYMo
        agency:
          anyOf:
            - $ref: '#/components/schemas/AgencyReference'
            - type: 'null'
          description: >-
            Regulatory agency the order was placed under; null for a
            non-regulated order.
        clinic:
          anyOf:
            - $ref: '#/components/schemas/ClinicReference'
            - type: 'null'
          description: Collection site; null until one is assigned.
        company:
          anyOf:
            - $ref: '#/components/schemas/CompanyReference'
            - type: 'null'
          description: Company the order was placed for.
        createdAt:
          format: date-time
          type: string
          description: When the order was created.
          example: '2026-09-24T09:00:00.000Z'
        expiresAt:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When the order expires; null when it does not.
          example: '2026-09-24T15:15:00.000Z'
        isFinal:
          type: boolean
          description: >-
            Whether the order has reached an outcome. Cancelled, expired and
            no-show orders report `false`; check `status` for those.
          example: false
        jobCategory:
          anyOf:
            - $ref: '#/components/schemas/JobCategoryReference'
            - type: 'null'
          description: DOT job category of the participant; null when the order has none.
        location:
          anyOf:
            - $ref: '#/components/schemas/LocationReference'
            - type: 'null'
          description: Location the order was placed at.
        matched:
          $ref: '#/components/schemas/OrderMatched'
          description: >-
            Present on a create response when an equivalent existing order was
            returned instead.
        otherTestReason:
          description: Detail for a `testReason` of `other`; null when none was given.
          example: courtOrdered
          type:
            - string
            - 'null'
        packages:
          type: array
          items:
            $ref: '#/components/schemas/PackageReference'
          description: Packages the order was created from.
        participant:
          $ref: '#/components/schemas/OrderParticipant'
          description: The person being tested.
        services:
          type: array
          items:
            $ref: '#/components/schemas/OrderService'
          description: Services on the order, in creation order.
        status:
          anyOf:
            - type: string
              enum:
                - adulterated
                - cancelled
                - complete
                - expired
                - fail
                - fitForDuty
                - incomplete
                - integrationError
                - negative
                - lostInTransit
                - nonNegative
                - noShow
                - notFitForDuty
                - ordered
                - pass
                - pending
                - positive
                - released
                - scheduled
                - substituted
                - testCancelled
                - testNotPerformed
                - unobtainable
            - type: string
          description: Current order status; new values may appear.
          example: pending
        statusUpdatedAt:
          format: date-time
          type: string
          description: >-
            When the order status last changed; the creation time until the
            first change.
          example: '2026-09-24T15:15:00.000Z'
        testReason:
          anyOf:
            - anyOf:
                - type: string
                  enum:
                    - blindSample
                    - fitnessForDuty
                    - followUp
                    - jobTransfer
                    - notIndicated
                    - other
                    - periodic
                    - periodicMedical
                    - postAccident
                    - preEmployment
                    - preSiteAccess
                    - probation
                    - promotion
                    - random
                    - reasonableSuspicion
                    - returnToDuty
                    - splitSpecimen
                    - sweep
                    - unauthorizedTest
                    - unknown
                    - injury
                - type: string
            - type: 'null'
          description: Reason for the test.
          example: preEmployment
        updatedAt:
          format: date-time
          type: string
          description: When the order was last updated.
          example: '2026-09-24T15:20:00.000Z'
        url:
          type: string
          description: Canonical path of this resource, relative to the API origin.
          example: /api/v2/orders/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
          format: uri-reference
      required:
        - id
        - object
        - code
        - agency
        - clinic
        - company
        - createdAt
        - expiresAt
        - isFinal
        - jobCategory
        - location
        - otherTestReason
        - packages
        - participant
        - services
        - status
        - statusUpdatedAt
        - testReason
        - updatedAt
        - url
    Error:
      type: object
      properties:
        error:
          type: string
          description: HTTP status reason phrase.
          example: Bad Request
        errors:
          type: array
          items:
            type: object
            properties:
              code:
                anyOf:
                  - type: string
                    enum:
                      - backgroundCheckIntegrationNotConfigured
                      - badRequest
                      - conflict
                      - insufficientScope
                      - internalError
                      - invalidElement
                      - invalidFormat
                      - invalidKey
                      - invalidScheduleStrategy
                      - invalidState
                      - invalidType
                      - invalidUnion
                      - invalidValue
                      - linkRequiredBackground
                      - notFound
                      - notMultipleOf
                      - required
                      - scheduleClinicExcludedByFeeCap
                      - scheduleConfiguredClinicUnavailable
                      - tooBig
                      - tooManyRequests
                      - tooSmall
                      - unauthenticated
                      - unrecognizedKeys
                  - type: string
                description: >-
                  Machine-readable error code. New codes may be added; treat
                  unknown codes by `statusCode`.
                example: tooSmall
              detail:
                type: string
                description: Human-readable explanation.
                example: 'Too small: expected number to be >=1'
              meta:
                description: Additional machine-readable context.
                type: object
                propertyNames:
                  type: string
                additionalProperties: {}
              source:
                description: Present only when a request field is at fault.
                type: object
                properties:
                  pointer:
                    type: string
                    description: JSON pointer to the request field at fault.
                    example: /page
                required:
                  - pointer
            required:
              - code
              - detail
          description: One entry per problem found.
        statusCode:
          type: integer
          description: HTTP status code.
          example: 400
      required:
        - error
        - errors
        - statusCode
    OrderCallbackInput:
      type: object
      properties:
        auth:
          oneOf:
            - type: object
              properties:
                apiKey:
                  type: string
                  minLength: 1
                  description: API key sent with each delivery.
                  example: key_…
                secretKey:
                  type: string
                  minLength: 1
                  description: Secret used to sign deliveries in the `X-Signature` header.
                  example: whsec_…
                type:
                  type: string
                  enum:
                    - apiKey
              required:
                - apiKey
                - type
            - type: object
              properties:
                secretKey:
                  type: string
                  minLength: 1
                  description: Secret used to sign deliveries in the `X-Signature` header.
                  example: whsec_…
                token:
                  type: string
                  minLength: 1
                  description: Bearer token sent with each delivery.
                  example: tok_…
                type:
                  type: string
                  enum:
                    - bearer
              required:
                - token
                - type
            - type: object
              properties:
                password:
                  type: string
                  minLength: 1
                  description: Basic-auth password.
                  example: …
                secretKey:
                  type: string
                  minLength: 1
                  description: Secret used to sign deliveries in the `X-Signature` header.
                  example: whsec_…
                type:
                  type: string
                  enum:
                    - basic
                username:
                  type: string
                  minLength: 1
                  description: Basic-auth username.
                  example: partner
              required:
                - password
                - type
                - username
            - type: object
              properties:
                custom:
                  type: object
                  propertyNames:
                    type: string
                  additionalProperties: {}
                  description: Custom authentication parameters.
                secretKey:
                  type: string
                  minLength: 1
                  description: Secret used to sign deliveries in the `X-Signature` header.
                  example: whsec_…
                type:
                  type: string
                  enum:
                    - custom
              required:
                - custom
                - type
          description: How deliveries authenticate to the endpoint.
        headers:
          type: object
          propertyNames:
            type: string
          additionalProperties:
            type: string
          description: Headers added to every delivery.
          example:
            X-Partner: acme
        url:
          type: string
          format: uri
          description: Endpoint that receives `order.updated` events.
          example: https://partner.example.com/hooks
      required:
        - url
    DeliveryMethodInput:
      oneOf:
        - type: object
          properties:
            cc:
              type: array
              items:
                type: string
                format: email
                pattern: >-
                  ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
              description: Additional recipients.
              example:
                - hr@example.com
            to:
              type: string
              format: email
              pattern: >-
                ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
              description: Recipient of the order.
              example: john.doe@example.com
            type:
              type: string
              description: Delivery by email.
              enum:
                - email
          required:
            - to
            - type
        - type: object
          properties:
            phone:
              description: Recipient of the order, by SMS.
              example: '+13033232323'
              type: string
            type:
              type: string
              description: Delivery by SMS.
              enum:
                - mobile
          required:
            - phone
            - type
    OrderMatchingInput:
      type: object
      properties:
        enabled:
          description: Whether to match against existing orders first.
          example: true
          anyOf:
            - type: boolean
            - type: number
              enum:
                - 1
            - type: number
              enum:
                - 0
            - type: string
              enum:
                - 'true'
            - type: string
              enum:
                - 'false'
        lookBackPeriod:
          type: object
          properties:
            unit:
              type: string
              enum:
                - days
                - hours
              description: Unit of `value`.
              example: days
            value:
              anyOf:
                - type: integer
                  minimum: 1
                - type: string
                  pattern: ^\d+$
              description: How far back to look.
              example: 7
          required:
            - unit
            - value
          description: How far back to look for an equivalent order.
        matchScore:
          anyOf:
            - type: number
              minimum: 0
              maximum: 100
            - type: string
              pattern: ^\d+(\.\d+)?$
          description: Minimum match score, 0 to 100; 100 accepts exact matches only.
          example: 80
        profile:
          type: string
          enum:
            - appCollection
            - standard
          description: Matching behavior; defaults to the location or company setting.
          example: standard
      required:
        - enabled
    OrderParticipantInput:
      type: object
      properties:
        address:
          $ref: '#/components/schemas/AddressInput'
          description: >-
            Postal address. Required when `settings.schedulingOption` is
            `order`, and when it is `schedule` unless
            `settings.clinicSelectionMode` is `configured`.
        birthDate:
          type: string
          format: date
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
          description: >-
            Date of birth (ISO 8601 date). Required when
            `settings.schedulingOption` is `order`.
          example: '1980-11-11'
        email:
          type: string
          format: email
          pattern: >-
            ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
          description: Email address. Required when `settings.schedulingOption` is `order`.
          example: john.doe@example.com
        firstName:
          type: string
          minLength: 1
          description: First name.
          example: John
        identifiers:
          type: array
          items:
            $ref: '#/components/schemas/ParticipantIdentifierInput'
          description: >-
            Government and employer identifiers, at most one of each type.
            Required when `settings.schedulingOption` is `order`; a
            `driverLicense` is required when `agency` is FMCSA.
        lastName:
          type: string
          minLength: 1
          description: Last name.
          example: Doe
        middleName:
          type: string
          minLength: 1
          description: Middle name.
          example: Q
        phone:
          description: Phone number. Required when `settings.schedulingOption` is `order`.
          example: '+13033232323'
          type: string
      required:
        - firstName
        - lastName
    OrderRequesterInput:
      type: object
      properties:
        email:
          type: string
          format: email
          pattern: >-
            ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$
          description: Email address; identifies the requesting user.
          example: jane@example.com
        firstName:
          type: string
          minLength: 1
          description: First name.
          example: Jane
        lastName:
          type: string
          minLength: 1
          description: Last name.
          example: Doe
        middleName:
          type: string
          minLength: 1
          description: Middle name.
          example: R
        phone:
          description: Phone number; national or E.164 spelling, stored as E.164.
          example: '+13033232323'
          type: string
      required:
        - email
        - firstName
        - lastName
    OrderSettingsInput:
      type: object
      properties:
        billingCode:
          type: string
          minLength: 1
          maxLength: 255
          description: >-
            Billing code for the order. Required when the location or its
            company makes billing codes mandatory.
          example: PO-2026-001
        clinicSelectionMode:
          type: string
          enum:
            - closestToParticipant
            - configured
            - requesterSelects
          description: >-
            How the collection site is chosen: `closestToParticipant` and
            `configured` pair with a `schedulingOption` of `schedule`,
            `requesterSelects` with `order`.
          example: closestToParticipant
        expiresIn:
          anyOf:
            - type: number
              exclusiveMinimum: 0
            - type: string
              pattern: ^\d+(\.\d+)?$
          description: How long until the order expires.
          example: 30
        expiresInUnit:
          default: days
          type: string
          enum:
            - days
            - hours
          description: Unit of `expiresIn`.
          example: days
        observedCollection:
          description: >-
            Whether the collection is observed. Required, and must be true, for
            a return-to-duty or follow-up test with a DOT urine service.
          example: false
          anyOf:
            - type: boolean
            - type: number
              enum:
                - 1
            - type: number
              enum:
                - 0
            - type: string
              enum:
                - 'true'
            - type: string
              enum:
                - 'false'
        schedulingOption:
          type: string
          enum:
            - link
            - order
            - schedule
          description: >-
            `link` sends the participant a link to complete the order; `order`
            creates it from the details given; `schedule` also books a
            collection site.
          example: order
      required:
        - schedulingOption
    AgencyReference:
      type: object
      properties:
        code:
          type: string
          description: Agency code, as regulations name it.
          example: FAA
        id:
          type: string
          description: Unique identifier of the agency.
          example: '3'
        object:
          type: string
          description: Object type; always `agency`.
          example: agency
          enum:
            - agency
        url:
          type: string
          description: Canonical path of this resource, relative to the API origin.
          example: /api/v2/agencies/3
          format: uri-reference
      required:
        - code
        - id
        - object
        - url
    ClinicReference:
      type: object
      properties:
        address:
          anyOf:
            - $ref: '#/components/schemas/Address'
            - type: 'null'
          description: Postal address; null when the clinic has none.
        id:
          type: string
          description: Unique identifier of the clinic.
          example: '42'
        name:
          type: string
          description: Clinic name.
          example: Austin Downtown Clinic
        object:
          type: string
          description: Object type; always `clinic`.
          example: clinic
          enum:
            - clinic
        phone:
          description: Primary phone number.
          example: +1-512-555-0100
          type:
            - string
            - 'null'
        url:
          type: string
          description: Canonical path of this resource, relative to the API origin.
          example: /api/v2/clinics/42
          format: uri-reference
      required:
        - address
        - id
        - name
        - object
        - phone
        - url
    CompanyReference:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the company.
          example: '123'
        name:
          type: string
          description: Company name.
          example: Acme Inc
        object:
          type: string
          description: Object type; always `company`.
          example: company
          enum:
            - company
        url:
          type: string
          description: Canonical path of this resource, relative to the API origin.
          example: /api/v2/companies/123
          format: uri-reference
      required:
        - id
        - name
        - object
        - url
    JobCategoryReference:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the job category.
          example: 3987402f-e963-45a9-8799-b9ea6621adae
        name:
          type: string
          description: Job category name.
          example: Flight Crewmember
        object:
          type: string
          description: Object type; always `jobCategory`.
          example: jobCategory
          enum:
            - jobCategory
        url:
          type: string
          description: Canonical path of this resource, relative to the API origin.
          example: >-
            /api/v2/agencies/3/jobCategories/3987402f-e963-45a9-8799-b9ea6621adae
          format: uri-reference
      required:
        - id
        - name
        - object
        - url
    LocationReference:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the location.
          example: '456'
        name:
          type: string
          description: Location name.
          example: Acme Downtown
        object:
          type: string
          description: Object type; always `location`.
          example: location
          enum:
            - location
        url:
          type: string
          description: Canonical path of this resource, relative to the API origin.
          example: /api/v2/locations/456
          format: uri-reference
      required:
        - id
        - name
        - object
        - url
    OrderMatched:
      type: object
      properties:
        originalSource:
          type: string
          description: Where the matched order was created.
          example: app
        score:
          type: number
          description: Match confidence, 0 to 100.
          example: 100
      required:
        - originalSource
        - score
    PackageReference:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the package.
          example: '789'
        name:
          type: string
          description: Package name.
          example: DOT Pre-Employment Drug Test
        object:
          type: string
          description: Object type; always `package`.
          example: package
          enum:
            - package
        url:
          type: string
          description: Canonical path of this resource, relative to the API origin.
          example: /api/v2/packages/789
          format: uri-reference
      required:
        - id
        - name
        - object
        - url
    OrderParticipant:
      type: object
      properties:
        address:
          anyOf:
            - $ref: '#/components/schemas/Address'
            - type: 'null'
          description: Postal address; null when none was provided.
        birthDate:
          anyOf:
            - type: string
              format: date
              pattern: >-
                ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))$
            - type: 'null'
          description: Date of birth (ISO 8601 date).
          example: '1980-11-11'
        email:
          description: Email address.
          example: john.doe@example.com
          type:
            - string
            - 'null'
        firstName:
          description: First name.
          example: John
          type:
            - string
            - 'null'
        identifiers:
          type: array
          items:
            $ref: '#/components/schemas/ParticipantIdentifier'
          description: >-
            Government and employer identifiers. Present only for API tokens
            with the `order.participant.read` scope, and never on a
            cancellation.
        lastName:
          description: Last name.
          example: Doe
          type:
            - string
            - 'null'
        middleName:
          description: Middle name.
          example: Q
          type:
            - string
            - 'null'
        phone:
          description: Phone number (E.164).
          example: '+13033232323'
          type:
            - string
            - 'null'
      required:
        - address
        - birthDate
        - email
        - firstName
        - lastName
        - middleName
        - phone
    OrderService:
      type: object
      properties:
        attributes:
          anyOf:
            - $ref: '#/components/schemas/ServiceAttributes'
            - type: 'null'
          description: >-
            Testing category and specimen type; null when the service has
            neither.
        courierServiceName:
          description: Courier carrying the specimen.
          example: FedEx
          type:
            - string
            - 'null'
        id:
          type: string
          description: Unique identifier of the service on this order.
        isDot:
          type: boolean
          description: Whether the service is a DOT-regulated test.
          example: false
        isFinal:
          type: boolean
          description: Whether the service status is terminal.
          example: false
        lab:
          anyOf:
            - $ref: '#/components/schemas/VendorReference'
            - type: 'null'
          description: Lab testing the specimen; null when none is named.
        name:
          type: string
          description: Service name.
          example: 5 Panel Urine
        object:
          type: string
          description: Object type; always `orderService`.
          example: orderService
          enum:
            - orderService
        screenHistory:
          type: array
          items:
            $ref: '#/components/schemas/OrderServiceScreenHistory'
          description: >-
            Milestones reached so far, in screening order; one not reached yet
            is absent.
        specimenId:
          description: Specimen identifier.
          example: SP-1
          type:
            - string
            - 'null'
        status:
          anyOf:
            - type: string
              enum:
                - adulterated
                - adulterated_failACTC
                - adulterated_failTC
                - cancelled
                - lostInTransit
                - complete
                - complete_abnormal
                - complete_critical
                - complete_allergy
                - complete_allergy_fever
                - complete_clear
                - complete_deferred
                - complete_discrepancy
                - complete_disqualified
                - complete_dryMouth
                - complete_fever
                - complete_hits
                - complete_meetsStandards
                - complete_meetsStandardsWithRestrictions
                - complete_MROReportReleased
                - complete_noHits
                - complete_noMatch
                - complete_noRecord
                - complete_noReviewNoReport
                - complete_notClear
                - complete_notMeetsStandards
                - complete_outOfScope
                - complete_periodicMonitoringRequired
                - complete_record
                - complete_reject
                - complete_seeComments
                - complete_forBilling
                - complete_requiresProviderAssessment
                - complete_unableToVerify
                - complete_unknown
                - complete_verified
                - declined
                - expired
                - fail
                - fitForDuty
                - incomplete
                - incomplete_collectionCompletedNoInsufficientSpecimenProvided
                - incomplete_collectionCompleteNotEnoughSpecimenProvided
                - incomplete_qnsQuantityNotSufficient
                - incomplete_donorUnable
                - incomplete_excused
                - incomplete_incompleteExamination
                - incomplete_invalid
                - incomplete_labReject
                - incomplete_refusalToTest
                - incomplete_shyBladder
                - incomplete_shyLung
                - integrationError
                - negative
                - negative_negativeDilute
                - negative_negativeSeeReport
                - nonNegative
                - noShow
                - notFitForDuty
                - notRun
                - ordered
                - pass
                - pending
                - pending_additionalResearchNeeded
                - pending_arrivedAtTheClinic
                - pending_atTheLab
                - pending_awaitingMROContact
                - pending_awaitingReview
                - pending_awaitingSignOff
                - pending_collectionCompleted
                - pending_collectionInitiated
                - pending_collectionSuspended
                - pending_derNotificationRequired
                - pending_determinationPending
                - pending_inMROReview
                - pending_inProcess
                - pending_inRecovery
                - pending_pendingAffidavit
                - pending_pendingFax
                - pending_pendingMRO
                - pending_pendingMROCCF
                - pending_possibleHitsFound
                - pending_presumptivePositive
                - pending_resultPending
                - pending_review
                - pending_sentToLab
                - pending_shyBladder
                - pending_unableToContact
                - pending_underReview
                - pending_collectionCancelled
                - pending_processingCancelled
                - pending_processingCompleted
                - positive
                - positive_positiveDilute
                - positive_positiveUntilPrescriptionVerified
                - positive_positiveDiluteUntilPrescriptionVerified
                - positive_positiveUnableContactDonor
                - processing_incompleteExamination
                - released
                - scheduled
                - substituted
                - testCancelled
                - testNotPerformed
                - unobtainable
                - notReported
            - type: string
          description: >-
            Current service status. Values follow the `family_detail`
            convention; new details may appear.
          example: pending_collectionCompleted
        statusHistory:
          type: array
          items:
            $ref: '#/components/schemas/OrderServiceStatusHistory'
          description: Status changes, oldest first.
        statusUpdatedAt:
          anyOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When the status last changed.
          example: '2026-09-24T15:15:00.000Z'
        trackingNumber:
          description: Courier tracking number.
          example: 1Z999AA10123456784
          type:
            - string
            - 'null'
      required:
        - attributes
        - courierServiceName
        - id
        - isDot
        - isFinal
        - lab
        - name
        - object
        - screenHistory
        - specimenId
        - status
        - statusHistory
        - statusUpdatedAt
        - trackingNumber
    AddressInput:
      type: object
      properties:
        city:
          type: string
          minLength: 1
          description: City.
          example: Los Angeles
        country:
          default: US
          type: string
          enum:
            - US
            - CA
          description: Country code (ISO 3166-1 alpha-2); US or CA.
          example: US
        line1:
          type: string
          minLength: 1
          description: First line of the street address.
          example: 21143 Hawthorne Blvd
        line2:
          type: string
          minLength: 1
          description: Second line of the street address.
          example: Suite 400
        postalCode:
          type: string
          minLength: 1
          description: Postal code; US `12345` or `12345-6789`, Canada `A1A 1A1`.
          example: '90503'
        state:
          type: string
          minLength: 2
          maxLength: 2
          description: State or province code.
          example: CA
      required:
        - city
        - line1
        - postalCode
        - state
    ParticipantIdentifierInput:
      oneOf:
        - type: object
          properties:
            type:
              type: string
              description: Kind of identifier.
              enum:
                - ssn
            value:
              type: string
              minLength: 1
              description: Social Security number.
              example: 123-12-1234
          required:
            - type
            - value
        - type: object
          properties:
            type:
              type: string
              description: Kind of identifier.
              enum:
                - employerId
            value:
              type: string
              minLength: 1
              description: Employer-assigned identifier.
              example: E-42
          required:
            - type
            - value
        - type: object
          properties:
            type:
              type: string
              description: Kind of identifier.
              enum:
                - driverLicense
            value:
              type: string
              minLength: 1
              description: License number.
              example: D1234567
            issuingCountry:
              default: US
              description: Issuing country code; US or CA.
              example: US
              type: string
              enum:
                - US
                - CA
            issuingState:
              type: string
              minLength: 2
              maxLength: 2
              description: Issuing state or province code.
              example: CA
          required:
            - type
            - value
            - issuingState
    Address:
      type: object
      properties:
        city:
          description: City or town.
          example: Seattle
          type:
            - string
            - 'null'
        country:
          description: Country code.
          example: US
          type:
            - string
            - 'null'
        line1:
          description: First line of the street address.
          example: 123 Main St
          type:
            - string
            - 'null'
        line2:
          description: Second line of the street address.
          example: Suite 400
          type:
            - string
            - 'null'
        object:
          type: string
          description: Object type; always `address`.
          example: address
          enum:
            - address
        postalCode:
          description: Postal or ZIP code.
          example: '98101'
          type:
            - string
            - 'null'
        state:
          description: State or region code.
          example: WA
          type:
            - string
            - 'null'
      required:
        - city
        - country
        - line1
        - line2
        - object
        - postalCode
        - state
    ParticipantIdentifier:
      type: object
      properties:
        issuingCountry:
          description: Issuing country code; set for a driver’s license.
          example: US
          type:
            - string
            - 'null'
        issuingState:
          description: Issuing state or province code; set for a driver’s license.
          example: WA
          type:
            - string
            - 'null'
        object:
          type: string
          description: Object type; always `participantIdentifier`.
          example: participantIdentifier
          enum:
            - participantIdentifier
        type:
          anyOf:
            - type: string
              enum:
                - ssn
                - driverLicense
                - employerId
            - type: string
          description: >-
            Kind of identifier. New values may be added; skip one you do not
            know.
          example: driverLicense
        value:
          type: string
          description: >-
            The identifier. A Social Security number is masked to its last four
            digits.
          example: D1234567
      required:
        - issuingCountry
        - issuingState
        - object
        - type
        - value
    ServiceAttributes:
      type: object
      properties:
        category:
          anyOf:
            - anyOf:
                - type: string
                  enum:
                    - dot
                    - dotLookalike
                    - instantTestAllInOneCup
                    - instantTestOral
                    - nonStandardPanels
                    - oral
                    - standardPanels
                    - standardPanelsPlusExpOpi
                    - standardPanelsPlusExpOpiPlusFentanyl
                    - standardPanelsPlusExpOpiPlusMdma
                    - standardPanelsPlusExpOpiPlusMdmaPlusFentanyl
                    - standardPanelsPlusMdmaPlusExpOpiPlusOxy
                    - urine
                - type: string
            - type: 'null'
          description: Testing category. New values may be added.
          example: standardPanels
        type:
          anyOf:
            - anyOf:
                - type: string
                  enum:
                    - blood
                    - hair
                    - oral
                    - urine
                - type: string
            - type: 'null'
          description: Specimen type. New values may be added.
          example: urine
      required:
        - category
        - type
    VendorReference:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier of the vendor.
          example: 64cba816-3c52-4a63-9d0e-0f2b5d1a7e11
        name:
          type: string
          description: Vendor name.
          example: CRL
        object:
          type: string
          description: Object type; always `vendor`.
          example: vendor
          enum:
            - vendor
        type:
          anyOf:
            - type: string
              enum:
                - mro
                - lab
                - payment
                - bgc
                - other
                - tpa
                - system
            - type: string
          description: What the vendor does. New values may be added.
          example: lab
      required:
        - id
        - name
        - object
        - type
    OrderServiceScreenHistory:
      type: object
      properties:
        object:
          type: string
          description: Object type; always `orderServiceScreenHistory`.
          example: orderServiceScreenHistory
          enum:
            - orderServiceScreenHistory
        occurredAt:
          format: date-time
          type: string
          description: When the milestone was reached.
          example: '2026-09-24T15:15:00.000Z'
        type:
          anyOf:
            - type: string
              enum:
                - inMROReview
                - labReceived
                - notApplicable
                - ordered
                - resultReceived
                - resultReleased
                - specimenCollected
            - type: string
          description: >-
            Milestone reached. New values may be added; skip one you do not
            know.
          example: specimenCollected
      required:
        - object
        - occurredAt
        - type
    OrderServiceStatusHistory:
      type: object
      properties:
        groupType:
          anyOf:
            - type: string
              enum:
                - inMROReview
                - labReceived
                - notApplicable
                - ordered
                - resultReceived
                - resultReleased
                - specimenCollected
            - type: string
          description: Milestone the status belongs to.
          example: specimenCollected
        object:
          type: string
          description: Object type; always `orderServiceStatusHistory`.
          example: orderServiceStatusHistory
          enum:
            - orderServiceStatusHistory
        occurredAt:
          format: date-time
          type: string
          description: When the status happened, such as the collection time.
          example: '2026-09-24T15:15:00.000Z'
        status:
          anyOf:
            - type: string
              enum:
                - adulterated
                - adulterated_failACTC
                - adulterated_failTC
                - cancelled
                - lostInTransit
                - complete
                - complete_abnormal
                - complete_critical
                - complete_allergy
                - complete_allergy_fever
                - complete_clear
                - complete_deferred
                - complete_discrepancy
                - complete_disqualified
                - complete_dryMouth
                - complete_fever
                - complete_hits
                - complete_meetsStandards
                - complete_meetsStandardsWithRestrictions
                - complete_MROReportReleased
                - complete_noHits
                - complete_noMatch
                - complete_noRecord
                - complete_noReviewNoReport
                - complete_notClear
                - complete_notMeetsStandards
                - complete_outOfScope
                - complete_periodicMonitoringRequired
                - complete_record
                - complete_reject
                - complete_seeComments
                - complete_forBilling
                - complete_requiresProviderAssessment
                - complete_unableToVerify
                - complete_unknown
                - complete_verified
                - declined
                - expired
                - fail
                - fitForDuty
                - incomplete
                - incomplete_collectionCompletedNoInsufficientSpecimenProvided
                - incomplete_collectionCompleteNotEnoughSpecimenProvided
                - incomplete_qnsQuantityNotSufficient
                - incomplete_donorUnable
                - incomplete_excused
                - incomplete_incompleteExamination
                - incomplete_invalid
                - incomplete_labReject
                - incomplete_refusalToTest
                - incomplete_shyBladder
                - incomplete_shyLung
                - integrationError
                - negative
                - negative_negativeDilute
                - negative_negativeSeeReport
                - nonNegative
                - noShow
                - notFitForDuty
                - notRun
                - ordered
                - pass
                - pending
                - pending_additionalResearchNeeded
                - pending_arrivedAtTheClinic
                - pending_atTheLab
                - pending_awaitingMROContact
                - pending_awaitingReview
                - pending_awaitingSignOff
                - pending_collectionCompleted
                - pending_collectionInitiated
                - pending_collectionSuspended
                - pending_derNotificationRequired
                - pending_determinationPending
                - pending_inMROReview
                - pending_inProcess
                - pending_inRecovery
                - pending_pendingAffidavit
                - pending_pendingFax
                - pending_pendingMRO
                - pending_pendingMROCCF
                - pending_possibleHitsFound
                - pending_presumptivePositive
                - pending_resultPending
                - pending_review
                - pending_sentToLab
                - pending_shyBladder
                - pending_unableToContact
                - pending_underReview
                - pending_collectionCancelled
                - pending_processingCancelled
                - pending_processingCompleted
                - positive
                - positive_positiveDilute
                - positive_positiveUntilPrescriptionVerified
                - positive_positiveDiluteUntilPrescriptionVerified
                - positive_positiveUnableContactDonor
                - processing_incompleteExamination
                - released
                - scheduled
                - substituted
                - testCancelled
                - testNotPerformed
                - unobtainable
                - notReported
            - type: string
          description: Service status at that moment.
          example: pending_collectionCompleted
      required:
        - groupType
        - object
        - occurredAt
        - status
  securitySchemes:
    bearer:
      description: >-
        Origin One API token. Pass it in the Authorization header:
        `Authorization: Bearer <token>`.
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.