@oway/sdk 0.1.1 → 0.2.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/dist/index.d.mts CHANGED
@@ -79,6 +79,145 @@ interface paths {
79
79
  patch?: never;
80
80
  trace?: never;
81
81
  };
82
+ "/v1/carrier/shipments/{identifier}/pickup": {
83
+ parameters: {
84
+ query?: never;
85
+ header?: never;
86
+ path?: never;
87
+ cookie?: never;
88
+ };
89
+ get?: never;
90
+ /**
91
+ * Confirm shipment pickup
92
+ * @description Confirm that the shipment has been picked up. Transitions the order to IN_TRANSIT status.
93
+ *
94
+ * **Required fields:** `pickupTime` is required. All other fields (location, coordinates, signedBy, notes) are optional but recommended.
95
+ *
96
+ * **State requirement:** The shipment must be in ACCEPTED status.
97
+ */
98
+ put: operations["confirmPickup"];
99
+ post?: never;
100
+ delete?: never;
101
+ options?: never;
102
+ head?: never;
103
+ patch?: never;
104
+ trace?: never;
105
+ };
106
+ "/v1/carrier/shipments/{identifier}/deliver": {
107
+ parameters: {
108
+ query?: never;
109
+ header?: never;
110
+ path?: never;
111
+ cookie?: never;
112
+ };
113
+ get?: never;
114
+ /**
115
+ * Confirm shipment delivery
116
+ * @description Confirm that the shipment has been delivered. Transitions the order to DELIVERED status and initiates carrier payout.
117
+ *
118
+ * **Required fields:** `deliveryTime` is required. Proof of delivery fields (`signedBy`, `signatureImageUrl`, `proofOfDeliveryUrl`) are optional but recommended.
119
+ *
120
+ * **State requirement:** The shipment must be in ACCEPTED or PICKED_UP status.
121
+ */
122
+ put: operations["confirmDelivery"];
123
+ post?: never;
124
+ delete?: never;
125
+ options?: never;
126
+ head?: never;
127
+ patch?: never;
128
+ trace?: never;
129
+ };
130
+ "/v1/carrier/offers/{identifier}/reject": {
131
+ parameters: {
132
+ query?: never;
133
+ header?: never;
134
+ path?: never;
135
+ cookie?: never;
136
+ };
137
+ get?: never;
138
+ /**
139
+ * Reject an offer
140
+ * @description Reject a pending offer with a reason.
141
+ *
142
+ * **Required fields:** `reason` (enum) is required. `reasonText` is optional but recommended for context.
143
+ *
144
+ * **Reason values:** `capacity_unavailable`, `outside_service_area`, `rate_not_acceptable`, `timeline_not_feasible`, `other`
145
+ *
146
+ * **State requirement:** The offer must be in PENDING status.
147
+ */
148
+ put: operations["rejectOffer"];
149
+ post?: never;
150
+ delete?: never;
151
+ options?: never;
152
+ head?: never;
153
+ patch?: never;
154
+ trace?: never;
155
+ };
156
+ "/v1/carrier/offers/{identifier}/accept": {
157
+ parameters: {
158
+ query?: never;
159
+ header?: never;
160
+ path?: never;
161
+ cookie?: never;
162
+ };
163
+ get?: never;
164
+ /**
165
+ * Accept an offer
166
+ * @description Accept a pending offer. Once accepted, the offer becomes a shipment and is accessible via `/shipments` endpoints.
167
+ *
168
+ * **Optional fields:** All request body fields are optional. You can provide driver details and a carrier reference number now, or update them later.
169
+ *
170
+ * **State requirement:** The offer must be in PENDING status. Returns 409 if the offer has already been accepted, rejected, or expired.
171
+ */
172
+ put: operations["acceptOffer"];
173
+ post?: never;
174
+ delete?: never;
175
+ options?: never;
176
+ head?: never;
177
+ patch?: never;
178
+ trace?: never;
179
+ };
180
+ "/v1/carrier/bundles/{bundleId}/reject": {
181
+ parameters: {
182
+ query?: never;
183
+ header?: never;
184
+ path?: never;
185
+ cookie?: never;
186
+ };
187
+ get?: never;
188
+ /** Reject a bundle */
189
+ put: operations["rejectBundle"];
190
+ post?: never;
191
+ delete?: never;
192
+ options?: never;
193
+ head?: never;
194
+ patch?: never;
195
+ trace?: never;
196
+ };
197
+ "/v1/carrier/bundles/{bundleId}/accept": {
198
+ parameters: {
199
+ query?: never;
200
+ header?: never;
201
+ path?: never;
202
+ cookie?: never;
203
+ };
204
+ get?: never;
205
+ /**
206
+ * Accept a bundle
207
+ * @description Accept a bundle of offers. You can optionally exclude specific offers from the bundle using `offerIdsToExclude`.
208
+ *
209
+ * Carrier tracking data (reference number, driver info) provided in the request body is applied to all accepted offers in the bundle.
210
+ *
211
+ * **State requirement:** The bundle must be in OPEN status.
212
+ */
213
+ put: operations["acceptBundle"];
214
+ post?: never;
215
+ delete?: never;
216
+ options?: never;
217
+ head?: never;
218
+ patch?: never;
219
+ trace?: never;
220
+ };
82
221
  "/v1/shipper/shipment": {
83
222
  parameters: {
84
223
  query?: never;
@@ -129,7 +268,7 @@ interface paths {
129
268
  patch?: never;
130
269
  trace?: never;
131
270
  };
132
- "/v1/carrier/{carrierId}/trips": {
271
+ "/v1/carrier/shipments/{identifier}/upload": {
133
272
  parameters: {
134
273
  query?: never;
135
274
  header?: never;
@@ -139,17 +278,48 @@ interface paths {
139
278
  get?: never;
140
279
  put?: never;
141
280
  /**
142
- * Submit trip data
143
- * @description Submit trip data for carrier vehicles. Each trip must include vehicle ID, trip number, and legs with start/end coordinates and arrival windows.
281
+ * Request upload URL for signature or proof of delivery
282
+ * @description Returns a pre-signed URL for uploading a file directly to storage. Use HTTP PUT to upload the file to the returned URL with the specified content type.
283
+ *
284
+ * **Document types:** `SIGNATURE` (signature image), `PROOF_OF_DELIVERY` (POD document)
285
+ *
286
+ * **Content types:** `image/png`, `image/jpeg`, `application/pdf`
287
+ *
288
+ * **Upload flow:**
289
+ * 1. Call this endpoint to get a pre-signed URL
290
+ * 2. PUT your file to the returned `uploadUrl` with `Content-Type` header matching `contentType`
291
+ * 3. URL expires in 15 minutes
144
292
  */
145
- post: operations["addTrips"];
293
+ post: operations["requestUploadUrl"];
294
+ delete?: never;
295
+ options?: never;
296
+ head?: never;
297
+ patch?: never;
298
+ trace?: never;
299
+ };
300
+ "/v1/carrier/shipments/{identifier}/location": {
301
+ parameters: {
302
+ query?: never;
303
+ header?: never;
304
+ path?: never;
305
+ cookie?: never;
306
+ };
307
+ get?: never;
308
+ put?: never;
309
+ /**
310
+ * Submit GPS location for a shipment
311
+ * @description Submit a GPS location update tied to a specific shipment.
312
+ *
313
+ * **State requirement:** The shipment must be in ACCEPTED or PICKED_UP status.
314
+ */
315
+ post: operations["submitLocation"];
146
316
  delete?: never;
147
317
  options?: never;
148
318
  head?: never;
149
319
  patch?: never;
150
320
  trace?: never;
151
321
  };
152
- "/v1/carrier/{carrierId}/gps-data": {
322
+ "/v1/carrier/shipments/{identifier}/exception": {
153
323
  parameters: {
154
324
  query?: never;
155
325
  header?: never;
@@ -159,10 +329,32 @@ interface paths {
159
329
  get?: never;
160
330
  put?: never;
161
331
  /**
162
- * Submit GPS data
163
- * @description Submit GPS location data for carrier vehicles. Each data point must include vehicle ID, coordinates, timestamp, heading, and speed.
332
+ * Report a shipment exception or delay
333
+ * @description Report an exception such as weather delay, vehicle breakdown, or address issue.
334
+ *
335
+ * **State requirement:** The shipment must be in ACCEPTED or PICKED_UP status.
336
+ */
337
+ post: operations["reportException"];
338
+ delete?: never;
339
+ options?: never;
340
+ head?: never;
341
+ patch?: never;
342
+ trace?: never;
343
+ };
344
+ "/v1/carrier/coverage/trips": {
345
+ parameters: {
346
+ query?: never;
347
+ header?: never;
348
+ path?: never;
349
+ cookie?: never;
350
+ };
351
+ get?: never;
352
+ put?: never;
353
+ /**
354
+ * Submit trip data
355
+ * @description Submit trip data for carrier vehicles. Each trip must include vehicle ID, trip number, and legs with start/end coordinates and arrival windows.
164
356
  */
165
- post: operations["addGpsData"];
357
+ post: operations["addTrips"];
166
358
  delete?: never;
167
359
  options?: never;
168
360
  head?: never;
@@ -273,7 +465,7 @@ interface paths {
273
465
  };
274
466
  /**
275
467
  * Get a shipment document by order number
276
- * @description Retrieves a download link for a shipment document using the order number (PRO number). Supported document types: BILL_OF_LADING, INVOICE, SHIPPING_LABEL.
468
+ * @description Retrieves a download link for a shipment document using the order number (PRO number). Supported document types: BILL_OF_LADING, INVOICE, SHIPPING_LABEL, POD.
277
469
  */
278
470
  get: operations["getDocument"];
279
471
  put?: never;
@@ -304,7 +496,113 @@ interface paths {
304
496
  patch?: never;
305
497
  trace?: never;
306
498
  };
307
- "/v1/carrier/{carrierId}": {
499
+ "/v1/carrier/shipments": {
500
+ parameters: {
501
+ query?: never;
502
+ header?: never;
503
+ path?: never;
504
+ cookie?: never;
505
+ };
506
+ /**
507
+ * List shipments
508
+ * @description Retrieves active and completed shipments (accepted offers) for this carrier. Filter by time range.
509
+ */
510
+ get: operations["getShipments"];
511
+ put?: never;
512
+ post?: never;
513
+ delete?: never;
514
+ options?: never;
515
+ head?: never;
516
+ patch?: never;
517
+ trace?: never;
518
+ };
519
+ "/v1/carrier/shipments/{identifier}": {
520
+ parameters: {
521
+ query?: never;
522
+ header?: never;
523
+ path?: never;
524
+ cookie?: never;
525
+ };
526
+ /**
527
+ * Get shipment by identifier
528
+ * @description Retrieves shipment details. The identifier can be an offerId, orderNumber, or carrierReference.
529
+ */
530
+ get: operations["getShipment_1"];
531
+ put?: never;
532
+ post?: never;
533
+ delete?: never;
534
+ options?: never;
535
+ head?: never;
536
+ patch?: never;
537
+ trace?: never;
538
+ };
539
+ "/v1/carrier/shipments/{identifier}/tracking": {
540
+ parameters: {
541
+ query?: never;
542
+ header?: never;
543
+ path?: never;
544
+ cookie?: never;
545
+ };
546
+ /**
547
+ * Get shipment tracking history
548
+ * @description Retrieves GPS location history for a specific shipment.
549
+ */
550
+ get: operations["getShipmentTracking"];
551
+ put?: never;
552
+ post?: never;
553
+ delete?: never;
554
+ options?: never;
555
+ head?: never;
556
+ patch?: never;
557
+ trace?: never;
558
+ };
559
+ "/v1/carrier/shipments/{identifier}/document/{documentType}": {
560
+ parameters: {
561
+ query?: never;
562
+ header?: never;
563
+ path?: never;
564
+ cookie?: never;
565
+ };
566
+ /**
567
+ * Get shipment document
568
+ * @description Retrieves a document for a shipment. Returns a pre-signed download URL.
569
+ *
570
+ * **Supported document types:**
571
+ * - `BILL_OF_LADING` — Bill of lading (driver version)
572
+ * - `SHIPPING_LABEL` — Shipping label
573
+ */
574
+ get: operations["getShipmentDocument"];
575
+ put?: never;
576
+ post?: never;
577
+ delete?: never;
578
+ options?: never;
579
+ head?: never;
580
+ patch?: never;
581
+ trace?: never;
582
+ };
583
+ "/v1/carrier/offers": {
584
+ parameters: {
585
+ query?: never;
586
+ header?: never;
587
+ path?: never;
588
+ cookie?: never;
589
+ };
590
+ /**
591
+ * List offers
592
+ * @description Retrieves pending offers for this carrier. These are offers that have not yet been accepted or rejected.
593
+ *
594
+ * **Note:** Accepted offers appear under `/shipments` instead.
595
+ */
596
+ get: operations["getOffers"];
597
+ put?: never;
598
+ post?: never;
599
+ delete?: never;
600
+ options?: never;
601
+ head?: never;
602
+ patch?: never;
603
+ trace?: never;
604
+ };
605
+ "/v1/carrier/offers/{identifier}": {
308
606
  parameters: {
309
607
  query?: never;
310
608
  header?: never;
@@ -312,10 +610,10 @@ interface paths {
312
610
  cookie?: never;
313
611
  };
314
612
  /**
315
- * Get carrier API configuration
316
- * @description Retrieves the API configuration for a carrier including company name, API version, and available endpoints.
613
+ * Get offer by identifier
614
+ * @description Retrieves offer details. The identifier can be an offerId, orderNumber, or carrierReference.
317
615
  */
318
- get: operations["getCarrierApiConfig"];
616
+ get: operations["getOffer"];
319
617
  put?: never;
320
618
  post?: never;
321
619
  delete?: never;
@@ -324,7 +622,7 @@ interface paths {
324
622
  patch?: never;
325
623
  trace?: never;
326
624
  };
327
- "/v1/carrier/{carrierId}/jobs": {
625
+ "/v1/carrier/bundles": {
328
626
  parameters: {
329
627
  query?: never;
330
628
  header?: never;
@@ -332,10 +630,29 @@ interface paths {
332
630
  cookie?: never;
333
631
  };
334
632
  /**
335
- * Get carrier jobs
336
- * @description Retrieves jobs (offers with order data) for a carrier. Filter by active status and time range.
633
+ * List bundles for this carrier
634
+ * @description Retrieves bundles for this carrier. A bundle is a group of related offers presented together.
635
+ *
636
+ * **Bundle statuses:** OPEN (awaiting response), ACCEPTED, DECLINED, SUBSET_ACCEPTED (some offers accepted), EXPIRED
337
637
  */
338
- get: operations["getJobs"];
638
+ get: operations["getBundles"];
639
+ put?: never;
640
+ post?: never;
641
+ delete?: never;
642
+ options?: never;
643
+ head?: never;
644
+ patch?: never;
645
+ trace?: never;
646
+ };
647
+ "/v1/carrier/bundles/{bundleId}": {
648
+ parameters: {
649
+ query?: never;
650
+ header?: never;
651
+ path?: never;
652
+ cookie?: never;
653
+ };
654
+ /** Get a single bundle by ID */
655
+ get: operations["getBundle"];
339
656
  put?: never;
340
657
  post?: never;
341
658
  delete?: never;
@@ -347,21 +664,65 @@ interface paths {
347
664
  }
348
665
  interface components {
349
666
  schemas: {
350
- /** @description Shipment/Order details */
351
- Shipment: {
667
+ /** @description RFC 9457 Problem Details error response */
668
+ ProblemDetail: {
352
669
  /**
353
- * @description Unique identifier for the order
354
- * @example 67b6c5fcfbf1be6b24127646
670
+ * @description A URI reference that identifies the problem type
671
+ * @example https://api.oway.io/errors/location-not-serviceable
355
672
  */
356
- id?: string;
673
+ type?: string;
357
674
  /**
358
- * @description Company ID that owns this order
359
- * @example 67c0dfa95bff090747660465
675
+ * @description A short, human-readable summary of the problem type
676
+ * @example Bad Request
360
677
  */
361
- companyId?: string;
678
+ title?: string;
362
679
  /**
363
- * @description User ID who created this order
364
- * @example 679410f5b074882a64b9ea7f
680
+ * Format: int32
681
+ * @description The HTTP status code
682
+ * @example 400
683
+ */
684
+ status?: number;
685
+ /**
686
+ * @description A human-readable explanation specific to this occurrence of the problem
687
+ * @example pickupAddress.zipCode must be a 5-digit ZIP code
688
+ */
689
+ detail?: string;
690
+ /**
691
+ * @description A machine-readable reason code for programmatic handling
692
+ * @example pickup_not_covered
693
+ */
694
+ reason?: string;
695
+ /** @description Per-field validation failures when a request is rejected for one or more invalid fields. Present only on validation-style errors. */
696
+ violations?: components["schemas"]["Violation"][];
697
+ };
698
+ /** @description A single field-level validation failure. */
699
+ Violation: {
700
+ /**
701
+ * @description Field path that failed validation
702
+ * @example orderComponents[0].dimensions
703
+ */
704
+ field?: string;
705
+ /**
706
+ * @description Human-readable reason the field is invalid
707
+ * @example Component dimensions of 77x71x86 are invalid (pallets must be less than 95x95x96, and either length or width may exceed 60 but not both)
708
+ */
709
+ reason?: string;
710
+ };
711
+ /** @description Shipment/Order details */
712
+ Shipment: {
713
+ /**
714
+ * @description Unique identifier for the order
715
+ * @example 67b6c5fcfbf1be6b24127646
716
+ */
717
+ id?: string;
718
+ /**
719
+ * @description Company ID that owns this order
720
+ * @example 67c0dfa95bff090747660465
721
+ */
722
+ companyId?: string;
723
+ /**
724
+ * @description User ID who created this order
725
+ * @example 679410f5b074882a64b9ea7f
365
726
  */
366
727
  userId?: string;
367
728
  /**
@@ -370,7 +731,7 @@ interface components {
370
731
  */
371
732
  orderNumber?: string;
372
733
  /**
373
- * @description Current status of the order
734
+ * @description Current shipment status in the order lifecycle
374
735
  * @example CONFIRMED
375
736
  * @enum {string}
376
737
  */
@@ -394,8 +755,72 @@ interface components {
394
755
  */
395
756
  updatedAt?: string;
396
757
  };
758
+ /** @description GPS coordinates for a shipment event */
759
+ EventCoordinates: {
760
+ /**
761
+ * Format: double
762
+ * @description Latitude in decimal degrees
763
+ * @example 33.7701
764
+ */
765
+ latitude?: number;
766
+ /**
767
+ * Format: double
768
+ * @description Longitude in decimal degrees
769
+ * @example -118.1937
770
+ */
771
+ longitude?: number;
772
+ };
773
+ /** @description Location where a shipment event occurred */
774
+ EventLocation: {
775
+ /**
776
+ * @description Primary street address
777
+ * @example 1531 Junipero Avenue
778
+ */
779
+ address1?: string;
780
+ /**
781
+ * @description Secondary address line (suite, unit, etc.)
782
+ * @example Dock 5
783
+ */
784
+ address2?: string;
785
+ /**
786
+ * @description City name
787
+ * @example Long Beach
788
+ */
789
+ city?: string;
790
+ /**
791
+ * @description Two-letter state abbreviation
792
+ * @example CA
793
+ */
794
+ state?: string;
795
+ /**
796
+ * @description 5-digit ZIP code
797
+ * @example 90804
798
+ */
799
+ zip_code?: string;
800
+ /**
801
+ * @description Country code
802
+ * @example US
803
+ */
804
+ country?: string;
805
+ };
806
+ /** @description Request body for confirming shipment pickup */
807
+ PickupConfirmationRequest: {
808
+ /**
809
+ * Format: date-time
810
+ * @description Time the shipment was picked up
811
+ */
812
+ pickup_time: string;
813
+ location?: components["schemas"]["EventLocation"];
814
+ coordinates?: components["schemas"]["EventCoordinates"];
815
+ /** @description Name of the driver who performed the pickup */
816
+ driver_name?: string;
817
+ /** @description Name of the person who signed at pickup */
818
+ signed_by?: string;
819
+ /** @description Additional notes about the pickup */
820
+ notes?: string;
821
+ };
397
822
  /** @description Address information for pickup or delivery locations */
398
- Address: {
823
+ CarrierAddress: {
399
824
  /**
400
825
  * @description Name of the location or business
401
826
  * @example Fairgrounds Distribution Center
@@ -425,27 +850,27 @@ interface components {
425
850
  * @description 5-digit ZIP code
426
851
  * @example 90804
427
852
  */
428
- zipCode: string;
853
+ zip_code: string;
429
854
  /**
430
855
  * @description Contact phone number in E.164 format
431
856
  * @example +18087857650
432
857
  */
433
- phoneNumber: string;
858
+ phone_number: string;
434
859
  /**
435
860
  * @description Name of the contact person at this location
436
861
  * @example Mike Johnson
437
862
  */
438
- contactPerson: string;
863
+ contact_person: string;
439
864
  /**
440
865
  * @description Opening time for the location in 24-hour format (HH:mm). Defaults to 10:00 if not provided.
441
866
  * @example 10:00
442
867
  */
443
- openTime?: string;
868
+ open_time?: string;
444
869
  /**
445
870
  * @description Closing time for the location in 24-hour format (HH:mm). Defaults to 16:00 if not provided.
446
871
  * @example 16:00
447
872
  */
448
- closeTime?: string;
873
+ close_time?: string;
449
874
  /**
450
875
  * @description Additional notes or instructions for the driver
451
876
  * @example Dock 3, enter from back of building
@@ -455,694 +880,2202 @@ interface components {
455
880
  * @description Whether a liftgate is required at this location
456
881
  * @example false
457
882
  */
458
- liftgateRequired?: boolean;
883
+ liftgate_required?: boolean;
459
884
  /**
460
885
  * @description Whether this is a limited access location (residential, construction site, etc.)
461
886
  * @example false
462
887
  */
463
- limitedAccess?: boolean;
888
+ limited_access?: boolean;
464
889
  /**
465
890
  * @description Whether an appointment is required for pickup/delivery
466
891
  * @example true
467
892
  */
468
- appointmentRequired?: boolean;
469
- };
470
- /** @description Request to create a new shipment */
471
- CreateShipmentRequest: {
472
- /**
473
- * @description Optional ID of a previously generated quote.
474
- * @example 507f1f77bcf86cd799439013
475
- */
476
- quoteId?: string;
477
- pickupAddress: components["schemas"]["Address"];
478
- deliveryAddress: components["schemas"]["Address"];
479
- /** @description List of cargo components in the shipment */
480
- orderComponents: components["schemas"]["OrderComponent"][];
481
- /**
482
- * @description Description of the shipment contents
483
- * @example Electronics - fragile
484
- */
485
- description: string;
486
- /**
487
- * @description Purchase order number for reference
488
- * @example PO-2024-12345
489
- */
490
- poNumber?: string;
491
- /**
492
- * @description Additional reference number
493
- * @example REF-ABC-123
494
- */
495
- refNumber?: string;
496
- /**
497
- * Format: date-time
498
- * @description Required pickup date (ISO 8601 format)
499
- * @example 2024-12-24T08:00:00Z
500
- */
501
- requiredPickupDate?: string;
502
- /**
503
- * Format: date-time
504
- * @description Required delivery by date (ISO 8601 format)
505
- * @example 2024-12-26T17:00:00Z
506
- */
507
- requiredDeliveryBy?: string;
893
+ appointment_required?: boolean;
508
894
  };
509
- /** @description A cargo component (pallet group) in a shipment */
510
- OrderComponent: {
895
+ /** @description Individual pallet/component details */
896
+ CarrierComponent: {
511
897
  /**
512
898
  * Format: int32
513
899
  * @description Number of pallets in this component
514
- * @example 2
900
+ * @example 1
515
901
  */
516
- palletCount: number;
902
+ pallet_count?: number;
517
903
  /**
518
- * Format: int32
519
- * @description Weight per pallet in pounds
520
- * @example 500
904
+ * Format: float
905
+ * @description Weight in pounds for this component
906
+ * @example 600
521
907
  */
522
- poundsWeight: number;
908
+ pounds_weight?: number;
523
909
  /**
524
- * @description Pallet dimensions as [height, length, width] in inches
910
+ * @description Pallet dimensions [length, width, height] in inches
525
911
  * @example [
526
912
  * 48,
527
913
  * 40,
528
- * 48
914
+ * 60
529
915
  * ]
530
916
  */
531
- palletDimensions: number[];
532
- };
533
- /** @description Request to generate a shipping quote. Quotes are valid for 2 days from creation. */
534
- QuoteRequest: {
535
- pickupAddress: components["schemas"]["Address"];
536
- deliveryAddress: components["schemas"]["Address"];
537
- /** @description List of pallets or freight pieces. */
538
- orderComponents: components["schemas"]["OrderComponent"][];
539
- };
540
- /** @description Response containing a shipping quote */
541
- QuoteResponse: {
542
- /**
543
- * @description Unique quote identifier
544
- * @example 507f1f77bcf86cd799439013
545
- */
546
- id?: string;
547
- /**
548
- * Format: int32
549
- * @description Total quoted price in cents (USD)
550
- * @example 125000
551
- */
552
- quotedPriceInCents?: number;
917
+ pallet_dimensions?: number[];
553
918
  /**
554
- * Format: date-time
555
- * @description When this quote expires (ISO 8601 format). Quotes are valid for 2 days.
556
- * @example 2024-12-20T15:30:00Z
919
+ * @description Freight class code
920
+ * @example 70
557
921
  */
558
- quoteExpirationTime?: string;
559
- };
560
- Trip: {
561
- id?: string;
562
- carrierId?: string;
563
- vehicleId?: string;
564
- tripNo?: string;
565
- legs?: components["schemas"]["TripLeg"][];
566
- /** Format: date-time */
567
- createdAt?: string;
568
- /** Format: date-time */
569
- updatedAt?: string;
922
+ freight_class?: string;
570
923
  };
571
- TripLeg: {
572
- /** Format: double */
573
- startLat?: number;
574
- /** Format: double */
575
- startLong?: number;
576
- /** Format: date-time */
577
- startTime?: string;
578
- /** Format: double */
579
- endLat?: number;
580
- /** Format: double */
581
- endLong?: number;
582
- /** Format: date-time */
583
- arrivalWindowStart?: string;
584
- /** Format: date-time */
585
- arrivalWindowEnd?: string;
586
- availableForOffers?: boolean;
587
- /** Format: int32 */
588
- estDriveTimeMinutes?: number;
589
- /** Format: int32 */
590
- stopNumber?: number;
591
- };
592
- /** @description GPS location data point for a vehicle */
593
- GpsData: {
594
- /**
595
- * @description Unique identifier for the vehicle
596
- * @example TRUCK-001
597
- */
598
- vehicleId: string;
599
- /**
600
- * Format: date-time
601
- * @description Timestamp of the GPS reading (ISO 8601 format). Must not be in the future.
602
- * @example 2025-02-20T17:33:15Z
603
- */
604
- timestamp: string;
605
- /**
606
- * Format: double
607
- * @description Latitude coordinate
608
- * @example 33.787363
609
- */
610
- latitude: number;
611
- /**
612
- * Format: double
613
- * @description Longitude coordinate
614
- * @example -118.163715
615
- */
616
- longitude: number;
617
- /**
618
- * Format: int32
619
- * @description Heading in degrees (0-359, where 0 is North)
620
- * @example 270
621
- */
622
- heading: number;
924
+ /** @description Carrier shipment details (post-acceptance) */
925
+ CarrierShipment: {
623
926
  /**
624
- * Format: int32
625
- * @description Speed in km/h
626
- * @example 65
927
+ * @description Unique offer identifier
928
+ * @example 507f1f77bcf86cd799439012
627
929
  */
628
- speed: number;
629
- };
630
- /** @description Token request containing client credentials */
631
- TokenRequest: {
930
+ id?: string;
632
931
  /**
633
- * @description Client ID provided by Oway
634
- * @example abc123def456
932
+ * @description Current status of the carrier offer
933
+ * @enum {string}
635
934
  */
636
- clientId: string;
935
+ status?: "PENDING" | "ACCEPTED" | "PICKED_UP" | "DELIVERED" | "REJECTED" | "EXPIRED" | "CANCELLED";
637
936
  /**
638
- * @description Client secret provided by Oway
639
- * @example secret_xyz789
937
+ * @description Carrier's own tracking reference number
938
+ * @example CARRIER-TRK-789
640
939
  */
641
- clientSecret: string;
642
- };
643
- /** @description Error response for token requests */
644
- TokenErrorResponse: {
940
+ carrier_reference?: string;
941
+ /** @description Reason for rejection (populated when status is REJECTED) */
942
+ rejection_reason?: string;
943
+ /** @description Free-text explanation for rejection */
944
+ rejection_reason_text?: string;
945
+ order?: components["schemas"]["Order"];
946
+ pickup?: components["schemas"]["CarrierAddress"];
947
+ delivery?: components["schemas"]["CarrierAddress"];
948
+ tracking?: components["schemas"]["CarrierTracking"];
949
+ payout?: components["schemas"]["Payout"];
950
+ assigned_driver?: components["schemas"]["Driver"];
951
+ pickup_confirmation?: components["schemas"]["PickupConfirmation"];
952
+ delivery_confirmation?: components["schemas"]["DeliveryConfirmation"];
645
953
  /**
646
- * @description Error code
647
- * @example invalid_client
954
+ * @description PIN code for pickup verification
955
+ * @example 1234
648
956
  */
649
- error?: string;
957
+ pickup_pin?: string;
650
958
  /**
651
- * @description Human-readable error description
652
- * @example Invalid client credentials
959
+ * @description PIN code for delivery verification
960
+ * @example 5678
653
961
  */
654
- errorDescription?: string;
655
- };
656
- /** @description Successful token response */
657
- TokenResponse: {
962
+ delivery_pin?: string;
658
963
  /**
659
- * @description The access token to use for API requests
660
- * @example eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
964
+ * Format: date-time
965
+ * @description Offer expiration time — must accept or reject before this time
966
+ * @example 2026-01-15T12:00:00Z
661
967
  */
662
- accessToken?: string;
968
+ deadline?: string;
663
969
  /**
664
- * @description Token type (always 'Bearer')
665
- * @example Bearer
970
+ * Format: date-time
971
+ * @description When this offer was created
972
+ * @example 2026-01-15T08:00:00Z
666
973
  */
667
- tokenType?: string;
974
+ created_at?: string;
668
975
  /**
669
- * Format: int32
670
- * @description Token validity in seconds
671
- * @example 86400
976
+ * Format: date-time
977
+ * @description When this offer was last updated
978
+ * @example 2026-01-15T10:30:00Z
672
979
  */
673
- expiresIn?: number;
980
+ updated_at?: string;
674
981
  };
675
982
  /** @description Shipment tracking information */
676
- Tracking: {
677
- /**
678
- * @description Unique identifier for the order
679
- * @example 507f1f77bcf86cd799439011
680
- */
681
- id?: string;
983
+ CarrierTracking: {
682
984
  /**
683
985
  * @description Human-readable PRO number for the shipment (5-character alphanumeric)
684
986
  * @example ZKYQ5
685
987
  */
686
- orderNumber?: string;
988
+ order_number?: string;
687
989
  /**
688
- * @description Current status of the order
990
+ * @description Current shipment status in the order lifecycle
689
991
  * @example PICKED_UP
690
992
  * @enum {string}
691
993
  */
692
- orderStatus?: "INITIALIZED" | "CONFIRMED" | "ACCEPTED" | "ASSIGNED" | "PICKED_UP" | "IN_TRANSIT" | "DELIVERED" | "CANCELLED";
994
+ order_status?: "INITIALIZED" | "CONFIRMED" | "ACCEPTED" | "ASSIGNED" | "PICKED_UP" | "IN_TRANSIT" | "DELIVERED" | "CANCELLED";
693
995
  /**
694
996
  * Format: date-time
695
997
  * @description Actual pickup date/time (ISO 8601 format)
696
998
  * @example 2024-12-23T10:30:00Z
697
999
  */
698
- actualPickupDate?: string;
1000
+ actual_pickup_date?: string;
699
1001
  /**
700
1002
  * Format: date-time
701
1003
  * @description Actual delivery date/time (ISO 8601 format)
702
1004
  * @example 2024-12-25T14:00:00Z
703
1005
  */
704
- actualDeliveryDate?: string;
1006
+ actual_delivery_date?: string;
705
1007
  /**
706
1008
  * Format: date-time
707
1009
  * @description Estimated pickup date/time (ISO 8601 format)
708
1010
  * @example 2024-12-23T09:00:00Z
709
1011
  */
710
- estimatedPickupDate?: string;
1012
+ estimated_pickup_date?: string;
711
1013
  /**
712
1014
  * Format: date-time
713
1015
  * @description Estimated delivery date/time (ISO 8601 format)
714
1016
  * @example 2024-12-25T12:00:00Z
715
1017
  */
716
- estimatedDeliveryDate?: string;
1018
+ estimated_delivery_date?: string;
717
1019
  };
718
- /** @description A charge on an invoice */
719
- InvoiceCharge: {
1020
+ /** @description Carrier-reported delivery confirmation details */
1021
+ DeliveryConfirmation: {
720
1022
  /**
721
- * @description Type of charge
722
- * @example BASE_FREIGHT
1023
+ * Format: date-time
1024
+ * @description Actual delivery time
1025
+ * @example 2026-01-15T14:30:00Z
723
1026
  */
724
- chargeType?: string;
1027
+ delivery_time?: string;
725
1028
  /**
726
- * @description Human-readable description of the charge
727
- * @example Base Freight
1029
+ * @description Formatted delivery address
1030
+ * @example 456 Market St, Oakland, CA 94607
728
1031
  */
729
- description?: string;
1032
+ address?: string;
730
1033
  /**
731
- * Format: int32
732
- * @description Amount in cents (USD)
733
- * @example 100000
1034
+ * Format: double
1035
+ * @description GPS latitude at delivery
1036
+ * @example 37.7749
734
1037
  */
735
- amountInCents?: number;
736
- };
737
- /** @description A line item on an invoice */
738
- InvoiceLineItem: {
1038
+ latitude?: number;
739
1039
  /**
740
- * @description Description of the item
741
- * @example General Freight
1040
+ * Format: double
1041
+ * @description GPS longitude at delivery
1042
+ * @example -122.4194
742
1043
  */
743
- description?: string;
1044
+ longitude?: number;
744
1045
  /**
745
- * @description Freight class
746
- * @example 85
1046
+ * @description Name of person who received the shipment
1047
+ * @example Recipient Name
747
1048
  */
748
- freightClass?: string;
1049
+ signed_by?: string;
749
1050
  /**
750
- * Format: int32
751
- * @description Weight in pounds
752
- * @example 500
1051
+ * @description URL to signature image
1052
+ * @example https://storage.oway.io/signatures/sig-12345.png
753
1053
  */
754
- weight?: number;
1054
+ signature_image_url?: string;
755
1055
  /**
756
- * Format: int32
757
- * @description Number of pieces/pallets
758
- * @example 2
1056
+ * @description URL to proof of delivery document
1057
+ * @example https://storage.oway.io/pod/pod-12345.pdf
759
1058
  */
760
- quantity?: number;
1059
+ proof_of_delivery_url?: string;
761
1060
  /**
762
- * @description Package type
763
- * @example PLT
1061
+ * @description Additional notes about the delivery
1062
+ * @example Delivered to front desk
764
1063
  */
765
- packageType?: string;
766
- };
767
- /** @description Itemized invoice for a delivered shipment */
768
- InvoiceResponse: {
1064
+ notes?: string;
769
1065
  /**
770
- * @description Order ID
771
- * @example 67b6c5fcfbf1be6b24127646
1066
+ * Format: date-time
1067
+ * @description When this confirmation was recorded
1068
+ * @example 2026-01-15T14:35:00Z
772
1069
  */
773
- orderId?: string;
1070
+ recorded_at?: string;
1071
+ };
1072
+ /** @description Assigned driver information */
1073
+ Driver: {
774
1074
  /**
775
- * @description Human-readable order number (PRO number)
776
- * @example ZKYQ5
1075
+ * @description Driver's full name
1076
+ * @example John Smith
777
1077
  */
778
- orderNumber?: string;
1078
+ name?: string;
779
1079
  /**
780
- * Format: date-time
781
- * @description Invoice date (typically same as delivery date)
782
- * @example 2024-12-20T15:30:00Z
1080
+ * @description Driver's phone number in E.164 format (e.g., +15551234567)
1081
+ * @example +15551234567
783
1082
  */
784
- invoiceDate?: string;
1083
+ phone?: string;
785
1084
  /**
786
- * Format: date-time
787
- * @description Ship date (when the shipment was picked up)
788
- * @example 2024-12-18T09:00:00Z
1085
+ * @description Vehicle identifier assigned to this shipment
1086
+ * @example TRUCK-42
789
1087
  */
790
- shipDate?: string;
1088
+ vehicle_id?: string;
1089
+ };
1090
+ /** @description Order details visible to the carrier */
1091
+ Order: {
791
1092
  /**
792
- * Format: date-time
793
- * @description Delivery date (when the shipment was delivered)
794
- * @example 2024-12-20T15:30:00Z
1093
+ * @description Human-readable PRO number for the shipment (5-character alphanumeric)
1094
+ * @example Y73Q0
795
1095
  */
796
- deliveryDate?: string;
1096
+ order_number?: string;
797
1097
  /**
798
- * @description Purchase order number (if provided)
799
- * @example PO-12345
1098
+ * @description Current shipment status in the order lifecycle
1099
+ * @example CONFIRMED
1100
+ * @enum {string}
800
1101
  */
801
- poNumber?: string;
1102
+ order_status?: "INITIALIZED" | "CONFIRMED" | "ACCEPTED" | "ASSIGNED" | "PICKED_UP" | "IN_TRANSIT" | "DELIVERED" | "CANCELLED";
802
1103
  /**
803
- * @description Reference number (BOL number)
804
- * @example BOL-67890
1104
+ * @description Cargo description
1105
+ * @example Electronics - 2 pallets shrink-wrapped
805
1106
  */
806
- refNumber?: string;
807
- /** @description Line items representing the shipped goods */
808
- lineItems?: components["schemas"]["InvoiceLineItem"][];
809
- /** @description Itemized charges and fees */
810
- charges?: components["schemas"]["InvoiceCharge"][];
1107
+ description?: string;
811
1108
  /**
812
1109
  * Format: int32
813
- * @description Total of all charges in cents (USD)
814
- * @example 125000
1110
+ * @description Total number of pallets
1111
+ * @example 2
815
1112
  */
816
- totalChargesInCents?: number;
1113
+ total_pallet_count?: number;
817
1114
  /**
818
- * Format: int32
819
- * @description Total weight of the shipment in pounds
820
- * @example 1500
1115
+ * Format: float
1116
+ * @description Total weight in pounds
1117
+ * @example 1200
821
1118
  */
822
- totalWeight?: number;
1119
+ total_pounds_weight?: number;
1120
+ /**
1121
+ * @description Shipper's purchase order number
1122
+ * @example PO-2026-4521
1123
+ */
1124
+ po_number?: string;
1125
+ /**
1126
+ * @description Shipper's reference number
1127
+ * @example REF-8834
1128
+ */
1129
+ ref_number?: string;
1130
+ /** @description Individual pallet/component details */
1131
+ components?: components["schemas"]["CarrierComponent"][];
1132
+ /**
1133
+ * Format: date-time
1134
+ * @description When the order was created
1135
+ * @example 2026-01-15T08:00:00Z
1136
+ */
1137
+ created_at?: string;
1138
+ /**
1139
+ * Format: date-time
1140
+ * @description When the order was last updated
1141
+ * @example 2026-01-15T10:30:00Z
1142
+ */
1143
+ updated_at?: string;
1144
+ };
1145
+ /** @description Carrier payout information */
1146
+ Payout: {
823
1147
  /**
824
1148
  * Format: int32
825
- * @description Total number of pieces/pallets
826
- * @example 4
1149
+ * @description Total payout amount in cents (USD). Includes base payout plus all additional charges.
1150
+ * @example 125000
827
1151
  */
828
- totalPieces?: number;
829
- shipper?: components["schemas"]["Address"];
830
- consignee?: components["schemas"]["Address"];
831
- billTo?: components["schemas"]["Address"];
1152
+ total_in_cents?: number;
832
1153
  };
833
- /** @description Response containing a document download link */
834
- DocumentResponse: {
1154
+ /** @description Carrier-reported pickup confirmation details */
1155
+ PickupConfirmation: {
835
1156
  /**
836
- * @description Name of the document file
837
- * @example bol-ZKYQ5.pdf
1157
+ * Format: date-time
1158
+ * @description Actual pickup time
1159
+ * @example 2026-01-15T10:30:00Z
838
1160
  */
839
- filename?: string;
1161
+ pickup_time?: string;
840
1162
  /**
841
- * @description MIME type of the document
842
- * @example application/pdf
1163
+ * @description Formatted pickup address
1164
+ * @example 123 Main St, San Francisco, CA 94102
843
1165
  */
844
- fileType?: string;
1166
+ address?: string;
845
1167
  /**
846
- * @description Pre-signed download URL (valid for limited time)
847
- * @example https://s3.amazonaws.com/...
1168
+ * Format: double
1169
+ * @description GPS latitude at pickup
1170
+ * @example 37.7749
848
1171
  */
849
- downloadLink?: string;
850
- };
851
- /** @description Carrier API configuration response */
852
- CarrierApiConfigResponse: {
1172
+ latitude?: number;
853
1173
  /**
854
- * @description Name of the carrier company
855
- * @example ABC Logistics
1174
+ * Format: double
1175
+ * @description GPS longitude at pickup
1176
+ * @example -122.4194
856
1177
  */
857
- companyName?: string;
1178
+ longitude?: number;
858
1179
  /**
859
- * @description Whether the API is enabled for this carrier
860
- * @example true
1180
+ * @description Name of driver who picked up
1181
+ * @example John Smith
1182
+ */
1183
+ driver_name?: string;
1184
+ /**
1185
+ * @description Name of person who handed over the shipment
1186
+ * @example Jane Doe
861
1187
  */
862
- apiEnabled?: boolean;
1188
+ signed_by?: string;
863
1189
  /**
864
- * @description Current API version
865
- * @example v0.2.1
1190
+ * @description Additional notes about the pickup
1191
+ * @example Picked up from dock 3
1192
+ */
1193
+ notes?: string;
1194
+ /**
1195
+ * Format: date-time
1196
+ * @description When this confirmation was recorded
1197
+ * @example 2026-01-15T10:35:00Z
866
1198
  */
867
- apiVersion?: string;
868
- /** @description List of available API endpoints for this carrier */
869
- availableEndpoints?: string[];
1199
+ recorded_at?: string;
870
1200
  };
871
- AddressAccessorialSnapshot: {
872
- liftgateRequired?: boolean;
873
- limitedAccess?: boolean;
874
- residential?: boolean;
875
- appointmentRequired?: boolean;
876
- /** @enum {string} */
877
- callAheadRequired?: "HALF_HOUR" | "ONE_HOUR" | "TWO_HOURS" | "START_OF_DAY" | "DAY_BEFORE";
878
- /** Format: date-time */
879
- createdAt?: string;
880
- /** Format: date-time */
881
- updatedAt?: string;
882
- values?: {
883
- [key: string]: boolean;
884
- };
885
- };
886
- AppliedPricingRule: {
887
- ruleId?: string;
888
- /** @enum {string} */
889
- type?: "add_on_margin" | "max_margin_cap";
890
- /** Format: double */
891
- ruleValue?: number;
892
- /** Format: int32 */
893
- adjustmentInCents?: number;
894
- };
895
- ComponentDetails: {
896
- /** Format: int32 */
897
- palletCount?: number;
898
- /** Format: float */
899
- poundsWeight?: number;
900
- palletDimensions?: number[];
901
- freightClass?: string;
1201
+ /** @description Request body for confirming shipment delivery */
1202
+ DeliveryConfirmationRequest: {
1203
+ /**
1204
+ * Format: date-time
1205
+ * @description Time the shipment was delivered
1206
+ */
1207
+ delivery_time: string;
1208
+ location?: components["schemas"]["EventLocation"];
1209
+ coordinates?: components["schemas"]["EventCoordinates"];
1210
+ /** @description Name of the person who signed for the delivery */
1211
+ signed_by?: string;
1212
+ /** @description URL to the signature image */
1213
+ signature_image_url?: string;
1214
+ /** @description URL to the proof of delivery document */
1215
+ proof_of_delivery_url?: string;
1216
+ /** @description Additional notes about the delivery */
1217
+ notes?: string;
1218
+ };
1219
+ /** @description Request body for rejecting an offer */
1220
+ RejectOfferRequest: {
1221
+ /**
1222
+ * @description Reason for rejecting the offer
1223
+ * @enum {string}
1224
+ */
1225
+ reason: "capacity_unavailable" | "outside_service_area" | "rate_not_acceptable" | "timeline_not_feasible" | "other";
1226
+ /** @description Additional free-text explanation for the rejection */
1227
+ reason_text?: string;
902
1228
  };
903
- OfferWithOrderDataDTO: {
1229
+ /** @description Carrier offer details */
1230
+ Offer: {
1231
+ /**
1232
+ * @description Unique offer identifier
1233
+ * @example 507f1f77bcf86cd799439012
1234
+ */
904
1235
  id?: string;
905
- driverId?: string;
906
- carrierId?: string;
907
- /** Format: date-time */
1236
+ /**
1237
+ * @description Current status of the carrier offer
1238
+ * @enum {string}
1239
+ */
1240
+ status?: "PENDING" | "ACCEPTED" | "PICKED_UP" | "DELIVERED" | "REJECTED" | "EXPIRED" | "CANCELLED";
1241
+ /**
1242
+ * @description Carrier's own tracking reference number
1243
+ * @example CARRIER-TRK-789
1244
+ */
1245
+ carrier_reference?: string;
1246
+ /** @description Reason for rejection (populated when status is REJECTED) */
1247
+ rejection_reason?: string;
1248
+ /** @description Free-text explanation for rejection */
1249
+ rejection_reason_text?: string;
1250
+ order?: components["schemas"]["Order"];
1251
+ pickup?: components["schemas"]["CarrierAddress"];
1252
+ delivery?: components["schemas"]["CarrierAddress"];
1253
+ tracking?: components["schemas"]["CarrierTracking"];
1254
+ payout?: components["schemas"]["Payout"];
1255
+ assigned_driver?: components["schemas"]["Driver"];
1256
+ pickup_confirmation?: components["schemas"]["PickupConfirmation"];
1257
+ delivery_confirmation?: components["schemas"]["DeliveryConfirmation"];
1258
+ /**
1259
+ * @description PIN code for pickup verification
1260
+ * @example 1234
1261
+ */
1262
+ pickup_pin?: string;
1263
+ /**
1264
+ * @description PIN code for delivery verification
1265
+ * @example 5678
1266
+ */
1267
+ delivery_pin?: string;
1268
+ /**
1269
+ * Format: date-time
1270
+ * @description Offer expiration time — must accept or reject before this time
1271
+ * @example 2026-01-15T12:00:00Z
1272
+ */
908
1273
  deadline?: string;
909
- orderId?: string;
910
- state?: string;
911
- /** Format: date-time */
912
- decidedAt?: string;
913
- /** Format: int32 */
914
- centsPayOut?: number;
915
- routeId?: string;
916
- /** Format: double */
917
- routeScore?: number;
918
- /** @enum {string} */
919
- matchingMethod?: "MANUAL" | "REGION" | "LANE" | "TERMINAL" | "TRIP";
920
- pickupPin?: string;
921
- deliveryPin?: string;
922
- contacted?: boolean;
923
- communicationExpired?: boolean;
924
- emailThreadId?: string;
925
- /** Format: int32 */
926
- manualCentsPayoutOverride?: number;
927
- additionalPayoutsInCents?: {
928
- [key: string]: number;
929
- };
930
- /** Format: int32 */
931
- totalPayoutInCents?: number;
932
- realTimeVehicleLocationSnapshots?: components["schemas"]["VehicleLocationSnapshot"][];
933
- tripFragmentMatches?: components["schemas"]["TripFragmentMatch"][];
934
- /** Format: date-time */
935
- createdAt?: string;
936
- /** Format: date-time */
937
- updatedAt?: string;
938
- orderData?: components["schemas"]["Order"];
939
- pickupAddressData?: components["schemas"]["Address"];
940
- dropoffAddressData?: components["schemas"]["Address"];
941
- orderAccessorials?: components["schemas"]["OrderAccessorials"];
1274
+ /**
1275
+ * Format: date-time
1276
+ * @description When this offer was created
1277
+ * @example 2026-01-15T08:00:00Z
1278
+ */
1279
+ created_at?: string;
1280
+ /**
1281
+ * Format: date-time
1282
+ * @description When this offer was last updated
1283
+ * @example 2026-01-15T10:30:00Z
1284
+ */
1285
+ updated_at?: string;
942
1286
  };
943
- Order: {
1287
+ /** @description Request body for accepting an offer */
1288
+ AcceptOfferRequest: {
1289
+ /**
1290
+ * Format: date-time
1291
+ * @description Estimated time of pickup
1292
+ * @example 2026-01-16T14:00:00Z
1293
+ */
1294
+ estimated_pickup_time?: string;
1295
+ /**
1296
+ * @description Carrier's internal reference number for this shipment
1297
+ * @example CARRIER-TRK-789
1298
+ */
1299
+ carrier_reference?: string;
1300
+ /**
1301
+ * @description Name of the assigned driver
1302
+ * @example John Smith
1303
+ */
1304
+ driver_name?: string;
1305
+ /**
1306
+ * @description Phone number of the assigned driver
1307
+ * @example +15551234567
1308
+ */
1309
+ driver_phone?: string;
1310
+ /**
1311
+ * @description Identifier of the vehicle assigned to this shipment
1312
+ * @example TRUCK-42
1313
+ */
1314
+ vehicle_id?: string;
1315
+ };
1316
+ /** @description A bundle of offers presented to a carrier */
1317
+ Bundle: {
1318
+ /**
1319
+ * @description Unique bundle identifier
1320
+ * @example 507f1f77bcf86cd799439012
1321
+ */
944
1322
  id?: string;
945
- customerId?: string;
946
- companyId?: string;
947
- additionalCustomerIds?: string[];
948
- orderNumber?: string;
949
- pickupAddressId?: string;
950
- deliveryAddressId?: string;
951
- logisticsId?: string;
952
- /** Format: int32 */
953
- totalPalletCount?: number;
954
- /** Format: float */
955
- totalPoundsWeight?: number;
956
- description?: string;
957
- ltlCode?: string;
958
- quote?: components["schemas"]["Quote"];
959
- billingAddressId?: string;
960
- paid?: boolean;
961
- /** Format: int32 */
962
- amountDue?: number;
963
- /** Format: date-time */
964
- paidAt?: string;
965
- paidBy?: string;
966
- paymentMethod?: string;
967
- paymentNotes?: string;
968
- confirmed?: boolean;
969
- state?: string;
970
- /** @enum {string} */
971
- cancellationReason?: "unspecified" | "customer_cancellation" | "shipment_entry_error" | "low_coverage" | "unacceptable_margin" | "expired" | "carrier_exception" | "shipper_exception";
972
- orderComponents?: components["schemas"]["ComponentDetails"][];
973
- poNumber?: string;
974
- refNumber?: string;
975
- emailThreadId?: string;
976
- /** Format: date-time */
977
- decidedAt?: string;
978
- /** Format: date-time */
979
- paymentDueAt?: string;
980
- /** Format: date-time */
981
- createdAt?: string;
982
- /** Format: date-time */
983
- updatedAt?: string;
984
- searchMatches?: components["schemas"]["SearchMatch"][];
985
- /** Format: double */
986
- avgPoundsPerCubicFoot?: number;
987
- /** Format: double */
988
- totalCubicFeet?: number;
989
- orderPreConfirmation?: boolean;
990
- /** Format: int32 */
991
- totalPriceInCents?: number;
992
- /** Format: int32 */
993
- totalPriceInCentsWithoutBrokerCharges?: number;
1323
+ /**
1324
+ * @description Current bundle status
1325
+ * @enum {string}
1326
+ */
1327
+ status?: "OPEN" | "EXPIRED" | "DECLINED" | "SUBSET_ACCEPTED" | "ACCEPTED";
1328
+ /** @description List of offers in this bundle with full details */
1329
+ offers?: components["schemas"]["Offer"][];
1330
+ /**
1331
+ * Format: date-time
1332
+ * @description When this bundle was created
1333
+ * @example 2026-01-15T08:00:00Z
1334
+ */
1335
+ created_at?: string;
1336
+ /**
1337
+ * Format: date-time
1338
+ * @description When this bundle was last updated
1339
+ * @example 2026-01-15T10:30:00Z
1340
+ */
1341
+ updated_at?: string;
994
1342
  };
995
- OrderAccessorials: {
996
- pickupAccessorials?: components["schemas"]["AddressAccessorialSnapshot"];
997
- deliveryAccessorials?: components["schemas"]["AddressAccessorialSnapshot"];
998
- hazmat?: boolean;
999
- reefer?: boolean;
1343
+ /** @description Request body for accepting a bundle, optionally excluding specific offers */
1344
+ AcceptBundleRequest: {
1345
+ /**
1346
+ * @description List of offer IDs to exclude from the bundle acceptance
1347
+ * @example [
1348
+ * "507f1f77bcf86cd799439011"
1349
+ * ]
1350
+ */
1351
+ offer_ids_to_exclude?: string[];
1352
+ /**
1353
+ * @description Carrier's internal reference number for this bundle
1354
+ * @example CARRIER-BATCH-001
1355
+ */
1356
+ carrier_reference?: string;
1357
+ /**
1358
+ * @description Name of the assigned driver
1359
+ * @example John Smith
1360
+ */
1361
+ driver_name?: string;
1362
+ /**
1363
+ * @description Phone number of the assigned driver
1364
+ * @example +1-555-0100
1365
+ */
1366
+ driver_phone?: string;
1367
+ /**
1368
+ * @description Identifier of the vehicle assigned to this bundle
1369
+ * @example TRUCK-42
1370
+ */
1371
+ vehicle_id?: string;
1000
1372
  };
1001
- Quote: {
1002
- id?: string;
1003
- customerId?: string;
1004
- shipperId?: string;
1005
- orderId?: string;
1006
- pickupZip?: string;
1007
- dropoffZip?: string;
1008
- /** Format: int32 */
1009
- numPallets?: number;
1010
- /** Format: float */
1011
- totalWeight?: number;
1012
- /** Format: int32 */
1013
- centsCharge?: number;
1014
- /** Format: date-time */
1015
- timeStamp?: string;
1016
- exposePrice?: boolean;
1017
- /** Format: int32 */
1018
- suggestedCarrierPayoutCents?: number;
1019
- /** Format: double */
1020
- carrierProbability?: number;
1021
- /** Format: double */
1022
- shipperProbability?: number;
1023
- /** Format: double */
1024
- pickupScoreSurroundingNormalized?: number;
1025
- /** Format: double */
1026
- dropoffScoreSurroundingNormalized?: number;
1027
- /** Format: double */
1028
- originalPrice?: number;
1029
- /** Format: double */
1030
- miles?: number;
1031
- additionalChargesInCents?: {
1032
- [key: string]: number;
1033
- };
1034
- brokerChargesInCents?: {
1035
- [key: string]: number;
1036
- };
1037
- /** Format: int32 */
1038
- pricingRuleAdjustmentInCents?: number;
1039
- appliedPricingRules?: components["schemas"]["AppliedPricingRule"][];
1040
- /** Format: date-time */
1041
- createdAt?: string;
1042
- /** Format: date-time */
1043
- updatedAt?: string;
1044
- /** @enum {string} */
1045
- status?: "open" | "display" | "price_locked" | "confirmed" | "rejected";
1046
- /** @enum {string} */
1047
- quoteSource?: "pricing_model" | "manual_entry" | "pricing_model_v2";
1373
+ /** @description Address information for pickup or delivery locations */
1374
+ Address: {
1375
+ /**
1376
+ * @description Name of the location or business
1377
+ * @example Fairgrounds Distribution Center
1378
+ */
1379
+ name: string;
1380
+ /**
1381
+ * @description Primary street address
1382
+ * @example 1531 Junipero Avenue
1383
+ */
1384
+ address1: string;
1385
+ /**
1386
+ * @description Secondary address line (suite, unit, etc.)
1387
+ * @example Dock 5
1388
+ */
1389
+ address2?: string;
1390
+ /**
1391
+ * @description City name
1392
+ * @example Long Beach
1393
+ */
1394
+ city: string;
1395
+ /**
1396
+ * @description Two-letter state abbreviation
1397
+ * @example CA
1398
+ */
1399
+ state: string;
1400
+ /**
1401
+ * @description 5-digit ZIP code
1402
+ * @example 90804
1403
+ */
1404
+ zipCode: string;
1405
+ /**
1406
+ * @description Contact phone number in E.164 format
1407
+ * @example +18087857650
1408
+ */
1409
+ phoneNumber: string;
1410
+ /**
1411
+ * @description Name of the contact person at this location
1412
+ * @example Mike Johnson
1413
+ */
1414
+ contactPerson: string;
1415
+ /**
1416
+ * @description Opening time for the location in 24-hour format (HH:mm). Defaults to 10:00 if not provided.
1417
+ * @example 10:00
1418
+ */
1419
+ openTime?: string;
1420
+ /**
1421
+ * @description Closing time for the location in 24-hour format (HH:mm). Defaults to 16:00 if not provided.
1422
+ * @example 16:00
1423
+ */
1424
+ closeTime?: string;
1425
+ /**
1426
+ * @description Additional notes or instructions for the driver
1427
+ * @example Dock 3, enter from back of building
1428
+ */
1429
+ notes?: string;
1430
+ /**
1431
+ * @description Whether a liftgate is required at this location
1432
+ * @example false
1433
+ */
1434
+ liftgateRequired?: boolean;
1435
+ /**
1436
+ * @description Whether this is a limited access location (residential, construction site, etc.)
1437
+ * @example false
1438
+ */
1439
+ limitedAccess?: boolean;
1440
+ /**
1441
+ * @description Whether an appointment is required for pickup/delivery
1442
+ * @example true
1443
+ */
1444
+ appointmentRequired?: boolean;
1445
+ /**
1446
+ * @description Whether a call-ahead notification is required before pickup/delivery. When true, the carrier will call the contact person before arriving at the location.
1447
+ * @example true
1448
+ */
1449
+ callAheadRequired?: boolean;
1048
1450
  };
1049
- SearchMatch: {
1050
- field?: string;
1051
- value?: string;
1052
- /** Format: int32 */
1053
- startIndex?: number;
1054
- /** Format: int32 */
1055
- endIndex?: number;
1056
- };
1057
- TripDetour: {
1058
- /** Format: int32 */
1059
- totalDetourSeconds?: number;
1060
- /** Format: int32 */
1061
- pickupDetourSeconds?: number;
1062
- /** Format: int32 */
1063
- deliveryDetourSeconds?: number;
1064
- };
1065
- TripFragmentMatch: {
1066
- tripId?: string;
1067
- tripFragmentId?: string;
1068
- vehicleId?: string;
1069
- /** Format: int32 */
1070
- pickupStopNumber?: number;
1071
- /** Format: int32 */
1072
- deliveryStopNumber?: number;
1073
- tripDetour?: components["schemas"]["TripDetour"];
1074
- };
1075
- VehicleLocationSnapshot: {
1076
- id?: string;
1077
- vehicleId?: string;
1078
- vehicleName?: string;
1079
- location?: string;
1080
- /** Format: int32 */
1081
- heading?: number;
1082
- /** Format: int32 */
1083
- speed?: number;
1084
- /** Format: date-time */
1085
- lastUpdated?: string;
1086
- /** Format: int32 */
1087
- numHexesAwayFromPickup?: number;
1451
+ /** @description Request to create a new shipment */
1452
+ CreateShipmentRequest: {
1453
+ /**
1454
+ * @description Optional ID of a previously generated quote.
1455
+ * @example 507f1f77bcf86cd799439013
1456
+ */
1457
+ quoteId?: string;
1458
+ pickupAddress: components["schemas"]["Address"];
1459
+ deliveryAddress: components["schemas"]["Address"];
1460
+ /** @description List of cargo components in the shipment */
1461
+ orderComponents: components["schemas"]["OrderComponent"][];
1462
+ /**
1463
+ * @description Description of the shipment contents
1464
+ * @example Electronics - fragile
1465
+ */
1466
+ description: string;
1467
+ /**
1468
+ * @description Purchase order number for reference
1469
+ * @example PO-2024-12345
1470
+ */
1471
+ poNumber?: string;
1472
+ /**
1473
+ * @description Additional reference number
1474
+ * @example REF-ABC-123
1475
+ */
1476
+ refNumber?: string;
1477
+ /**
1478
+ * Format: date-time
1479
+ * @description Required pickup date (ISO 8601 format)
1480
+ * @example 2024-12-24T08:00:00Z
1481
+ */
1482
+ requiredPickupDate?: string;
1483
+ /**
1484
+ * Format: date-time
1485
+ * @description Required delivery by date (ISO 8601 format)
1486
+ * @example 2024-12-26T17:00:00Z
1487
+ */
1488
+ requiredDeliveryBy?: string;
1489
+ };
1490
+ /** @description Pallet dimensions in inches. All fields optional: if any are omitted the entire dimensions object is treated as missing and the API default of 40 x 48 x 60 in. (length x width x height) is applied. */
1491
+ Dimensions: {
1492
+ /**
1493
+ * Format: int32
1494
+ * @description Length in inches
1495
+ * @example 48
1496
+ */
1497
+ length?: number;
1498
+ /**
1499
+ * Format: int32
1500
+ * @description Width in inches
1501
+ * @example 48
1502
+ */
1503
+ width?: number;
1504
+ /**
1505
+ * Format: int32
1506
+ * @description Height in inches
1507
+ * @example 72
1508
+ */
1509
+ height?: number;
1510
+ };
1511
+ /** @description A cargo component (pallet group) in a shipment */
1512
+ OrderComponent: {
1513
+ /**
1514
+ * Format: int32
1515
+ * @description Number of pallets in this component
1516
+ * @example 2
1517
+ */
1518
+ palletCount: number;
1519
+ /**
1520
+ * Format: int32
1521
+ * @description Weight per pallet in pounds
1522
+ * @example 500
1523
+ */
1524
+ poundsWeight: number;
1525
+ /**
1526
+ * @deprecated
1527
+ * @description Pallet dimensions as [height, length, width] in inches. Deprecated: prefer the 'dimensions' object. Optional: if both 'palletDimensions' and 'dimensions' are omitted, the API defaults to 40 x 48 x 60 in. (length x width x height).
1528
+ * @example [
1529
+ * 72,
1530
+ * 48,
1531
+ * 48
1532
+ * ]
1533
+ */
1534
+ palletDimensions?: number[];
1535
+ dimensions?: components["schemas"]["Dimensions"];
1536
+ };
1537
+ /** @description Request to generate a shipping quote. Quotes are valid for 2 days from creation. */
1538
+ QuoteRequest: {
1539
+ pickupAddress: components["schemas"]["Address"];
1540
+ deliveryAddress: components["schemas"]["Address"];
1541
+ /** @description List of pallets or freight pieces. */
1542
+ orderComponents: components["schemas"]["OrderComponent"][];
1543
+ /**
1544
+ * Format: date-time
1545
+ * @description Required pickup date (ISO 8601).
1546
+ * @example 2026-04-01T08:00:00Z
1547
+ */
1548
+ requiredPickupDate?: string;
1549
+ };
1550
+ /** @description Response containing a shipping quote */
1551
+ QuoteResponse: {
1552
+ /**
1553
+ * @description Unique quote identifier
1554
+ * @example 507f1f77bcf86cd799439013
1555
+ */
1556
+ id?: string;
1557
+ /**
1558
+ * Format: int32
1559
+ * @description Total quoted price in cents (USD)
1560
+ * @example 125000
1561
+ */
1562
+ quotedPriceInCents?: number;
1563
+ /**
1564
+ * Format: date-time
1565
+ * @description When this quote expires (ISO 8601 format). Quotes are valid for 2 days.
1566
+ * @example 2024-12-20T15:30:00Z
1567
+ */
1568
+ quoteExpirationTime?: string;
1569
+ /**
1570
+ * Format: int32
1571
+ * @description Number of business days to deliver the shipment after pickup. Pickup day is excluded; weekends are not counted. May be null when the ETA cannot be computed.
1572
+ * @example 2
1573
+ */
1574
+ transitDays?: number | null;
1575
+ /**
1576
+ * Format: date-time
1577
+ * @description Estimated delivery date and time (ISO 8601 format, UTC). May be null when the ETA cannot be computed.
1578
+ * @example 2024-12-22T15:30:00Z
1579
+ */
1580
+ estimatedDeliveryDate?: string | null;
1581
+ };
1582
+ /** @description Request a pre-signed URL to upload a file (signature image or proof of delivery) */
1583
+ UploadUrlRequest: {
1584
+ /**
1585
+ * @description Type of document being uploaded
1586
+ * @example SIGNATURE
1587
+ * @enum {string}
1588
+ */
1589
+ document_type: "SIGNATURE" | "PROOF_OF_DELIVERY";
1590
+ /**
1591
+ * @description Content type of the file
1592
+ * @example image/png
1593
+ * @enum {string}
1594
+ */
1595
+ content_type: "image/png" | "image/jpeg" | "application/pdf";
1596
+ /**
1597
+ * @description Original filename
1598
+ * @example signature-Y73Q0.png
1599
+ */
1600
+ file_name?: string;
1601
+ };
1602
+ /** @description Pre-signed URL for uploading a file directly to storage */
1603
+ UploadUrlResponse: {
1604
+ /**
1605
+ * @description Document ID — use this to reference the uploaded file
1606
+ * @example a1b2c3d4-e5f6-7890-abcd-ef1234567890
1607
+ */
1608
+ document_id?: string;
1609
+ /**
1610
+ * @description Pre-signed PUT URL — upload your file directly to this URL using HTTP PUT with the specified content type
1611
+ * @example https://s3.amazonaws.com/oway-docs/...
1612
+ */
1613
+ upload_url?: string;
1614
+ /**
1615
+ * @description Content type to use in the PUT request
1616
+ * @example image/png
1617
+ */
1618
+ content_type?: string;
1619
+ /**
1620
+ * Format: date-time
1621
+ * @description URL expires at this time — upload before then
1622
+ * @example 2026-01-15T11:00:00Z
1623
+ */
1624
+ expires_at?: string;
1625
+ };
1626
+ /** @description Real-time location update for a shipment in transit */
1627
+ OfferLocationUpdate: {
1628
+ /**
1629
+ * Format: double
1630
+ * @description Latitude in decimal degrees
1631
+ * @example 33.7701
1632
+ */
1633
+ latitude: number;
1634
+ /**
1635
+ * Format: double
1636
+ * @description Longitude in decimal degrees
1637
+ * @example -118.1937
1638
+ */
1639
+ longitude: number;
1640
+ /**
1641
+ * Format: int32
1642
+ * @description Heading in degrees (0-359, where 0 is north; -1 for unknown)
1643
+ * @example 270
1644
+ */
1645
+ heading?: number;
1646
+ /**
1647
+ * Format: int32
1648
+ * @description Speed in miles per hour
1649
+ * @example 65
1650
+ */
1651
+ speed_mph?: number;
1652
+ /**
1653
+ * Format: date-time
1654
+ * @description Timestamp of this location reading
1655
+ */
1656
+ timestamp: string;
1657
+ };
1658
+ /** @description Acknowledgment of a location update */
1659
+ LocationAcknowledgment: {
1660
+ /**
1661
+ * @description Whether the location update was recorded
1662
+ * @example true
1663
+ */
1664
+ recorded?: boolean;
1665
+ /**
1666
+ * @description Human-readable order number
1667
+ * @example Y73Q0
1668
+ */
1669
+ order_number?: string;
1670
+ };
1671
+ /** @description Request body for reporting a shipment exception */
1672
+ ExceptionReportRequest: {
1673
+ /**
1674
+ * @description Type of exception that occurred
1675
+ * @enum {string}
1676
+ */
1677
+ exception_type: "no_capacity" | "wrong_equipment" | "load_not_ready" | "failed_pickup" | "truck_breakdown" | "driver_hos_expired" | "damage_upon_receipt" | "damage_in_transit" | "damage_at_delivery" | "weather_delay" | "traffic_delay" | "address_incorrect" | "recipient_unavailable" | "customs_delay" | "delivery_attempted" | "other";
1678
+ /**
1679
+ * Format: date-time
1680
+ * @description Time the exception occurred
1681
+ */
1682
+ exception_time: string;
1683
+ /** @description Description of the exception */
1684
+ description?: string;
1685
+ /**
1686
+ * Format: date-time
1687
+ * @description Revised estimated delivery time following the exception
1688
+ */
1689
+ estimated_delivery_time?: string;
1690
+ location?: components["schemas"]["EventLocation"];
1691
+ };
1692
+ /** @description Response after reporting a shipment exception */
1693
+ ExceptionResponse: {
1694
+ /**
1695
+ * @description Human-readable order number
1696
+ * @example Y73Q0
1697
+ */
1698
+ order_number?: string;
1699
+ /**
1700
+ * @description Whether the exception was successfully recorded
1701
+ * @example true
1702
+ */
1703
+ exception_recorded?: boolean;
1704
+ /**
1705
+ * @description Whether notifications were sent to relevant parties (reserved for future use)
1706
+ * @example false
1707
+ */
1708
+ notifications_sent?: boolean;
1709
+ };
1710
+ /** @description A single leg of a trip */
1711
+ CarrierTripLeg: {
1712
+ /**
1713
+ * Format: double
1714
+ * @description Start latitude
1715
+ * @example 33.787363
1716
+ */
1717
+ start_lat?: number;
1718
+ /**
1719
+ * Format: double
1720
+ * @description Start longitude
1721
+ * @example -118.163715
1722
+ */
1723
+ start_long?: number;
1724
+ /**
1725
+ * Format: date-time
1726
+ * @description Departure time (ISO 8601 format)
1727
+ * @example 2025-02-20T08:00:00Z
1728
+ */
1729
+ start_time?: string;
1730
+ /**
1731
+ * Format: double
1732
+ * @description End latitude
1733
+ * @example 34.052235
1734
+ */
1735
+ end_lat?: number;
1736
+ /**
1737
+ * Format: double
1738
+ * @description End longitude
1739
+ * @example -118.243683
1740
+ */
1741
+ end_long?: number;
1742
+ /**
1743
+ * Format: date-time
1744
+ * @description Earliest arrival time (ISO 8601 format)
1745
+ * @example 2025-02-20T12:00:00Z
1746
+ */
1747
+ arrival_window_start?: string;
1748
+ /**
1749
+ * Format: date-time
1750
+ * @description Latest arrival time (ISO 8601 format)
1751
+ * @example 2025-02-20T16:00:00Z
1752
+ */
1753
+ arrival_window_end?: string;
1754
+ /**
1755
+ * @description Whether the vehicle is available for offers on this leg
1756
+ * @example true
1757
+ */
1758
+ available_for_offers?: boolean;
1759
+ /**
1760
+ * Format: int32
1761
+ * @description Estimated drive time in minutes
1762
+ * @example 240
1763
+ */
1764
+ est_drive_time_minutes?: number;
1765
+ /**
1766
+ * Format: int32
1767
+ * @description Stop sequence number (0-based)
1768
+ * @example 0
1769
+ */
1770
+ stop_number?: number;
1771
+ };
1772
+ /** @description Trip data for a carrier vehicle */
1773
+ CarrierTripRequest: {
1774
+ /**
1775
+ * @description Trip identifier
1776
+ * @example trip-001
1777
+ */
1778
+ id?: string;
1779
+ /**
1780
+ * @description Carrier identifier
1781
+ * @example carrier-123
1782
+ */
1783
+ carrier_id?: string;
1784
+ /**
1785
+ * @description Vehicle identifier
1786
+ * @example TRUCK-001
1787
+ */
1788
+ vehicle_id?: string;
1789
+ /**
1790
+ * @description Trip number
1791
+ * @example TRIP-2026-100
1792
+ */
1793
+ trip_no?: string;
1794
+ /** @description Ordered list of trip legs */
1795
+ legs?: components["schemas"]["CarrierTripLeg"][];
1796
+ };
1797
+ /** @description Token request containing client credentials */
1798
+ TokenRequest: {
1799
+ /**
1800
+ * @description Client ID provided by Oway
1801
+ * @example abc123def456
1802
+ */
1803
+ clientId: string;
1804
+ /**
1805
+ * @description Client secret provided by Oway
1806
+ * @example secret_xyz789
1807
+ */
1808
+ clientSecret: string;
1809
+ };
1810
+ /** @description Error response for token requests */
1811
+ TokenErrorResponse: {
1812
+ /**
1813
+ * @description Error code
1814
+ * @example invalid_client
1815
+ */
1816
+ error?: string;
1817
+ /**
1818
+ * @description Human-readable error description
1819
+ * @example Invalid client credentials
1820
+ */
1821
+ errorDescription?: string;
1822
+ };
1823
+ /** @description Successful token response */
1824
+ TokenResponse: {
1825
+ /**
1826
+ * @description The access token to use for API requests
1827
+ * @example eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
1828
+ */
1829
+ accessToken?: string;
1830
+ /**
1831
+ * @description Token type (always 'Bearer')
1832
+ * @example Bearer
1833
+ */
1834
+ tokenType?: string;
1835
+ /**
1836
+ * Format: int32
1837
+ * @description Token validity in seconds
1838
+ * @example 86400
1839
+ */
1840
+ expiresIn?: number;
1841
+ };
1842
+ /** @description Shipment tracking information */
1843
+ Tracking: {
1844
+ /**
1845
+ * @description Unique identifier for the order
1846
+ * @example 507f1f77bcf86cd799439011
1847
+ */
1848
+ id?: string;
1849
+ /**
1850
+ * @description Human-readable PRO number for the shipment (5-character alphanumeric)
1851
+ * @example ZKYQ5
1852
+ */
1853
+ orderNumber?: string;
1854
+ /**
1855
+ * @description Current shipment status in the order lifecycle
1856
+ * @example PICKED_UP
1857
+ * @enum {string}
1858
+ */
1859
+ orderStatus?: "INITIALIZED" | "CONFIRMED" | "ACCEPTED" | "ASSIGNED" | "PICKED_UP" | "IN_TRANSIT" | "DELIVERED" | "CANCELLED";
1860
+ /**
1861
+ * Format: date-time
1862
+ * @description Actual pickup date/time (ISO 8601 format)
1863
+ * @example 2024-12-23T10:30:00Z
1864
+ */
1865
+ actualPickupDate?: string;
1866
+ /**
1867
+ * Format: date-time
1868
+ * @description Actual delivery date/time (ISO 8601 format)
1869
+ * @example 2024-12-25T14:00:00Z
1870
+ */
1871
+ actualDeliveryDate?: string;
1872
+ /**
1873
+ * Format: date-time
1874
+ * @description Estimated pickup date/time (ISO 8601 format)
1875
+ * @example 2024-12-23T09:00:00Z
1876
+ */
1877
+ estimatedPickupDate?: string;
1878
+ /**
1879
+ * Format: date-time
1880
+ * @description Estimated delivery date/time (ISO 8601 format)
1881
+ * @example 2024-12-25T12:00:00Z
1882
+ */
1883
+ estimatedDeliveryDate?: string;
1884
+ };
1885
+ /** @description A charge on an invoice */
1886
+ InvoiceCharge: {
1887
+ /**
1888
+ * @description Type of charge
1889
+ * @example BASE_FREIGHT
1890
+ */
1891
+ chargeType?: string;
1892
+ /**
1893
+ * @description Human-readable description of the charge
1894
+ * @example Base Freight
1895
+ */
1896
+ description?: string;
1897
+ /**
1898
+ * Format: int32
1899
+ * @description Amount in cents (USD)
1900
+ * @example 100000
1901
+ */
1902
+ amountInCents?: number;
1903
+ };
1904
+ /** @description A line item on an invoice */
1905
+ InvoiceLineItem: {
1906
+ /**
1907
+ * @description Description of the item
1908
+ * @example General Freight
1909
+ */
1910
+ description?: string;
1911
+ /**
1912
+ * @description Freight class
1913
+ * @example 85
1914
+ */
1915
+ freightClass?: string;
1916
+ /**
1917
+ * Format: int32
1918
+ * @description Weight in pounds
1919
+ * @example 500
1920
+ */
1921
+ weight?: number;
1922
+ /**
1923
+ * Format: int32
1924
+ * @description Number of pieces/pallets
1925
+ * @example 2
1926
+ */
1927
+ quantity?: number;
1928
+ /**
1929
+ * @description Package type
1930
+ * @example PLT
1931
+ */
1932
+ packageType?: string;
1933
+ };
1934
+ /** @description Itemized invoice for a delivered shipment */
1935
+ InvoiceResponse: {
1936
+ /**
1937
+ * @description Order ID
1938
+ * @example 67b6c5fcfbf1be6b24127646
1939
+ */
1940
+ orderId?: string;
1941
+ /**
1942
+ * @description Human-readable order number (PRO number)
1943
+ * @example ZKYQ5
1944
+ */
1945
+ orderNumber?: string;
1946
+ /**
1947
+ * Format: date-time
1948
+ * @description Invoice date (typically same as delivery date)
1949
+ * @example 2024-12-20T15:30:00Z
1950
+ */
1951
+ invoiceDate?: string;
1952
+ /**
1953
+ * Format: date-time
1954
+ * @description Ship date (when the shipment was picked up)
1955
+ * @example 2024-12-18T09:00:00Z
1956
+ */
1957
+ shipDate?: string;
1958
+ /**
1959
+ * Format: date-time
1960
+ * @description Delivery date (when the shipment was delivered)
1961
+ * @example 2024-12-20T15:30:00Z
1962
+ */
1963
+ deliveryDate?: string;
1964
+ /**
1965
+ * @description Purchase order number (if provided)
1966
+ * @example PO-12345
1967
+ */
1968
+ poNumber?: string;
1969
+ /**
1970
+ * @description Reference number (BOL number)
1971
+ * @example BOL-67890
1972
+ */
1973
+ refNumber?: string;
1974
+ /** @description Line items representing the shipped goods */
1975
+ lineItems?: components["schemas"]["InvoiceLineItem"][];
1976
+ /** @description Itemized charges and fees */
1977
+ charges?: components["schemas"]["InvoiceCharge"][];
1978
+ /**
1979
+ * Format: int32
1980
+ * @description Total of all charges in cents (USD)
1981
+ * @example 125000
1982
+ */
1983
+ totalChargesInCents?: number;
1984
+ /**
1985
+ * Format: int32
1986
+ * @description Total weight of the shipment in pounds
1987
+ * @example 1500
1988
+ */
1989
+ totalWeight?: number;
1990
+ /**
1991
+ * Format: int32
1992
+ * @description Total number of pieces/pallets
1993
+ * @example 4
1994
+ */
1995
+ totalPieces?: number;
1996
+ shipper?: components["schemas"]["Address"];
1997
+ consignee?: components["schemas"]["Address"];
1998
+ billTo?: components["schemas"]["Address"];
1999
+ };
2000
+ /** @description Response containing a document download link */
2001
+ DocumentResponse: {
2002
+ /**
2003
+ * @description Name of the document file
2004
+ * @example bol-ZKYQ5.pdf
2005
+ */
2006
+ filename?: string;
2007
+ /**
2008
+ * @description MIME type of the document
2009
+ * @example application/pdf
2010
+ */
2011
+ fileType?: string;
2012
+ /**
2013
+ * @description Pre-signed download URL (valid for limited time)
2014
+ * @example https://s3.amazonaws.com/...
2015
+ */
2016
+ downloadLink?: string;
2017
+ };
2018
+ /** @description A single GPS tracking data point */
2019
+ TrackingPoint: {
2020
+ /**
2021
+ * Format: double
2022
+ * @description GPS latitude
2023
+ * @example 37.7749
2024
+ */
2025
+ latitude?: number;
2026
+ /**
2027
+ * Format: double
2028
+ * @description GPS longitude
2029
+ * @example -122.4194
2030
+ */
2031
+ longitude?: number;
2032
+ /**
2033
+ * Format: int32
2034
+ * @description Heading in degrees (0=North, 90=East, 180=South, 270=West)
2035
+ * @example 180
2036
+ */
2037
+ heading?: number;
2038
+ /**
2039
+ * Format: int32
2040
+ * @description Speed in miles per hour
2041
+ * @example 65
2042
+ */
2043
+ speed_mph?: number;
2044
+ /**
2045
+ * Format: date-time
2046
+ * @description When this position was recorded
2047
+ * @example 2026-01-15T10:30:00Z
2048
+ */
2049
+ timestamp?: string;
2050
+ };
2051
+ /** @description Tracking history for a shipment */
2052
+ TrackingResponse: {
2053
+ /**
2054
+ * @description Human-readable order number
2055
+ * @example Y73Q0
2056
+ */
2057
+ order_number?: string;
2058
+ /** @description Ordered list of GPS tracking points from pickup to current/delivery */
2059
+ points?: components["schemas"]["TrackingPoint"][];
2060
+ /**
2061
+ * Format: date-time
2062
+ * @description Timestamp of the most recent tracking point
2063
+ * @example 2026-01-15T14:30:00Z
2064
+ */
2065
+ last_updated?: string;
2066
+ };
2067
+ /** @description Document download information */
2068
+ CarrierDocumentResponse: {
2069
+ /**
2070
+ * @description Name of the document file
2071
+ * @example bol-ZKYQ5.pdf
2072
+ */
2073
+ filename?: string;
2074
+ /**
2075
+ * @description MIME type of the document
2076
+ * @example application/pdf
2077
+ */
2078
+ file_type?: string;
2079
+ /**
2080
+ * @description Pre-signed download URL (valid for limited time)
2081
+ * @example https://s3.amazonaws.com/...
2082
+ */
2083
+ download_link?: string;
2084
+ };
2085
+ };
2086
+ responses: never;
2087
+ parameters: never;
2088
+ requestBodies: never;
2089
+ headers: never;
2090
+ pathItems: never;
2091
+ }
2092
+ interface operations {
2093
+ confirmShipment: {
2094
+ parameters: {
2095
+ query?: never;
2096
+ header?: never;
2097
+ path: {
2098
+ /**
2099
+ * @description Order number (5-character alphanumeric code, commonly called PRO number)
2100
+ * @example ZKYQ5
2101
+ */
2102
+ orderNumber: string;
2103
+ };
2104
+ cookie?: never;
2105
+ };
2106
+ requestBody?: never;
2107
+ responses: {
2108
+ /** @description Shipment confirmed successfully. Verify the response contains `orderStatus: CONFIRMED` to ensure confirmation succeeded. */
2109
+ 200: {
2110
+ headers: {
2111
+ [name: string]: unknown;
2112
+ };
2113
+ content: {
2114
+ "application/json": components["schemas"]["Shipment"];
2115
+ };
2116
+ };
2117
+ /** @description Invalid request: orderNumber is required, order is not in INITIALIZED state, or is missing a quote */
2118
+ 400: {
2119
+ headers: {
2120
+ [name: string]: unknown;
2121
+ };
2122
+ content: {
2123
+ "application/json": components["schemas"]["ProblemDetail"];
2124
+ };
2125
+ };
2126
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
2127
+ 401: {
2128
+ headers: {
2129
+ [name: string]: unknown;
2130
+ };
2131
+ content: {
2132
+ "application/json": components["schemas"]["ProblemDetail"];
2133
+ };
2134
+ };
2135
+ /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
2136
+ 403: {
2137
+ headers: {
2138
+ [name: string]: unknown;
2139
+ };
2140
+ content: {
2141
+ "application/json": components["schemas"]["ProblemDetail"];
2142
+ };
2143
+ };
2144
+ /** @description Shipment not found */
2145
+ 404: {
2146
+ headers: {
2147
+ [name: string]: unknown;
2148
+ };
2149
+ content: {
2150
+ "application/json": components["schemas"]["ProblemDetail"];
2151
+ };
2152
+ };
2153
+ /** @description Internal server error */
2154
+ 500: {
2155
+ headers: {
2156
+ [name: string]: unknown;
2157
+ };
2158
+ content: {
2159
+ "application/json": components["schemas"]["ProblemDetail"];
2160
+ };
2161
+ };
2162
+ };
2163
+ };
2164
+ cancelShipment: {
2165
+ parameters: {
2166
+ query?: never;
2167
+ header?: never;
2168
+ path: {
2169
+ /**
2170
+ * @description Order number (5-character alphanumeric code, commonly called PRO number)
2171
+ * @example ZKYQ5
2172
+ */
2173
+ orderNumber: string;
2174
+ };
2175
+ cookie?: never;
2176
+ };
2177
+ requestBody?: never;
2178
+ responses: {
2179
+ /** @description Shipment cancelled successfully */
2180
+ 200: {
2181
+ headers: {
2182
+ [name: string]: unknown;
2183
+ };
2184
+ content: {
2185
+ "application/json": components["schemas"]["Shipment"];
2186
+ };
2187
+ };
2188
+ /** @description Invalid request: orderNumber is required, or order cannot be cancelled in its current state */
2189
+ 400: {
2190
+ headers: {
2191
+ [name: string]: unknown;
2192
+ };
2193
+ content: {
2194
+ "application/json": components["schemas"]["ProblemDetail"];
2195
+ };
2196
+ };
2197
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
2198
+ 401: {
2199
+ headers: {
2200
+ [name: string]: unknown;
2201
+ };
2202
+ content: {
2203
+ "application/json": components["schemas"]["ProblemDetail"];
2204
+ };
2205
+ };
2206
+ /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
2207
+ 403: {
2208
+ headers: {
2209
+ [name: string]: unknown;
2210
+ };
2211
+ content: {
2212
+ "application/json": components["schemas"]["ProblemDetail"];
2213
+ };
2214
+ };
2215
+ /** @description Shipment not found */
2216
+ 404: {
2217
+ headers: {
2218
+ [name: string]: unknown;
2219
+ };
2220
+ content: {
2221
+ "application/json": components["schemas"]["ProblemDetail"];
2222
+ };
2223
+ };
2224
+ /** @description Internal server error */
2225
+ 500: {
2226
+ headers: {
2227
+ [name: string]: unknown;
2228
+ };
2229
+ content: {
2230
+ "application/json": components["schemas"]["ProblemDetail"];
2231
+ };
2232
+ };
2233
+ };
2234
+ };
2235
+ confirmPickup: {
2236
+ parameters: {
2237
+ query?: never;
2238
+ header?: never;
2239
+ path: {
2240
+ /**
2241
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
2242
+ * @example Y73Q0
2243
+ */
2244
+ identifier: string;
2245
+ };
2246
+ cookie?: never;
2247
+ };
2248
+ requestBody: {
2249
+ content: {
2250
+ "application/json": components["schemas"]["PickupConfirmationRequest"];
2251
+ };
2252
+ };
2253
+ responses: {
2254
+ /** @description Pickup confirmed, order status updated to PICKED_UP */
2255
+ 200: {
2256
+ headers: {
2257
+ [name: string]: unknown;
2258
+ };
2259
+ content: {
2260
+ "application/json": components["schemas"]["CarrierShipment"];
2261
+ };
2262
+ };
2263
+ /** @description Invalid request: pickupTime is required */
2264
+ 400: {
2265
+ headers: {
2266
+ [name: string]: unknown;
2267
+ };
2268
+ content: {
2269
+ "application/json": components["schemas"]["ProblemDetail"];
2270
+ };
2271
+ };
2272
+ /** @description Unauthorized: missing or invalid bearer token */
2273
+ 401: {
2274
+ headers: {
2275
+ [name: string]: unknown;
2276
+ };
2277
+ content: {
2278
+ "application/json": components["schemas"]["ProblemDetail"];
2279
+ };
2280
+ };
2281
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
2282
+ 403: {
2283
+ headers: {
2284
+ [name: string]: unknown;
2285
+ };
2286
+ content: {
2287
+ "application/json": components["schemas"]["ProblemDetail"];
2288
+ };
2289
+ };
2290
+ /** @description Shipment not found */
2291
+ 404: {
2292
+ headers: {
2293
+ [name: string]: unknown;
2294
+ };
2295
+ content: {
2296
+ "application/json": components["schemas"]["ProblemDetail"];
2297
+ };
2298
+ };
2299
+ /** @description Shipment not in valid state for pickup confirmation */
2300
+ 409: {
2301
+ headers: {
2302
+ [name: string]: unknown;
2303
+ };
2304
+ content: {
2305
+ "application/json": components["schemas"]["ProblemDetail"];
2306
+ };
2307
+ };
2308
+ /** @description Internal server error */
2309
+ 500: {
2310
+ headers: {
2311
+ [name: string]: unknown;
2312
+ };
2313
+ content: {
2314
+ "application/json": components["schemas"]["ProblemDetail"];
2315
+ };
2316
+ };
2317
+ };
2318
+ };
2319
+ confirmDelivery: {
2320
+ parameters: {
2321
+ query?: never;
2322
+ header?: never;
2323
+ path: {
2324
+ /**
2325
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
2326
+ * @example Y73Q0
2327
+ */
2328
+ identifier: string;
2329
+ };
2330
+ cookie?: never;
2331
+ };
2332
+ requestBody: {
2333
+ content: {
2334
+ "application/json": components["schemas"]["DeliveryConfirmationRequest"];
2335
+ };
2336
+ };
2337
+ responses: {
2338
+ /** @description Delivery confirmed, order status updated to DELIVERED */
2339
+ 200: {
2340
+ headers: {
2341
+ [name: string]: unknown;
2342
+ };
2343
+ content: {
2344
+ "application/json": components["schemas"]["CarrierShipment"];
2345
+ };
2346
+ };
2347
+ /** @description Invalid request: deliveryTime is required */
2348
+ 400: {
2349
+ headers: {
2350
+ [name: string]: unknown;
2351
+ };
2352
+ content: {
2353
+ "application/json": components["schemas"]["ProblemDetail"];
2354
+ };
2355
+ };
2356
+ /** @description Unauthorized: missing or invalid bearer token */
2357
+ 401: {
2358
+ headers: {
2359
+ [name: string]: unknown;
2360
+ };
2361
+ content: {
2362
+ "application/json": components["schemas"]["ProblemDetail"];
2363
+ };
2364
+ };
2365
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
2366
+ 403: {
2367
+ headers: {
2368
+ [name: string]: unknown;
2369
+ };
2370
+ content: {
2371
+ "application/json": components["schemas"]["ProblemDetail"];
2372
+ };
2373
+ };
2374
+ /** @description Shipment not found */
2375
+ 404: {
2376
+ headers: {
2377
+ [name: string]: unknown;
2378
+ };
2379
+ content: {
2380
+ "application/json": components["schemas"]["ProblemDetail"];
2381
+ };
2382
+ };
2383
+ /** @description Shipment not in valid state for delivery confirmation */
2384
+ 409: {
2385
+ headers: {
2386
+ [name: string]: unknown;
2387
+ };
2388
+ content: {
2389
+ "application/json": components["schemas"]["ProblemDetail"];
2390
+ };
2391
+ };
2392
+ /** @description Internal server error */
2393
+ 500: {
2394
+ headers: {
2395
+ [name: string]: unknown;
2396
+ };
2397
+ content: {
2398
+ "application/json": components["schemas"]["ProblemDetail"];
2399
+ };
2400
+ };
2401
+ };
2402
+ };
2403
+ rejectOffer: {
2404
+ parameters: {
2405
+ query?: never;
2406
+ header?: never;
2407
+ path: {
2408
+ /**
2409
+ * @description Offer identifier (offerId, orderNumber, or carrierReference)
2410
+ * @example Y73Q0
2411
+ */
2412
+ identifier: string;
2413
+ };
2414
+ cookie?: never;
2415
+ };
2416
+ requestBody: {
2417
+ content: {
2418
+ "application/json": components["schemas"]["RejectOfferRequest"];
2419
+ };
2420
+ };
2421
+ responses: {
2422
+ /** @description Offer rejected successfully */
2423
+ 200: {
2424
+ headers: {
2425
+ [name: string]: unknown;
2426
+ };
2427
+ content: {
2428
+ "application/json": components["schemas"]["Offer"];
2429
+ };
2430
+ };
2431
+ /** @description Invalid request: reason is required */
2432
+ 400: {
2433
+ headers: {
2434
+ [name: string]: unknown;
2435
+ };
2436
+ content: {
2437
+ "application/json": components["schemas"]["ProblemDetail"];
2438
+ };
2439
+ };
2440
+ /** @description Unauthorized: missing or invalid bearer token */
2441
+ 401: {
2442
+ headers: {
2443
+ [name: string]: unknown;
2444
+ };
2445
+ content: {
2446
+ "application/json": components["schemas"]["ProblemDetail"];
2447
+ };
2448
+ };
2449
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
2450
+ 403: {
2451
+ headers: {
2452
+ [name: string]: unknown;
2453
+ };
2454
+ content: {
2455
+ "application/json": components["schemas"]["ProblemDetail"];
2456
+ };
2457
+ };
2458
+ /** @description Offer not found */
2459
+ 404: {
2460
+ headers: {
2461
+ [name: string]: unknown;
2462
+ };
2463
+ content: {
2464
+ "application/json": components["schemas"]["ProblemDetail"];
2465
+ };
2466
+ };
2467
+ /** @description Offer not in valid state for rejection */
2468
+ 409: {
2469
+ headers: {
2470
+ [name: string]: unknown;
2471
+ };
2472
+ content: {
2473
+ "application/json": components["schemas"]["ProblemDetail"];
2474
+ };
2475
+ };
2476
+ /** @description Internal server error */
2477
+ 500: {
2478
+ headers: {
2479
+ [name: string]: unknown;
2480
+ };
2481
+ content: {
2482
+ "application/json": components["schemas"]["ProblemDetail"];
2483
+ };
2484
+ };
2485
+ };
2486
+ };
2487
+ acceptOffer: {
2488
+ parameters: {
2489
+ query?: never;
2490
+ header?: never;
2491
+ path: {
2492
+ /**
2493
+ * @description Offer identifier (offerId, orderNumber, or carrierReference)
2494
+ * @example Y73Q0
2495
+ */
2496
+ identifier: string;
2497
+ };
2498
+ cookie?: never;
2499
+ };
2500
+ requestBody?: {
2501
+ content: {
2502
+ "application/json": components["schemas"]["AcceptOfferRequest"];
2503
+ };
2504
+ };
2505
+ responses: {
2506
+ /** @description Offer accepted successfully */
2507
+ 200: {
2508
+ headers: {
2509
+ [name: string]: unknown;
2510
+ };
2511
+ content: {
2512
+ "application/json": components["schemas"]["Offer"];
2513
+ };
2514
+ };
2515
+ /** @description Invalid request */
2516
+ 400: {
2517
+ headers: {
2518
+ [name: string]: unknown;
2519
+ };
2520
+ content: {
2521
+ "application/json": components["schemas"]["ProblemDetail"];
2522
+ };
2523
+ };
2524
+ /** @description Unauthorized: missing or invalid bearer token */
2525
+ 401: {
2526
+ headers: {
2527
+ [name: string]: unknown;
2528
+ };
2529
+ content: {
2530
+ "application/json": components["schemas"]["ProblemDetail"];
2531
+ };
2532
+ };
2533
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
2534
+ 403: {
2535
+ headers: {
2536
+ [name: string]: unknown;
2537
+ };
2538
+ content: {
2539
+ "application/json": components["schemas"]["ProblemDetail"];
2540
+ };
2541
+ };
2542
+ /** @description Offer not found */
2543
+ 404: {
2544
+ headers: {
2545
+ [name: string]: unknown;
2546
+ };
2547
+ content: {
2548
+ "application/json": components["schemas"]["ProblemDetail"];
2549
+ };
2550
+ };
2551
+ /** @description Offer not in valid state for acceptance */
2552
+ 409: {
2553
+ headers: {
2554
+ [name: string]: unknown;
2555
+ };
2556
+ content: {
2557
+ "application/json": components["schemas"]["ProblemDetail"];
2558
+ };
2559
+ };
2560
+ /** @description Internal server error */
2561
+ 500: {
2562
+ headers: {
2563
+ [name: string]: unknown;
2564
+ };
2565
+ content: {
2566
+ "application/json": components["schemas"]["ProblemDetail"];
2567
+ };
2568
+ };
2569
+ };
2570
+ };
2571
+ rejectBundle: {
2572
+ parameters: {
2573
+ query?: never;
2574
+ header?: never;
2575
+ path: {
2576
+ /**
2577
+ * @description Bundle ID
2578
+ * @example 507f1f77bcf86cd799439012
2579
+ */
2580
+ bundleId: string;
2581
+ };
2582
+ cookie?: never;
2583
+ };
2584
+ requestBody?: never;
2585
+ responses: {
2586
+ /** @description Bundle rejected successfully */
2587
+ 200: {
2588
+ headers: {
2589
+ [name: string]: unknown;
2590
+ };
2591
+ content: {
2592
+ "application/json": components["schemas"]["Bundle"];
2593
+ };
2594
+ };
2595
+ /** @description Unauthorized: missing or invalid bearer token */
2596
+ 401: {
2597
+ headers: {
2598
+ [name: string]: unknown;
2599
+ };
2600
+ content: {
2601
+ "application/json": components["schemas"]["ProblemDetail"];
2602
+ };
2603
+ };
2604
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
2605
+ 403: {
2606
+ headers: {
2607
+ [name: string]: unknown;
2608
+ };
2609
+ content: {
2610
+ "application/json": components["schemas"]["ProblemDetail"];
2611
+ };
2612
+ };
2613
+ /** @description Bundle not found */
2614
+ 404: {
2615
+ headers: {
2616
+ [name: string]: unknown;
2617
+ };
2618
+ content: {
2619
+ "application/json": components["schemas"]["ProblemDetail"];
2620
+ };
2621
+ };
2622
+ /** @description Bundle not in valid state for rejection */
2623
+ 409: {
2624
+ headers: {
2625
+ [name: string]: unknown;
2626
+ };
2627
+ content: {
2628
+ "application/json": components["schemas"]["ProblemDetail"];
2629
+ };
2630
+ };
2631
+ /** @description Internal server error */
2632
+ 500: {
2633
+ headers: {
2634
+ [name: string]: unknown;
2635
+ };
2636
+ content: {
2637
+ "application/json": components["schemas"]["ProblemDetail"];
2638
+ };
2639
+ };
2640
+ };
2641
+ };
2642
+ acceptBundle: {
2643
+ parameters: {
2644
+ query?: never;
2645
+ header?: never;
2646
+ path: {
2647
+ /**
2648
+ * @description Bundle ID
2649
+ * @example 507f1f77bcf86cd799439012
2650
+ */
2651
+ bundleId: string;
2652
+ };
2653
+ cookie?: never;
2654
+ };
2655
+ requestBody?: {
2656
+ content: {
2657
+ "application/json": components["schemas"]["AcceptBundleRequest"];
2658
+ };
2659
+ };
2660
+ responses: {
2661
+ /** @description Bundle accepted successfully */
2662
+ 200: {
2663
+ headers: {
2664
+ [name: string]: unknown;
2665
+ };
2666
+ content: {
2667
+ "application/json": components["schemas"]["Bundle"];
2668
+ };
2669
+ };
2670
+ /** @description Unauthorized: missing or invalid bearer token */
2671
+ 401: {
2672
+ headers: {
2673
+ [name: string]: unknown;
2674
+ };
2675
+ content: {
2676
+ "application/json": components["schemas"]["ProblemDetail"];
2677
+ };
2678
+ };
2679
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
2680
+ 403: {
2681
+ headers: {
2682
+ [name: string]: unknown;
2683
+ };
2684
+ content: {
2685
+ "application/json": components["schemas"]["ProblemDetail"];
2686
+ };
2687
+ };
2688
+ /** @description Bundle not found */
2689
+ 404: {
2690
+ headers: {
2691
+ [name: string]: unknown;
2692
+ };
2693
+ content: {
2694
+ "application/json": components["schemas"]["ProblemDetail"];
2695
+ };
2696
+ };
2697
+ /** @description Bundle not in valid state for acceptance */
2698
+ 409: {
2699
+ headers: {
2700
+ [name: string]: unknown;
2701
+ };
2702
+ content: {
2703
+ "application/json": components["schemas"]["ProblemDetail"];
2704
+ };
2705
+ };
2706
+ /** @description Internal server error */
2707
+ 500: {
2708
+ headers: {
2709
+ [name: string]: unknown;
2710
+ };
2711
+ content: {
2712
+ "application/json": components["schemas"]["ProblemDetail"];
2713
+ };
2714
+ };
2715
+ };
2716
+ };
2717
+ createShipment: {
2718
+ parameters: {
2719
+ query?: never;
2720
+ header?: never;
2721
+ path?: never;
2722
+ cookie?: never;
2723
+ };
2724
+ requestBody: {
2725
+ content: {
2726
+ "application/json": components["schemas"]["CreateShipmentRequest"];
2727
+ };
2728
+ };
2729
+ responses: {
2730
+ /** @description Shipment created successfully */
2731
+ 200: {
2732
+ headers: {
2733
+ [name: string]: unknown;
2734
+ };
2735
+ content: {
2736
+ "application/json": components["schemas"]["Shipment"];
2737
+ };
2738
+ };
2739
+ /** @description Invalid request: validation error, quote mismatch, or expired quote */
2740
+ 400: {
2741
+ headers: {
2742
+ [name: string]: unknown;
2743
+ };
2744
+ content: {
2745
+ "application/json": components["schemas"]["ProblemDetail"];
2746
+ };
2747
+ };
2748
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
2749
+ 401: {
2750
+ headers: {
2751
+ [name: string]: unknown;
2752
+ };
2753
+ content: {
2754
+ "application/json": components["schemas"]["ProblemDetail"];
2755
+ };
2756
+ };
2757
+ /** @description Forbidden: missing/invalid API key, user not in company, or quote not owned by company */
2758
+ 403: {
2759
+ headers: {
2760
+ [name: string]: unknown;
2761
+ };
2762
+ content: {
2763
+ "application/json": components["schemas"]["ProblemDetail"];
2764
+ };
2765
+ };
2766
+ /**
2767
+ * @description Unprocessable Entity. Possible reasons:
2768
+ *
2769
+ * - **Location Not Serviceable** (`reason: no_coverage`) — the lane is not within Oway's active coverage area.
2770
+ * - **Request Not Permitted** (`reason: account_restriction`) — the requested truck type or accessorial is not enabled for your account. Contact your Oway representative to update your available options.
2771
+ * - **Daily Trip Limit Reached** (`reason: daily_trip_limit`) — your account has reached its maximum shipments for the requested pickup date. You can still place orders for other dates.
2772
+ */
2773
+ 422: {
2774
+ headers: {
2775
+ [name: string]: unknown;
2776
+ };
2777
+ content: {
2778
+ "application/json": components["schemas"]["ProblemDetail"];
2779
+ };
2780
+ };
2781
+ /** @description Internal server error */
2782
+ 500: {
2783
+ headers: {
2784
+ [name: string]: unknown;
2785
+ };
2786
+ content: {
2787
+ "application/json": components["schemas"]["ProblemDetail"];
2788
+ };
2789
+ };
2790
+ };
2791
+ };
2792
+ requestQuote: {
2793
+ parameters: {
2794
+ query?: never;
2795
+ header?: never;
2796
+ path?: never;
2797
+ cookie?: never;
2798
+ };
2799
+ requestBody: {
2800
+ content: {
2801
+ "application/json": components["schemas"]["QuoteRequest"];
2802
+ };
2803
+ };
2804
+ responses: {
2805
+ /** @description Quote generated successfully */
2806
+ 200: {
2807
+ headers: {
2808
+ [name: string]: unknown;
2809
+ };
2810
+ content: {
2811
+ "application/json": components["schemas"]["QuoteResponse"];
2812
+ };
2813
+ };
2814
+ /** @description Invalid request: validation error */
2815
+ 400: {
2816
+ headers: {
2817
+ [name: string]: unknown;
2818
+ };
2819
+ content: {
2820
+ "application/json": components["schemas"]["ProblemDetail"];
2821
+ };
2822
+ };
2823
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
2824
+ 401: {
2825
+ headers: {
2826
+ [name: string]: unknown;
2827
+ };
2828
+ content: {
2829
+ "application/json": components["schemas"]["ProblemDetail"];
2830
+ };
2831
+ };
2832
+ /** @description Forbidden: missing/invalid API key, or user does not belong to the authorized company */
2833
+ 403: {
2834
+ headers: {
2835
+ [name: string]: unknown;
2836
+ };
2837
+ content: {
2838
+ "application/json": components["schemas"]["ProblemDetail"];
2839
+ };
2840
+ };
2841
+ /**
2842
+ * @description Unprocessable Entity. Possible reasons:
2843
+ *
2844
+ * - **Location Not Serviceable** (`reason: no_coverage`) — the lane is not within Oway's active coverage area.
2845
+ * - **Request Not Permitted** (`reason: account_restriction`) — the requested truck type or accessorial is not enabled for your account. Contact your Oway representative to update your available options.
2846
+ * - **Daily Trip Limit Reached** (`reason: daily_trip_limit`) — your account has reached its maximum shipments for the requested pickup date. You can still place orders for other dates.
2847
+ */
2848
+ 422: {
2849
+ headers: {
2850
+ [name: string]: unknown;
2851
+ };
2852
+ content: {
2853
+ "application/json": components["schemas"]["ProblemDetail"];
2854
+ };
2855
+ };
2856
+ /** @description Internal server error */
2857
+ 500: {
2858
+ headers: {
2859
+ [name: string]: unknown;
2860
+ };
2861
+ content: {
2862
+ "application/json": components["schemas"]["ProblemDetail"];
2863
+ };
2864
+ };
2865
+ };
2866
+ };
2867
+ requestUploadUrl: {
2868
+ parameters: {
2869
+ query?: never;
2870
+ header?: never;
2871
+ path: {
2872
+ /**
2873
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
2874
+ * @example Y73Q0
2875
+ */
2876
+ identifier: string;
2877
+ };
2878
+ cookie?: never;
2879
+ };
2880
+ requestBody: {
2881
+ content: {
2882
+ "application/json": components["schemas"]["UploadUrlRequest"];
2883
+ };
2884
+ };
2885
+ responses: {
2886
+ /** @description Upload URL generated */
2887
+ 200: {
2888
+ headers: {
2889
+ [name: string]: unknown;
2890
+ };
2891
+ content: {
2892
+ "application/json": components["schemas"]["UploadUrlResponse"];
2893
+ };
2894
+ };
2895
+ /** @description Invalid document type or content type */
2896
+ 400: {
2897
+ headers: {
2898
+ [name: string]: unknown;
2899
+ };
2900
+ content: {
2901
+ "application/json": components["schemas"]["ProblemDetail"];
2902
+ };
2903
+ };
2904
+ /** @description Unauthorized: missing or invalid bearer token */
2905
+ 401: {
2906
+ headers: {
2907
+ [name: string]: unknown;
2908
+ };
2909
+ content: {
2910
+ "application/json": components["schemas"]["ProblemDetail"];
2911
+ };
2912
+ };
2913
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
2914
+ 403: {
2915
+ headers: {
2916
+ [name: string]: unknown;
2917
+ };
2918
+ content: {
2919
+ "application/json": components["schemas"]["ProblemDetail"];
2920
+ };
2921
+ };
2922
+ /** @description Shipment not found */
2923
+ 404: {
2924
+ headers: {
2925
+ [name: string]: unknown;
2926
+ };
2927
+ content: {
2928
+ "application/json": components["schemas"]["ProblemDetail"];
2929
+ };
2930
+ };
2931
+ /** @description Internal server error */
2932
+ 500: {
2933
+ headers: {
2934
+ [name: string]: unknown;
2935
+ };
2936
+ content: {
2937
+ "application/json": components["schemas"]["ProblemDetail"];
2938
+ };
2939
+ };
2940
+ };
2941
+ };
2942
+ submitLocation: {
2943
+ parameters: {
2944
+ query?: never;
2945
+ header?: never;
2946
+ path: {
2947
+ /**
2948
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
2949
+ * @example Y73Q0
2950
+ */
2951
+ identifier: string;
2952
+ };
2953
+ cookie?: never;
2954
+ };
2955
+ requestBody: {
2956
+ content: {
2957
+ "application/json": components["schemas"]["OfferLocationUpdate"];
2958
+ };
2959
+ };
2960
+ responses: {
2961
+ /** @description Location update acknowledged */
2962
+ 200: {
2963
+ headers: {
2964
+ [name: string]: unknown;
2965
+ };
2966
+ content: {
2967
+ "application/json": components["schemas"]["LocationAcknowledgment"];
2968
+ };
2969
+ };
2970
+ /** @description Invalid request: latitude, longitude, and timestamp are required */
2971
+ 400: {
2972
+ headers: {
2973
+ [name: string]: unknown;
2974
+ };
2975
+ content: {
2976
+ "application/json": components["schemas"]["ProblemDetail"];
2977
+ };
2978
+ };
2979
+ /** @description Unauthorized: missing or invalid bearer token */
2980
+ 401: {
2981
+ headers: {
2982
+ [name: string]: unknown;
2983
+ };
2984
+ content: {
2985
+ "application/json": components["schemas"]["ProblemDetail"];
2986
+ };
2987
+ };
2988
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
2989
+ 403: {
2990
+ headers: {
2991
+ [name: string]: unknown;
2992
+ };
2993
+ content: {
2994
+ "application/json": components["schemas"]["ProblemDetail"];
2995
+ };
2996
+ };
2997
+ /** @description Shipment not found */
2998
+ 404: {
2999
+ headers: {
3000
+ [name: string]: unknown;
3001
+ };
3002
+ content: {
3003
+ "application/json": components["schemas"]["ProblemDetail"];
3004
+ };
3005
+ };
3006
+ /** @description Shipment not in valid state for location updates */
3007
+ 409: {
3008
+ headers: {
3009
+ [name: string]: unknown;
3010
+ };
3011
+ content: {
3012
+ "application/json": components["schemas"]["ProblemDetail"];
3013
+ };
3014
+ };
3015
+ /** @description Internal server error */
3016
+ 500: {
3017
+ headers: {
3018
+ [name: string]: unknown;
3019
+ };
3020
+ content: {
3021
+ "application/json": components["schemas"]["ProblemDetail"];
3022
+ };
3023
+ };
1088
3024
  };
1089
3025
  };
1090
- responses: never;
1091
- parameters: never;
1092
- requestBodies: never;
1093
- headers: never;
1094
- pathItems: never;
1095
- }
1096
- interface operations {
1097
- confirmShipment: {
3026
+ reportException: {
1098
3027
  parameters: {
1099
3028
  query?: never;
1100
3029
  header?: never;
1101
3030
  path: {
1102
3031
  /**
1103
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1104
- * @example ZKYQ5
3032
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
3033
+ * @example Y73Q0
1105
3034
  */
1106
- orderNumber: string;
3035
+ identifier: string;
1107
3036
  };
1108
3037
  cookie?: never;
1109
3038
  };
1110
- requestBody?: never;
3039
+ requestBody: {
3040
+ content: {
3041
+ "application/json": components["schemas"]["ExceptionReportRequest"];
3042
+ };
3043
+ };
1111
3044
  responses: {
1112
- /** @description Shipment confirmed successfully. Verify the response contains `orderStatus: CONFIRMED` to ensure confirmation succeeded. */
3045
+ /** @description Exception recorded */
1113
3046
  200: {
1114
3047
  headers: {
1115
3048
  [name: string]: unknown;
1116
3049
  };
1117
3050
  content: {
1118
- "application/json": components["schemas"]["Shipment"];
3051
+ "application/json": components["schemas"]["ExceptionResponse"];
1119
3052
  };
1120
3053
  };
1121
- /** @description Invalid request: orderNumber is required, order is not in INITIALIZED state, or is missing a quote */
3054
+ /** @description Invalid request: exceptionType and exceptionTime are required */
1122
3055
  400: {
1123
3056
  headers: {
1124
3057
  [name: string]: unknown;
1125
3058
  };
1126
3059
  content: {
1127
- "application/json": components["schemas"]["Shipment"];
3060
+ "application/json": components["schemas"]["ProblemDetail"];
1128
3061
  };
1129
3062
  };
1130
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3063
+ /** @description Unauthorized: missing or invalid bearer token */
1131
3064
  401: {
1132
3065
  headers: {
1133
3066
  [name: string]: unknown;
1134
3067
  };
1135
3068
  content: {
1136
- "application/json": components["schemas"]["Shipment"];
3069
+ "application/json": components["schemas"]["ProblemDetail"];
1137
3070
  };
1138
3071
  };
1139
- /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
3072
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
1140
3073
  403: {
1141
3074
  headers: {
1142
3075
  [name: string]: unknown;
1143
3076
  };
1144
3077
  content: {
1145
- "application/json": components["schemas"]["Shipment"];
3078
+ "application/json": components["schemas"]["ProblemDetail"];
1146
3079
  };
1147
3080
  };
1148
3081
  /** @description Shipment not found */
@@ -1151,7 +3084,16 @@ interface operations {
1151
3084
  [name: string]: unknown;
1152
3085
  };
1153
3086
  content: {
1154
- "application/json": components["schemas"]["Shipment"];
3087
+ "application/json": components["schemas"]["ProblemDetail"];
3088
+ };
3089
+ };
3090
+ /** @description Shipment not in valid state for exception reporting */
3091
+ 409: {
3092
+ headers: {
3093
+ [name: string]: unknown;
3094
+ };
3095
+ content: {
3096
+ "application/json": components["schemas"]["ProblemDetail"];
1155
3097
  };
1156
3098
  };
1157
3099
  /** @description Internal server error */
@@ -1160,69 +3102,67 @@ interface operations {
1160
3102
  [name: string]: unknown;
1161
3103
  };
1162
3104
  content: {
1163
- "application/json": components["schemas"]["Shipment"];
3105
+ "application/json": components["schemas"]["ProblemDetail"];
1164
3106
  };
1165
3107
  };
1166
3108
  };
1167
3109
  };
1168
- cancelShipment: {
3110
+ addTrips: {
1169
3111
  parameters: {
1170
3112
  query?: never;
1171
3113
  header?: never;
1172
- path: {
1173
- /**
1174
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1175
- * @example ZKYQ5
1176
- */
1177
- orderNumber: string;
1178
- };
3114
+ path?: never;
1179
3115
  cookie?: never;
1180
3116
  };
1181
- requestBody?: never;
3117
+ requestBody: {
3118
+ content: {
3119
+ "application/json": components["schemas"]["CarrierTripRequest"][];
3120
+ };
3121
+ };
1182
3122
  responses: {
1183
- /** @description Shipment cancelled successfully */
3123
+ /** @description Trips accepted and processed; returns count of trips added */
1184
3124
  200: {
1185
3125
  headers: {
1186
3126
  [name: string]: unknown;
1187
3127
  };
1188
3128
  content: {
1189
- "application/json": components["schemas"]["Shipment"];
3129
+ "application/json": number;
1190
3130
  };
1191
3131
  };
1192
- /** @description Invalid request: orderNumber is required, or order cannot be cancelled in its current state */
3132
+ /** @description Invalid request: missing required fields or invalid trip data */
1193
3133
  400: {
1194
3134
  headers: {
1195
3135
  [name: string]: unknown;
1196
3136
  };
1197
3137
  content: {
1198
- "application/json": components["schemas"]["Shipment"];
3138
+ "application/json": components["schemas"]["ProblemDetail"];
1199
3139
  };
1200
3140
  };
1201
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3141
+ /** @description Unauthorized: missing or invalid bearer token */
1202
3142
  401: {
1203
3143
  headers: {
1204
3144
  [name: string]: unknown;
1205
3145
  };
1206
3146
  content: {
1207
- "application/json": components["schemas"]["Shipment"];
3147
+ "application/json": components["schemas"]["ProblemDetail"];
1208
3148
  };
1209
3149
  };
1210
- /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
3150
+ /** @description Forbidden: API access is not enabled for this carrier */
1211
3151
  403: {
1212
3152
  headers: {
1213
3153
  [name: string]: unknown;
1214
3154
  };
1215
3155
  content: {
1216
- "application/json": components["schemas"]["Shipment"];
3156
+ "application/json": components["schemas"]["ProblemDetail"];
1217
3157
  };
1218
3158
  };
1219
- /** @description Shipment not found */
3159
+ /** @description Carrier not found */
1220
3160
  404: {
1221
3161
  headers: {
1222
3162
  [name: string]: unknown;
1223
3163
  };
1224
3164
  content: {
1225
- "application/json": components["schemas"]["Shipment"];
3165
+ "application/json": components["schemas"]["ProblemDetail"];
1226
3166
  };
1227
3167
  };
1228
3168
  /** @description Internal server error */
@@ -1231,12 +3171,12 @@ interface operations {
1231
3171
  [name: string]: unknown;
1232
3172
  };
1233
3173
  content: {
1234
- "application/json": components["schemas"]["Shipment"];
3174
+ "application/json": components["schemas"]["ProblemDetail"];
1235
3175
  };
1236
3176
  };
1237
3177
  };
1238
3178
  };
1239
- createShipment: {
3179
+ getToken: {
1240
3180
  parameters: {
1241
3181
  query?: never;
1242
3182
  header?: never;
@@ -1245,21 +3185,56 @@ interface operations {
1245
3185
  };
1246
3186
  requestBody: {
1247
3187
  content: {
1248
- "application/json": components["schemas"]["CreateShipmentRequest"];
3188
+ "application/json": components["schemas"]["TokenRequest"];
1249
3189
  };
1250
3190
  };
1251
3191
  responses: {
1252
- /** @description Shipment created successfully */
3192
+ /** @description Token successfully generated */
1253
3193
  200: {
1254
3194
  headers: {
1255
3195
  [name: string]: unknown;
1256
3196
  };
1257
3197
  content: {
1258
- "application/json": components["schemas"]["Shipment"];
3198
+ "application/json": components["schemas"]["TokenResponse"];
1259
3199
  };
1260
3200
  };
1261
- /** @description Invalid request: validation error, quote mismatch, or expired quote */
3201
+ /** @description Invalid request: missing required fields */
1262
3202
  400: {
3203
+ headers: {
3204
+ [name: string]: unknown;
3205
+ };
3206
+ content: {
3207
+ "application/json": components["schemas"]["TokenErrorResponse"];
3208
+ };
3209
+ };
3210
+ /** @description Unauthorized: invalid credentials */
3211
+ 401: {
3212
+ headers: {
3213
+ [name: string]: unknown;
3214
+ };
3215
+ content: {
3216
+ "application/json": components["schemas"]["TokenErrorResponse"];
3217
+ };
3218
+ };
3219
+ };
3220
+ };
3221
+ getShipment: {
3222
+ parameters: {
3223
+ query?: never;
3224
+ header?: never;
3225
+ path: {
3226
+ /**
3227
+ * @description Order number (5-character alphanumeric code, commonly called PRO number)
3228
+ * @example ZKYQ5
3229
+ */
3230
+ orderNumber: string;
3231
+ };
3232
+ cookie?: never;
3233
+ };
3234
+ requestBody?: never;
3235
+ responses: {
3236
+ /** @description Shipment retrieved successfully */
3237
+ 200: {
1263
3238
  headers: {
1264
3239
  [name: string]: unknown;
1265
3240
  };
@@ -1267,64 +3242,75 @@ interface operations {
1267
3242
  "application/json": components["schemas"]["Shipment"];
1268
3243
  };
1269
3244
  };
3245
+ /** @description Invalid request: orderNumber is required */
3246
+ 400: {
3247
+ headers: {
3248
+ [name: string]: unknown;
3249
+ };
3250
+ content: {
3251
+ "application/json": components["schemas"]["ProblemDetail"];
3252
+ };
3253
+ };
1270
3254
  /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1271
3255
  401: {
1272
3256
  headers: {
1273
3257
  [name: string]: unknown;
1274
3258
  };
1275
3259
  content: {
1276
- "application/json": components["schemas"]["Shipment"];
3260
+ "application/json": components["schemas"]["ProblemDetail"];
1277
3261
  };
1278
3262
  };
1279
- /** @description Forbidden: missing/invalid API key, user not in company, or quote not owned by company */
3263
+ /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
1280
3264
  403: {
1281
3265
  headers: {
1282
3266
  [name: string]: unknown;
1283
3267
  };
1284
3268
  content: {
1285
- "application/json": components["schemas"]["Shipment"];
3269
+ "application/json": components["schemas"]["ProblemDetail"];
1286
3270
  };
1287
3271
  };
1288
- /** @description Internal server error */
1289
- 500: {
3272
+ /** @description Shipment not found */
3273
+ 404: {
1290
3274
  headers: {
1291
3275
  [name: string]: unknown;
1292
3276
  };
1293
3277
  content: {
1294
- "application/json": components["schemas"]["Shipment"];
3278
+ "application/json": components["schemas"]["ProblemDetail"];
1295
3279
  };
1296
3280
  };
1297
3281
  };
1298
3282
  };
1299
- requestQuote: {
3283
+ trackShipment: {
1300
3284
  parameters: {
1301
3285
  query?: never;
1302
3286
  header?: never;
1303
- path?: never;
1304
- cookie?: never;
1305
- };
1306
- requestBody: {
1307
- content: {
1308
- "application/json": components["schemas"]["QuoteRequest"];
3287
+ path: {
3288
+ /**
3289
+ * @description Order number (5-character alphanumeric code, commonly called PRO number)
3290
+ * @example ZKYQ5
3291
+ */
3292
+ orderNumber: string;
1309
3293
  };
3294
+ cookie?: never;
1310
3295
  };
3296
+ requestBody?: never;
1311
3297
  responses: {
1312
- /** @description Quote generated successfully */
3298
+ /** @description Tracking information retrieved successfully */
1313
3299
  200: {
1314
3300
  headers: {
1315
3301
  [name: string]: unknown;
1316
3302
  };
1317
3303
  content: {
1318
- "application/json": components["schemas"]["QuoteResponse"];
3304
+ "application/json": components["schemas"]["Tracking"];
1319
3305
  };
1320
3306
  };
1321
- /** @description Invalid request: validation error */
3307
+ /** @description Invalid request: orderNumber is required */
1322
3308
  400: {
1323
3309
  headers: {
1324
3310
  [name: string]: unknown;
1325
3311
  };
1326
3312
  content: {
1327
- "application/json": components["schemas"]["QuoteResponse"];
3313
+ "application/json": components["schemas"]["ProblemDetail"];
1328
3314
  };
1329
3315
  };
1330
3316
  /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
@@ -1333,88 +3319,151 @@ interface operations {
1333
3319
  [name: string]: unknown;
1334
3320
  };
1335
3321
  content: {
1336
- "application/json": components["schemas"]["QuoteResponse"];
3322
+ "application/json": components["schemas"]["ProblemDetail"];
1337
3323
  };
1338
3324
  };
1339
- /** @description Forbidden: missing/invalid API key, or user does not belong to the authorized company */
3325
+ /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
1340
3326
  403: {
1341
3327
  headers: {
1342
3328
  [name: string]: unknown;
1343
3329
  };
1344
3330
  content: {
1345
- "application/json": components["schemas"]["QuoteResponse"];
3331
+ "application/json": components["schemas"]["ProblemDetail"];
1346
3332
  };
1347
3333
  };
1348
- /** @description Internal server error */
1349
- 500: {
3334
+ /** @description Shipment not found */
3335
+ 404: {
1350
3336
  headers: {
1351
3337
  [name: string]: unknown;
1352
3338
  };
1353
3339
  content: {
1354
- "application/json": components["schemas"]["QuoteResponse"];
3340
+ "application/json": components["schemas"]["ProblemDetail"];
1355
3341
  };
1356
3342
  };
1357
3343
  };
1358
3344
  };
1359
- addTrips: {
3345
+ getInvoice: {
1360
3346
  parameters: {
1361
3347
  query?: never;
1362
3348
  header?: never;
1363
3349
  path: {
1364
- /** @description The unique identifier of the carrier */
1365
- carrierId: string;
3350
+ /**
3351
+ * @description Order number (5-character alphanumeric code, commonly called PRO number)
3352
+ * @example ZKYQ5
3353
+ */
3354
+ orderNumber: string;
1366
3355
  };
1367
3356
  cookie?: never;
1368
3357
  };
1369
- requestBody: {
1370
- content: {
1371
- "application/json": components["schemas"]["Trip"][];
3358
+ requestBody?: never;
3359
+ responses: {
3360
+ /** @description Invoice retrieved successfully */
3361
+ 200: {
3362
+ headers: {
3363
+ [name: string]: unknown;
3364
+ };
3365
+ content: {
3366
+ "application/json": components["schemas"]["InvoiceResponse"];
3367
+ };
3368
+ };
3369
+ /** @description Invalid request: orderNumber is required, or shipment is not in DELIVERED state */
3370
+ 400: {
3371
+ headers: {
3372
+ [name: string]: unknown;
3373
+ };
3374
+ content: {
3375
+ "application/json": components["schemas"]["ProblemDetail"];
3376
+ };
3377
+ };
3378
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3379
+ 401: {
3380
+ headers: {
3381
+ [name: string]: unknown;
3382
+ };
3383
+ content: {
3384
+ "application/json": components["schemas"]["ProblemDetail"];
3385
+ };
3386
+ };
3387
+ /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
3388
+ 403: {
3389
+ headers: {
3390
+ [name: string]: unknown;
3391
+ };
3392
+ content: {
3393
+ "application/json": components["schemas"]["ProblemDetail"];
3394
+ };
3395
+ };
3396
+ /** @description Shipment not found */
3397
+ 404: {
3398
+ headers: {
3399
+ [name: string]: unknown;
3400
+ };
3401
+ content: {
3402
+ "application/json": components["schemas"]["ProblemDetail"];
3403
+ };
1372
3404
  };
1373
3405
  };
3406
+ };
3407
+ getDocument: {
3408
+ parameters: {
3409
+ query?: never;
3410
+ header?: never;
3411
+ path: {
3412
+ /**
3413
+ * @description Order number (5-character alphanumeric code, commonly called PRO number)
3414
+ * @example ZKYQ5
3415
+ */
3416
+ orderNumber: string;
3417
+ /** @description Type of document to retrieve */
3418
+ documentType: "BILL_OF_LADING" | "INVOICE" | "SHIPPING_LABEL" | "POD";
3419
+ };
3420
+ cookie?: never;
3421
+ };
3422
+ requestBody?: never;
1374
3423
  responses: {
1375
- /** @description Trips accepted and processed; returns count of trips added */
3424
+ /** @description Document URL retrieved successfully */
1376
3425
  200: {
1377
3426
  headers: {
1378
3427
  [name: string]: unknown;
1379
3428
  };
1380
3429
  content: {
1381
- "application/json": number;
3430
+ "application/json": components["schemas"]["DocumentResponse"];
1382
3431
  };
1383
3432
  };
1384
- /** @description Invalid request: missing required fields or invalid trip data */
3433
+ /** @description Invalid request: orderNumber and documentType are required */
1385
3434
  400: {
1386
3435
  headers: {
1387
3436
  [name: string]: unknown;
1388
3437
  };
1389
3438
  content: {
1390
- "application/json": number;
3439
+ "application/json": components["schemas"]["ProblemDetail"];
1391
3440
  };
1392
3441
  };
1393
- /** @description Unauthorized: missing or invalid bearer token */
3442
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1394
3443
  401: {
1395
3444
  headers: {
1396
3445
  [name: string]: unknown;
1397
3446
  };
1398
3447
  content: {
1399
- "application/json": number;
3448
+ "application/json": components["schemas"]["ProblemDetail"];
1400
3449
  };
1401
3450
  };
1402
- /** @description Forbidden: API access is not enabled for this carrier */
3451
+ /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
1403
3452
  403: {
1404
3453
  headers: {
1405
3454
  [name: string]: unknown;
1406
3455
  };
1407
3456
  content: {
1408
- "application/json": number;
3457
+ "application/json": components["schemas"]["ProblemDetail"];
1409
3458
  };
1410
3459
  };
1411
- /** @description Carrier not found */
3460
+ /** @description Shipment or document not found */
1412
3461
  404: {
1413
3462
  headers: {
1414
3463
  [name: string]: unknown;
1415
3464
  };
1416
3465
  content: {
1417
- "application/json": number;
3466
+ "application/json": components["schemas"]["ProblemDetail"];
1418
3467
  };
1419
3468
  };
1420
3469
  /** @description Internal server error */
@@ -1423,135 +3472,134 @@ interface operations {
1423
3472
  [name: string]: unknown;
1424
3473
  };
1425
3474
  content: {
1426
- "application/json": number;
3475
+ "application/json": components["schemas"]["ProblemDetail"];
1427
3476
  };
1428
3477
  };
1429
3478
  };
1430
3479
  };
1431
- addGpsData: {
3480
+ getQuote: {
1432
3481
  parameters: {
1433
3482
  query?: never;
1434
3483
  header?: never;
1435
3484
  path: {
1436
- /** @description The unique identifier of the carrier */
1437
- carrierId: string;
3485
+ /** @description Unique quote ID */
3486
+ quoteId: string;
1438
3487
  };
1439
3488
  cookie?: never;
1440
3489
  };
1441
- requestBody: {
1442
- content: {
1443
- "application/json": components["schemas"]["GpsData"][];
1444
- };
1445
- };
3490
+ requestBody?: never;
1446
3491
  responses: {
1447
- /** @description GPS data accepted and processed; returns count of data points added */
3492
+ /** @description Quote retrieved successfully */
1448
3493
  200: {
1449
3494
  headers: {
1450
3495
  [name: string]: unknown;
1451
3496
  };
1452
3497
  content: {
1453
- "application/json": number;
3498
+ "application/json": components["schemas"]["QuoteResponse"];
1454
3499
  };
1455
3500
  };
1456
- /** @description Invalid request: malformed JSON, missing fields, or invalid data */
3501
+ /** @description Invalid request: quote ID format is invalid */
1457
3502
  400: {
1458
3503
  headers: {
1459
3504
  [name: string]: unknown;
1460
3505
  };
1461
3506
  content: {
1462
- "application/json": number;
3507
+ "application/json": components["schemas"]["ProblemDetail"];
1463
3508
  };
1464
3509
  };
1465
- /** @description Unauthorized: missing or invalid bearer token */
3510
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1466
3511
  401: {
1467
3512
  headers: {
1468
3513
  [name: string]: unknown;
1469
3514
  };
1470
3515
  content: {
1471
- "application/json": number;
3516
+ "application/json": components["schemas"]["ProblemDetail"];
1472
3517
  };
1473
3518
  };
1474
- /** @description Forbidden: API access is not enabled for this carrier */
3519
+ /** @description Forbidden: missing, invalid, or expired API key (authorization failed) */
1475
3520
  403: {
1476
3521
  headers: {
1477
3522
  [name: string]: unknown;
1478
3523
  };
1479
3524
  content: {
1480
- "application/json": number;
3525
+ "application/json": components["schemas"]["ProblemDetail"];
1481
3526
  };
1482
3527
  };
1483
- /** @description Carrier not found */
3528
+ /** @description Quote not found */
1484
3529
  404: {
1485
3530
  headers: {
1486
3531
  [name: string]: unknown;
1487
3532
  };
1488
3533
  content: {
1489
- "application/json": number;
1490
- };
1491
- };
1492
- /** @description Internal server error */
1493
- 500: {
1494
- headers: {
1495
- [name: string]: unknown;
1496
- };
1497
- content: {
1498
- "application/json": number;
3534
+ "application/json": components["schemas"]["ProblemDetail"];
1499
3535
  };
1500
3536
  };
1501
3537
  };
1502
3538
  };
1503
- getToken: {
3539
+ getShipments: {
1504
3540
  parameters: {
1505
- query?: never;
3541
+ query?: {
3542
+ /** @description If true, only return currently active shipments (excludes delivered) */
3543
+ activeOnly?: boolean;
3544
+ /** @description Filter shipments after this time (ISO 8601 format) */
3545
+ startTime?: string;
3546
+ /** @description Filter shipments before this time (ISO 8601 format) */
3547
+ endTime?: string;
3548
+ };
1506
3549
  header?: never;
1507
3550
  path?: never;
1508
3551
  cookie?: never;
1509
3552
  };
1510
- requestBody: {
1511
- content: {
1512
- "application/json": components["schemas"]["TokenRequest"];
1513
- };
1514
- };
3553
+ requestBody?: never;
1515
3554
  responses: {
1516
- /** @description Token successfully generated */
3555
+ /** @description Shipments retrieved successfully */
1517
3556
  200: {
1518
3557
  headers: {
1519
3558
  [name: string]: unknown;
1520
3559
  };
1521
3560
  content: {
1522
- "application/json": components["schemas"]["TokenResponse"];
3561
+ "application/json": components["schemas"]["CarrierShipment"][];
1523
3562
  };
1524
3563
  };
1525
- /** @description Invalid request: missing required fields */
1526
- 400: {
3564
+ /** @description Unauthorized: missing or invalid bearer token */
3565
+ 401: {
1527
3566
  headers: {
1528
3567
  [name: string]: unknown;
1529
3568
  };
1530
3569
  content: {
1531
- "application/json": components["schemas"]["TokenErrorResponse"];
3570
+ "application/json": components["schemas"]["ProblemDetail"];
1532
3571
  };
1533
3572
  };
1534
- /** @description Unauthorized: invalid credentials */
1535
- 401: {
3573
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
3574
+ 403: {
1536
3575
  headers: {
1537
3576
  [name: string]: unknown;
1538
3577
  };
1539
3578
  content: {
1540
- "application/json": components["schemas"]["TokenErrorResponse"];
3579
+ "application/json": components["schemas"]["ProblemDetail"];
3580
+ };
3581
+ };
3582
+ /** @description Internal server error */
3583
+ 500: {
3584
+ headers: {
3585
+ [name: string]: unknown;
3586
+ };
3587
+ content: {
3588
+ "application/json": components["schemas"]["ProblemDetail"];
1541
3589
  };
1542
3590
  };
1543
3591
  };
1544
3592
  };
1545
- getShipment: {
3593
+ getShipment_1: {
1546
3594
  parameters: {
1547
3595
  query?: never;
1548
3596
  header?: never;
1549
3597
  path: {
1550
3598
  /**
1551
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1552
- * @example ZKYQ5
3599
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
3600
+ * @example Y73Q0
1553
3601
  */
1554
- orderNumber: string;
3602
+ identifier: string;
1555
3603
  };
1556
3604
  cookie?: never;
1557
3605
  };
@@ -1563,231 +3611,225 @@ interface operations {
1563
3611
  [name: string]: unknown;
1564
3612
  };
1565
3613
  content: {
1566
- "application/json": components["schemas"]["Shipment"];
3614
+ "application/json": components["schemas"]["CarrierShipment"];
1567
3615
  };
1568
3616
  };
1569
- /** @description Invalid request: orderNumber is required */
1570
- 400: {
3617
+ /** @description Unauthorized: missing or invalid bearer token */
3618
+ 401: {
1571
3619
  headers: {
1572
3620
  [name: string]: unknown;
1573
3621
  };
1574
3622
  content: {
1575
- "application/json": components["schemas"]["Shipment"];
3623
+ "application/json": components["schemas"]["ProblemDetail"];
1576
3624
  };
1577
3625
  };
1578
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1579
- 401: {
3626
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
3627
+ 403: {
1580
3628
  headers: {
1581
3629
  [name: string]: unknown;
1582
3630
  };
1583
3631
  content: {
1584
- "application/json": components["schemas"]["Shipment"];
3632
+ "application/json": components["schemas"]["ProblemDetail"];
1585
3633
  };
1586
3634
  };
1587
- /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
1588
- 403: {
3635
+ /** @description Shipment not found */
3636
+ 404: {
1589
3637
  headers: {
1590
3638
  [name: string]: unknown;
1591
3639
  };
1592
3640
  content: {
1593
- "application/json": components["schemas"]["Shipment"];
3641
+ "application/json": components["schemas"]["ProblemDetail"];
1594
3642
  };
1595
3643
  };
1596
- /** @description Shipment not found */
1597
- 404: {
3644
+ /** @description Internal server error */
3645
+ 500: {
1598
3646
  headers: {
1599
3647
  [name: string]: unknown;
1600
3648
  };
1601
3649
  content: {
1602
- "application/json": components["schemas"]["Shipment"];
3650
+ "application/json": components["schemas"]["ProblemDetail"];
1603
3651
  };
1604
3652
  };
1605
3653
  };
1606
3654
  };
1607
- trackShipment: {
3655
+ getShipmentTracking: {
1608
3656
  parameters: {
1609
3657
  query?: never;
1610
3658
  header?: never;
1611
3659
  path: {
1612
3660
  /**
1613
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1614
- * @example ZKYQ5
3661
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
3662
+ * @example Y73Q0
1615
3663
  */
1616
- orderNumber: string;
3664
+ identifier: string;
1617
3665
  };
1618
3666
  cookie?: never;
1619
3667
  };
1620
3668
  requestBody?: never;
1621
3669
  responses: {
1622
- /** @description Tracking information retrieved successfully */
3670
+ /** @description Tracking data retrieved successfully */
1623
3671
  200: {
1624
3672
  headers: {
1625
3673
  [name: string]: unknown;
1626
3674
  };
1627
3675
  content: {
1628
- "application/json": components["schemas"]["Tracking"];
3676
+ "application/json": components["schemas"]["TrackingResponse"];
1629
3677
  };
1630
3678
  };
1631
- /** @description Invalid request: orderNumber is required */
1632
- 400: {
3679
+ /** @description Unauthorized: missing or invalid bearer token */
3680
+ 401: {
1633
3681
  headers: {
1634
3682
  [name: string]: unknown;
1635
3683
  };
1636
3684
  content: {
1637
- "application/json": components["schemas"]["Tracking"];
3685
+ "application/json": components["schemas"]["ProblemDetail"];
1638
3686
  };
1639
3687
  };
1640
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1641
- 401: {
3688
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
3689
+ 403: {
1642
3690
  headers: {
1643
3691
  [name: string]: unknown;
1644
3692
  };
1645
3693
  content: {
1646
- "application/json": components["schemas"]["Tracking"];
3694
+ "application/json": components["schemas"]["ProblemDetail"];
1647
3695
  };
1648
3696
  };
1649
- /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
1650
- 403: {
3697
+ /** @description Shipment not found */
3698
+ 404: {
1651
3699
  headers: {
1652
3700
  [name: string]: unknown;
1653
3701
  };
1654
3702
  content: {
1655
- "application/json": components["schemas"]["Tracking"];
3703
+ "application/json": components["schemas"]["ProblemDetail"];
1656
3704
  };
1657
3705
  };
1658
- /** @description Shipment not found */
1659
- 404: {
3706
+ /** @description Internal server error */
3707
+ 500: {
1660
3708
  headers: {
1661
3709
  [name: string]: unknown;
1662
3710
  };
1663
3711
  content: {
1664
- "application/json": components["schemas"]["Tracking"];
3712
+ "application/json": components["schemas"]["ProblemDetail"];
1665
3713
  };
1666
3714
  };
1667
3715
  };
1668
3716
  };
1669
- getInvoice: {
3717
+ getShipmentDocument: {
1670
3718
  parameters: {
1671
3719
  query?: never;
1672
3720
  header?: never;
1673
3721
  path: {
1674
3722
  /**
1675
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1676
- * @example ZKYQ5
3723
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
3724
+ * @example Y73Q0
1677
3725
  */
1678
- orderNumber: string;
3726
+ identifier: string;
3727
+ /** @description Document type */
3728
+ documentType: "BILL_OF_LADING" | "SHIPPING_LABEL";
1679
3729
  };
1680
3730
  cookie?: never;
1681
3731
  };
1682
3732
  requestBody?: never;
1683
3733
  responses: {
1684
- /** @description Invoice retrieved successfully */
3734
+ /** @description Document URL retrieved successfully */
1685
3735
  200: {
1686
3736
  headers: {
1687
3737
  [name: string]: unknown;
1688
3738
  };
1689
3739
  content: {
1690
- "application/json": components["schemas"]["InvoiceResponse"];
3740
+ "application/json": components["schemas"]["CarrierDocumentResponse"];
1691
3741
  };
1692
3742
  };
1693
- /** @description Invalid request: orderNumber is required, or shipment is not in DELIVERED state */
3743
+ /** @description Invalid document type */
1694
3744
  400: {
1695
3745
  headers: {
1696
3746
  [name: string]: unknown;
1697
3747
  };
1698
3748
  content: {
1699
- "application/json": components["schemas"]["InvoiceResponse"];
3749
+ "application/json": components["schemas"]["ProblemDetail"];
1700
3750
  };
1701
3751
  };
1702
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3752
+ /** @description Unauthorized: missing or invalid bearer token */
1703
3753
  401: {
1704
3754
  headers: {
1705
3755
  [name: string]: unknown;
1706
3756
  };
1707
3757
  content: {
1708
- "application/json": components["schemas"]["InvoiceResponse"];
3758
+ "application/json": components["schemas"]["ProblemDetail"];
1709
3759
  };
1710
3760
  };
1711
- /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
3761
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
1712
3762
  403: {
1713
3763
  headers: {
1714
3764
  [name: string]: unknown;
1715
3765
  };
1716
3766
  content: {
1717
- "application/json": components["schemas"]["InvoiceResponse"];
3767
+ "application/json": components["schemas"]["ProblemDetail"];
1718
3768
  };
1719
3769
  };
1720
- /** @description Shipment not found */
3770
+ /** @description Shipment or document not found */
1721
3771
  404: {
1722
3772
  headers: {
1723
3773
  [name: string]: unknown;
1724
3774
  };
1725
3775
  content: {
1726
- "application/json": components["schemas"]["InvoiceResponse"];
3776
+ "application/json": components["schemas"]["ProblemDetail"];
3777
+ };
3778
+ };
3779
+ /** @description Internal server error */
3780
+ 500: {
3781
+ headers: {
3782
+ [name: string]: unknown;
3783
+ };
3784
+ content: {
3785
+ "application/json": components["schemas"]["ProblemDetail"];
1727
3786
  };
1728
3787
  };
1729
3788
  };
1730
3789
  };
1731
- getDocument: {
3790
+ getOffers: {
1732
3791
  parameters: {
1733
3792
  query?: never;
1734
3793
  header?: never;
1735
- path: {
1736
- /**
1737
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1738
- * @example ZKYQ5
1739
- */
1740
- orderNumber: string;
1741
- /** @description Type of document to retrieve */
1742
- documentType: "BILL_OF_LADING" | "INVOICE" | "SHIPPING_LABEL";
1743
- };
3794
+ path?: never;
1744
3795
  cookie?: never;
1745
3796
  };
1746
3797
  requestBody?: never;
1747
3798
  responses: {
1748
- /** @description Document URL retrieved successfully */
3799
+ /** @description Offers retrieved successfully */
1749
3800
  200: {
1750
3801
  headers: {
1751
3802
  [name: string]: unknown;
1752
3803
  };
1753
3804
  content: {
1754
- "application/json": components["schemas"]["DocumentResponse"];
1755
- };
1756
- };
1757
- /** @description Invalid request: orderNumber and documentType are required */
1758
- 400: {
1759
- headers: {
1760
- [name: string]: unknown;
1761
- };
1762
- content: {
1763
- "application/json": components["schemas"]["DocumentResponse"];
3805
+ "application/json": components["schemas"]["Offer"][];
1764
3806
  };
1765
3807
  };
1766
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3808
+ /** @description Unauthorized: missing or invalid bearer token */
1767
3809
  401: {
1768
3810
  headers: {
1769
3811
  [name: string]: unknown;
1770
3812
  };
1771
3813
  content: {
1772
- "application/json": components["schemas"]["DocumentResponse"];
3814
+ "application/json": components["schemas"]["ProblemDetail"];
1773
3815
  };
1774
3816
  };
1775
- /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
3817
+ /** @description Forbidden: API access is not enabled for this carrier */
1776
3818
  403: {
1777
3819
  headers: {
1778
3820
  [name: string]: unknown;
1779
3821
  };
1780
3822
  content: {
1781
- "application/json": components["schemas"]["DocumentResponse"];
3823
+ "application/json": components["schemas"]["ProblemDetail"];
1782
3824
  };
1783
3825
  };
1784
- /** @description Shipment or document not found */
3826
+ /** @description Carrier not found */
1785
3827
  404: {
1786
3828
  headers: {
1787
3829
  [name: string]: unknown;
1788
3830
  };
1789
3831
  content: {
1790
- "application/json": components["schemas"]["DocumentResponse"];
3832
+ "application/json": components["schemas"]["ProblemDetail"];
1791
3833
  };
1792
3834
  };
1793
3835
  /** @description Internal server error */
@@ -1796,89 +3838,92 @@ interface operations {
1796
3838
  [name: string]: unknown;
1797
3839
  };
1798
3840
  content: {
1799
- "application/json": components["schemas"]["DocumentResponse"];
3841
+ "application/json": components["schemas"]["ProblemDetail"];
1800
3842
  };
1801
3843
  };
1802
3844
  };
1803
3845
  };
1804
- getQuote: {
3846
+ getOffer: {
1805
3847
  parameters: {
1806
3848
  query?: never;
1807
3849
  header?: never;
1808
3850
  path: {
1809
- /** @description Unique quote ID */
1810
- quoteId: string;
3851
+ /**
3852
+ * @description Offer identifier (offerId, orderNumber, or carrierReference)
3853
+ * @example Y73Q0
3854
+ */
3855
+ identifier: string;
1811
3856
  };
1812
3857
  cookie?: never;
1813
3858
  };
1814
3859
  requestBody?: never;
1815
3860
  responses: {
1816
- /** @description Quote retrieved successfully */
3861
+ /** @description Offer retrieved successfully */
1817
3862
  200: {
1818
3863
  headers: {
1819
3864
  [name: string]: unknown;
1820
3865
  };
1821
3866
  content: {
1822
- "application/json": components["schemas"]["QuoteResponse"];
3867
+ "application/json": components["schemas"]["Offer"];
1823
3868
  };
1824
3869
  };
1825
- /** @description Invalid request: quote ID format is invalid */
1826
- 400: {
3870
+ /** @description Unauthorized: missing or invalid bearer token */
3871
+ 401: {
1827
3872
  headers: {
1828
3873
  [name: string]: unknown;
1829
3874
  };
1830
3875
  content: {
1831
- "application/json": components["schemas"]["QuoteResponse"];
3876
+ "application/json": components["schemas"]["ProblemDetail"];
1832
3877
  };
1833
3878
  };
1834
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1835
- 401: {
3879
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
3880
+ 403: {
1836
3881
  headers: {
1837
3882
  [name: string]: unknown;
1838
3883
  };
1839
3884
  content: {
1840
- "application/json": components["schemas"]["QuoteResponse"];
3885
+ "application/json": components["schemas"]["ProblemDetail"];
1841
3886
  };
1842
3887
  };
1843
- /** @description Forbidden: missing, invalid, or expired API key (authorization failed) */
1844
- 403: {
3888
+ /** @description Offer not found */
3889
+ 404: {
1845
3890
  headers: {
1846
3891
  [name: string]: unknown;
1847
3892
  };
1848
3893
  content: {
1849
- "application/json": components["schemas"]["QuoteResponse"];
3894
+ "application/json": components["schemas"]["ProblemDetail"];
1850
3895
  };
1851
3896
  };
1852
- /** @description Quote not found */
1853
- 404: {
3897
+ /** @description Internal server error */
3898
+ 500: {
1854
3899
  headers: {
1855
3900
  [name: string]: unknown;
1856
3901
  };
1857
3902
  content: {
1858
- "application/json": components["schemas"]["QuoteResponse"];
3903
+ "application/json": components["schemas"]["ProblemDetail"];
1859
3904
  };
1860
3905
  };
1861
3906
  };
1862
3907
  };
1863
- getCarrierApiConfig: {
3908
+ getBundles: {
1864
3909
  parameters: {
1865
- query?: never;
1866
- header?: never;
1867
- path: {
1868
- /** @description The unique identifier of the carrier */
1869
- carrierId: string;
3910
+ query?: {
3911
+ /** @description Filter bundles by status (OPEN, ACCEPTED, DECLINED, EXPIRED) */
3912
+ status?: string;
1870
3913
  };
3914
+ header?: never;
3915
+ path?: never;
1871
3916
  cookie?: never;
1872
3917
  };
1873
3918
  requestBody?: never;
1874
3919
  responses: {
1875
- /** @description Configuration retrieved successfully */
3920
+ /** @description Bundles retrieved successfully */
1876
3921
  200: {
1877
3922
  headers: {
1878
3923
  [name: string]: unknown;
1879
3924
  };
1880
3925
  content: {
1881
- "application/json": components["schemas"]["CarrierApiConfigResponse"];
3926
+ "application/json": components["schemas"]["Bundle"][];
1882
3927
  };
1883
3928
  };
1884
3929
  /** @description Unauthorized: missing or invalid bearer token */
@@ -1887,25 +3932,16 @@ interface operations {
1887
3932
  [name: string]: unknown;
1888
3933
  };
1889
3934
  content: {
1890
- "application/json": components["schemas"]["CarrierApiConfigResponse"];
3935
+ "application/json": components["schemas"]["ProblemDetail"];
1891
3936
  };
1892
3937
  };
1893
- /** @description Forbidden: API access is not enabled for this carrier */
3938
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
1894
3939
  403: {
1895
3940
  headers: {
1896
3941
  [name: string]: unknown;
1897
3942
  };
1898
3943
  content: {
1899
- "application/json": components["schemas"]["CarrierApiConfigResponse"];
1900
- };
1901
- };
1902
- /** @description Carrier not found */
1903
- 404: {
1904
- headers: {
1905
- [name: string]: unknown;
1906
- };
1907
- content: {
1908
- "application/json": components["schemas"]["CarrierApiConfigResponse"];
3944
+ "application/json": components["schemas"]["ProblemDetail"];
1909
3945
  };
1910
3946
  };
1911
3947
  /** @description Internal server error */
@@ -1914,37 +3950,33 @@ interface operations {
1914
3950
  [name: string]: unknown;
1915
3951
  };
1916
3952
  content: {
1917
- "application/json": components["schemas"]["CarrierApiConfigResponse"];
3953
+ "application/json": components["schemas"]["ProblemDetail"];
1918
3954
  };
1919
3955
  };
1920
3956
  };
1921
3957
  };
1922
- getJobs: {
3958
+ getBundle: {
1923
3959
  parameters: {
1924
- query?: {
1925
- /** @description If true, only return currently active jobs */
1926
- activeOnly?: boolean;
1927
- /** @description Filter jobs created after this time (ISO 8601 format) */
1928
- startTime?: string;
1929
- /** @description Filter jobs created before this time (ISO 8601 format) */
1930
- endTime?: string;
1931
- };
3960
+ query?: never;
1932
3961
  header?: never;
1933
3962
  path: {
1934
- /** @description The unique identifier of the carrier */
1935
- carrierId: string;
3963
+ /**
3964
+ * @description Bundle ID
3965
+ * @example 507f1f77bcf86cd799439012
3966
+ */
3967
+ bundleId: string;
1936
3968
  };
1937
3969
  cookie?: never;
1938
3970
  };
1939
3971
  requestBody?: never;
1940
3972
  responses: {
1941
- /** @description Jobs retrieved successfully */
3973
+ /** @description Bundle retrieved successfully */
1942
3974
  200: {
1943
3975
  headers: {
1944
3976
  [name: string]: unknown;
1945
3977
  };
1946
3978
  content: {
1947
- "application/json": components["schemas"]["OfferWithOrderDataDTO"][];
3979
+ "application/json": components["schemas"]["Bundle"];
1948
3980
  };
1949
3981
  };
1950
3982
  /** @description Unauthorized: missing or invalid bearer token */
@@ -1953,25 +3985,25 @@ interface operations {
1953
3985
  [name: string]: unknown;
1954
3986
  };
1955
3987
  content: {
1956
- "application/json": components["schemas"]["OfferWithOrderDataDTO"][];
3988
+ "application/json": components["schemas"]["ProblemDetail"];
1957
3989
  };
1958
3990
  };
1959
- /** @description Forbidden: API access is not enabled for this carrier */
3991
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
1960
3992
  403: {
1961
3993
  headers: {
1962
3994
  [name: string]: unknown;
1963
3995
  };
1964
3996
  content: {
1965
- "application/json": components["schemas"]["OfferWithOrderDataDTO"][];
3997
+ "application/json": components["schemas"]["ProblemDetail"];
1966
3998
  };
1967
3999
  };
1968
- /** @description Carrier not found */
4000
+ /** @description Bundle not found */
1969
4001
  404: {
1970
4002
  headers: {
1971
4003
  [name: string]: unknown;
1972
4004
  };
1973
4005
  content: {
1974
- "application/json": components["schemas"]["OfferWithOrderDataDTO"][];
4006
+ "application/json": components["schemas"]["ProblemDetail"];
1975
4007
  };
1976
4008
  };
1977
4009
  /** @description Internal server error */
@@ -1980,118 +4012,88 @@ interface operations {
1980
4012
  [name: string]: unknown;
1981
4013
  };
1982
4014
  content: {
1983
- "application/json": components["schemas"]["OfferWithOrderDataDTO"][];
4015
+ "application/json": components["schemas"]["ProblemDetail"];
1984
4016
  };
1985
4017
  };
1986
4018
  };
1987
4019
  };
1988
4020
  }
1989
4021
 
4022
+ /** A single field-level validation failure. */
4023
+ type Violation = components['schemas']['Violation'];
1990
4024
  interface OwayConfig {
1991
- /**
1992
- * M2M Client ID (REQUIRED for all integrations)
1993
- * Provided by Oway Sales Engineering team
1994
- */
4025
+ /** M2M Client ID (required). */
1995
4026
  clientId: string;
1996
- /**
1997
- * M2M Client Secret (REQUIRED for all integrations)
1998
- * Provided by Oway Sales Engineering team
1999
- */
4027
+ /** M2M Client Secret (required). */
2000
4028
  clientSecret: string;
2001
4029
  /**
2002
- * Default company API key (optional)
2003
- *
2004
- * Single-company: Set this to your company's API key
2005
- * Multi-company: Omit this and provide per-request
2006
- *
2007
- * Get from: https://app.oway.io/settings/api
4030
+ * Default company API key. For multi-tenant integrations pass a
4031
+ * per-request key on the `companyApiKey` option instead.
2008
4032
  */
2009
4033
  apiKey?: string;
2010
- /**
2011
- * Base URL for the Oway API
2012
- * @default "https://rest-api.sandbox.oway.io"
2013
- */
4034
+ /** Base URL. Defaults to https://api.sandbox.oway.io. */
2014
4035
  baseUrl?: string;
2015
- /**
2016
- * Token endpoint for authentication
2017
- * @default "https://rest-api.sandbox.oway.io/v1/auth/token"
2018
- */
4036
+ /** Token endpoint. Defaults to `${baseUrl}/v1/auth/token`. */
2019
4037
  tokenUrl?: string;
2020
- /**
2021
- * Maximum number of retry attempts for failed requests
2022
- * @default 3
2023
- */
4038
+ /** Maximum retry attempts on transient errors. Defaults to 3. Pass 0 to disable. */
2024
4039
  maxRetries?: number;
2025
- /**
2026
- * Timeout in milliseconds for API requests
2027
- * @default 30000
2028
- */
4040
+ /** Request timeout in milliseconds. Defaults to 30000. */
2029
4041
  timeout?: number;
2030
- /**
2031
- * Enable debug logging (logs sanitized request/response metadata)
2032
- * @default false
2033
- */
4042
+ /** Enable structured debug logging. */
2034
4043
  debug?: boolean;
2035
- /**
2036
- * Custom logger implementation
2037
- */
4044
+ /** Custom logger. When omitted the SDK is silent. */
2038
4045
  logger?: {
2039
- debug: (msg: string, meta?: Record<string, any>) => void;
2040
- info: (msg: string, meta?: Record<string, any>) => void;
2041
- warn: (msg: string, meta?: Record<string, any>) => void;
2042
- error: (msg: string, meta?: Record<string, any>) => void;
4046
+ debug: (msg: string, meta?: Record<string, unknown>) => void;
4047
+ info: (msg: string, meta?: Record<string, unknown>) => void;
4048
+ warn: (msg: string, meta?: Record<string, unknown>) => void;
4049
+ error: (msg: string, meta?: Record<string, unknown>) => void;
2043
4050
  };
2044
4051
  }
4052
+ /**
4053
+ * Typed error returned by the SDK whenever the API returns a non-2xx
4054
+ * response. Carries the parsed ProblemDetail (`code`, `message`, `violations`)
4055
+ * plus the `requestId` to quote when reporting issues.
4056
+ */
2045
4057
  declare class OwayError extends Error {
2046
- code?: string | undefined;
2047
- statusCode?: number | undefined;
2048
- requestId?: string | undefined;
2049
- constructor(message: string, code?: string | undefined, statusCode?: number | undefined, requestId?: string | undefined);
2050
- /**
2051
- * Determines if this error represents a transient failure that should be retried
2052
- */
4058
+ readonly statusCode?: number;
4059
+ readonly code?: string;
4060
+ readonly requestId?: string;
4061
+ readonly violations: Violation[];
4062
+ readonly rawBody?: string;
4063
+ constructor(opts: {
4064
+ message: string;
4065
+ statusCode?: number;
4066
+ code?: string;
4067
+ requestId?: string;
4068
+ violations?: Violation[];
4069
+ rawBody?: string;
4070
+ });
4071
+ /** True for well-known transient HTTP status codes (408/429/500/502/503/504). */
2053
4072
  isRetryable(): boolean;
4073
+ /** 4xx response. */
4074
+ isClientError(): boolean;
4075
+ /** 5xx response. */
4076
+ isServerError(): boolean;
4077
+ }
4078
+ interface RequestOptions {
4079
+ query?: Record<string, string | number | boolean>;
4080
+ body?: unknown;
4081
+ headers?: Record<string, string>;
4082
+ requestId?: string;
4083
+ /** Override the default API key for this request (multi-tenant integrations). */
4084
+ companyApiKey?: string;
2054
4085
  }
2055
- /**
2056
- * HTTP client for making authenticated requests to the Oway API
2057
- */
2058
4086
  declare class HttpClient {
2059
- private config;
4087
+ private readonly config;
2060
4088
  private accessToken;
2061
4089
  private tokenExpiry;
2062
4090
  private tokenRefreshPromise;
2063
4091
  constructor(config: OwayConfig);
2064
- /**
2065
- * Internal logging with sanitization
2066
- */
2067
4092
  private log;
2068
- /**
2069
- * Sanitize objects for logging - remove sensitive fields
2070
- */
2071
- private sanitizeForLogging;
2072
- /**
2073
- * Get or refresh the access token using the API key
2074
- * Handles concurrent requests by queuing them behind a single refresh
2075
- */
4093
+ private sanitize;
2076
4094
  private getAccessToken;
2077
- /**
2078
- * Perform the actual token refresh using M2M credentials
2079
- */
2080
4095
  private refreshToken;
2081
- /**
2082
- * Generate a unique request ID
2083
- */
2084
- private generateRequestId;
2085
- /**
2086
- * Make an authenticated request to the Oway API
2087
- */
2088
- request<T>(method: string, path: string, options?: {
2089
- query?: Record<string, string | number | boolean>;
2090
- body?: unknown;
2091
- headers?: Record<string, string>;
2092
- requestId?: string;
2093
- companyApiKey?: string;
2094
- }): Promise<T>;
4096
+ request<T>(method: string, path: string, options?: RequestOptions): Promise<T>;
2095
4097
  get<T>(path: string, query?: Record<string, string | number | boolean>, companyApiKey?: string): Promise<T>;
2096
4098
  post<T>(path: string, body?: unknown, companyApiKey?: string): Promise<T>;
2097
4099
  put<T>(path: string, body?: unknown, companyApiKey?: string): Promise<T>;
@@ -2150,12 +4152,12 @@ declare const OwayEnvironments: {
2150
4152
  * Sandbox environment for development and testing
2151
4153
  * Safe to use - no real shipments created
2152
4154
  */
2153
- readonly SANDBOX: "https://rest-api.sandbox.oway.io";
4155
+ readonly SANDBOX: "https://api.sandbox.oway.io";
2154
4156
  /**
2155
4157
  * Production environment for live traffic
2156
4158
  * Real shipments will be created and billed
2157
4159
  */
2158
- readonly PRODUCTION: "https://rest-api.oway.io";
4160
+ readonly PRODUCTION: "https://api.oway.io";
2159
4161
  };
2160
4162
 
2161
4163
  /**