@crvouga/mockingbird-service-junction 1.9.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/openapi.yaml ADDED
@@ -0,0 +1,3707 @@
1
+ openapi: 3.1.0
2
+ info:
3
+ title: Junction API (Mockingbird subset)
4
+ description: |
5
+ Stateful mock subset of the Junction (Vital) API.
6
+ Docs: https://docs.junction.com/
7
+ Auth: https://docs.junction.com/api-details/junction-api
8
+ Create user: https://docs.junction.com/api-reference/user/create-user
9
+ Get user: https://docs.junction.com/api-reference/user/get-user
10
+ Delete user: https://docs.junction.com/api-reference/user/delete-user
11
+ Resolve user: https://docs.junction.com/api-reference/user/resolve-user
12
+ Update user: https://docs.junction.com/api-reference/user/patch-user
13
+ Get users: https://docs.junction.com/api-reference/user/get-users
14
+ Create order: https://docs.junction.com/api-reference/lab-testing/create-order
15
+ Get order: https://docs.junction.com/api-reference/lab-testing/get-order
16
+ Get orders: https://docs.junction.com/api-reference/lab-testing/get-orders
17
+ Get order transaction: https://docs.junction.com/api-reference/lab-testing/order-transactions/get-order-transaction
18
+ Get order transaction result: https://docs.junction.com/api-reference/lab-testing/results/get-order-transaction-results
19
+ Lab tests: https://docs.junction.com/api-reference/lab-testing/tests-paginated
20
+ Lab tests (deprecated, unpaged): https://docs.junction.com/api-reference/lab-testing/tests/get-lab-tests
21
+ Appointment availability: https://docs.junction.com/api-reference/lab-testing/appointments/get-appointment-availability
22
+ Book appointment: https://docs.junction.com/api-reference/lab-testing/appointments/book-appointment
23
+ Get appointment: https://docs.junction.com/api-reference/lab-testing/appointments/get-appointment
24
+ Reschedule appointment: https://docs.junction.com/api-reference/lab-testing/appointments/reschedule-appointment
25
+ Cancel appointment: https://docs.junction.com/api-reference/lab-testing/appointments/cancel-appointment
26
+ Appointment cancellation reasons: https://docs.junction.com/api-reference/lab-testing/appointments/get-appointment-cancellation-reasons
27
+ Area info: https://docs.junction.com/api-reference/lab-testing/service-areas/get-area-info
28
+ PSC info: https://docs.junction.com/api-reference/lab-testing/service-areas/get-psc-info
29
+ Lab locations: https://docs.junction.com/api-reference/lab-testing/service-areas/get-lab-locations
30
+ Raw results: https://docs.junction.com/api-reference/lab-testing/results/get-lab-results
31
+ Result metadata: https://docs.junction.com/api-reference/lab-testing/results/get-lab-results-metadata
32
+ Result PDF: https://docs.junction.com/api-reference/lab-testing/results/get-lab-result-pdf
33
+ Requisition form PDF: https://docs.junction.com/api-reference/lab-testing/orders/get-requisition-form
34
+ List labs: https://docs.junction.com/api-reference/lab-testing/tests/get-labs
35
+ Test markers: https://docs.junction.com/api-reference/lab-testing/tests/get-markers-for-lab-test
36
+ Order-set markers: https://docs.junction.com/api-reference/lab-testing/results/get-order-set-markers
37
+ Latest user info: https://docs.junction.com/api-reference/user/get-latest-user-info
38
+ version: "0.4.758"
39
+ x-mockingbird-upstream:
40
+ docs: https://docs.junction.com/
41
+ note: Hand-authored subset from Junction public OpenAPI snippets in the docs.
42
+ servers:
43
+ - url: https://api.sandbox.us.junction.com
44
+ security:
45
+ - apiKeyAuth: []
46
+ paths:
47
+ /v2/user:
48
+ post:
49
+ operationId: create_user_v2_user_post
50
+ x-mockingbird:
51
+ supported: true
52
+ parity:
53
+ enabled: true
54
+ safe: true
55
+ requestBody:
56
+ required: true
57
+ content:
58
+ application/json:
59
+ schema:
60
+ $ref: "#/components/schemas/UserCreateBody"
61
+ responses:
62
+ "200":
63
+ description: Successful Response
64
+ content:
65
+ application/json:
66
+ schema:
67
+ $ref: "#/components/schemas/ClientFacingUser"
68
+ "400":
69
+ description: Bad Request
70
+ content:
71
+ application/json:
72
+ schema:
73
+ $ref: "#/components/schemas/ClientUserIDConflictResponse"
74
+ "422":
75
+ description: Validation Error
76
+ content:
77
+ application/json:
78
+ schema:
79
+ $ref: "#/components/schemas/HTTPValidationError"
80
+ get:
81
+ operationId: get_teams_users_v2_user_get
82
+ x-mockingbird:
83
+ supported: true
84
+ parity:
85
+ enabled: true
86
+ safe: true
87
+ parameters:
88
+ - name: offset
89
+ in: query
90
+ required: false
91
+ schema:
92
+ type: integer
93
+ - name: limit
94
+ in: query
95
+ required: false
96
+ schema:
97
+ type: integer
98
+ maximum: 500
99
+ responses:
100
+ "200":
101
+ description: Successful Response
102
+ content:
103
+ application/json:
104
+ schema:
105
+ $ref: "#/components/schemas/PaginatedUsersResponse"
106
+ "422":
107
+ description: Validation Error
108
+ content:
109
+ application/json:
110
+ schema:
111
+ $ref: "#/components/schemas/HTTPValidationError"
112
+ "500":
113
+ description: Internal Server Error
114
+ content:
115
+ text/plain:
116
+ schema:
117
+ type: string
118
+ /v2/user/{user_id}:
119
+ parameters:
120
+ - name: user_id
121
+ in: path
122
+ required: true
123
+ schema:
124
+ type: string
125
+ format: uuid
126
+ x-mockingbird-resource-ref:
127
+ type: user
128
+ missing: "00000000-0000-4000-8000-000000000000"
129
+ get:
130
+ operationId: get_user_v2_user__user_id__get
131
+ x-mockingbird:
132
+ supported: true
133
+ parity:
134
+ enabled: true
135
+ safe: true
136
+ responses:
137
+ "200":
138
+ description: Successful Response
139
+ content:
140
+ application/json:
141
+ schema:
142
+ $ref: "#/components/schemas/ClientFacingUser"
143
+ "404":
144
+ description: Not Found
145
+ content:
146
+ application/json:
147
+ schema:
148
+ $ref: "#/components/schemas/HTTPValidationError"
149
+ "422":
150
+ description: Validation Error
151
+ content:
152
+ application/json:
153
+ schema:
154
+ $ref: "#/components/schemas/HTTPValidationError"
155
+ delete:
156
+ operationId: delete_user_v2_user__user_id__delete
157
+ x-mockingbird:
158
+ supported: true
159
+ parity:
160
+ enabled: true
161
+ safe: true
162
+ responses:
163
+ "200":
164
+ description: Successful Response
165
+ content:
166
+ application/json:
167
+ schema:
168
+ $ref: "#/components/schemas/UserSuccessResponse"
169
+ "404":
170
+ description: Not Found
171
+ content:
172
+ application/json:
173
+ schema:
174
+ $ref: "#/components/schemas/HTTPValidationError"
175
+ patch:
176
+ operationId: patch_user_v2_user__user_id__patch
177
+ x-mockingbird:
178
+ supported: true
179
+ parity:
180
+ enabled: true
181
+ safe: true
182
+ requestBody:
183
+ required: true
184
+ content:
185
+ application/json:
186
+ schema:
187
+ $ref: "#/components/schemas/UserPatchBody"
188
+ responses:
189
+ "204":
190
+ description: Successful Response
191
+ "400":
192
+ description: Nothing to patch
193
+ content:
194
+ application/json:
195
+ schema:
196
+ $ref: "#/components/schemas/HTTPValidationError"
197
+ "404":
198
+ description: Not Found
199
+ content:
200
+ application/json:
201
+ schema:
202
+ $ref: "#/components/schemas/HTTPValidationError"
203
+ "409":
204
+ description: Conflict
205
+ content:
206
+ application/json:
207
+ schema:
208
+ $ref: "#/components/schemas/HTTPValidationError"
209
+ "422":
210
+ description: Validation Error
211
+ content:
212
+ application/json:
213
+ schema:
214
+ $ref: "#/components/schemas/HTTPValidationError"
215
+ /v2/user/resolve/{client_user_id}:
216
+ parameters:
217
+ - name: client_user_id
218
+ in: path
219
+ required: true
220
+ schema:
221
+ type: string
222
+ minLength: 1
223
+ get:
224
+ operationId: get_user_by_client_user_id_v2_user_resolve__client_user_id__get
225
+ x-mockingbird:
226
+ supported: true
227
+ parity:
228
+ enabled: true
229
+ safe: true
230
+ responses:
231
+ "200":
232
+ description: Successful Response
233
+ content:
234
+ application/json:
235
+ schema:
236
+ anyOf:
237
+ - $ref: "#/components/schemas/ClientFacingUser"
238
+ - $ref: "#/components/schemas/PaginatedUsersResponse"
239
+ "404":
240
+ description: Not Found
241
+ content:
242
+ application/json:
243
+ schema:
244
+ $ref: "#/components/schemas/HTTPValidationError"
245
+ "422":
246
+ description: Validation Error
247
+ content:
248
+ application/json:
249
+ schema:
250
+ $ref: "#/components/schemas/HTTPValidationError"
251
+ /v2/user/{user_id}/info:
252
+ parameters:
253
+ - name: user_id
254
+ in: path
255
+ required: true
256
+ schema:
257
+ type: string
258
+ format: uuid
259
+ x-mockingbird-resource-ref:
260
+ type: user
261
+ missing: "00000000-0000-4000-8000-000000000000"
262
+ patch:
263
+ operationId: patch_user_info_v2_user__user_id__info_patch
264
+ x-mockingbird:
265
+ supported: true
266
+ parity:
267
+ enabled: true
268
+ safe: true
269
+ requestBody:
270
+ required: true
271
+ content:
272
+ application/json:
273
+ schema:
274
+ $ref: "#/components/schemas/UserInfoPatchBody"
275
+ responses:
276
+ "200":
277
+ description: Successful Response
278
+ content:
279
+ application/json:
280
+ schema:
281
+ $ref: "#/components/schemas/UserInfo"
282
+ "404":
283
+ description: Not Found
284
+ content:
285
+ application/json:
286
+ schema:
287
+ $ref: "#/components/schemas/HTTPValidationError"
288
+ "422":
289
+ description: Validation Error
290
+ content:
291
+ application/json:
292
+ schema:
293
+ $ref: "#/components/schemas/HTTPValidationError"
294
+ /v2/user/{user_id}/info/latest:
295
+ parameters:
296
+ - name: user_id
297
+ in: path
298
+ required: true
299
+ schema:
300
+ type: string
301
+ format: uuid
302
+ x-mockingbird-resource-ref:
303
+ type: user
304
+ missing: "00000000-0000-4000-8000-000000000000"
305
+ get:
306
+ operationId: get_latest_user_info_user_v2_user__user_id__info_latest_get
307
+ x-mockingbird:
308
+ supported: true
309
+ parity:
310
+ enabled: true
311
+ safe: true
312
+ responses:
313
+ "200":
314
+ description: Successful Response
315
+ content:
316
+ application/json:
317
+ schema:
318
+ $ref: "#/components/schemas/UserInfo"
319
+ "404":
320
+ description: Not Found
321
+ content:
322
+ application/json:
323
+ schema:
324
+ $ref: "#/components/schemas/HTTPValidationError"
325
+ "422":
326
+ description: Validation Error
327
+ content:
328
+ application/json:
329
+ schema:
330
+ $ref: "#/components/schemas/HTTPValidationError"
331
+ /v3/lab_test:
332
+ get:
333
+ operationId: get_paginated_lab_tests_for_team_v3_lab_test_get
334
+ x-mockingbird:
335
+ supported: true
336
+ parity:
337
+ enabled: true
338
+ safe: true
339
+ responses:
340
+ "200":
341
+ description: Successful Response
342
+ content:
343
+ application/json:
344
+ schema:
345
+ $ref: "#/components/schemas/LabTestResourcesResponse"
346
+ /v3/lab_test/lab_account:
347
+ get:
348
+ operationId: get_team_lab_accounts_v3_lab_test_lab_account_get
349
+ x-mockingbird:
350
+ supported: true
351
+ parity:
352
+ enabled: false
353
+ safe: true
354
+ reason: "lab-account inventory is fixture-owned; the mock models the documented shape, filters and routing rules, not a live account inventory"
355
+ parameters:
356
+ - name: lab_account_id
357
+ in: query
358
+ required: false
359
+ schema:
360
+ anyOf:
361
+ - type: string
362
+ format: uuid
363
+ - type: "null"
364
+ - name: status
365
+ in: query
366
+ required: false
367
+ schema:
368
+ anyOf:
369
+ - $ref: "#/components/schemas/LabAccountStatus"
370
+ - type: "null"
371
+ responses:
372
+ "200":
373
+ description: Successful Response
374
+ content:
375
+ application/json:
376
+ schema:
377
+ $ref: "#/components/schemas/GetTeamLabAccountsResponse"
378
+ "422":
379
+ description: Validation Error
380
+ content:
381
+ application/json:
382
+ schema:
383
+ $ref: "#/components/schemas/HTTPValidationError"
384
+ /v3/lab_tests:
385
+ get:
386
+ operationId: get_lab_tests_for_team_v3_lab_tests_get
387
+ x-mockingbird:
388
+ supported: true
389
+ parity:
390
+ enabled: true
391
+ safe: true
392
+ summary: Get Lab Tests For Team
393
+ description: GET all the lab tests the team has access to.
394
+ deprecated: true
395
+ parameters:
396
+ - name: generation_method
397
+ in: query
398
+ required: false
399
+ schema:
400
+ $ref: '#/components/schemas/LabTestGenerationMethodFilter'
401
+ description: Filter on whether auto-generated lab tests created by Vital, manually created lab
402
+ tests, or all lab tests should be returned.
403
+ default: manual
404
+ description: Filter on whether auto-generated lab tests created by Vital, manually created lab tests,
405
+ or all lab tests should be returned.
406
+ - name: lab_slug
407
+ in: query
408
+ required: false
409
+ schema:
410
+ anyOf:
411
+ - type: string
412
+ - type: 'null'
413
+ description: Filter by the slug of the lab for these lab tests.
414
+ title: Lab Slug
415
+ description: Filter by the slug of the lab for these lab tests.
416
+ - name: collection_method
417
+ in: query
418
+ required: false
419
+ schema:
420
+ anyOf:
421
+ - $ref: '#/components/schemas/LabTestCollectionMethod'
422
+ - type: 'null'
423
+ description: Filter by the collection method for these lab tests.
424
+ title: Collection Method
425
+ description: Filter by the collection method for these lab tests.
426
+ - name: status
427
+ in: query
428
+ required: false
429
+ schema:
430
+ anyOf:
431
+ - $ref: '#/components/schemas/LabTestStatus'
432
+ - type: 'null'
433
+ description: Filter by the status of these lab tests.
434
+ title: Status
435
+ description: Filter by the status of these lab tests.
436
+ - name: marker_ids
437
+ in: query
438
+ required: false
439
+ schema:
440
+ anyOf:
441
+ - type: array
442
+ items:
443
+ type: integer
444
+ - type: 'null'
445
+ description: Filter to only include lab tests containing these marker IDs.
446
+ title: Marker Ids
447
+ description: Filter to only include lab tests containing these marker IDs.
448
+ - name: provider_ids
449
+ in: query
450
+ required: false
451
+ schema:
452
+ anyOf:
453
+ - type: array
454
+ items:
455
+ type: string
456
+ - type: 'null'
457
+ description: Filter to only include lab tests containing these provider IDs.
458
+ title: Provider Ids
459
+ description: Filter to only include lab tests containing these provider IDs.
460
+ - name: name
461
+ in: query
462
+ required: false
463
+ schema:
464
+ anyOf:
465
+ - type: string
466
+ - type: 'null'
467
+ description: Filter by the name of the lab test (a case-insensitive substring search).
468
+ title: Name
469
+ description: Filter by the name of the lab test (a case-insensitive substring search).
470
+ - name: order_key
471
+ in: query
472
+ required: false
473
+ schema:
474
+ anyOf:
475
+ - enum:
476
+ - price
477
+ - created_at
478
+ - updated_at
479
+ type: string
480
+ - type: 'null'
481
+ title: Order Key
482
+ - name: order_direction
483
+ in: query
484
+ required: false
485
+ schema:
486
+ enum:
487
+ - asc
488
+ - desc
489
+ type: string
490
+ default: asc
491
+ title: Order Direction
492
+ responses:
493
+ '200':
494
+ description: Successful Response
495
+ content:
496
+ application/json:
497
+ schema:
498
+ type: array
499
+ items:
500
+ $ref: '#/components/schemas/ClientFacingLabTest'
501
+ title: Response Get Lab Tests For Team V3 Lab Tests Get
502
+ '422':
503
+ description: Validation Error
504
+ content:
505
+ application/json:
506
+ schema:
507
+ $ref: '#/components/schemas/HTTPValidationError'
508
+ /v3/lab_tests/{lab_test_id}:
509
+ parameters:
510
+ - name: lab_test_id
511
+ in: path
512
+ required: true
513
+ schema:
514
+ type: string
515
+ format: uuid
516
+ x-mockingbird-resource-ref:
517
+ type: lab_test
518
+ missing: "00000000-0000-4000-8000-000000000000"
519
+ get:
520
+ operationId: get_lab_test_for_team_v3_lab_tests__lab_test_id__get
521
+ x-mockingbird:
522
+ supported: true
523
+ parity:
524
+ enabled: true
525
+ safe: true
526
+ responses:
527
+ "200":
528
+ description: Successful Response
529
+ content:
530
+ application/json:
531
+ schema:
532
+ $ref: "#/components/schemas/ClientFacingLabTest"
533
+ "404":
534
+ description: Not Found
535
+ content:
536
+ application/json:
537
+ schema:
538
+ $ref: "#/components/schemas/HTTPValidationError"
539
+ /v3/lab_tests/labs:
540
+ get:
541
+ operationId: get_labs_v3_lab_tests_labs_get
542
+ x-mockingbird:
543
+ supported: true
544
+ parity:
545
+ enabled: true
546
+ safe: true
547
+ responses:
548
+ "200":
549
+ description: Successful Response
550
+ content:
551
+ application/json:
552
+ schema:
553
+ type: array
554
+ items:
555
+ $ref: "#/components/schemas/ClientFacingLab"
556
+ /v3/lab_tests/{lab_test_id}/markers:
557
+ parameters:
558
+ - name: lab_test_id
559
+ in: path
560
+ required: true
561
+ schema:
562
+ type: string
563
+ format: uuid
564
+ x-mockingbird-resource-ref:
565
+ type: lab_test
566
+ missing: "00000000-0000-4000-8000-000000000000"
567
+ - name: page
568
+ in: query
569
+ required: false
570
+ schema:
571
+ type: integer
572
+ minimum: 1
573
+ default: 1
574
+ - name: size
575
+ in: query
576
+ required: false
577
+ schema:
578
+ type: integer
579
+ minimum: 1
580
+ maximum: 100
581
+ default: 50
582
+ - name: provider_id
583
+ in: query
584
+ required: false
585
+ schema:
586
+ type: string
587
+ get:
588
+ operationId: get_markers_for_lab_test_v3_lab_tests__lab_test_id__markers_get
589
+ x-mockingbird:
590
+ supported: true
591
+ parity:
592
+ enabled: true
593
+ safe: true
594
+ responses:
595
+ "200":
596
+ description: Successful Response
597
+ content:
598
+ application/json:
599
+ schema:
600
+ $ref: "#/components/schemas/GetMarkersResponse"
601
+ "404":
602
+ description: Not Found
603
+ content:
604
+ application/json:
605
+ schema:
606
+ $ref: "#/components/schemas/HTTPValidationError"
607
+ /v3/lab_tests/list_order_set_markers:
608
+ post:
609
+ operationId: list_order_set_markers_v3_lab_tests_list_order_set_markers_post
610
+ x-mockingbird:
611
+ supported: true
612
+ parity:
613
+ enabled: true
614
+ safe: true
615
+ requestBody:
616
+ required: true
617
+ content:
618
+ application/json:
619
+ schema:
620
+ $ref: "#/components/schemas/ListOrderSetMarkersRequest"
621
+ responses:
622
+ "200":
623
+ description: Successful Response
624
+ content:
625
+ application/json:
626
+ schema:
627
+ $ref: "#/components/schemas/GetMarkersResponse"
628
+ "404":
629
+ description: Not Found
630
+ content:
631
+ application/json:
632
+ schema:
633
+ $ref: "#/components/schemas/HTTPValidationError"
634
+ "422":
635
+ description: Validation Error
636
+ content:
637
+ application/json:
638
+ schema:
639
+ $ref: "#/components/schemas/HTTPValidationError"
640
+ /v3/order:
641
+ post:
642
+ operationId: create_order_v3_order_post
643
+ x-mockingbird:
644
+ supported: true
645
+ parity:
646
+ enabled: true
647
+ safe: true
648
+ requestBody:
649
+ required: true
650
+ content:
651
+ application/json:
652
+ schema:
653
+ $ref: "#/components/schemas/CreateOrderRequest"
654
+ responses:
655
+ "200":
656
+ description: Successful Response
657
+ content:
658
+ application/json:
659
+ schema:
660
+ $ref: "#/components/schemas/PostOrderResponse"
661
+ "400":
662
+ description: Bad Request
663
+ content:
664
+ application/json:
665
+ schema:
666
+ $ref: "#/components/schemas/HTTPValidationError"
667
+ "500":
668
+ description: Internal Server Error
669
+ "404":
670
+ description: Not Found
671
+ content:
672
+ application/json:
673
+ schema:
674
+ $ref: "#/components/schemas/HTTPValidationError"
675
+ "422":
676
+ description: Validation Error
677
+ content:
678
+ application/json:
679
+ schema:
680
+ $ref: "#/components/schemas/HTTPValidationError"
681
+ /v3/order/area/info:
682
+ get:
683
+ operationId: get_area_info_v3_order_area_info_get
684
+ x-mockingbird:
685
+ supported: true
686
+ parity:
687
+ enabled: false
688
+ safe: true
689
+ reason: >-
690
+ central_labs presence, within_radius counts and getlabs market coverage are
691
+ provider-owned geo data that a mock cannot replicate per-zip; covered by the
692
+ client-parity scenario shape checks instead
693
+ parameters:
694
+ - name: zip_code
695
+ in: query
696
+ required: true
697
+ schema:
698
+ type: string
699
+ pattern: "^\\d{5}(?:-?\\d{4})?$"
700
+ - name: radius
701
+ in: query
702
+ required: false
703
+ schema:
704
+ $ref: "#/components/schemas/AllowedRadius"
705
+ - name: lab_account_id
706
+ in: query
707
+ required: false
708
+ description: Lab Account ID to use for availability checks
709
+ schema:
710
+ anyOf:
711
+ - type: string
712
+ format: uuid
713
+ - type: "null"
714
+ responses:
715
+ "200":
716
+ description: Successful Response
717
+ content:
718
+ application/json:
719
+ schema:
720
+ $ref: "#/components/schemas/AreaInfo"
721
+ "404":
722
+ description: Not Found
723
+ content:
724
+ application/json:
725
+ schema:
726
+ $ref: "#/components/schemas/HTTPValidationError"
727
+ "422":
728
+ description: Validation Error
729
+ content:
730
+ application/json:
731
+ schema:
732
+ $ref: "#/components/schemas/HTTPValidationError"
733
+ /v3/order/psc/info:
734
+ get:
735
+ operationId: get_psc_info_v3_order_psc_info_get
736
+ x-mockingbird:
737
+ supported: true
738
+ parity:
739
+ enabled: false
740
+ safe: true
741
+ reason: >-
742
+ patient_service_centers are real site inventories per zip (thousands of sites,
743
+ result-capped at 30) that a fixture mock cannot replicate per-zip; covered by
744
+ the client-parity scenario shape checks instead
745
+ parameters:
746
+ - name: zip_code
747
+ in: query
748
+ required: true
749
+ schema:
750
+ type: string
751
+ pattern: "^\\d{5}$"
752
+ - name: lab_id
753
+ in: query
754
+ required: true
755
+ schema:
756
+ type: integer
757
+ - name: radius
758
+ in: query
759
+ required: false
760
+ schema:
761
+ $ref: "#/components/schemas/AllowedRadius"
762
+ - name: capabilities
763
+ in: query
764
+ required: false
765
+ schema:
766
+ type: array
767
+ items:
768
+ $ref: "#/components/schemas/LabLocationCapability"
769
+ responses:
770
+ "200":
771
+ description: Successful Response
772
+ content:
773
+ application/json:
774
+ schema:
775
+ $ref: "#/components/schemas/PscInfo"
776
+ "404":
777
+ description: Not Found
778
+ content:
779
+ application/json:
780
+ schema:
781
+ $ref: "#/components/schemas/HTTPValidationError"
782
+ "422":
783
+ description: Validation Error
784
+ content:
785
+ application/json:
786
+ schema:
787
+ $ref: "#/components/schemas/HTTPValidationError"
788
+ /v3/order/phlebotomy/appointment/availability:
789
+ post:
790
+ operationId: get_phlebotomy_appointment_availability_v3_order_phlebotomy_appointment_availability_post
791
+ x-mockingbird:
792
+ supported: true
793
+ parity:
794
+ enabled: false
795
+ safe: true
796
+ reason: >-
797
+ availability slots are provider-side data whose values shift between sandbox calls;
798
+ covered by the mock-internal scheduling property suite instead
799
+ parameters:
800
+ - name: start_date
801
+ in: query
802
+ required: false
803
+ schema:
804
+ type: string
805
+ format: date
806
+ requestBody:
807
+ required: true
808
+ content:
809
+ application/json:
810
+ schema:
811
+ $ref: "#/components/schemas/UsAddress"
812
+ responses:
813
+ "200":
814
+ description: Successful Response
815
+ content:
816
+ application/json:
817
+ schema:
818
+ $ref: "#/components/schemas/AppointmentAvailabilitySlots"
819
+ "400":
820
+ description: Availability not bookable for this address
821
+ content:
822
+ application/json:
823
+ schema:
824
+ $ref: "#/components/schemas/HTTPValidationError"
825
+ "404":
826
+ description: No availability found
827
+ content:
828
+ application/json:
829
+ schema:
830
+ $ref: "#/components/schemas/HTTPValidationError"
831
+ "422":
832
+ description: Validation Error
833
+ content:
834
+ application/json:
835
+ schema:
836
+ $ref: "#/components/schemas/HTTPValidationError"
837
+ /v3/order/phlebotomy/appointment/cancellation-reasons:
838
+ get:
839
+ operationId: get_phlebotomy_appointment_cancellation_reason_v3_order_phlebotomy_appointment_cancellation_reasons_get
840
+ x-mockingbird:
841
+ supported: true
842
+ parity:
843
+ enabled: true
844
+ safe: true
845
+ responses:
846
+ "200":
847
+ description: Successful Response
848
+ content:
849
+ application/json:
850
+ schema:
851
+ type: array
852
+ items:
853
+ $ref: "#/components/schemas/ClientFacingAppointmentCancellationReason"
854
+ /v3/order/psc/appointment/availability:
855
+ post:
856
+ operationId: get_psc_appointment_availability_v3_order_psc_appointment_availability_post
857
+ x-mockingbird:
858
+ supported: true
859
+ parity:
860
+ enabled: false
861
+ safe: true
862
+ reason: >-
863
+ availability slots are provider-side data whose values shift between sandbox calls;
864
+ covered by the mock-internal scheduling property suite instead
865
+ parameters:
866
+ - name: lab
867
+ in: query
868
+ required: true
869
+ schema:
870
+ $ref: "#/components/schemas/AppointmentPscLabs"
871
+ - name: start_date
872
+ in: query
873
+ required: false
874
+ schema:
875
+ type: string
876
+ format: date
877
+ - name: site_codes
878
+ in: query
879
+ required: false
880
+ schema:
881
+ type: string
882
+ description: JSON-encoded array of site codes
883
+ - name: zip_code
884
+ in: query
885
+ required: false
886
+ schema:
887
+ type: string
888
+ - name: radius
889
+ in: query
890
+ required: false
891
+ schema:
892
+ $ref: "#/components/schemas/AllowedRadius"
893
+ - name: allow_stale
894
+ in: query
895
+ required: false
896
+ schema:
897
+ type: boolean
898
+ responses:
899
+ "200":
900
+ description: Successful Response
901
+ content:
902
+ application/json:
903
+ schema:
904
+ $ref: "#/components/schemas/AppointmentAvailabilitySlots"
905
+ "400":
906
+ description: Availability not bookable for this address
907
+ content:
908
+ application/json:
909
+ schema:
910
+ $ref: "#/components/schemas/HTTPValidationError"
911
+ "404":
912
+ description: No slots found
913
+ content:
914
+ application/json:
915
+ schema:
916
+ $ref: "#/components/schemas/HTTPValidationError"
917
+ "422":
918
+ description: Validation Error
919
+ content:
920
+ application/json:
921
+ schema:
922
+ $ref: "#/components/schemas/HTTPValidationError"
923
+ /v3/order/psc/appointment/cancellation-reasons:
924
+ get:
925
+ operationId: get_psc_appointment_cancellation_reason_v3_order_psc_appointment_cancellation_reasons_get
926
+ x-mockingbird:
927
+ supported: true
928
+ parity:
929
+ enabled: true
930
+ safe: true
931
+ responses:
932
+ "200":
933
+ description: Successful Response
934
+ content:
935
+ application/json:
936
+ schema:
937
+ type: array
938
+ items:
939
+ $ref: "#/components/schemas/ClientFacingAppointmentCancellationReason"
940
+ /v3/order/{order_id}/phlebotomy/appointment:
941
+ parameters:
942
+ - name: order_id
943
+ in: path
944
+ required: true
945
+ schema:
946
+ type: string
947
+ format: uuid
948
+ x-mockingbird-resource-ref:
949
+ type: order
950
+ missing: "00000000-0000-4000-8000-000000000000"
951
+ get:
952
+ operationId: get_phlebotomy_appointment_v3_order__order_id__phlebotomy_appointment_get
953
+ x-mockingbird:
954
+ supported: true
955
+ parity:
956
+ enabled: false
957
+ safe: true
958
+ reason: >-
959
+ appointment payloads embed provider-side slot data; covered by the mock-internal
960
+ scheduling property suite instead
961
+ responses:
962
+ "200":
963
+ description: Successful Response
964
+ content:
965
+ application/json:
966
+ schema:
967
+ $ref: "#/components/schemas/ClientFacingAppointment"
968
+ "404":
969
+ description: No appointment for this order
970
+ content:
971
+ application/json:
972
+ schema:
973
+ $ref: "#/components/schemas/HTTPValidationError"
974
+ "422":
975
+ description: Validation Error
976
+ content:
977
+ application/json:
978
+ schema:
979
+ $ref: "#/components/schemas/HTTPValidationError"
980
+ /v3/order/{order_id}/phlebotomy/appointment/book:
981
+ parameters:
982
+ - name: order_id
983
+ in: path
984
+ required: true
985
+ schema:
986
+ type: string
987
+ format: uuid
988
+ x-mockingbird-resource-ref:
989
+ type: order
990
+ missing: "00000000-0000-4000-8000-000000000000"
991
+ post:
992
+ operationId: book_phlebotomy_appointment_v3_order__order_id__phlebotomy_appointment_book_post
993
+ x-mockingbird:
994
+ supported: true
995
+ parity:
996
+ enabled: false
997
+ safe: true
998
+ reason: >-
999
+ booking depends on live provider slot state; covered by the mock-internal scheduling
1000
+ property suite instead
1001
+ requestBody:
1002
+ required: true
1003
+ content:
1004
+ application/json:
1005
+ schema:
1006
+ $ref: "#/components/schemas/AppointmentBookingRequest"
1007
+ responses:
1008
+ "200":
1009
+ description: Successful Response
1010
+ content:
1011
+ application/json:
1012
+ schema:
1013
+ $ref: "#/components/schemas/ClientFacingAppointment"
1014
+ "400":
1015
+ description: Booking failed
1016
+ content:
1017
+ application/json:
1018
+ schema:
1019
+ $ref: "#/components/schemas/HTTPValidationError"
1020
+ "404":
1021
+ description: Order not found
1022
+ content:
1023
+ application/json:
1024
+ schema:
1025
+ $ref: "#/components/schemas/HTTPValidationError"
1026
+ "422":
1027
+ description: Validation Error
1028
+ content:
1029
+ application/json:
1030
+ schema:
1031
+ $ref: "#/components/schemas/HTTPValidationError"
1032
+ /v3/order/{order_id}/phlebotomy/appointment/reschedule:
1033
+ parameters:
1034
+ - name: order_id
1035
+ in: path
1036
+ required: true
1037
+ schema:
1038
+ type: string
1039
+ format: uuid
1040
+ x-mockingbird-resource-ref:
1041
+ type: order
1042
+ missing: "00000000-0000-4000-8000-000000000000"
1043
+ patch:
1044
+ operationId: reschedule_phlebotomy_appointment_v3_order__order_id__phlebotomy_appointment_reschedule_patch
1045
+ x-mockingbird:
1046
+ supported: true
1047
+ parity:
1048
+ enabled: false
1049
+ safe: true
1050
+ reason: >-
1051
+ rescheduling depends on live provider slot state; covered by the mock-internal
1052
+ scheduling property suite instead
1053
+ requestBody:
1054
+ required: true
1055
+ content:
1056
+ application/json:
1057
+ schema:
1058
+ $ref: "#/components/schemas/AppointmentRescheduleRequest"
1059
+ responses:
1060
+ "200":
1061
+ description: Successful Response
1062
+ content:
1063
+ application/json:
1064
+ schema:
1065
+ $ref: "#/components/schemas/ClientFacingAppointment"
1066
+ "400":
1067
+ description: Invalid or expired booking key
1068
+ content:
1069
+ application/json:
1070
+ schema:
1071
+ $ref: "#/components/schemas/HTTPValidationError"
1072
+ "404":
1073
+ description: No appointment for this order
1074
+ content:
1075
+ application/json:
1076
+ schema:
1077
+ $ref: "#/components/schemas/HTTPValidationError"
1078
+ "422":
1079
+ description: Validation Error
1080
+ content:
1081
+ application/json:
1082
+ schema:
1083
+ $ref: "#/components/schemas/HTTPValidationError"
1084
+ /v3/order/{order_id}/phlebotomy/appointment/cancel:
1085
+ parameters:
1086
+ - name: order_id
1087
+ in: path
1088
+ required: true
1089
+ schema:
1090
+ type: string
1091
+ format: uuid
1092
+ x-mockingbird-resource-ref:
1093
+ type: order
1094
+ missing: "00000000-0000-4000-8000-000000000000"
1095
+ patch:
1096
+ operationId: cancel_phlebotomy_appointment_v3_order__order_id__phlebotomy_appointment_cancel_patch
1097
+ x-mockingbird:
1098
+ supported: true
1099
+ parity:
1100
+ enabled: false
1101
+ safe: true
1102
+ reason: >-
1103
+ cancellation depends on live provider appointment state; covered by the mock-internal
1104
+ scheduling property suite instead
1105
+ requestBody:
1106
+ required: true
1107
+ content:
1108
+ application/json:
1109
+ schema:
1110
+ $ref: "#/components/schemas/PhlebotomyAppointmentCancelRequest"
1111
+ responses:
1112
+ "200":
1113
+ description: Successful Response
1114
+ content:
1115
+ application/json:
1116
+ schema:
1117
+ $ref: "#/components/schemas/ClientFacingAppointment"
1118
+ "400":
1119
+ description: Invalid cancellation reason
1120
+ content:
1121
+ application/json:
1122
+ schema:
1123
+ $ref: "#/components/schemas/HTTPValidationError"
1124
+ "404":
1125
+ description: No appointment for this order
1126
+ content:
1127
+ application/json:
1128
+ schema:
1129
+ $ref: "#/components/schemas/HTTPValidationError"
1130
+ "422":
1131
+ description: Validation Error
1132
+ content:
1133
+ application/json:
1134
+ schema:
1135
+ $ref: "#/components/schemas/HTTPValidationError"
1136
+ /v3/order/{order_id}/psc/appointment:
1137
+ parameters:
1138
+ - name: order_id
1139
+ in: path
1140
+ required: true
1141
+ schema:
1142
+ type: string
1143
+ format: uuid
1144
+ x-mockingbird-resource-ref:
1145
+ type: order
1146
+ missing: "00000000-0000-4000-8000-000000000000"
1147
+ get:
1148
+ operationId: get_psc_appointment_v3_order__order_id__psc_appointment_get
1149
+ x-mockingbird:
1150
+ supported: true
1151
+ parity:
1152
+ enabled: false
1153
+ safe: true
1154
+ reason: >-
1155
+ appointment payloads embed provider-side slot data; covered by the mock-internal
1156
+ scheduling property suite instead
1157
+ responses:
1158
+ "200":
1159
+ description: Successful Response
1160
+ content:
1161
+ application/json:
1162
+ schema:
1163
+ $ref: "#/components/schemas/ClientFacingAppointment"
1164
+ "404":
1165
+ description: No appointment for this order
1166
+ content:
1167
+ application/json:
1168
+ schema:
1169
+ $ref: "#/components/schemas/HTTPValidationError"
1170
+ "422":
1171
+ description: Validation Error
1172
+ content:
1173
+ application/json:
1174
+ schema:
1175
+ $ref: "#/components/schemas/HTTPValidationError"
1176
+ /v3/order/{order_id}/psc/appointment/book:
1177
+ parameters:
1178
+ - name: order_id
1179
+ in: path
1180
+ required: true
1181
+ schema:
1182
+ type: string
1183
+ format: uuid
1184
+ x-mockingbird-resource-ref:
1185
+ type: order
1186
+ missing: "00000000-0000-4000-8000-000000000000"
1187
+ post:
1188
+ operationId: book_psc_appointment_v3_order__order_id__psc_appointment_book_post
1189
+ x-mockingbird:
1190
+ supported: true
1191
+ parity:
1192
+ enabled: false
1193
+ safe: true
1194
+ reason: >-
1195
+ booking depends on live provider slot state; covered by the mock-internal scheduling
1196
+ property suite instead
1197
+ parameters:
1198
+ - name: x-idempotency-key
1199
+ in: header
1200
+ required: false
1201
+ schema:
1202
+ type: string
1203
+ requestBody:
1204
+ required: true
1205
+ content:
1206
+ application/json:
1207
+ schema:
1208
+ $ref: "#/components/schemas/PscAppointmentBookingRequest"
1209
+ responses:
1210
+ "200":
1211
+ description: Successful Response
1212
+ content:
1213
+ application/json:
1214
+ schema:
1215
+ $ref: "#/components/schemas/ClientFacingAppointment"
1216
+ "400":
1217
+ description: Booking failed
1218
+ content:
1219
+ application/json:
1220
+ schema:
1221
+ $ref: "#/components/schemas/HTTPValidationError"
1222
+ "404":
1223
+ description: Order not found
1224
+ content:
1225
+ application/json:
1226
+ schema:
1227
+ $ref: "#/components/schemas/HTTPValidationError"
1228
+ "422":
1229
+ description: Validation Error
1230
+ content:
1231
+ application/json:
1232
+ schema:
1233
+ $ref: "#/components/schemas/HTTPValidationError"
1234
+ /v3/order/{order_id}/psc/appointment/reschedule:
1235
+ parameters:
1236
+ - name: order_id
1237
+ in: path
1238
+ required: true
1239
+ schema:
1240
+ type: string
1241
+ format: uuid
1242
+ x-mockingbird-resource-ref:
1243
+ type: order
1244
+ missing: "00000000-0000-4000-8000-000000000000"
1245
+ patch:
1246
+ operationId: reschedule_psc_appointment_v3_order__order_id__psc_appointment_reschedule_patch
1247
+ x-mockingbird:
1248
+ supported: true
1249
+ parity:
1250
+ enabled: false
1251
+ safe: true
1252
+ reason: >-
1253
+ rescheduling depends on live provider slot state; covered by the mock-internal
1254
+ scheduling property suite instead
1255
+ requestBody:
1256
+ required: true
1257
+ content:
1258
+ application/json:
1259
+ schema:
1260
+ $ref: "#/components/schemas/AppointmentRescheduleRequest"
1261
+ responses:
1262
+ "200":
1263
+ description: Successful Response
1264
+ content:
1265
+ application/json:
1266
+ schema:
1267
+ $ref: "#/components/schemas/ClientFacingAppointment"
1268
+ "400":
1269
+ description: Invalid or expired booking key
1270
+ content:
1271
+ application/json:
1272
+ schema:
1273
+ $ref: "#/components/schemas/HTTPValidationError"
1274
+ "404":
1275
+ description: No appointment for this order
1276
+ content:
1277
+ application/json:
1278
+ schema:
1279
+ $ref: "#/components/schemas/HTTPValidationError"
1280
+ "422":
1281
+ description: Validation Error
1282
+ content:
1283
+ application/json:
1284
+ schema:
1285
+ $ref: "#/components/schemas/HTTPValidationError"
1286
+ /v3/order/{order_id}/psc/appointment/cancel:
1287
+ parameters:
1288
+ - name: order_id
1289
+ in: path
1290
+ required: true
1291
+ schema:
1292
+ type: string
1293
+ format: uuid
1294
+ x-mockingbird-resource-ref:
1295
+ type: order
1296
+ missing: "00000000-0000-4000-8000-000000000000"
1297
+ patch:
1298
+ operationId: cancel_psc_appointment_v3_order__order_id__psc_appointment_cancel_patch
1299
+ x-mockingbird:
1300
+ supported: true
1301
+ parity:
1302
+ enabled: false
1303
+ safe: true
1304
+ reason: >-
1305
+ cancellation depends on live provider appointment state; covered by the mock-internal
1306
+ scheduling property suite instead
1307
+ requestBody:
1308
+ required: true
1309
+ content:
1310
+ application/json:
1311
+ schema:
1312
+ $ref: "#/components/schemas/PscAppointmentCancelRequest"
1313
+ responses:
1314
+ "200":
1315
+ description: Successful Response
1316
+ content:
1317
+ application/json:
1318
+ schema:
1319
+ $ref: "#/components/schemas/ClientFacingAppointment"
1320
+ "400":
1321
+ description: Invalid cancellation reason
1322
+ content:
1323
+ application/json:
1324
+ schema:
1325
+ $ref: "#/components/schemas/HTTPValidationError"
1326
+ "404":
1327
+ description: No appointment for this order
1328
+ content:
1329
+ application/json:
1330
+ schema:
1331
+ $ref: "#/components/schemas/HTTPValidationError"
1332
+ "422":
1333
+ description: Validation Error
1334
+ content:
1335
+ application/json:
1336
+ schema:
1337
+ $ref: "#/components/schemas/HTTPValidationError"
1338
+ /v3/order/{order_id}:
1339
+ parameters:
1340
+ - name: order_id
1341
+ in: path
1342
+ required: true
1343
+ schema:
1344
+ type: string
1345
+ format: uuid
1346
+ x-mockingbird-resource-ref:
1347
+ type: order
1348
+ missing: "00000000-0000-4000-8000-000000000000"
1349
+ get:
1350
+ operationId: get_order_v3_order__order_id__get
1351
+ x-mockingbird:
1352
+ supported: true
1353
+ parity:
1354
+ enabled: true
1355
+ safe: true
1356
+ responses:
1357
+ "200":
1358
+ description: Successful Response
1359
+ content:
1360
+ application/json:
1361
+ schema:
1362
+ $ref: "#/components/schemas/ClientFacingOrder"
1363
+ "404":
1364
+ description: Not Found
1365
+ content:
1366
+ application/json:
1367
+ schema:
1368
+ $ref: "#/components/schemas/HTTPValidationError"
1369
+ /v3/order/{order_id}/cancel:
1370
+ parameters:
1371
+ - name: order_id
1372
+ in: path
1373
+ required: true
1374
+ schema:
1375
+ type: string
1376
+ format: uuid
1377
+ x-mockingbird-resource-ref:
1378
+ type: order
1379
+ missing: "00000000-0000-4000-8000-000000000000"
1380
+ post:
1381
+ operationId: cancel_order_v3_order__order_id__cancel_post
1382
+ x-mockingbird:
1383
+ supported: true
1384
+ parity:
1385
+ enabled: true
1386
+ safe: true
1387
+ responses:
1388
+ "200":
1389
+ description: Successful Response
1390
+ content:
1391
+ application/json:
1392
+ schema:
1393
+ $ref: "#/components/schemas/PostOrderResponse"
1394
+ "400":
1395
+ description: Order is not in a cancellable status
1396
+ content:
1397
+ application/json:
1398
+ schema:
1399
+ $ref: "#/components/schemas/HTTPValidationError"
1400
+ "404":
1401
+ description: Not Found
1402
+ content:
1403
+ application/json:
1404
+ schema:
1405
+ $ref: "#/components/schemas/HTTPValidationError"
1406
+ /v3/order/{order_id}/test:
1407
+ parameters:
1408
+ - name: order_id
1409
+ in: path
1410
+ required: true
1411
+ schema:
1412
+ type: string
1413
+ format: uuid
1414
+ x-mockingbird-resource-ref:
1415
+ type: order
1416
+ missing: "00000000-0000-4000-8000-000000000000"
1417
+ post:
1418
+ operationId: simulate_order_v3_order__order_id__test_post
1419
+ x-mockingbird:
1420
+ supported: true
1421
+ parity:
1422
+ enabled: true
1423
+ safe: true
1424
+ parameters:
1425
+ - name: final_status
1426
+ in: query
1427
+ required: true
1428
+ schema:
1429
+ type: string
1430
+ enum:
1431
+ - received.walk_in_test.ordered
1432
+ - received.walk_in_test.requisition_created
1433
+ - received.walk_in_test.requisition_bypassed
1434
+ - completed.walk_in_test.completed
1435
+ - sample_with_lab.walk_in_test.partial_results
1436
+ - failed.walk_in_test.sample_error
1437
+ - cancelled.walk_in_test.cancelled
1438
+ - collecting_sample.walk_in_test.appointment_pending
1439
+ - collecting_sample.walk_in_test.appointment_scheduled
1440
+ - collecting_sample.walk_in_test.appointment_cancelled
1441
+ - collecting_sample.walk_in_test.redraw_available
1442
+ - received.at_home_phlebotomy.ordered
1443
+ - received.at_home_phlebotomy.requisition_created
1444
+ - received.at_home_phlebotomy.requisition_bypassed
1445
+ - collecting_sample.at_home_phlebotomy.appointment_pending
1446
+ - collecting_sample.at_home_phlebotomy.appointment_scheduled
1447
+ - collecting_sample.at_home_phlebotomy.draw_completed
1448
+ - collecting_sample.at_home_phlebotomy.appointment_cancelled
1449
+ - completed.at_home_phlebotomy.completed
1450
+ - sample_with_lab.at_home_phlebotomy.partial_results
1451
+ - cancelled.at_home_phlebotomy.cancelled
1452
+ - failed.at_home_phlebotomy.sample_error
1453
+ - received.testkit.ordered
1454
+ - received.testkit.awaiting_registration
1455
+ - received.testkit.requisition_created
1456
+ - received.testkit.requisition_bypassed
1457
+ - received.testkit.registered
1458
+ - collecting_sample.testkit.transit_customer
1459
+ - collecting_sample.testkit.out_for_delivery
1460
+ - collecting_sample.testkit.with_customer
1461
+ - collecting_sample.testkit.transit_lab
1462
+ - sample_with_lab.testkit.delivered_to_lab
1463
+ - sample_with_lab.testkit.lab_processing_blocked
1464
+ - completed.testkit.completed
1465
+ - failed.testkit.failure_to_deliver_to_customer
1466
+ - failed.testkit.failure_to_deliver_to_lab
1467
+ - failed.testkit.sample_error
1468
+ - failed.testkit.lost
1469
+ - cancelled.testkit.cancelled
1470
+ - cancelled.testkit.do_not_process
1471
+ - collecting_sample.testkit.problem_in_transit_customer
1472
+ - collecting_sample.testkit.problem_in_transit_lab
1473
+ - received.on_site_collection.ordered
1474
+ - received.on_site_collection.requisition_created
1475
+ - received.on_site_collection.requisition_bypassed
1476
+ - sample_with_lab.on_site_collection.draw_completed
1477
+ - completed.on_site_collection.completed
1478
+ - cancelled.on_site_collection.cancelled
1479
+ - sample_with_lab.on_site_collection.partial_results
1480
+ - failed.on_site_collection.sample_error
1481
+ - completed.walk_in_test.corrected
1482
+ - completed.at_home_phlebotomy.corrected
1483
+ - completed.on_site_collection.corrected
1484
+ - completed.testkit.corrected
1485
+ - name: delay
1486
+ in: query
1487
+ required: false
1488
+ schema:
1489
+ type: integer
1490
+ minimum: 0
1491
+ description: Seconds to defer the status transition
1492
+ requestBody:
1493
+ required: false
1494
+ content:
1495
+ application/json:
1496
+ schema:
1497
+ $ref: "#/components/schemas/SimulationFlags"
1498
+ responses:
1499
+ "200":
1500
+ description: Successful Response
1501
+ content:
1502
+ text/plain:
1503
+ schema:
1504
+ type: string
1505
+ examples: [Success]
1506
+ "500":
1507
+ description: Observed sandbox response for immediate completion of a cancelled testkit (PR 173, 2026-09-29)
1508
+ content:
1509
+ text/plain:
1510
+ schema:
1511
+ type: string
1512
+ enum: [Internal Server Error]
1513
+ "404":
1514
+ description: Not Found
1515
+ content:
1516
+ application/json:
1517
+ schema:
1518
+ $ref: "#/components/schemas/HTTPValidationError"
1519
+ "422":
1520
+ description: Validation Error
1521
+ content:
1522
+ application/json:
1523
+ schema:
1524
+ $ref: "#/components/schemas/HTTPValidationError"
1525
+ /v3/order/{order_id}/result:
1526
+ parameters:
1527
+ - name: order_id
1528
+ in: path
1529
+ required: true
1530
+ schema:
1531
+ type: string
1532
+ format: uuid
1533
+ x-mockingbird-resource-ref:
1534
+ type: order
1535
+ missing: "00000000-0000-4000-8000-000000000000"
1536
+ get:
1537
+ operationId: get_result_raw_v3_order__order_id__result_get
1538
+ x-mockingbird:
1539
+ supported: true
1540
+ parity:
1541
+ enabled: false
1542
+ safe: true
1543
+ reason: >-
1544
+ results carry provider-side specimen data; covered by the mock-internal results
1545
+ property suite instead
1546
+ responses:
1547
+ "200":
1548
+ description: Successful Response
1549
+ content:
1550
+ application/json:
1551
+ schema:
1552
+ $ref: "#/components/schemas/LabResultsRaw"
1553
+ "404":
1554
+ description: Not Found
1555
+ content:
1556
+ application/json:
1557
+ schema:
1558
+ $ref: "#/components/schemas/HTTPValidationError"
1559
+ /v3/order/{order_id}/result/metadata:
1560
+ parameters:
1561
+ - name: order_id
1562
+ in: path
1563
+ required: true
1564
+ schema:
1565
+ type: string
1566
+ format: uuid
1567
+ x-mockingbird-resource-ref:
1568
+ type: order
1569
+ missing: "00000000-0000-4000-8000-000000000000"
1570
+ get:
1571
+ operationId: get_result_metadata_v3_order__order_id__result_metadata_get
1572
+ x-mockingbird:
1573
+ supported: true
1574
+ parity:
1575
+ enabled: true
1576
+ safe: true
1577
+ responses:
1578
+ "200":
1579
+ description: Successful Response
1580
+ content:
1581
+ application/json:
1582
+ schema:
1583
+ $ref: "#/components/schemas/LabResultsMetadata"
1584
+ "404":
1585
+ description: Not Found
1586
+ content:
1587
+ application/json:
1588
+ schema:
1589
+ $ref: "#/components/schemas/HTTPValidationError"
1590
+ /v3/order/{order_id}/result/pdf:
1591
+ parameters:
1592
+ - name: order_id
1593
+ in: path
1594
+ required: true
1595
+ schema:
1596
+ type: string
1597
+ format: uuid
1598
+ x-mockingbird-resource-ref:
1599
+ type: order
1600
+ missing: "00000000-0000-4000-8000-000000000000"
1601
+ get:
1602
+ operationId: get_result_pdf_v3_order__order_id__result_pdf_get
1603
+ x-mockingbird:
1604
+ supported: true
1605
+ parity:
1606
+ enabled: false
1607
+ safe: true
1608
+ reason: >-
1609
+ PDF bytes are provider-rendered; compared by shape (byteLength) only in the scenario
1610
+ script
1611
+ responses:
1612
+ "200":
1613
+ description: Successful Response
1614
+ content:
1615
+ application/pdf:
1616
+ schema:
1617
+ type: string
1618
+ format: binary
1619
+ "404":
1620
+ description: Not Found
1621
+ content:
1622
+ application/json:
1623
+ schema:
1624
+ $ref: "#/components/schemas/HTTPValidationError"
1625
+ /v3/order/{order_id}/requisition/pdf:
1626
+ parameters:
1627
+ - name: order_id
1628
+ in: path
1629
+ required: true
1630
+ schema:
1631
+ type: string
1632
+ format: uuid
1633
+ x-mockingbird-resource-ref:
1634
+ type: order
1635
+ missing: "00000000-0000-4000-8000-000000000000"
1636
+ get:
1637
+ operationId: get_order_requisition_pdf_v3_order__order_id__requisition_pdf_get
1638
+ x-mockingbird:
1639
+ supported: true
1640
+ parity:
1641
+ enabled: false
1642
+ safe: true
1643
+ reason: >-
1644
+ PDF bytes are provider-rendered; compared by shape (byteLength) only in the scenario
1645
+ script
1646
+ responses:
1647
+ "200":
1648
+ description: Successful Response
1649
+ content:
1650
+ application/pdf:
1651
+ schema:
1652
+ type: string
1653
+ format: binary
1654
+ "404":
1655
+ description: Not Found
1656
+ content:
1657
+ application/json:
1658
+ schema:
1659
+ $ref: "#/components/schemas/HTTPValidationError"
1660
+ /v3/orders:
1661
+ get:
1662
+ operationId: get_orders_v3_orders_get
1663
+ x-mockingbird:
1664
+ supported: true
1665
+ parity:
1666
+ enabled: true
1667
+ safe: true
1668
+ parameters:
1669
+ - name: user_id
1670
+ in: query
1671
+ required: true
1672
+ schema:
1673
+ type: string
1674
+ format: uuid
1675
+ x-mockingbird-resource-ref:
1676
+ type: user
1677
+ missing: "00000000-0000-4000-8000-000000000000"
1678
+ - name: page
1679
+ in: query
1680
+ required: false
1681
+ schema:
1682
+ type: integer
1683
+ minimum: 1
1684
+ default: 1
1685
+ - name: size
1686
+ in: query
1687
+ required: false
1688
+ schema:
1689
+ type: integer
1690
+ minimum: 1
1691
+ maximum: 100
1692
+ default: 50
1693
+ responses:
1694
+ "200":
1695
+ description: Successful Response
1696
+ content:
1697
+ application/json:
1698
+ schema:
1699
+ $ref: "#/components/schemas/GetOrdersResponse"
1700
+ "404":
1701
+ description: Not Found
1702
+ content:
1703
+ application/json:
1704
+ schema:
1705
+ $ref: "#/components/schemas/HTTPValidationError"
1706
+ "422":
1707
+ description: Validation Error
1708
+ content:
1709
+ application/json:
1710
+ schema:
1711
+ $ref: "#/components/schemas/HTTPValidationError"
1712
+ /v3/order_transaction/{transaction_id}:
1713
+ parameters:
1714
+ - name: transaction_id
1715
+ in: path
1716
+ required: true
1717
+ schema:
1718
+ type: string
1719
+ format: uuid
1720
+ x-mockingbird-resource-ref:
1721
+ type: order_transaction
1722
+ missing: "00000000-0000-4000-8000-000000000000"
1723
+ get:
1724
+ operationId: get_order_transaction_v3_order_transaction__transaction_id__get
1725
+ x-mockingbird:
1726
+ supported: true
1727
+ parity:
1728
+ enabled: false
1729
+ safe: true
1730
+ reason: order transactions are not available to the sandbox team (feature not available)
1731
+ responses:
1732
+ "200":
1733
+ description: Successful Response
1734
+ content:
1735
+ application/json:
1736
+ schema:
1737
+ $ref: "#/components/schemas/GetOrderTransactionResponse"
1738
+ "404":
1739
+ description: Not Found
1740
+ content:
1741
+ application/json:
1742
+ schema:
1743
+ $ref: "#/components/schemas/HTTPValidationError"
1744
+ /v3/order_transaction/{transaction_id}/result:
1745
+ parameters:
1746
+ - name: transaction_id
1747
+ in: path
1748
+ required: true
1749
+ schema:
1750
+ type: string
1751
+ format: uuid
1752
+ x-mockingbird-resource-ref:
1753
+ type: order_transaction
1754
+ missing: "00000000-0000-4000-8000-000000000000"
1755
+ get:
1756
+ operationId: get_order_transaction_result_v3_order_transaction__transaction_id__result_get
1757
+ x-mockingbird:
1758
+ supported: true
1759
+ parity:
1760
+ enabled: false
1761
+ safe: true
1762
+ reason: lab results are not available to the sandbox team (feature not available)
1763
+ responses:
1764
+ "200":
1765
+ description: Successful Response
1766
+ content:
1767
+ application/json:
1768
+ schema:
1769
+ $ref: "#/components/schemas/LabResultsRaw"
1770
+ "404":
1771
+ description: Not Found
1772
+ content:
1773
+ application/json:
1774
+ schema:
1775
+ $ref: "#/components/schemas/HTTPValidationError"
1776
+ components:
1777
+ securitySchemes:
1778
+ apiKeyAuth:
1779
+ type: apiKey
1780
+ in: header
1781
+ name: x-vital-api-key
1782
+ schemas:
1783
+ UserCreateBody:
1784
+ type: object
1785
+ required: [client_user_id]
1786
+ properties:
1787
+ client_user_id:
1788
+ type: string
1789
+ minLength: 1
1790
+ maxLength: 64
1791
+ examples: [mbr_8891, patient-1042, user.profile_52]
1792
+ fallback_time_zone:
1793
+ type: ["string", "null"]
1794
+ enum: [America/Los_Angeles, America/New_York, Europe/London, UTC, null]
1795
+ ClientFacingUser:
1796
+ type: object
1797
+ required:
1798
+ - user_id
1799
+ - team_id
1800
+ - client_user_id
1801
+ - created_on
1802
+ - connected_sources
1803
+ - fallback_time_zone
1804
+ properties:
1805
+ user_id:
1806
+ type: string
1807
+ format: uuid
1808
+ x-mockingbird-resource:
1809
+ type: user
1810
+ identity: true
1811
+ x-mockingbird-volatile:
1812
+ kind: id
1813
+ team_id:
1814
+ type: string
1815
+ format: uuid
1816
+ x-mockingbird-volatile:
1817
+ kind: account
1818
+ client_user_id:
1819
+ type: string
1820
+ created_on:
1821
+ type: string
1822
+ format: date-time
1823
+ x-mockingbird-volatile:
1824
+ kind: timestamp
1825
+ connected_sources:
1826
+ type: array
1827
+ items:
1828
+ type: object
1829
+ additionalProperties: true
1830
+ fallback_time_zone:
1831
+ type: ["object", "null"]
1832
+ properties:
1833
+ id:
1834
+ type: string
1835
+ source_slug:
1836
+ type: string
1837
+ updated_at:
1838
+ type: string
1839
+ format: date-time
1840
+ x-mockingbird-volatile:
1841
+ kind: timestamp
1842
+ fallback_birth_date:
1843
+ type: ["object", "null"]
1844
+ properties:
1845
+ value:
1846
+ type: string
1847
+ source_slug:
1848
+ type: string
1849
+ updated_at:
1850
+ type: string
1851
+ format: date-time
1852
+ x-mockingbird-volatile:
1853
+ kind: timestamp
1854
+ ingestion_start:
1855
+ type: ["string", "null"]
1856
+ ingestion_end:
1857
+ type: ["string", "null"]
1858
+ UserInfoPatchBody:
1859
+ type: object
1860
+ properties:
1861
+ first_name:
1862
+ type: [string, "null"]
1863
+ last_name:
1864
+ type: [string, "null"]
1865
+ dob:
1866
+ type: [string, "null"]
1867
+ gender:
1868
+ type: [string, "null"]
1869
+ phone_number:
1870
+ type: [string, "null"]
1871
+ email:
1872
+ type: [string, "null"]
1873
+ address:
1874
+ type: [object, "null"]
1875
+ additionalProperties: true
1876
+ UserInfo:
1877
+ type: object
1878
+ additionalProperties: true
1879
+ ClientUserIDConflictResponse:
1880
+ type: object
1881
+ required: [detail]
1882
+ properties:
1883
+ detail:
1884
+ type: object
1885
+ required: [error_type, error_message, user_id, created_on]
1886
+ properties:
1887
+ error_type:
1888
+ type: string
1889
+ error_message:
1890
+ type: string
1891
+ user_id:
1892
+ type: string
1893
+ format: uuid
1894
+ x-mockingbird-volatile:
1895
+ kind: id
1896
+ created_on:
1897
+ type: string
1898
+ format: date-time
1899
+ x-mockingbird-volatile:
1900
+ kind: timestamp
1901
+ UserSuccessResponse:
1902
+ type: object
1903
+ required: [success]
1904
+ properties:
1905
+ success:
1906
+ type: boolean
1907
+ PaginatedUsersResponse:
1908
+ type: object
1909
+ required: [users, total, offset, limit]
1910
+ properties:
1911
+ users:
1912
+ type: array
1913
+ items:
1914
+ $ref: "#/components/schemas/ClientFacingUser"
1915
+ total:
1916
+ type: integer
1917
+ offset:
1918
+ type: integer
1919
+ limit:
1920
+ type: integer
1921
+ UserPatchBody:
1922
+ type: object
1923
+ properties:
1924
+ fallback_time_zone:
1925
+ type: ["string", "null"]
1926
+ fallback_birth_date:
1927
+ type: ["string", "null"]
1928
+ format: date
1929
+ ingestion_start:
1930
+ type: ["string", "null"]
1931
+ format: date
1932
+ ingestion_end:
1933
+ type: ["string", "null"]
1934
+ format: date
1935
+ client_user_id:
1936
+ type: ["string", "null"]
1937
+ LabTestCollectionMethod:
1938
+ type: string
1939
+ enum: [testkit, walk_in_test, at_home_phlebotomy, on_site_collection]
1940
+ LabTestGenerationMethodFilter:
1941
+ type: string
1942
+ enum: [auto, manual, all]
1943
+ LabTestSampleType:
1944
+ type: string
1945
+ enum: [dried_blood_spot, arm_collector, serum, saliva, urine, stool]
1946
+ LabTestStatus:
1947
+ type: string
1948
+ enum: [active, pending_approval, inactive]
1949
+ MarkerType:
1950
+ type: string
1951
+ enum: [biomarker, panel]
1952
+ ClientFacingLab:
1953
+ type: object
1954
+ required:
1955
+ - id
1956
+ - slug
1957
+ - name
1958
+ - first_line_address
1959
+ - city
1960
+ - zipcode
1961
+ - collection_methods
1962
+ - sample_types
1963
+ properties:
1964
+ id:
1965
+ type: integer
1966
+ x-mockingbird-volatile:
1967
+ kind: id
1968
+ slug:
1969
+ type: string
1970
+ name:
1971
+ type: string
1972
+ first_line_address:
1973
+ type: string
1974
+ city:
1975
+ type: string
1976
+ zipcode:
1977
+ type: string
1978
+ collection_methods:
1979
+ type: array
1980
+ items:
1981
+ $ref: "#/components/schemas/LabTestCollectionMethod"
1982
+ sample_types:
1983
+ type: array
1984
+ items:
1985
+ $ref: "#/components/schemas/LabTestSampleType"
1986
+ logo_url:
1987
+ type: ["string", "null"]
1988
+ ClientFacingMarker:
1989
+ type: object
1990
+ required: [id, name, slug]
1991
+ properties:
1992
+ id:
1993
+ type: integer
1994
+ x-mockingbird-volatile:
1995
+ kind: id
1996
+ name:
1997
+ type: string
1998
+ slug:
1999
+ type: string
2000
+ description:
2001
+ type: ["string", "null"]
2002
+ lab_id:
2003
+ type: ["integer", "null"]
2004
+ provider_id:
2005
+ type: ["string", "null"]
2006
+ type:
2007
+ anyOf:
2008
+ - $ref: "#/components/schemas/MarkerType"
2009
+ - type: "null"
2010
+ unit:
2011
+ type: ["string", "null"]
2012
+ price:
2013
+ type: ["string", "null"]
2014
+ aoe:
2015
+ anyOf:
2016
+ - type: object
2017
+ additionalProperties: true
2018
+ - type: "null"
2019
+ a_la_carte_enabled:
2020
+ type: boolean
2021
+ default: false
2022
+ common_tat_days:
2023
+ type: ["integer", "null"]
2024
+ worst_case_tat_days:
2025
+ type: ["integer", "null"]
2026
+ is_orderable:
2027
+ type: ["boolean", "null"]
2028
+ default: true
2029
+ ClientFacingLabTest:
2030
+ type: object
2031
+ required:
2032
+ - id
2033
+ - slug
2034
+ - name
2035
+ - sample_type
2036
+ - method
2037
+ - price
2038
+ - is_active
2039
+ - status
2040
+ - lab
2041
+ - markers
2042
+ properties:
2043
+ id:
2044
+ type: string
2045
+ format: uuid
2046
+ x-mockingbird-resource:
2047
+ type: lab_test
2048
+ identity: true
2049
+ slug:
2050
+ type: string
2051
+ x-mockingbird-volatile:
2052
+ kind: token
2053
+ name:
2054
+ type: string
2055
+ x-mockingbird-volatile:
2056
+ kind: token
2057
+ sample_type:
2058
+ $ref: "#/components/schemas/LabTestSampleType"
2059
+ method:
2060
+ $ref: "#/components/schemas/LabTestCollectionMethod"
2061
+ price:
2062
+ type: number
2063
+ is_active:
2064
+ type: boolean
2065
+ status:
2066
+ $ref: "#/components/schemas/LabTestStatus"
2067
+ fasting:
2068
+ type: boolean
2069
+ default: false
2070
+ lab:
2071
+ anyOf:
2072
+ - $ref: "#/components/schemas/ClientFacingLab"
2073
+ - type: "null"
2074
+ markers:
2075
+ anyOf:
2076
+ - type: array
2077
+ items:
2078
+ $ref: "#/components/schemas/ClientFacingMarker"
2079
+ - type: "null"
2080
+ is_delegated:
2081
+ type: boolean
2082
+ default: false
2083
+ auto_generated:
2084
+ type: boolean
2085
+ default: false
2086
+ has_collection_instructions:
2087
+ type: ["boolean", "null"]
2088
+ common_tat_days:
2089
+ type: ["integer", "null"]
2090
+ worst_case_tat_days:
2091
+ type: ["integer", "null"]
2092
+ LabTestResourcesResponse:
2093
+ type: object
2094
+ required: [data, next_cursor]
2095
+ properties:
2096
+ data:
2097
+ type: array
2098
+ items:
2099
+ $ref: "#/components/schemas/ClientFacingLabTest"
2100
+ next_cursor:
2101
+ type: ["string", "null"]
2102
+ LabAccountStatus:
2103
+ type: string
2104
+ enum: [active, pending, suspended, ready_to_launch]
2105
+ LabAccountDelegatedFlow:
2106
+ type: string
2107
+ enum: [order_delegated, result_delegated, fully_delegated, not_delegated]
2108
+ USState:
2109
+ type: string
2110
+ enum:
2111
+ - AL
2112
+ - AK
2113
+ - AZ
2114
+ - AR
2115
+ - CA
2116
+ - CO
2117
+ - CT
2118
+ - DE
2119
+ - FL
2120
+ - GA
2121
+ - HI
2122
+ - ID
2123
+ - IL
2124
+ - IN
2125
+ - IA
2126
+ - KS
2127
+ - KY
2128
+ - LA
2129
+ - ME
2130
+ - MD
2131
+ - MA
2132
+ - MI
2133
+ - MN
2134
+ - MS
2135
+ - MO
2136
+ - MT
2137
+ - NE
2138
+ - NV
2139
+ - NH
2140
+ - NJ
2141
+ - NM
2142
+ - NY
2143
+ - NC
2144
+ - ND
2145
+ - OH
2146
+ - OK
2147
+ - OR
2148
+ - PA
2149
+ - RI
2150
+ - SC
2151
+ - SD
2152
+ - TN
2153
+ - TX
2154
+ - UT
2155
+ - VT
2156
+ - VA
2157
+ - WA
2158
+ - WV
2159
+ - WI
2160
+ - WY
2161
+ Labs:
2162
+ type: string
2163
+ enum:
2164
+ [
2165
+ ayumetrix,
2166
+ spiriplex,
2167
+ ussl,
2168
+ quest,
2169
+ sonora_quest,
2170
+ labcorp,
2171
+ bioreference,
2172
+ us_biotek,
2173
+ manual,
2174
+ sanocardio,
2175
+ ihd,
2176
+ nexus,
2177
+ my_uti,
2178
+ crl,
2179
+ mtl,
2180
+ ]
2181
+ ClientFacingLabAccount:
2182
+ type: object
2183
+ required: [id, lab, status, delegated_flow, provider_account_id, allowed_billing, team_id_allowlist]
2184
+ properties:
2185
+ id:
2186
+ type: string
2187
+ format: uuid
2188
+ x-mockingbird-resource:
2189
+ type: lab_account
2190
+ identity: true
2191
+ lab:
2192
+ $ref: "#/components/schemas/Labs"
2193
+ org_id:
2194
+ anyOf:
2195
+ - type: string
2196
+ format: uuid
2197
+ - type: "null"
2198
+ status:
2199
+ $ref: "#/components/schemas/LabAccountStatus"
2200
+ delegated_flow:
2201
+ $ref: "#/components/schemas/LabAccountDelegatedFlow"
2202
+ provider_account_id:
2203
+ type: string
2204
+ account_name:
2205
+ anyOf:
2206
+ - type: string
2207
+ - type: "null"
2208
+ default_clinical_notes:
2209
+ anyOf:
2210
+ - type: string
2211
+ - type: "null"
2212
+ business_units:
2213
+ anyOf:
2214
+ - type: array
2215
+ items:
2216
+ type: string
2217
+ - type: "null"
2218
+ allowed_billing:
2219
+ type: object
2220
+ propertyNames:
2221
+ $ref: "#/components/schemas/Billing"
2222
+ additionalProperties:
2223
+ type: array
2224
+ items:
2225
+ $ref: "#/components/schemas/USState"
2226
+ team_id_allowlist:
2227
+ type: array
2228
+ items:
2229
+ type: string
2230
+ format: uuid
2231
+ GetTeamLabAccountsResponse:
2232
+ type: object
2233
+ required: [data]
2234
+ properties:
2235
+ data:
2236
+ type: array
2237
+ items:
2238
+ $ref: "#/components/schemas/ClientFacingLabAccount"
2239
+ ClientFacingResult:
2240
+ type: object
2241
+ required: [name, slug, type]
2242
+ properties:
2243
+ name:
2244
+ type: string
2245
+ slug:
2246
+ type: string
2247
+ provider_id:
2248
+ type: ["string", "null"]
2249
+ type:
2250
+ $ref: "#/components/schemas/ResultType"
2251
+ value:
2252
+ type: ["number", "null"]
2253
+ unit:
2254
+ type: ["string", "null"]
2255
+ low_value:
2256
+ type: ["number", "null"]
2257
+ high_value:
2258
+ type: ["number", "null"]
2259
+ string_value:
2260
+ type: ["string", "null"]
2261
+ coded_value:
2262
+ type: ["string", "null"]
2263
+ is_abnormal:
2264
+ type: boolean
2265
+ default: false
2266
+ notes:
2267
+ type: ["string", "null"]
2268
+ GetMarkersResponse:
2269
+ type: object
2270
+ required: [markers]
2271
+ properties:
2272
+ markers:
2273
+ type: array
2274
+ items:
2275
+ $ref: "#/components/schemas/ClientFacingMarkerComplete"
2276
+ total:
2277
+ type: ["integer", "null"]
2278
+ page:
2279
+ type: ["integer", "null"]
2280
+ size:
2281
+ type: ["integer", "null"]
2282
+ pages:
2283
+ type: ["integer", "null"]
2284
+ ClientFacingExpectedResult:
2285
+ type: object
2286
+ required: [id, name, slug, required]
2287
+ properties:
2288
+ id:
2289
+ type: integer
2290
+ x-mockingbird-volatile:
2291
+ kind: id
2292
+ name:
2293
+ type: string
2294
+ slug:
2295
+ type: string
2296
+ lab_id:
2297
+ type: ["integer", "null"]
2298
+ provider_id:
2299
+ type: ["string", "null"]
2300
+ required:
2301
+ type: boolean
2302
+ loinc:
2303
+ type: ["object", "null"]
2304
+ required: [id, name, slug, code]
2305
+ properties:
2306
+ id:
2307
+ type: integer
2308
+ x-mockingbird-volatile:
2309
+ kind: id
2310
+ name:
2311
+ type: string
2312
+ slug:
2313
+ type: string
2314
+ code:
2315
+ type: string
2316
+ unit:
2317
+ type: ["string", "null"]
2318
+ ClientFacingMarkerComplete:
2319
+ type: object
2320
+ required: [id, name, slug, expected_results]
2321
+ properties:
2322
+ id:
2323
+ type: integer
2324
+ x-mockingbird-volatile:
2325
+ kind: id
2326
+ name:
2327
+ type: string
2328
+ slug:
2329
+ type: string
2330
+ description:
2331
+ type: ["string", "null"]
2332
+ lab_id:
2333
+ type: ["integer", "null"]
2334
+ provider_id:
2335
+ type: ["string", "null"]
2336
+ type:
2337
+ anyOf:
2338
+ - $ref: "#/components/schemas/MarkerType"
2339
+ - type: "null"
2340
+ unit:
2341
+ type: ["string", "null"]
2342
+ price:
2343
+ type: ["string", "null"]
2344
+ a_la_carte_enabled:
2345
+ type: boolean
2346
+ default: false
2347
+ common_tat_days:
2348
+ type: ["integer", "null"]
2349
+ worst_case_tat_days:
2350
+ type: ["integer", "null"]
2351
+ is_orderable:
2352
+ type: ["boolean", "null"]
2353
+ default: true
2354
+ expected_results:
2355
+ type: array
2356
+ items:
2357
+ $ref: "#/components/schemas/ClientFacingExpectedResult"
2358
+ ListOrderSetMarkersRequest:
2359
+ type: object
2360
+ required: [order_set_id]
2361
+ properties:
2362
+ order_set_id:
2363
+ type: string
2364
+ format: uuid
2365
+ x-mockingbird-resource-ref:
2366
+ type: order_transaction
2367
+ missing: "00000000-0000-4000-8000-000000000000"
2368
+ provider_id:
2369
+ type: ["string", "null"]
2370
+ AllowedRadius:
2371
+ type: integer
2372
+ enum: [10, 20, 25, 50, 100]
2373
+ AppointmentPscLabs:
2374
+ type: string
2375
+ enum: [quest]
2376
+ AppointmentProvider:
2377
+ type: string
2378
+ enum: [getlabs, phlebfinders, quest]
2379
+ AppointmentType:
2380
+ type: string
2381
+ enum: [phlebotomy, patient_service_center]
2382
+ AppointmentStatus:
2383
+ type: string
2384
+ enum: [confirmed, pending, reserved, in_progress, completed, cancelled]
2385
+ AppointmentEventStatus:
2386
+ type: string
2387
+ enum: [pending, reserved, scheduled, completed, cancelled, in_progress]
2388
+ AppointmentServiceType:
2389
+ type: string
2390
+ enum: [appointment-ready, appointment-request]
2391
+ Billing:
2392
+ type: string
2393
+ enum: [client_bill, commercial_insurance, patient_bill_passthrough, patient_bill]
2394
+ LabLocationCapability:
2395
+ type: string
2396
+ enum: [stat, appointment_scheduling_via_junction, appointment_scheduling_with_lab]
2397
+ LngLat:
2398
+ type: object
2399
+ required: [lng, lat]
2400
+ properties:
2401
+ lng:
2402
+ type: number
2403
+ lat:
2404
+ type: number
2405
+ UsAddress:
2406
+ type: object
2407
+ required: [first_line, city, state, zip_code]
2408
+ properties:
2409
+ first_line:
2410
+ type: string
2411
+ minLength: 1
2412
+ second_line:
2413
+ type: ["string", "null"]
2414
+ city:
2415
+ type: string
2416
+ minLength: 1
2417
+ state:
2418
+ type: string
2419
+ minLength: 1
2420
+ zip_code:
2421
+ type: string
2422
+ minLength: 1
2423
+ unit:
2424
+ type: ["string", "null"]
2425
+ AppointmentLocation:
2426
+ type: object
2427
+ required: [location, address, code, name]
2428
+ properties:
2429
+ location:
2430
+ $ref: "#/components/schemas/LngLat"
2431
+ distance:
2432
+ type: ["number", "null"]
2433
+ address:
2434
+ $ref: "#/components/schemas/UsAddress"
2435
+ code:
2436
+ type: string
2437
+ name:
2438
+ type: string
2439
+ iana_timezone:
2440
+ type: ["string", "null"]
2441
+ TimeSlot:
2442
+ type: object
2443
+ required: [start, end, price, is_priority, num_appointments_available]
2444
+ properties:
2445
+ booking_key:
2446
+ type: ["string", "null"]
2447
+ x-mockingbird-resource:
2448
+ type: booking_key
2449
+ identity: true
2450
+ x-mockingbird-volatile:
2451
+ kind: token
2452
+ start:
2453
+ type: string
2454
+ format: date-time
2455
+ x-mockingbird-volatile:
2456
+ kind: timestamp
2457
+ end:
2458
+ type: string
2459
+ format: date-time
2460
+ x-mockingbird-volatile:
2461
+ kind: timestamp
2462
+ expires_at:
2463
+ type: ["string", "null"]
2464
+ x-mockingbird-volatile:
2465
+ kind: timestamp
2466
+ price:
2467
+ type: number
2468
+ is_priority:
2469
+ type: boolean
2470
+ num_appointments_available:
2471
+ type: integer
2472
+ DaySlots:
2473
+ type: object
2474
+ required: [date, slots]
2475
+ properties:
2476
+ location:
2477
+ anyOf:
2478
+ - $ref: "#/components/schemas/AppointmentLocation"
2479
+ - type: "null"
2480
+ date:
2481
+ type: string
2482
+ format: date
2483
+ slots:
2484
+ type: array
2485
+ items:
2486
+ $ref: "#/components/schemas/TimeSlot"
2487
+ AppointmentAvailabilitySlots:
2488
+ type: object
2489
+ required: [slots]
2490
+ properties:
2491
+ slots:
2492
+ type: array
2493
+ items:
2494
+ $ref: "#/components/schemas/DaySlots"
2495
+ timezone:
2496
+ type: ["string", "null"]
2497
+ AppointmentBookingRequest:
2498
+ type: object
2499
+ required: [booking_key]
2500
+ properties:
2501
+ booking_key:
2502
+ type: string
2503
+ minLength: 1
2504
+ x-mockingbird-resource-ref:
2505
+ type: booking_key
2506
+ AppointmentRescheduleRequest:
2507
+ type: object
2508
+ required: [booking_key]
2509
+ properties:
2510
+ booking_key:
2511
+ type: string
2512
+ minLength: 1
2513
+ x-mockingbird-resource-ref:
2514
+ type: booking_key
2515
+ PscAppointmentBookingRequest:
2516
+ type: object
2517
+ required: [booking_key, site_code]
2518
+ properties:
2519
+ booking_key:
2520
+ type: string
2521
+ minLength: 1
2522
+ x-mockingbird-resource-ref:
2523
+ type: booking_key
2524
+ site_code:
2525
+ type: string
2526
+ minLength: 1
2527
+ PhlebotomyAppointmentCancelRequest:
2528
+ type: object
2529
+ required: [cancellation_reason_id]
2530
+ properties:
2531
+ cancellation_reason_id:
2532
+ type: string
2533
+ minLength: 1
2534
+ notes:
2535
+ type: ["string", "null"]
2536
+ PscAppointmentCancelRequest:
2537
+ type: object
2538
+ required: [cancellationReasonId]
2539
+ properties:
2540
+ cancellationReasonId:
2541
+ type: string
2542
+ minLength: 1
2543
+ note:
2544
+ type: ["string", "null"]
2545
+ ClientFacingAppointmentEvent:
2546
+ type: object
2547
+ required: [created_at, status]
2548
+ properties:
2549
+ created_at:
2550
+ type: string
2551
+ format: date-time
2552
+ x-mockingbird-volatile:
2553
+ kind: timestamp
2554
+ status:
2555
+ $ref: "#/components/schemas/AppointmentEventStatus"
2556
+ data:
2557
+ anyOf:
2558
+ - type: object
2559
+ additionalProperties: true
2560
+ - type: "null"
2561
+ ClientFacingAppointment:
2562
+ type: object
2563
+ required:
2564
+ - id
2565
+ - user_id
2566
+ - order_id
2567
+ - address
2568
+ - location
2569
+ - type
2570
+ - provider
2571
+ - status
2572
+ - provider_id
2573
+ - can_reschedule
2574
+ - event_status
2575
+ - events
2576
+ properties:
2577
+ id:
2578
+ type: string
2579
+ format: uuid
2580
+ x-mockingbird-resource:
2581
+ type: appointment
2582
+ identity: true
2583
+ x-mockingbird-volatile:
2584
+ kind: id
2585
+ user_id:
2586
+ type: string
2587
+ format: uuid
2588
+ x-mockingbird-resource-ref:
2589
+ type: user
2590
+ order_id:
2591
+ type: string
2592
+ format: uuid
2593
+ x-mockingbird-resource-ref:
2594
+ type: order
2595
+ address:
2596
+ $ref: "#/components/schemas/UsAddress"
2597
+ location:
2598
+ $ref: "#/components/schemas/LngLat"
2599
+ start_at:
2600
+ anyOf:
2601
+ - type: string
2602
+ format: date-time
2603
+ - type: "null"
2604
+ x-mockingbird-volatile:
2605
+ kind: timestamp
2606
+ end_at:
2607
+ anyOf:
2608
+ - type: string
2609
+ format: date-time
2610
+ - type: "null"
2611
+ x-mockingbird-volatile:
2612
+ kind: timestamp
2613
+ iana_timezone:
2614
+ type: ["string", "null"]
2615
+ type:
2616
+ $ref: "#/components/schemas/AppointmentType"
2617
+ provider:
2618
+ $ref: "#/components/schemas/AppointmentProvider"
2619
+ status:
2620
+ $ref: "#/components/schemas/AppointmentStatus"
2621
+ provider_id:
2622
+ type: string
2623
+ x-mockingbird-volatile:
2624
+ kind: id
2625
+ external_id:
2626
+ type: ["string", "null"]
2627
+ x-mockingbird-volatile:
2628
+ kind: id
2629
+ can_reschedule:
2630
+ type: boolean
2631
+ event_status:
2632
+ $ref: "#/components/schemas/AppointmentEventStatus"
2633
+ event_data:
2634
+ anyOf:
2635
+ - type: object
2636
+ additionalProperties: true
2637
+ - type: "null"
2638
+ order_transaction_id:
2639
+ type: ["string", "null"]
2640
+ x-mockingbird-resource-ref:
2641
+ type: order_transaction
2642
+ appointment_notes:
2643
+ type: ["string", "null"]
2644
+ events:
2645
+ type: array
2646
+ items:
2647
+ $ref: "#/components/schemas/ClientFacingAppointmentEvent"
2648
+ ClientFacingAppointmentCancellationReason:
2649
+ type: object
2650
+ required: [id, name, is_refundable]
2651
+ properties:
2652
+ id:
2653
+ type: string
2654
+ x-mockingbird-volatile:
2655
+ kind: id
2656
+ name:
2657
+ type: string
2658
+ is_refundable:
2659
+ type: boolean
2660
+ PhlebotomyAreaInfo:
2661
+ type: object
2662
+ required: [is_served, providers]
2663
+ properties:
2664
+ is_served:
2665
+ type: boolean
2666
+ providers:
2667
+ type: array
2668
+ items:
2669
+ $ref: "#/components/schemas/PhlebotomyProviderInfo"
2670
+ PhlebotomyProviderInfo:
2671
+ type: object
2672
+ required: [name, service_types]
2673
+ properties:
2674
+ name:
2675
+ $ref: "#/components/schemas/AppointmentProvider"
2676
+ service_types:
2677
+ type: array
2678
+ items:
2679
+ $ref: "#/components/schemas/AppointmentServiceType"
2680
+ PscAreaInfoDetails:
2681
+ type: object
2682
+ required: [appointment_with_vital, within_radius, radius]
2683
+ properties:
2684
+ appointment_with_vital:
2685
+ type: boolean
2686
+ within_radius:
2687
+ type: number
2688
+ radius:
2689
+ type: string
2690
+ capabilities:
2691
+ type: ["array", "null"]
2692
+ items:
2693
+ $ref: "#/components/schemas/LabLocationCapability"
2694
+ PscAreaInfo:
2695
+ type: object
2696
+ required: [patient_service_centers, supported_bill_types, lab_id]
2697
+ properties:
2698
+ patient_service_centers:
2699
+ $ref: "#/components/schemas/PscAreaInfoDetails"
2700
+ supported_bill_types:
2701
+ type: array
2702
+ items:
2703
+ $ref: "#/components/schemas/Billing"
2704
+ lab_id:
2705
+ type: integer
2706
+ AreaInfo:
2707
+ type: object
2708
+ required: [zip_code, phlebotomy, central_labs]
2709
+ properties:
2710
+ zip_code:
2711
+ type: string
2712
+ phlebotomy:
2713
+ $ref: "#/components/schemas/PhlebotomyAreaInfo"
2714
+ central_labs:
2715
+ type: object
2716
+ additionalProperties:
2717
+ $ref: "#/components/schemas/PscAreaInfo"
2718
+ LabLocationMetadata:
2719
+ type: object
2720
+ required: [name, state, city, zip_code, first_line]
2721
+ properties:
2722
+ name:
2723
+ type: string
2724
+ state:
2725
+ type: string
2726
+ city:
2727
+ type: string
2728
+ zip_code:
2729
+ type: string
2730
+ first_line:
2731
+ type: string
2732
+ second_line:
2733
+ type: ["string", "null"]
2734
+ phone_number:
2735
+ type: ["string", "null"]
2736
+ fax_number:
2737
+ type: ["string", "null"]
2738
+ hours:
2739
+ type: ["object", "null"]
2740
+ additionalProperties: true
2741
+ ClientFacingLabLocation:
2742
+ type: object
2743
+ required: [metadata, distance, site_code, supported_bill_types, location, capabilities]
2744
+ properties:
2745
+ metadata:
2746
+ $ref: "#/components/schemas/LabLocationMetadata"
2747
+ distance:
2748
+ type: number
2749
+ site_code:
2750
+ type: string
2751
+ supported_bill_types:
2752
+ type: array
2753
+ items:
2754
+ $ref: "#/components/schemas/Billing"
2755
+ location:
2756
+ $ref: "#/components/schemas/LngLat"
2757
+ capabilities:
2758
+ type: array
2759
+ items:
2760
+ $ref: "#/components/schemas/LabLocationCapability"
2761
+ PscInfo:
2762
+ type: object
2763
+ required: [lab_id, slug, patient_service_centers]
2764
+ properties:
2765
+ lab_id:
2766
+ type: integer
2767
+ slug:
2768
+ type: string
2769
+ patient_service_centers:
2770
+ type: array
2771
+ items:
2772
+ $ref: "#/components/schemas/ClientFacingLabLocation"
2773
+ OrderTopLevelStatus:
2774
+ type: string
2775
+ enum: [received, collecting_sample, sample_with_lab, completed, cancelled, failed]
2776
+ OrderLowLevelStatus:
2777
+ type: string
2778
+ enum:
2779
+ - ordered
2780
+ - requisition_created
2781
+ - requisition_bypassed
2782
+ - transit_customer
2783
+ - out_for_delivery
2784
+ - with_customer
2785
+ - transit_lab
2786
+ - delivered_to_lab
2787
+ - completed
2788
+ - failure_to_deliver_to_lab
2789
+ - failure_to_deliver_to_customer
2790
+ - problem_in_transit_lab
2791
+ - problem_in_transit_customer
2792
+ - sample_error
2793
+ - appointment_scheduled
2794
+ - appointment_cancelled
2795
+ - appointment_pending
2796
+ - draw_completed
2797
+ - cancelled
2798
+ - lost
2799
+ - do_not_process
2800
+ - partial_results
2801
+ - awaiting_registration
2802
+ - registered
2803
+ - redraw_available
2804
+ - corrected
2805
+ - lab_processing_blocked
2806
+ OrderStatus:
2807
+ type: string
2808
+ enum:
2809
+ - received.walk_in_test.ordered
2810
+ - received.walk_in_test.requisition_created
2811
+ - received.walk_in_test.requisition_bypassed
2812
+ - completed.walk_in_test.completed
2813
+ - sample_with_lab.walk_in_test.partial_results
2814
+ - failed.walk_in_test.sample_error
2815
+ - cancelled.walk_in_test.cancelled
2816
+ - collecting_sample.walk_in_test.appointment_pending
2817
+ - collecting_sample.walk_in_test.appointment_scheduled
2818
+ - collecting_sample.walk_in_test.appointment_cancelled
2819
+ - collecting_sample.walk_in_test.redraw_available
2820
+ - received.at_home_phlebotomy.ordered
2821
+ - received.at_home_phlebotomy.requisition_created
2822
+ - received.at_home_phlebotomy.requisition_bypassed
2823
+ - collecting_sample.at_home_phlebotomy.appointment_pending
2824
+ - collecting_sample.at_home_phlebotomy.appointment_scheduled
2825
+ - collecting_sample.at_home_phlebotomy.draw_completed
2826
+ - collecting_sample.at_home_phlebotomy.appointment_cancelled
2827
+ - completed.at_home_phlebotomy.completed
2828
+ - sample_with_lab.at_home_phlebotomy.partial_results
2829
+ - cancelled.at_home_phlebotomy.cancelled
2830
+ - failed.at_home_phlebotomy.sample_error
2831
+ - received.testkit.ordered
2832
+ - received.testkit.awaiting_registration
2833
+ - received.testkit.requisition_created
2834
+ - received.testkit.requisition_bypassed
2835
+ - received.testkit.registered
2836
+ - collecting_sample.testkit.transit_customer
2837
+ - collecting_sample.testkit.out_for_delivery
2838
+ - collecting_sample.testkit.with_customer
2839
+ - collecting_sample.testkit.transit_lab
2840
+ - sample_with_lab.testkit.delivered_to_lab
2841
+ - sample_with_lab.testkit.lab_processing_blocked
2842
+ - completed.testkit.completed
2843
+ - failed.testkit.failure_to_deliver_to_customer
2844
+ - failed.testkit.failure_to_deliver_to_lab
2845
+ - failed.testkit.sample_error
2846
+ - failed.testkit.lost
2847
+ - cancelled.testkit.cancelled
2848
+ - cancelled.testkit.do_not_process
2849
+ - collecting_sample.testkit.problem_in_transit_customer
2850
+ - collecting_sample.testkit.problem_in_transit_lab
2851
+ - received.on_site_collection.ordered
2852
+ - received.on_site_collection.requisition_created
2853
+ - received.on_site_collection.requisition_bypassed
2854
+ - sample_with_lab.on_site_collection.draw_completed
2855
+ - completed.on_site_collection.completed
2856
+ - cancelled.on_site_collection.cancelled
2857
+ - sample_with_lab.on_site_collection.partial_results
2858
+ - failed.on_site_collection.sample_error
2859
+ - completed.walk_in_test.corrected
2860
+ - completed.at_home_phlebotomy.corrected
2861
+ - completed.on_site_collection.corrected
2862
+ - completed.testkit.corrected
2863
+ OrderStatusDetail:
2864
+ type: string
2865
+ enum:
2866
+ - fulfillment_error
2867
+ - date_of_collection_unspecified
2868
+ - demographic_information_unspecified
2869
+ - demographic_information_mismatch
2870
+ - sample_quantity_not_sufficient
2871
+ - sample_contaminated
2872
+ - sample_stability_exceeded
2873
+ - sample_hemolyzed
2874
+ - sample_improper_collection
2875
+ OrderTransactionStatus:
2876
+ type: string
2877
+ enum: [active, completed, cancelled]
2878
+ ClientFacingOrderEvent:
2879
+ type: object
2880
+ required: [id, created_at, status]
2881
+ properties:
2882
+ id:
2883
+ type: integer
2884
+ x-mockingbird-volatile:
2885
+ kind: opaque
2886
+ created_at:
2887
+ type: string
2888
+ format: date-time
2889
+ x-mockingbird-volatile:
2890
+ kind: timestamp
2891
+ status:
2892
+ $ref: "#/components/schemas/OrderStatus"
2893
+ status_detail:
2894
+ anyOf:
2895
+ - $ref: "#/components/schemas/OrderStatusDetail"
2896
+ - type: "null"
2897
+ ShippingAddress:
2898
+ type: object
2899
+ required: [receiver_name, first_line, city, state, zip, country, phone_number]
2900
+ properties:
2901
+ receiver_name:
2902
+ type: string
2903
+ first_line:
2904
+ type: string
2905
+ second_line:
2906
+ type: ["string", "null"]
2907
+ city:
2908
+ type: string
2909
+ state:
2910
+ type: string
2911
+ zip:
2912
+ type: string
2913
+ country:
2914
+ type: string
2915
+ phone_number:
2916
+ type: string
2917
+ ClientFacingPhysician:
2918
+ type: object
2919
+ required: [first_name, last_name, npi]
2920
+ properties:
2921
+ first_name:
2922
+ type: string
2923
+ last_name:
2924
+ type: string
2925
+ npi:
2926
+ type: string
2927
+ ClientFacingShipment:
2928
+ type: object
2929
+ required:
2930
+ - id
2931
+ - outbound_tracking_number
2932
+ - outbound_tracking_url
2933
+ - inbound_tracking_number
2934
+ - inbound_tracking_url
2935
+ - outbound_courier
2936
+ - inbound_courier
2937
+ - notes
2938
+ properties:
2939
+ id:
2940
+ type: string
2941
+ format: uuid
2942
+ x-mockingbird-volatile:
2943
+ kind: id
2944
+ outbound_tracking_number:
2945
+ type: ["string", "null"]
2946
+ outbound_tracking_url:
2947
+ type: ["string", "null"]
2948
+ inbound_tracking_number:
2949
+ type: ["string", "null"]
2950
+ inbound_tracking_url:
2951
+ type: ["string", "null"]
2952
+ outbound_courier:
2953
+ type: ["string", "null"]
2954
+ inbound_courier:
2955
+ type: ["string", "null"]
2956
+ notes:
2957
+ type: ["string", "null"]
2958
+ ClientFacingTestkitOrder:
2959
+ type: object
2960
+ required: [id, shipment, created_at, updated_at]
2961
+ properties:
2962
+ id:
2963
+ type: string
2964
+ format: uuid
2965
+ x-mockingbird-volatile:
2966
+ kind: id
2967
+ shipment:
2968
+ anyOf:
2969
+ - $ref: "#/components/schemas/ClientFacingShipment"
2970
+ - type: "null"
2971
+ # Sandbox assigns shipment asynchronously after testkit order creation
2972
+ # while the mock models it as null until parity catches the race —
2973
+ # treat null vs object as equivalent (same class as sample_id).
2974
+ x-mockingbird-volatile:
2975
+ kind: opaque
2976
+ created_at:
2977
+ type: string
2978
+ format: date-time
2979
+ x-mockingbird-volatile:
2980
+ kind: timestamp
2981
+ updated_at:
2982
+ type: string
2983
+ format: date-time
2984
+ x-mockingbird-volatile:
2985
+ kind: timestamp
2986
+ ClientFacingWalkInOrder:
2987
+ type: object
2988
+ required: [id, appointment_id, created_at, updated_at]
2989
+ properties:
2990
+ id:
2991
+ type: string
2992
+ format: uuid
2993
+ x-mockingbird-volatile:
2994
+ kind: id
2995
+ appointment_id:
2996
+ anyOf:
2997
+ - type: string
2998
+ format: uuid
2999
+ - type: "null"
3000
+ created_at:
3001
+ type: string
3002
+ format: date-time
3003
+ x-mockingbird-volatile:
3004
+ kind: timestamp
3005
+ updated_at:
3006
+ type: string
3007
+ format: date-time
3008
+ x-mockingbird-volatile:
3009
+ kind: timestamp
3010
+ ClientFacingTestKitOrderDetails:
3011
+ type: object
3012
+ required: [type]
3013
+ properties:
3014
+ type:
3015
+ type: string
3016
+ enum: [testkit, walk_in_test, at_home_phlebotomy, on_site_collection]
3017
+ data:
3018
+ anyOf:
3019
+ - $ref: "#/components/schemas/ClientFacingTestkitOrder"
3020
+ - $ref: "#/components/schemas/ClientFacingWalkInOrder"
3021
+ - type: "null"
3022
+ ClientFacingPatientDetailsCompatible:
3023
+ type: object
3024
+ required: [first_name, last_name, dob, gender, phone_number, email]
3025
+ properties:
3026
+ first_name:
3027
+ type: string
3028
+ minLength: 1
3029
+ pattern: "^[a-zA-Z0-9][a-zA-Z0-9 .,'-]*$"
3030
+ examples: [Ada, Chris, Maria, Jun]
3031
+ last_name:
3032
+ type: string
3033
+ minLength: 1
3034
+ pattern: "^[a-zA-Z0-9][a-zA-Z0-9 .,'-]*$"
3035
+ examples: [Lovelace, Vouga, Delgado, Park]
3036
+ dob:
3037
+ type: string
3038
+ format: date-time
3039
+ examples: [1990-06-15T00:00:00.000Z, 1983-02-02T00:00:00.000Z]
3040
+ gender:
3041
+ type: string
3042
+ minLength: 1
3043
+ pattern: "\\S"
3044
+ examples: [male, female, other, prefer_not_to_say]
3045
+ phone_number:
3046
+ type: string
3047
+ minLength: 1
3048
+ pattern: "^\\+1[2-9]\\d{9}$"
3049
+ examples: ["+14155550123", "+12125550987", "+13105554444"]
3050
+ email:
3051
+ type: string
3052
+ format: email
3053
+ minLength: 1
3054
+ examples: [ada@example.com, chris@example.com, maria@example.com]
3055
+ PatientAddressCompatible:
3056
+ type: object
3057
+ required: [first_line, city, state, zip, country]
3058
+ properties:
3059
+ receiver_name:
3060
+ type: string
3061
+ default: ""
3062
+ examples: [Ada Lovelace, Chris Vouga]
3063
+ first_line:
3064
+ type: string
3065
+ minLength: 1
3066
+ pattern: "\\S"
3067
+ examples: ["1 Main St", "450 Market St", "88 Kearny St"]
3068
+ second_line:
3069
+ type: ["string", "null"]
3070
+ city:
3071
+ type: string
3072
+ minLength: 1
3073
+ pattern: "\\S"
3074
+ examples: [San Diego, San Francisco, New York]
3075
+ state:
3076
+ type: string
3077
+ minLength: 1
3078
+ enum: [AL, AK, AZ, AR, CA, CO, CT, DE, FL, GA, HI, ID, IL, IN, IA, KS, KY, LA, ME, MD, MA, MI, MN, MS, MO, MT, NE, NV, NH, NJ, NM, NY, NC, ND, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VT, VA, WA, WV, WI, WY]
3079
+ zip:
3080
+ type: string
3081
+ pattern: "^\\d{5}(-\\d{4})?$"
3082
+ examples: ["92101", "94105", "10001"]
3083
+ country:
3084
+ type: string
3085
+ minLength: 1
3086
+ pattern: "\\S"
3087
+ examples: [US]
3088
+ access_notes:
3089
+ type: ["string", "null"]
3090
+ examples: [null]
3091
+ phone_number:
3092
+ type: ["string", "null"]
3093
+ examples: ["+14155550123", null]
3094
+ AoeAnswerRequest:
3095
+ type: object
3096
+ required: [marker_id, question_id, answer]
3097
+ properties:
3098
+ marker_id:
3099
+ type: integer
3100
+ examples: [2075, 1975]
3101
+ question_id:
3102
+ type: integer
3103
+ examples: [1]
3104
+ answer:
3105
+ type: string
3106
+ minLength: 1
3107
+ examples: [No, Yes]
3108
+ ClientFacingOrderInTransaction:
3109
+ type: object
3110
+ required: [id, created_at, updated_at]
3111
+ properties:
3112
+ id:
3113
+ type: string
3114
+ format: uuid
3115
+ low_level_status:
3116
+ anyOf:
3117
+ - $ref: "#/components/schemas/OrderLowLevelStatus"
3118
+ - type: "null"
3119
+ low_level_status_created_at:
3120
+ anyOf:
3121
+ - type: string
3122
+ format: date-time
3123
+ - type: "null"
3124
+ x-mockingbird-volatile:
3125
+ kind: timestamp
3126
+ created_at:
3127
+ type: string
3128
+ format: date-time
3129
+ x-mockingbird-volatile:
3130
+ kind: timestamp
3131
+ updated_at:
3132
+ type: string
3133
+ format: date-time
3134
+ x-mockingbird-volatile:
3135
+ kind: timestamp
3136
+ ClientFacingOrderTransaction:
3137
+ type: object
3138
+ required: [id, status, orders]
3139
+ properties:
3140
+ id:
3141
+ type: string
3142
+ format: uuid
3143
+ x-mockingbird-resource:
3144
+ type: order_transaction
3145
+ identity: true
3146
+ x-mockingbird-volatile:
3147
+ kind: id
3148
+ status:
3149
+ $ref: "#/components/schemas/OrderTransactionStatus"
3150
+ orders:
3151
+ type: array
3152
+ items:
3153
+ $ref: "#/components/schemas/ClientFacingOrderInTransaction"
3154
+ OrderSummary:
3155
+ type: object
3156
+ required: [id, last_status, last_status_created_at, updated_at, created_at]
3157
+ properties:
3158
+ id:
3159
+ type: string
3160
+ format: uuid
3161
+ origin:
3162
+ anyOf:
3163
+ - type: string
3164
+ enum: [initial, redraw, recreation]
3165
+ - type: "null"
3166
+ parent_id:
3167
+ anyOf:
3168
+ - type: string
3169
+ format: uuid
3170
+ - type: "null"
3171
+ last_status:
3172
+ $ref: "#/components/schemas/OrderLowLevelStatus"
3173
+ last_status_created_at:
3174
+ type: string
3175
+ format: date-time
3176
+ updated_at:
3177
+ type: string
3178
+ format: date-time
3179
+ created_at:
3180
+ type: string
3181
+ format: date-time
3182
+ GetOrderTransactionResponse:
3183
+ type: object
3184
+ required: [id, team_id, status]
3185
+ properties:
3186
+ id:
3187
+ type: string
3188
+ format: uuid
3189
+ x-mockingbird-resource:
3190
+ type: order_transaction
3191
+ identity: true
3192
+ x-mockingbird-volatile:
3193
+ kind: id
3194
+ team_id:
3195
+ type: string
3196
+ format: uuid
3197
+ x-mockingbird-volatile:
3198
+ kind: account
3199
+ status:
3200
+ $ref: "#/components/schemas/OrderTransactionStatus"
3201
+ orders:
3202
+ type: array
3203
+ items:
3204
+ $ref: "#/components/schemas/OrderSummary"
3205
+ ClientFacingOrder:
3206
+ type: object
3207
+ required:
3208
+ - user_id
3209
+ - id
3210
+ - team_id
3211
+ - patient_details
3212
+ - patient_address
3213
+ - lab_test
3214
+ - details
3215
+ - sample_id
3216
+ - notes
3217
+ - created_at
3218
+ - updated_at
3219
+ - events
3220
+ - last_event
3221
+ - health_insurance_id
3222
+ - requisition_form_url
3223
+ - shipping_details
3224
+ - has_abn
3225
+ properties:
3226
+ user_id:
3227
+ type: string
3228
+ format: uuid
3229
+ id:
3230
+ type: string
3231
+ format: uuid
3232
+ x-mockingbird-resource:
3233
+ type: order
3234
+ identity: true
3235
+ x-mockingbird-volatile:
3236
+ kind: id
3237
+ team_id:
3238
+ type: string
3239
+ format: uuid
3240
+ x-mockingbird-volatile:
3241
+ kind: account
3242
+ patient_details:
3243
+ anyOf:
3244
+ - $ref: "#/components/schemas/ClientFacingPatientDetailsCompatible"
3245
+ - type: "null"
3246
+ patient_address:
3247
+ anyOf:
3248
+ - $ref: "#/components/schemas/PatientAddressCompatible"
3249
+ - type: "null"
3250
+ lab_test:
3251
+ $ref: "#/components/schemas/ClientFacingLabTest"
3252
+ details:
3253
+ $ref: "#/components/schemas/ClientFacingTestKitOrderDetails"
3254
+ sample_id:
3255
+ anyOf:
3256
+ - type: string
3257
+ - type: "null"
3258
+ # Sandbox may assign sample_id after requisition while the mock still
3259
+ # has null until /test — treat null vs string as equivalent.
3260
+ x-mockingbird-volatile:
3261
+ kind: opaque
3262
+ notes:
3263
+ anyOf:
3264
+ - type: string
3265
+ - type: "null"
3266
+ clinical_notes:
3267
+ anyOf:
3268
+ - type: string
3269
+ - type: "null"
3270
+ created_at:
3271
+ type: string
3272
+ format: date-time
3273
+ x-mockingbird-volatile:
3274
+ kind: timestamp
3275
+ updated_at:
3276
+ type: string
3277
+ format: date-time
3278
+ x-mockingbird-volatile:
3279
+ kind: timestamp
3280
+ events:
3281
+ type: array
3282
+ items:
3283
+ $ref: "#/components/schemas/ClientFacingOrderEvent"
3284
+ status:
3285
+ anyOf:
3286
+ - $ref: "#/components/schemas/OrderTopLevelStatus"
3287
+ - type: "null"
3288
+ # Sandbox cancel races: walk-in cancel responses sometimes keep
3289
+ # high-level status as `received` while last_event is already cancelled.
3290
+ x-mockingbird-volatile:
3291
+ kind: opaque
3292
+ last_event:
3293
+ $ref: "#/components/schemas/ClientFacingOrderEvent"
3294
+ physician:
3295
+ anyOf:
3296
+ - $ref: "#/components/schemas/ClientFacingPhysician"
3297
+ - type: "null"
3298
+ health_insurance_id:
3299
+ anyOf:
3300
+ - type: string
3301
+ format: uuid
3302
+ - type: "null"
3303
+ requisition_form_url:
3304
+ anyOf:
3305
+ - type: string
3306
+ - type: "null"
3307
+ x-mockingbird-volatile:
3308
+ kind: url
3309
+ priority:
3310
+ type: boolean
3311
+ default: false
3312
+ shipping_details:
3313
+ anyOf:
3314
+ - $ref: "#/components/schemas/ShippingAddress"
3315
+ - type: "null"
3316
+ activate_by:
3317
+ anyOf:
3318
+ - type: string
3319
+ format: date
3320
+ - type: "null"
3321
+ passthrough:
3322
+ anyOf:
3323
+ - type: string
3324
+ - type: "null"
3325
+ billing_type:
3326
+ type: string
3327
+ enum: [client_bill, commercial_insurance, patient_bill_passthrough, patient_bill, upfront_payment]
3328
+ default: client_bill
3329
+ icd_codes:
3330
+ anyOf:
3331
+ - type: array
3332
+ items:
3333
+ type: string
3334
+ - type: "null"
3335
+ has_abn:
3336
+ type: boolean
3337
+ interpretation:
3338
+ anyOf:
3339
+ - type: string
3340
+ enum: [normal, abnormal, critical, unknown]
3341
+ - type: "null"
3342
+ has_missing_results:
3343
+ anyOf:
3344
+ - type: boolean
3345
+ - type: "null"
3346
+ expected_result_by_date:
3347
+ anyOf:
3348
+ - type: string
3349
+ format: date
3350
+ - type: "null"
3351
+ worst_case_result_by_date:
3352
+ anyOf:
3353
+ - type: string
3354
+ format: date
3355
+ - type: "null"
3356
+ origin:
3357
+ anyOf:
3358
+ - type: string
3359
+ enum: [initial, redraw, recreation]
3360
+ - type: "null"
3361
+ order_transaction:
3362
+ anyOf:
3363
+ - $ref: "#/components/schemas/ClientFacingOrderTransaction"
3364
+ - type: "null"
3365
+ OrderSetRequest:
3366
+ type: object
3367
+ required: [lab_test_ids]
3368
+ properties:
3369
+ lab_test_ids:
3370
+ type: array
3371
+ minItems: 1
3372
+ items:
3373
+ type: string
3374
+ format: uuid
3375
+ x-mockingbird-resource-ref:
3376
+ type: lab_test
3377
+ missing: "00000000-0000-4000-8000-000000000000"
3378
+ CreateOrderRequest:
3379
+ type: object
3380
+ required: [user_id, patient_details, patient_address, order_set]
3381
+ properties:
3382
+ user_id:
3383
+ type: string
3384
+ format: uuid
3385
+ x-mockingbird-resource-ref:
3386
+ type: user
3387
+ missing: "00000000-0000-4000-8000-000000000000"
3388
+ patient_details:
3389
+ $ref: "#/components/schemas/ClientFacingPatientDetailsCompatible"
3390
+ patient_address:
3391
+ $ref: "#/components/schemas/PatientAddressCompatible"
3392
+ order_set:
3393
+ $ref: "#/components/schemas/OrderSetRequest"
3394
+ clinical_notes:
3395
+ anyOf:
3396
+ - type: string
3397
+ - type: "null"
3398
+ passthrough:
3399
+ anyOf:
3400
+ - type: string
3401
+ - type: "null"
3402
+ collection_method:
3403
+ $ref: "#/components/schemas/LabTestCollectionMethod"
3404
+ lab_account_id:
3405
+ anyOf:
3406
+ - type: string
3407
+ format: uuid
3408
+ - type: "null"
3409
+ idempotency_key:
3410
+ type: [string, "null"]
3411
+ idempotency_error:
3412
+ type: [string, "null"]
3413
+ aoe_answers:
3414
+ type: [array, "null"]
3415
+ items:
3416
+ $ref: "#/components/schemas/AoeAnswerRequest"
3417
+ PostOrderResponse:
3418
+ type: object
3419
+ required: [order, status, message]
3420
+ properties:
3421
+ order:
3422
+ $ref: "#/components/schemas/ClientFacingOrder"
3423
+ status:
3424
+ type: string
3425
+ message:
3426
+ type: string
3427
+ ResultType:
3428
+ type: string
3429
+ enum: [numeric, range, comment, coded_value]
3430
+ ParentBiomarkerData:
3431
+ type: object
3432
+ required: [marker_id, name, slug]
3433
+ properties:
3434
+ marker_id:
3435
+ type: integer
3436
+ name:
3437
+ type: string
3438
+ slug:
3439
+ type: string
3440
+ provider_id:
3441
+ type: ["string", "null"]
3442
+ BiomarkerResult:
3443
+ type: object
3444
+ required: [name, result, type]
3445
+ properties:
3446
+ name:
3447
+ type: string
3448
+ slug:
3449
+ type: string
3450
+ default: ""
3451
+ value:
3452
+ anyOf:
3453
+ - type: number
3454
+ - type: "null"
3455
+ result:
3456
+ type: string
3457
+ type:
3458
+ $ref: "#/components/schemas/ResultType"
3459
+ unit:
3460
+ type: ["string", "null"]
3461
+ timestamp:
3462
+ anyOf:
3463
+ - type: string
3464
+ format: date-time
3465
+ - type: "null"
3466
+ x-mockingbird-volatile:
3467
+ kind: timestamp
3468
+ notes:
3469
+ type: ["string", "null"]
3470
+ reference_range:
3471
+ type: ["string", "null"]
3472
+ min_range_value:
3473
+ type: ["number", "null"]
3474
+ max_range_value:
3475
+ type: ["number", "null"]
3476
+ is_above_max_range:
3477
+ type: ["boolean", "null"]
3478
+ is_below_min_range:
3479
+ type: ["boolean", "null"]
3480
+ interpretation:
3481
+ type: string
3482
+ default: normal
3483
+ source_interpretation:
3484
+ type: string
3485
+ default: ""
3486
+ loinc:
3487
+ type: ["string", "null"]
3488
+ loinc_slug:
3489
+ type: ["string", "null"]
3490
+ provider_id:
3491
+ type: ["string", "null"]
3492
+ source_markers:
3493
+ anyOf:
3494
+ - type: array
3495
+ items:
3496
+ $ref: "#/components/schemas/ParentBiomarkerData"
3497
+ - type: "null"
3498
+ performing_laboratory:
3499
+ type: ["string", "null"]
3500
+ source_sample_id:
3501
+ type: ["string", "null"]
3502
+ FailureType:
3503
+ type: string
3504
+ enum:
3505
+ - quantity_not_sufficient_failure
3506
+ - collection_process_failure
3507
+ - drop_off_failure
3508
+ - internal_lab_failure
3509
+ - order_entry_failure
3510
+ - non_failure
3511
+ - unknown_failure
3512
+ - patient_condition_failure
3513
+ - missing_result_calc_failure
3514
+ - missing_demo_aoe_calc_failure
3515
+ - insufficient_volume
3516
+ MissingBiomarkerResult:
3517
+ type: object
3518
+ required: [name, slug, inferred_failure_type]
3519
+ properties:
3520
+ name:
3521
+ type: string
3522
+ slug:
3523
+ type: string
3524
+ inferred_failure_type:
3525
+ $ref: "#/components/schemas/FailureType"
3526
+ note:
3527
+ type: ["string", "null"]
3528
+ loinc:
3529
+ type: ["string", "null"]
3530
+ loinc_slug:
3531
+ type: ["string", "null"]
3532
+ provider_id:
3533
+ type: ["string", "null"]
3534
+ source_markers:
3535
+ anyOf:
3536
+ - type: array
3537
+ items:
3538
+ $ref: "#/components/schemas/ParentBiomarkerData"
3539
+ - type: "null"
3540
+ SampleData:
3541
+ type: object
3542
+ properties:
3543
+ sample_id:
3544
+ type: ["string", "null"]
3545
+ control_number:
3546
+ type: ["string", "null"]
3547
+ date_collected:
3548
+ type: ["string", "null"]
3549
+ date_received:
3550
+ type: ["string", "null"]
3551
+ date_reported:
3552
+ type: ["string", "null"]
3553
+ performing_laboratories:
3554
+ anyOf:
3555
+ - type: object
3556
+ additionalProperties: true
3557
+ - type: "null"
3558
+ clinical_information:
3559
+ anyOf:
3560
+ - type: object
3561
+ additionalProperties: true
3562
+ - type: "null"
3563
+ LabResultsMetadata:
3564
+ type: object
3565
+ required: [age, dob, patient, date_reported, specimen_number]
3566
+ properties:
3567
+ age:
3568
+ type: string
3569
+ x-mockingbird-volatile:
3570
+ kind: token
3571
+ dob:
3572
+ type: string
3573
+ x-mockingbird-volatile:
3574
+ kind: token
3575
+ "clia_#":
3576
+ anyOf:
3577
+ - type: string
3578
+ - type: "null"
3579
+ patient:
3580
+ type: string
3581
+ x-mockingbird-volatile:
3582
+ kind: token
3583
+ provider:
3584
+ anyOf:
3585
+ - type: string
3586
+ - type: "null"
3587
+ x-mockingbird-volatile:
3588
+ kind: token
3589
+ laboratory:
3590
+ anyOf:
3591
+ - type: string
3592
+ - type: "null"
3593
+ x-mockingbird-volatile:
3594
+ kind: token
3595
+ date_reported:
3596
+ type: string
3597
+ x-mockingbird-volatile:
3598
+ kind: timestamp
3599
+ date_collected:
3600
+ anyOf:
3601
+ - type: string
3602
+ - type: "null"
3603
+ x-mockingbird-volatile:
3604
+ kind: timestamp
3605
+ specimen_number:
3606
+ type: string
3607
+ x-mockingbird-volatile:
3608
+ kind: id
3609
+ date_received:
3610
+ anyOf:
3611
+ - type: string
3612
+ - type: "null"
3613
+ x-mockingbird-volatile:
3614
+ kind: timestamp
3615
+ status:
3616
+ type: string
3617
+ default: final
3618
+ interpretation:
3619
+ anyOf:
3620
+ - type: string
3621
+ - type: "null"
3622
+ patient_id:
3623
+ anyOf:
3624
+ - type: string
3625
+ - type: "null"
3626
+ x-mockingbird-volatile:
3627
+ kind: id
3628
+ account_id:
3629
+ anyOf:
3630
+ - type: string
3631
+ - type: "null"
3632
+ x-mockingbird-volatile:
3633
+ kind: id
3634
+ LabResultsRaw:
3635
+ type: object
3636
+ required: [metadata, results]
3637
+ properties:
3638
+ metadata:
3639
+ $ref: "#/components/schemas/LabResultsMetadata"
3640
+ results:
3641
+ anyOf:
3642
+ - type: array
3643
+ items:
3644
+ $ref: "#/components/schemas/BiomarkerResult"
3645
+ - type: object
3646
+ additionalProperties: true
3647
+ x-mockingbird-volatile:
3648
+ kind: opaque
3649
+ missing_results:
3650
+ anyOf:
3651
+ - type: array
3652
+ items:
3653
+ $ref: "#/components/schemas/MissingBiomarkerResult"
3654
+ - type: "null"
3655
+ x-mockingbird-volatile:
3656
+ kind: opaque
3657
+ sample_information:
3658
+ anyOf:
3659
+ - type: object
3660
+ additionalProperties:
3661
+ $ref: "#/components/schemas/SampleData"
3662
+ - type: "null"
3663
+ x-mockingbird-volatile:
3664
+ kind: opaque
3665
+ order_transaction:
3666
+ anyOf:
3667
+ - $ref: "#/components/schemas/ClientFacingOrderTransaction"
3668
+ - type: "null"
3669
+ SimulationFlags:
3670
+ type: object
3671
+ properties:
3672
+ interpretation:
3673
+ anyOf:
3674
+ - type: string
3675
+ enum: [normal, abnormal, critical, unknown]
3676
+ - type: "null"
3677
+ result_types:
3678
+ type: array
3679
+ items:
3680
+ $ref: "#/components/schemas/ResultType"
3681
+ has_missing_results:
3682
+ type: boolean
3683
+ GetOrdersResponse:
3684
+ type: object
3685
+ required: [orders]
3686
+ properties:
3687
+ orders:
3688
+ type: array
3689
+ items:
3690
+ $ref: "#/components/schemas/ClientFacingOrder"
3691
+ total:
3692
+ anyOf:
3693
+ - type: integer
3694
+ - type: "null"
3695
+ page:
3696
+ anyOf:
3697
+ - type: integer
3698
+ - type: "null"
3699
+ size:
3700
+ anyOf:
3701
+ - type: integer
3702
+ - type: "null"
3703
+ HTTPValidationError:
3704
+ type: object
3705
+ properties:
3706
+ detail:
3707
+ title: Detail