@oway/sdk 0.1.2 → 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.ts 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;
@@ -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;
@@ -375,6 +692,21 @@ interface components {
375
692
  * @example pickup_not_covered
376
693
  */
377
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;
378
710
  };
379
711
  /** @description Shipment/Order details */
380
712
  Shipment: {
@@ -423,11 +755,75 @@ interface components {
423
755
  */
424
756
  updatedAt?: string;
425
757
  };
426
- /** @description Address information for pickup or delivery locations */
427
- Address: {
758
+ /** @description GPS coordinates for a shipment event */
759
+ EventCoordinates: {
428
760
  /**
429
- * @description Name of the location or business
430
- * @example Fairgrounds Distribution Center
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
+ };
822
+ /** @description Address information for pickup or delivery locations */
823
+ CarrierAddress: {
824
+ /**
825
+ * @description Name of the location or business
826
+ * @example Fairgrounds Distribution Center
431
827
  */
432
828
  name: string;
433
829
  /**
@@ -454,27 +850,27 @@ interface components {
454
850
  * @description 5-digit ZIP code
455
851
  * @example 90804
456
852
  */
457
- zipCode: string;
853
+ zip_code: string;
458
854
  /**
459
855
  * @description Contact phone number in E.164 format
460
856
  * @example +18087857650
461
857
  */
462
- phoneNumber: string;
858
+ phone_number: string;
463
859
  /**
464
860
  * @description Name of the contact person at this location
465
861
  * @example Mike Johnson
466
862
  */
467
- contactPerson: string;
863
+ contact_person: string;
468
864
  /**
469
865
  * @description Opening time for the location in 24-hour format (HH:mm). Defaults to 10:00 if not provided.
470
866
  * @example 10:00
471
867
  */
472
- openTime?: string;
868
+ open_time?: string;
473
869
  /**
474
870
  * @description Closing time for the location in 24-hour format (HH:mm). Defaults to 16:00 if not provided.
475
871
  * @example 16:00
476
872
  */
477
- closeTime?: string;
873
+ close_time?: string;
478
874
  /**
479
875
  * @description Additional notes or instructions for the driver
480
876
  * @example Dock 3, enter from back of building
@@ -484,678 +880,2094 @@ interface components {
484
880
  * @description Whether a liftgate is required at this location
485
881
  * @example false
486
882
  */
487
- liftgateRequired?: boolean;
883
+ liftgate_required?: boolean;
488
884
  /**
489
885
  * @description Whether this is a limited access location (residential, construction site, etc.)
490
886
  * @example false
491
887
  */
492
- limitedAccess?: boolean;
888
+ limited_access?: boolean;
493
889
  /**
494
890
  * @description Whether an appointment is required for pickup/delivery
495
891
  * @example true
496
892
  */
497
- appointmentRequired?: boolean;
498
- };
499
- /** @description Request to create a new shipment */
500
- CreateShipmentRequest: {
501
- /**
502
- * @description Optional ID of a previously generated quote.
503
- * @example 507f1f77bcf86cd799439013
504
- */
505
- quoteId?: string;
506
- pickupAddress: components["schemas"]["Address"];
507
- deliveryAddress: components["schemas"]["Address"];
508
- /** @description List of cargo components in the shipment */
509
- orderComponents: components["schemas"]["OrderComponent"][];
510
- /**
511
- * @description Description of the shipment contents
512
- * @example Electronics - fragile
513
- */
514
- description: string;
515
- /**
516
- * @description Purchase order number for reference
517
- * @example PO-2024-12345
518
- */
519
- poNumber?: string;
520
- /**
521
- * @description Additional reference number
522
- * @example REF-ABC-123
523
- */
524
- refNumber?: string;
525
- /**
526
- * Format: date-time
527
- * @description Required pickup date (ISO 8601 format)
528
- * @example 2024-12-24T08:00:00Z
529
- */
530
- requiredPickupDate?: string;
531
- /**
532
- * Format: date-time
533
- * @description Required delivery by date (ISO 8601 format)
534
- * @example 2024-12-26T17:00:00Z
535
- */
536
- requiredDeliveryBy?: string;
893
+ appointment_required?: boolean;
537
894
  };
538
- /** @description A cargo component (pallet group) in a shipment */
539
- OrderComponent: {
895
+ /** @description Individual pallet/component details */
896
+ CarrierComponent: {
540
897
  /**
541
898
  * Format: int32
542
899
  * @description Number of pallets in this component
543
- * @example 2
900
+ * @example 1
544
901
  */
545
- palletCount: number;
902
+ pallet_count?: number;
546
903
  /**
547
- * Format: int32
548
- * @description Weight per pallet in pounds
549
- * @example 500
904
+ * Format: float
905
+ * @description Weight in pounds for this component
906
+ * @example 600
550
907
  */
551
- poundsWeight: number;
908
+ pounds_weight?: number;
552
909
  /**
553
- * @description Pallet dimensions as [height, length, width] in inches
910
+ * @description Pallet dimensions [length, width, height] in inches
554
911
  * @example [
555
912
  * 48,
556
913
  * 40,
557
- * 48
914
+ * 60
558
915
  * ]
559
916
  */
560
- palletDimensions: number[];
561
- };
562
- /** @description Request to generate a shipping quote. Quotes are valid for 2 days from creation. */
563
- QuoteRequest: {
564
- pickupAddress: components["schemas"]["Address"];
565
- deliveryAddress: components["schemas"]["Address"];
566
- /** @description List of pallets or freight pieces. */
567
- orderComponents: components["schemas"]["OrderComponent"][];
917
+ pallet_dimensions?: number[];
568
918
  /**
569
- * Format: date-time
570
- * @description Required pickup date (ISO 8601).
571
- * @example 2026-04-01T08:00:00Z
919
+ * @description Freight class code
920
+ * @example 70
572
921
  */
573
- requiredPickupDate?: string;
922
+ freight_class?: string;
574
923
  };
575
- /** @description Response containing a shipping quote */
576
- QuoteResponse: {
577
- /**
578
- * @description Unique quote identifier
579
- * @example 507f1f77bcf86cd799439013
580
- */
581
- id?: string;
582
- /**
583
- * Format: int32
584
- * @description Total quoted price in cents (USD)
585
- * @example 125000
586
- */
587
- quotedPriceInCents?: number;
924
+ /** @description Carrier shipment details (post-acceptance) */
925
+ CarrierShipment: {
588
926
  /**
589
- * Format: date-time
590
- * @description When this quote expires (ISO 8601 format). Quotes are valid for 2 days.
591
- * @example 2024-12-20T15:30:00Z
927
+ * @description Unique offer identifier
928
+ * @example 507f1f77bcf86cd799439012
592
929
  */
593
- quoteExpirationTime?: string;
594
- };
595
- TripLeg: {
596
- /** Format: double */
597
- startLat?: number;
598
- /** Format: double */
599
- startLong?: number;
600
- /** Format: date-time */
601
- startTime?: string;
602
- /** Format: double */
603
- endLat?: number;
604
- /** Format: double */
605
- endLong?: number;
606
- /** Format: date-time */
607
- arrivalWindowStart?: string;
608
- /** Format: date-time */
609
- arrivalWindowEnd?: string;
610
- availableForOffers?: boolean;
611
- /** Format: int32 */
612
- estDriveTimeMinutes?: number;
613
- /** Format: int32 */
614
- stopNumber?: number;
615
- };
616
- TripRequest: {
617
930
  id?: string;
618
- carrierId?: string;
619
- vehicleId?: string;
620
- tripNo?: string;
621
- legs?: components["schemas"]["TripLeg"][];
622
- };
623
- /** @description GPS location data point for a vehicle */
624
- GpsData: {
625
- /**
626
- * @description Unique identifier for the vehicle
627
- * @example TRUCK-001
628
- */
629
- vehicleId: string;
630
- /**
631
- * Format: date-time
632
- * @description Timestamp of the GPS reading (ISO 8601 format). Must not be in the future.
633
- * @example 2025-02-20T17:33:15Z
634
- */
635
- timestamp: string;
636
- /**
637
- * Format: double
638
- * @description Latitude coordinate
639
- * @example 33.787363
640
- */
641
- latitude: number;
642
- /**
643
- * Format: double
644
- * @description Longitude coordinate
645
- * @example -118.163715
646
- */
647
- longitude: number;
648
- /**
649
- * Format: int32
650
- * @description Heading in degrees (0-359, where 0 is North)
651
- * @example 270
652
- */
653
- heading: number;
654
- /**
655
- * Format: int32
656
- * @description Speed in km/h
657
- * @example 65
658
- */
659
- speed: number;
660
- };
661
- /** @description Token request containing client credentials */
662
- TokenRequest: {
663
931
  /**
664
- * @description Client ID provided by Oway
665
- * @example abc123def456
932
+ * @description Current status of the carrier offer
933
+ * @enum {string}
666
934
  */
667
- clientId: string;
935
+ status?: "PENDING" | "ACCEPTED" | "PICKED_UP" | "DELIVERED" | "REJECTED" | "EXPIRED" | "CANCELLED";
668
936
  /**
669
- * @description Client secret provided by Oway
670
- * @example secret_xyz789
937
+ * @description Carrier's own tracking reference number
938
+ * @example CARRIER-TRK-789
671
939
  */
672
- clientSecret: string;
673
- };
674
- /** @description Successful token response */
675
- TokenResponse: {
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"];
676
953
  /**
677
- * @description The access token to use for API requests
678
- * @example eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...
954
+ * @description PIN code for pickup verification
955
+ * @example 1234
679
956
  */
680
- accessToken?: string;
957
+ pickup_pin?: string;
681
958
  /**
682
- * @description Token type (always 'Bearer')
683
- * @example Bearer
959
+ * @description PIN code for delivery verification
960
+ * @example 5678
684
961
  */
685
- tokenType?: string;
962
+ delivery_pin?: string;
686
963
  /**
687
- * Format: int32
688
- * @description Token validity in seconds
689
- * @example 86400
964
+ * Format: date-time
965
+ * @description Offer expiration time — must accept or reject before this time
966
+ * @example 2026-01-15T12:00:00Z
690
967
  */
691
- expiresIn?: number;
692
- };
693
- /** @description Error response for token requests */
694
- TokenErrorResponse: {
968
+ deadline?: string;
695
969
  /**
696
- * @description Error code
697
- * @example invalid_client
970
+ * Format: date-time
971
+ * @description When this offer was created
972
+ * @example 2026-01-15T08:00:00Z
698
973
  */
699
- error?: string;
974
+ created_at?: string;
700
975
  /**
701
- * @description Human-readable error description
702
- * @example Invalid client credentials
976
+ * Format: date-time
977
+ * @description When this offer was last updated
978
+ * @example 2026-01-15T10:30:00Z
703
979
  */
704
- errorDescription?: string;
980
+ updated_at?: string;
705
981
  };
706
982
  /** @description Shipment tracking information */
707
- Tracking: {
708
- /**
709
- * @description Unique identifier for the order
710
- * @example 507f1f77bcf86cd799439011
711
- */
712
- id?: string;
983
+ CarrierTracking: {
713
984
  /**
714
985
  * @description Human-readable PRO number for the shipment (5-character alphanumeric)
715
986
  * @example ZKYQ5
716
987
  */
717
- orderNumber?: string;
988
+ order_number?: string;
718
989
  /**
719
990
  * @description Current shipment status in the order lifecycle
720
991
  * @example PICKED_UP
721
992
  * @enum {string}
722
993
  */
723
- orderStatus?: "INITIALIZED" | "CONFIRMED" | "ACCEPTED" | "ASSIGNED" | "PICKED_UP" | "IN_TRANSIT" | "DELIVERED" | "CANCELLED";
994
+ order_status?: "INITIALIZED" | "CONFIRMED" | "ACCEPTED" | "ASSIGNED" | "PICKED_UP" | "IN_TRANSIT" | "DELIVERED" | "CANCELLED";
724
995
  /**
725
996
  * Format: date-time
726
997
  * @description Actual pickup date/time (ISO 8601 format)
727
998
  * @example 2024-12-23T10:30:00Z
728
999
  */
729
- actualPickupDate?: string;
1000
+ actual_pickup_date?: string;
730
1001
  /**
731
1002
  * Format: date-time
732
1003
  * @description Actual delivery date/time (ISO 8601 format)
733
1004
  * @example 2024-12-25T14:00:00Z
734
1005
  */
735
- actualDeliveryDate?: string;
1006
+ actual_delivery_date?: string;
736
1007
  /**
737
1008
  * Format: date-time
738
1009
  * @description Estimated pickup date/time (ISO 8601 format)
739
1010
  * @example 2024-12-23T09:00:00Z
740
1011
  */
741
- estimatedPickupDate?: string;
1012
+ estimated_pickup_date?: string;
742
1013
  /**
743
1014
  * Format: date-time
744
1015
  * @description Estimated delivery date/time (ISO 8601 format)
745
1016
  * @example 2024-12-25T12:00:00Z
746
1017
  */
747
- estimatedDeliveryDate?: string;
1018
+ estimated_delivery_date?: string;
748
1019
  };
749
- /** @description A charge on an invoice */
750
- InvoiceCharge: {
1020
+ /** @description Carrier-reported delivery confirmation details */
1021
+ DeliveryConfirmation: {
751
1022
  /**
752
- * @description Type of charge
753
- * @example BASE_FREIGHT
1023
+ * Format: date-time
1024
+ * @description Actual delivery time
1025
+ * @example 2026-01-15T14:30:00Z
754
1026
  */
755
- chargeType?: string;
1027
+ delivery_time?: string;
756
1028
  /**
757
- * @description Human-readable description of the charge
758
- * @example Base Freight
1029
+ * @description Formatted delivery address
1030
+ * @example 456 Market St, Oakland, CA 94607
759
1031
  */
760
- description?: string;
1032
+ address?: string;
761
1033
  /**
762
- * Format: int32
763
- * @description Amount in cents (USD)
764
- * @example 100000
1034
+ * Format: double
1035
+ * @description GPS latitude at delivery
1036
+ * @example 37.7749
765
1037
  */
766
- amountInCents?: number;
767
- };
768
- /** @description A line item on an invoice */
769
- InvoiceLineItem: {
1038
+ latitude?: number;
770
1039
  /**
771
- * @description Description of the item
772
- * @example General Freight
1040
+ * Format: double
1041
+ * @description GPS longitude at delivery
1042
+ * @example -122.4194
773
1043
  */
774
- description?: string;
1044
+ longitude?: number;
775
1045
  /**
776
- * @description Freight class
777
- * @example 85
1046
+ * @description Name of person who received the shipment
1047
+ * @example Recipient Name
778
1048
  */
779
- freightClass?: string;
1049
+ signed_by?: string;
780
1050
  /**
781
- * Format: int32
782
- * @description Weight in pounds
783
- * @example 500
1051
+ * @description URL to signature image
1052
+ * @example https://storage.oway.io/signatures/sig-12345.png
784
1053
  */
785
- weight?: number;
1054
+ signature_image_url?: string;
786
1055
  /**
787
- * Format: int32
788
- * @description Number of pieces/pallets
789
- * @example 2
1056
+ * @description URL to proof of delivery document
1057
+ * @example https://storage.oway.io/pod/pod-12345.pdf
790
1058
  */
791
- quantity?: number;
1059
+ proof_of_delivery_url?: string;
792
1060
  /**
793
- * @description Package type
794
- * @example PLT
1061
+ * @description Additional notes about the delivery
1062
+ * @example Delivered to front desk
795
1063
  */
796
- packageType?: string;
797
- };
798
- /** @description Itemized invoice for a delivered shipment */
799
- InvoiceResponse: {
1064
+ notes?: string;
800
1065
  /**
801
- * @description Order ID
802
- * @example 67b6c5fcfbf1be6b24127646
1066
+ * Format: date-time
1067
+ * @description When this confirmation was recorded
1068
+ * @example 2026-01-15T14:35:00Z
803
1069
  */
804
- orderId?: string;
1070
+ recorded_at?: string;
1071
+ };
1072
+ /** @description Assigned driver information */
1073
+ Driver: {
805
1074
  /**
806
- * @description Human-readable order number (PRO number)
807
- * @example ZKYQ5
1075
+ * @description Driver's full name
1076
+ * @example John Smith
808
1077
  */
809
- orderNumber?: string;
1078
+ name?: string;
810
1079
  /**
811
- * Format: date-time
812
- * @description Invoice date (typically same as delivery date)
813
- * @example 2024-12-20T15:30:00Z
1080
+ * @description Driver's phone number in E.164 format (e.g., +15551234567)
1081
+ * @example +15551234567
814
1082
  */
815
- invoiceDate?: string;
1083
+ phone?: string;
816
1084
  /**
817
- * Format: date-time
818
- * @description Ship date (when the shipment was picked up)
819
- * @example 2024-12-18T09:00:00Z
1085
+ * @description Vehicle identifier assigned to this shipment
1086
+ * @example TRUCK-42
820
1087
  */
821
- shipDate?: string;
1088
+ vehicle_id?: string;
1089
+ };
1090
+ /** @description Order details visible to the carrier */
1091
+ Order: {
822
1092
  /**
823
- * Format: date-time
824
- * @description Delivery date (when the shipment was delivered)
825
- * @example 2024-12-20T15:30:00Z
1093
+ * @description Human-readable PRO number for the shipment (5-character alphanumeric)
1094
+ * @example Y73Q0
826
1095
  */
827
- deliveryDate?: string;
1096
+ order_number?: string;
828
1097
  /**
829
- * @description Purchase order number (if provided)
830
- * @example PO-12345
1098
+ * @description Current shipment status in the order lifecycle
1099
+ * @example CONFIRMED
1100
+ * @enum {string}
831
1101
  */
832
- poNumber?: string;
1102
+ order_status?: "INITIALIZED" | "CONFIRMED" | "ACCEPTED" | "ASSIGNED" | "PICKED_UP" | "IN_TRANSIT" | "DELIVERED" | "CANCELLED";
833
1103
  /**
834
- * @description Reference number (BOL number)
835
- * @example BOL-67890
1104
+ * @description Cargo description
1105
+ * @example Electronics - 2 pallets shrink-wrapped
836
1106
  */
837
- refNumber?: string;
838
- /** @description Line items representing the shipped goods */
839
- lineItems?: components["schemas"]["InvoiceLineItem"][];
840
- /** @description Itemized charges and fees */
841
- charges?: components["schemas"]["InvoiceCharge"][];
1107
+ description?: string;
842
1108
  /**
843
1109
  * Format: int32
844
- * @description Total of all charges in cents (USD)
845
- * @example 125000
1110
+ * @description Total number of pallets
1111
+ * @example 2
846
1112
  */
847
- totalChargesInCents?: number;
1113
+ total_pallet_count?: number;
848
1114
  /**
849
- * Format: int32
850
- * @description Total weight of the shipment in pounds
851
- * @example 1500
1115
+ * Format: float
1116
+ * @description Total weight in pounds
1117
+ * @example 1200
852
1118
  */
853
- 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: {
854
1147
  /**
855
1148
  * Format: int32
856
- * @description Total number of pieces/pallets
857
- * @example 4
1149
+ * @description Total payout amount in cents (USD). Includes base payout plus all additional charges.
1150
+ * @example 125000
858
1151
  */
859
- totalPieces?: number;
860
- shipper?: components["schemas"]["Address"];
861
- consignee?: components["schemas"]["Address"];
862
- billTo?: components["schemas"]["Address"];
1152
+ total_in_cents?: number;
863
1153
  };
864
- /** @description Response containing a document download link */
865
- DocumentResponse: {
1154
+ /** @description Carrier-reported pickup confirmation details */
1155
+ PickupConfirmation: {
866
1156
  /**
867
- * @description Name of the document file
868
- * @example bol-ZKYQ5.pdf
1157
+ * Format: date-time
1158
+ * @description Actual pickup time
1159
+ * @example 2026-01-15T10:30:00Z
869
1160
  */
870
- filename?: string;
1161
+ pickup_time?: string;
871
1162
  /**
872
- * @description MIME type of the document
873
- * @example application/pdf
1163
+ * @description Formatted pickup address
1164
+ * @example 123 Main St, San Francisco, CA 94102
874
1165
  */
875
- fileType?: string;
1166
+ address?: string;
876
1167
  /**
877
- * @description Pre-signed download URL (valid for limited time)
878
- * @example https://s3.amazonaws.com/...
1168
+ * Format: double
1169
+ * @description GPS latitude at pickup
1170
+ * @example 37.7749
879
1171
  */
880
- downloadLink?: string;
881
- };
882
- /** @description Carrier API configuration response */
883
- CarrierApiConfigResponse: {
1172
+ latitude?: number;
1173
+ /**
1174
+ * Format: double
1175
+ * @description GPS longitude at pickup
1176
+ * @example -122.4194
1177
+ */
1178
+ longitude?: number;
884
1179
  /**
885
- * @description Name of the carrier company
886
- * @example ABC Logistics
1180
+ * @description Name of driver who picked up
1181
+ * @example John Smith
887
1182
  */
888
- companyName?: string;
1183
+ driver_name?: string;
889
1184
  /**
890
- * @description Whether the API is enabled for this carrier
891
- * @example true
1185
+ * @description Name of person who handed over the shipment
1186
+ * @example Jane Doe
1187
+ */
1188
+ signed_by?: string;
1189
+ /**
1190
+ * @description Additional notes about the pickup
1191
+ * @example Picked up from dock 3
892
1192
  */
893
- apiEnabled?: boolean;
1193
+ notes?: string;
894
1194
  /**
895
- * @description Current API version
896
- * @example v0.2.1
1195
+ * Format: date-time
1196
+ * @description When this confirmation was recorded
1197
+ * @example 2026-01-15T10:35:00Z
897
1198
  */
898
- apiVersion?: string;
899
- /** @description List of available API endpoints for this carrier */
900
- availableEndpoints?: string[];
1199
+ recorded_at?: string;
901
1200
  };
902
- AddressAccessorialSnapshot: {
903
- liftgateRequired?: boolean;
904
- limitedAccess?: boolean;
905
- residential?: boolean;
906
- appointmentRequired?: boolean;
907
- /** @enum {string} */
908
- callAheadRequired?: "HALF_HOUR" | "ONE_HOUR" | "TWO_HOURS" | "START_OF_DAY" | "DAY_BEFORE";
909
- /** Format: date-time */
910
- createdAt?: string;
911
- /** Format: date-time */
912
- updatedAt?: string;
913
- values?: {
914
- [key: string]: boolean;
915
- };
916
- };
917
- AppliedPricingRule: {
918
- ruleId?: string;
919
- /** @enum {string} */
920
- type?: "add_on_margin" | "max_margin_cap";
921
- /** Format: double */
922
- ruleValue?: number;
923
- /** Format: int32 */
924
- adjustmentInCents?: number;
925
- };
926
- ComponentDetails: {
927
- /** Format: int32 */
928
- palletCount?: number;
929
- /** Format: float */
930
- poundsWeight?: number;
931
- palletDimensions?: number[];
932
- 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;
933
1228
  };
934
- OfferWithOrderDataDTO: {
1229
+ /** @description Carrier offer details */
1230
+ Offer: {
1231
+ /**
1232
+ * @description Unique offer identifier
1233
+ * @example 507f1f77bcf86cd799439012
1234
+ */
935
1235
  id?: string;
936
- driverId?: string;
937
- carrierId?: string;
938
- /** 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
+ */
939
1273
  deadline?: string;
940
- orderId?: string;
941
- state?: string;
942
- /** Format: date-time */
943
- decidedAt?: string;
944
- /** Format: int32 */
945
- centsPayOut?: number;
946
- routeId?: string;
947
- /** Format: double */
948
- routeScore?: number;
949
- /** @enum {string} */
950
- matchingMethod?: "MANUAL" | "REGION" | "LANE" | "TERMINAL" | "TRIP";
951
- pickupPin?: string;
952
- deliveryPin?: string;
953
- contacted?: boolean;
954
- communicationExpired?: boolean;
955
- /** Format: int32 */
956
- carrierCounterOfferPriceInCents?: number;
957
- emailThreadId?: string;
958
- /** Format: int32 */
959
- manualCentsPayoutOverride?: number;
960
- additionalPayoutsInCents?: {
961
- [key: string]: number;
962
- };
963
- /** Format: int32 */
964
- totalPayoutInCents?: number;
965
- realTimeVehicleLocationSnapshots?: components["schemas"]["VehicleLocationSnapshot"][];
966
- tripFragmentMatches?: components["schemas"]["TripFragmentMatch"][];
967
- /** Format: date-time */
968
- createdAt?: string;
969
- /** Format: date-time */
970
- updatedAt?: string;
971
- orderData?: components["schemas"]["Order"];
972
- pickupAddressData?: components["schemas"]["Address"];
973
- dropoffAddressData?: components["schemas"]["Address"];
974
- 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;
975
1286
  };
976
- 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
+ */
977
1322
  id?: string;
978
- customerId?: string;
979
- companyId?: string;
980
- additionalCustomerIds?: string[];
981
- apiOrder?: boolean;
982
- orderNumber?: string;
983
- pickupAddressId?: string;
984
- deliveryAddressId?: string;
985
- logisticsId?: string;
986
- /** Format: int32 */
987
- totalPalletCount?: number;
988
- /** Format: float */
989
- totalPoundsWeight?: number;
990
- description?: string;
991
- ltlCode?: string;
992
- quote?: components["schemas"]["Quote"];
993
- billingAddressId?: string;
994
- paid?: boolean;
995
- /** Format: int32 */
996
- amountDue?: number;
997
- /** Format: date-time */
998
- paidAt?: string;
999
- paidBy?: string;
1000
- paymentMethod?: string;
1001
- paymentNotes?: string;
1002
- confirmed?: boolean;
1003
- state?: string;
1004
- /** @enum {string} */
1005
- cancellationReason?: "unspecified" | "customer_cancellation" | "shipment_entry_error" | "low_coverage" | "unacceptable_margin" | "expired" | "carrier_exception" | "shipper_exception" | "tonu" | "chargeback_other";
1006
- orderComponents?: components["schemas"]["ComponentDetails"][];
1007
- poNumber?: string;
1008
- refNumber?: string;
1009
- emailThreadId?: string;
1010
- /** Format: date-time */
1011
- decidedAt?: string;
1012
- /** Format: date-time */
1013
- paymentDueAt?: string;
1014
- /** Format: date-time */
1015
- createdAt?: string;
1016
- /** Format: date-time */
1017
- updatedAt?: string;
1018
- searchMatches?: components["schemas"]["SearchMatch"][];
1019
- /** Format: double */
1020
- avgPoundsPerCubicFoot?: number;
1021
- /** Format: double */
1022
- totalCubicFeet?: number;
1023
- orderPreConfirmation?: boolean;
1024
- /** Format: int32 */
1025
- totalPriceInCents?: number;
1026
- /** Format: int32 */
1027
- 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;
1028
1342
  };
1029
- OrderAccessorials: {
1030
- pickupAccessorials?: components["schemas"]["AddressAccessorialSnapshot"];
1031
- deliveryAccessorials?: components["schemas"]["AddressAccessorialSnapshot"];
1032
- hazmat?: boolean;
1033
- 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;
1034
1372
  };
1035
- Quote: {
1036
- id?: string;
1037
- customerId?: string;
1038
- shipperId?: string;
1039
- orderId?: string;
1040
- pickupZip?: string;
1041
- dropoffZip?: string;
1042
- /** Format: int32 */
1043
- numPallets?: number;
1044
- /** Format: float */
1045
- totalWeight?: number;
1046
- /** Format: int32 */
1047
- centsCharge?: number;
1048
- /** Format: date-time */
1049
- timeStamp?: string;
1050
- exposePrice?: boolean;
1051
- coverageDenialReason?: string;
1052
- /** Format: int32 */
1053
- suggestedCarrierPayoutCents?: number;
1054
- /** Format: double */
1055
- carrierProbability?: number;
1056
- /** Format: double */
1057
- shipperProbability?: number;
1058
- /** Format: double */
1059
- pickupScoreSurroundingNormalized?: number;
1060
- /** Format: double */
1061
- dropoffScoreSurroundingNormalized?: number;
1062
- /** Format: double */
1063
- originalPrice?: number;
1064
- /** Format: double */
1065
- miles?: number;
1066
- additionalChargesInCents?: {
1067
- [key: string]: number;
1068
- };
1069
- brokerChargesInCents?: {
1070
- [key: string]: number;
1071
- };
1072
- /** Format: int32 */
1073
- pricingRuleAdjustmentInCents?: number;
1074
- appliedPricingRules?: components["schemas"]["AppliedPricingRule"][];
1075
- /** Format: date-time */
1076
- createdAt?: string;
1077
- /** Format: date-time */
1078
- updatedAt?: string;
1079
- /** Format: int32 */
1080
- totalCentsChargeWithBrokerCharges?: number;
1081
- /** @enum {string} */
1082
- status?: "open" | "display" | "price_locked" | "confirmed" | "rejected";
1083
- /** @enum {string} */
1084
- quoteSource?: "pricing_model" | "manual_entry" | "pricing_model_v2";
1085
- };
1086
- SearchMatch: {
1087
- field?: string;
1088
- value?: string;
1089
- /** Format: int32 */
1090
- startIndex?: number;
1091
- /** Format: int32 */
1092
- endIndex?: number;
1093
- };
1094
- TripDetour: {
1095
- /** Format: int32 */
1096
- totalDetourSeconds?: number;
1097
- /** Format: int32 */
1098
- pickupDetourSeconds?: number;
1099
- /** Format: int32 */
1100
- deliveryDetourSeconds?: number;
1101
- };
1102
- TripFragmentMatch: {
1103
- tripId?: string;
1104
- tripFragmentId?: string;
1105
- vehicleId?: string;
1106
- /** Format: int32 */
1107
- pickupStopNumber?: number;
1108
- /** Format: int32 */
1109
- deliveryStopNumber?: number;
1110
- tripDetour?: components["schemas"]["TripDetour"];
1111
- };
1112
- VehicleLocationSnapshot: {
1113
- id?: string;
1114
- vehicleId?: string;
1115
- vehicleName?: string;
1116
- location?: string;
1117
- /** Format: int32 */
1118
- heading?: number;
1119
- /** Format: int32 */
1120
- speed?: number;
1121
- /** Format: date-time */
1122
- lastUpdated?: string;
1123
- /** Format: int32 */
1124
- numHexesAwayFromPickup?: number;
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;
1125
1450
  };
1126
- };
1127
- responses: never;
1128
- parameters: never;
1129
- requestBodies: never;
1130
- headers: never;
1131
- pathItems: never;
1132
- }
1133
- interface operations {
1134
- confirmShipment: {
1135
- parameters: {
1136
- query?: never;
1137
- header?: never;
1138
- path: {
1139
- /**
1140
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1141
- * @example ZKYQ5
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
1142
2950
  */
1143
- orderNumber: string;
2951
+ identifier: string;
1144
2952
  };
1145
2953
  cookie?: never;
1146
2954
  };
1147
- requestBody?: never;
2955
+ requestBody: {
2956
+ content: {
2957
+ "application/json": components["schemas"]["OfferLocationUpdate"];
2958
+ };
2959
+ };
1148
2960
  responses: {
1149
- /** @description Shipment confirmed successfully. Verify the response contains `orderStatus: CONFIRMED` to ensure confirmation succeeded. */
2961
+ /** @description Location update acknowledged */
1150
2962
  200: {
1151
2963
  headers: {
1152
2964
  [name: string]: unknown;
1153
2965
  };
1154
2966
  content: {
1155
- "application/json": components["schemas"]["Shipment"];
2967
+ "application/json": components["schemas"]["LocationAcknowledgment"];
1156
2968
  };
1157
2969
  };
1158
- /** @description Invalid request: orderNumber is required, order is not in INITIALIZED state, or is missing a quote */
2970
+ /** @description Invalid request: latitude, longitude, and timestamp are required */
1159
2971
  400: {
1160
2972
  headers: {
1161
2973
  [name: string]: unknown;
@@ -1164,7 +2976,7 @@ interface operations {
1164
2976
  "application/json": components["schemas"]["ProblemDetail"];
1165
2977
  };
1166
2978
  };
1167
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
2979
+ /** @description Unauthorized: missing or invalid bearer token */
1168
2980
  401: {
1169
2981
  headers: {
1170
2982
  [name: string]: unknown;
@@ -1173,7 +2985,7 @@ interface operations {
1173
2985
  "application/json": components["schemas"]["ProblemDetail"];
1174
2986
  };
1175
2987
  };
1176
- /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
2988
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
1177
2989
  403: {
1178
2990
  headers: {
1179
2991
  [name: string]: unknown;
@@ -1191,6 +3003,15 @@ interface operations {
1191
3003
  "application/json": components["schemas"]["ProblemDetail"];
1192
3004
  };
1193
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
+ };
1194
3015
  /** @description Internal server error */
1195
3016
  500: {
1196
3017
  headers: {
@@ -1202,31 +3023,35 @@ interface operations {
1202
3023
  };
1203
3024
  };
1204
3025
  };
1205
- cancelShipment: {
3026
+ reportException: {
1206
3027
  parameters: {
1207
3028
  query?: never;
1208
3029
  header?: never;
1209
3030
  path: {
1210
3031
  /**
1211
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1212
- * @example ZKYQ5
3032
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
3033
+ * @example Y73Q0
1213
3034
  */
1214
- orderNumber: string;
3035
+ identifier: string;
1215
3036
  };
1216
3037
  cookie?: never;
1217
3038
  };
1218
- requestBody?: never;
3039
+ requestBody: {
3040
+ content: {
3041
+ "application/json": components["schemas"]["ExceptionReportRequest"];
3042
+ };
3043
+ };
1219
3044
  responses: {
1220
- /** @description Shipment cancelled successfully */
3045
+ /** @description Exception recorded */
1221
3046
  200: {
1222
3047
  headers: {
1223
3048
  [name: string]: unknown;
1224
3049
  };
1225
3050
  content: {
1226
- "application/json": components["schemas"]["Shipment"];
3051
+ "application/json": components["schemas"]["ExceptionResponse"];
1227
3052
  };
1228
3053
  };
1229
- /** @description Invalid request: orderNumber is required, or order cannot be cancelled in its current state */
3054
+ /** @description Invalid request: exceptionType and exceptionTime are required */
1230
3055
  400: {
1231
3056
  headers: {
1232
3057
  [name: string]: unknown;
@@ -1235,7 +3060,7 @@ interface operations {
1235
3060
  "application/json": components["schemas"]["ProblemDetail"];
1236
3061
  };
1237
3062
  };
1238
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3063
+ /** @description Unauthorized: missing or invalid bearer token */
1239
3064
  401: {
1240
3065
  headers: {
1241
3066
  [name: string]: unknown;
@@ -1244,7 +3069,7 @@ interface operations {
1244
3069
  "application/json": components["schemas"]["ProblemDetail"];
1245
3070
  };
1246
3071
  };
1247
- /** @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 */
1248
3073
  403: {
1249
3074
  headers: {
1250
3075
  [name: string]: unknown;
@@ -1262,6 +3087,15 @@ interface operations {
1262
3087
  "application/json": components["schemas"]["ProblemDetail"];
1263
3088
  };
1264
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"];
3097
+ };
3098
+ };
1265
3099
  /** @description Internal server error */
1266
3100
  500: {
1267
3101
  headers: {
@@ -1273,7 +3107,7 @@ interface operations {
1273
3107
  };
1274
3108
  };
1275
3109
  };
1276
- createShipment: {
3110
+ addTrips: {
1277
3111
  parameters: {
1278
3112
  query?: never;
1279
3113
  header?: never;
@@ -1282,20 +3116,20 @@ interface operations {
1282
3116
  };
1283
3117
  requestBody: {
1284
3118
  content: {
1285
- "application/json": components["schemas"]["CreateShipmentRequest"];
3119
+ "application/json": components["schemas"]["CarrierTripRequest"][];
1286
3120
  };
1287
3121
  };
1288
3122
  responses: {
1289
- /** @description Shipment created successfully */
3123
+ /** @description Trips accepted and processed; returns count of trips added */
1290
3124
  200: {
1291
3125
  headers: {
1292
3126
  [name: string]: unknown;
1293
3127
  };
1294
3128
  content: {
1295
- "application/json": components["schemas"]["Shipment"];
3129
+ "application/json": number;
1296
3130
  };
1297
3131
  };
1298
- /** @description Invalid request: validation error, quote mismatch, or expired quote */
3132
+ /** @description Invalid request: missing required fields or invalid trip data */
1299
3133
  400: {
1300
3134
  headers: {
1301
3135
  [name: string]: unknown;
@@ -1304,7 +3138,7 @@ interface operations {
1304
3138
  "application/json": components["schemas"]["ProblemDetail"];
1305
3139
  };
1306
3140
  };
1307
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3141
+ /** @description Unauthorized: missing or invalid bearer token */
1308
3142
  401: {
1309
3143
  headers: {
1310
3144
  [name: string]: unknown;
@@ -1313,7 +3147,7 @@ interface operations {
1313
3147
  "application/json": components["schemas"]["ProblemDetail"];
1314
3148
  };
1315
3149
  };
1316
- /** @description Forbidden: missing/invalid API key, user not in company, or quote not owned by company */
3150
+ /** @description Forbidden: API access is not enabled for this carrier */
1317
3151
  403: {
1318
3152
  headers: {
1319
3153
  [name: string]: unknown;
@@ -1322,14 +3156,8 @@ interface operations {
1322
3156
  "application/json": components["schemas"]["ProblemDetail"];
1323
3157
  };
1324
3158
  };
1325
- /**
1326
- * @description Unprocessable Entity. Possible reasons:
1327
- *
1328
- * - **Location Not Serviceable** (`reason: no_coverage`) — the lane is not within Oway's active coverage area.
1329
- * - **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.
1330
- * - **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.
1331
- */
1332
- 422: {
3159
+ /** @description Carrier not found */
3160
+ 404: {
1333
3161
  headers: {
1334
3162
  [name: string]: unknown;
1335
3163
  };
@@ -1348,7 +3176,7 @@ interface operations {
1348
3176
  };
1349
3177
  };
1350
3178
  };
1351
- requestQuote: {
3179
+ getToken: {
1352
3180
  parameters: {
1353
3181
  query?: never;
1354
3182
  header?: never;
@@ -1357,20 +3185,64 @@ interface operations {
1357
3185
  };
1358
3186
  requestBody: {
1359
3187
  content: {
1360
- "application/json": components["schemas"]["QuoteRequest"];
3188
+ "application/json": components["schemas"]["TokenRequest"];
1361
3189
  };
1362
3190
  };
1363
3191
  responses: {
1364
- /** @description Quote generated successfully */
3192
+ /** @description Token successfully generated */
1365
3193
  200: {
1366
3194
  headers: {
1367
3195
  [name: string]: unknown;
1368
3196
  };
1369
3197
  content: {
1370
- "application/json": components["schemas"]["QuoteResponse"];
3198
+ "application/json": components["schemas"]["TokenResponse"];
1371
3199
  };
1372
3200
  };
1373
- /** @description Invalid request: validation error */
3201
+ /** @description Invalid request: missing required fields */
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: {
3238
+ headers: {
3239
+ [name: string]: unknown;
3240
+ };
3241
+ content: {
3242
+ "application/json": components["schemas"]["Shipment"];
3243
+ };
3244
+ };
3245
+ /** @description Invalid request: orderNumber is required */
1374
3246
  400: {
1375
3247
  headers: {
1376
3248
  [name: string]: unknown;
@@ -1388,7 +3260,7 @@ interface operations {
1388
3260
  "application/json": components["schemas"]["ProblemDetail"];
1389
3261
  };
1390
3262
  };
1391
- /** @description Forbidden: missing/invalid API key, or user does not belong to the authorized company */
3263
+ /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
1392
3264
  403: {
1393
3265
  headers: {
1394
3266
  [name: string]: unknown;
@@ -1397,14 +3269,8 @@ interface operations {
1397
3269
  "application/json": components["schemas"]["ProblemDetail"];
1398
3270
  };
1399
3271
  };
1400
- /**
1401
- * @description Unprocessable Entity. Possible reasons:
1402
- *
1403
- * - **Location Not Serviceable** (`reason: no_coverage`) — the lane is not within Oway's active coverage area.
1404
- * - **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.
1405
- * - **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.
1406
- */
1407
- 422: {
3272
+ /** @description Shipment not found */
3273
+ 404: {
1408
3274
  headers: {
1409
3275
  [name: string]: unknown;
1410
3276
  };
@@ -1412,8 +3278,61 @@ interface operations {
1412
3278
  "application/json": components["schemas"]["ProblemDetail"];
1413
3279
  };
1414
3280
  };
1415
- /** @description Internal server error */
1416
- 500: {
3281
+ };
3282
+ };
3283
+ trackShipment: {
3284
+ parameters: {
3285
+ query?: never;
3286
+ header?: never;
3287
+ path: {
3288
+ /**
3289
+ * @description Order number (5-character alphanumeric code, commonly called PRO number)
3290
+ * @example ZKYQ5
3291
+ */
3292
+ orderNumber: string;
3293
+ };
3294
+ cookie?: never;
3295
+ };
3296
+ requestBody?: never;
3297
+ responses: {
3298
+ /** @description Tracking information retrieved successfully */
3299
+ 200: {
3300
+ headers: {
3301
+ [name: string]: unknown;
3302
+ };
3303
+ content: {
3304
+ "application/json": components["schemas"]["Tracking"];
3305
+ };
3306
+ };
3307
+ /** @description Invalid request: orderNumber is required */
3308
+ 400: {
3309
+ headers: {
3310
+ [name: string]: unknown;
3311
+ };
3312
+ content: {
3313
+ "application/json": components["schemas"]["ProblemDetail"];
3314
+ };
3315
+ };
3316
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3317
+ 401: {
3318
+ headers: {
3319
+ [name: string]: unknown;
3320
+ };
3321
+ content: {
3322
+ "application/json": components["schemas"]["ProblemDetail"];
3323
+ };
3324
+ };
3325
+ /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
3326
+ 403: {
3327
+ headers: {
3328
+ [name: string]: unknown;
3329
+ };
3330
+ content: {
3331
+ "application/json": components["schemas"]["ProblemDetail"];
3332
+ };
3333
+ };
3334
+ /** @description Shipment not found */
3335
+ 404: {
1417
3336
  headers: {
1418
3337
  [name: string]: unknown;
1419
3338
  };
@@ -1423,32 +3342,95 @@ interface operations {
1423
3342
  };
1424
3343
  };
1425
3344
  };
1426
- addTrips: {
3345
+ getInvoice: {
3346
+ parameters: {
3347
+ query?: never;
3348
+ header?: never;
3349
+ path: {
3350
+ /**
3351
+ * @description Order number (5-character alphanumeric code, commonly called PRO number)
3352
+ * @example ZKYQ5
3353
+ */
3354
+ orderNumber: string;
3355
+ };
3356
+ cookie?: never;
3357
+ };
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
+ };
3404
+ };
3405
+ };
3406
+ };
3407
+ getDocument: {
1427
3408
  parameters: {
1428
3409
  query?: never;
1429
3410
  header?: never;
1430
3411
  path: {
1431
- /** @description The unique identifier of the carrier */
1432
- carrierId: string;
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";
1433
3419
  };
1434
3420
  cookie?: never;
1435
3421
  };
1436
- requestBody: {
1437
- content: {
1438
- "application/json": components["schemas"]["TripRequest"][];
1439
- };
1440
- };
3422
+ requestBody?: never;
1441
3423
  responses: {
1442
- /** @description Trips accepted and processed; returns count of trips added */
3424
+ /** @description Document URL retrieved successfully */
1443
3425
  200: {
1444
3426
  headers: {
1445
3427
  [name: string]: unknown;
1446
3428
  };
1447
3429
  content: {
1448
- "application/json": number;
3430
+ "application/json": components["schemas"]["DocumentResponse"];
1449
3431
  };
1450
3432
  };
1451
- /** @description Invalid request: missing required fields or invalid trip data */
3433
+ /** @description Invalid request: orderNumber and documentType are required */
1452
3434
  400: {
1453
3435
  headers: {
1454
3436
  [name: string]: unknown;
@@ -1457,7 +3439,7 @@ interface operations {
1457
3439
  "application/json": components["schemas"]["ProblemDetail"];
1458
3440
  };
1459
3441
  };
1460
- /** @description Unauthorized: missing or invalid bearer token */
3442
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1461
3443
  401: {
1462
3444
  headers: {
1463
3445
  [name: string]: unknown;
@@ -1466,7 +3448,7 @@ interface operations {
1466
3448
  "application/json": components["schemas"]["ProblemDetail"];
1467
3449
  };
1468
3450
  };
1469
- /** @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 */
1470
3452
  403: {
1471
3453
  headers: {
1472
3454
  [name: string]: unknown;
@@ -1475,7 +3457,7 @@ interface operations {
1475
3457
  "application/json": components["schemas"]["ProblemDetail"];
1476
3458
  };
1477
3459
  };
1478
- /** @description Carrier not found */
3460
+ /** @description Shipment or document not found */
1479
3461
  404: {
1480
3462
  headers: {
1481
3463
  [name: string]: unknown;
@@ -1495,32 +3477,28 @@ interface operations {
1495
3477
  };
1496
3478
  };
1497
3479
  };
1498
- addGpsData: {
3480
+ getQuote: {
1499
3481
  parameters: {
1500
3482
  query?: never;
1501
3483
  header?: never;
1502
3484
  path: {
1503
- /** @description The unique identifier of the carrier */
1504
- carrierId: string;
3485
+ /** @description Unique quote ID */
3486
+ quoteId: string;
1505
3487
  };
1506
3488
  cookie?: never;
1507
3489
  };
1508
- requestBody: {
1509
- content: {
1510
- "application/json": components["schemas"]["GpsData"][];
1511
- };
1512
- };
3490
+ requestBody?: never;
1513
3491
  responses: {
1514
- /** @description GPS data accepted and processed; returns count of data points added */
3492
+ /** @description Quote retrieved successfully */
1515
3493
  200: {
1516
3494
  headers: {
1517
3495
  [name: string]: unknown;
1518
3496
  };
1519
3497
  content: {
1520
- "application/json": number;
3498
+ "application/json": components["schemas"]["QuoteResponse"];
1521
3499
  };
1522
3500
  };
1523
- /** @description Invalid request: malformed JSON, missing fields, or invalid data */
3501
+ /** @description Invalid request: quote ID format is invalid */
1524
3502
  400: {
1525
3503
  headers: {
1526
3504
  [name: string]: unknown;
@@ -1529,7 +3507,7 @@ interface operations {
1529
3507
  "application/json": components["schemas"]["ProblemDetail"];
1530
3508
  };
1531
3509
  };
1532
- /** @description Unauthorized: missing or invalid bearer token */
3510
+ /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1533
3511
  401: {
1534
3512
  headers: {
1535
3513
  [name: string]: unknown;
@@ -1538,7 +3516,7 @@ interface operations {
1538
3516
  "application/json": components["schemas"]["ProblemDetail"];
1539
3517
  };
1540
3518
  };
1541
- /** @description Forbidden: API access is not enabled for this carrier */
3519
+ /** @description Forbidden: missing, invalid, or expired API key (authorization failed) */
1542
3520
  403: {
1543
3521
  headers: {
1544
3522
  [name: string]: unknown;
@@ -1547,7 +3525,7 @@ interface operations {
1547
3525
  "application/json": components["schemas"]["ProblemDetail"];
1548
3526
  };
1549
3527
  };
1550
- /** @description Carrier not found */
3528
+ /** @description Quote not found */
1551
3529
  404: {
1552
3530
  headers: {
1553
3531
  [name: string]: unknown;
@@ -1556,69 +3534,72 @@ interface operations {
1556
3534
  "application/json": components["schemas"]["ProblemDetail"];
1557
3535
  };
1558
3536
  };
1559
- /** @description Internal server error */
1560
- 500: {
1561
- headers: {
1562
- [name: string]: unknown;
1563
- };
1564
- content: {
1565
- "application/json": components["schemas"]["ProblemDetail"];
1566
- };
1567
- };
1568
3537
  };
1569
3538
  };
1570
- getToken: {
3539
+ getShipments: {
1571
3540
  parameters: {
1572
- 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
+ };
1573
3549
  header?: never;
1574
3550
  path?: never;
1575
3551
  cookie?: never;
1576
3552
  };
1577
- requestBody: {
1578
- content: {
1579
- "application/json": components["schemas"]["TokenRequest"];
1580
- };
1581
- };
3553
+ requestBody?: never;
1582
3554
  responses: {
1583
- /** @description Token successfully generated */
3555
+ /** @description Shipments retrieved successfully */
1584
3556
  200: {
1585
3557
  headers: {
1586
3558
  [name: string]: unknown;
1587
3559
  };
1588
3560
  content: {
1589
- "application/json": components["schemas"]["TokenResponse"];
3561
+ "application/json": components["schemas"]["CarrierShipment"][];
1590
3562
  };
1591
3563
  };
1592
- /** @description Invalid request: missing required fields */
1593
- 400: {
3564
+ /** @description Unauthorized: missing or invalid bearer token */
3565
+ 401: {
1594
3566
  headers: {
1595
3567
  [name: string]: unknown;
1596
3568
  };
1597
3569
  content: {
1598
- "application/json": components["schemas"]["TokenErrorResponse"];
3570
+ "application/json": components["schemas"]["ProblemDetail"];
1599
3571
  };
1600
3572
  };
1601
- /** @description Unauthorized: invalid credentials */
1602
- 401: {
3573
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
3574
+ 403: {
1603
3575
  headers: {
1604
3576
  [name: string]: unknown;
1605
3577
  };
1606
3578
  content: {
1607
- "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"];
1608
3589
  };
1609
3590
  };
1610
3591
  };
1611
3592
  };
1612
- getShipment: {
3593
+ getShipment_1: {
1613
3594
  parameters: {
1614
3595
  query?: never;
1615
3596
  header?: never;
1616
3597
  path: {
1617
3598
  /**
1618
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1619
- * @example ZKYQ5
3599
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
3600
+ * @example Y73Q0
1620
3601
  */
1621
- orderNumber: string;
3602
+ identifier: string;
1622
3603
  };
1623
3604
  cookie?: never;
1624
3605
  };
@@ -1630,11 +3611,11 @@ interface operations {
1630
3611
  [name: string]: unknown;
1631
3612
  };
1632
3613
  content: {
1633
- "application/json": components["schemas"]["Shipment"];
3614
+ "application/json": components["schemas"]["CarrierShipment"];
1634
3615
  };
1635
3616
  };
1636
- /** @description Invalid request: orderNumber is required */
1637
- 400: {
3617
+ /** @description Unauthorized: missing or invalid bearer token */
3618
+ 401: {
1638
3619
  headers: {
1639
3620
  [name: string]: unknown;
1640
3621
  };
@@ -1642,8 +3623,8 @@ interface operations {
1642
3623
  "application/json": components["schemas"]["ProblemDetail"];
1643
3624
  };
1644
3625
  };
1645
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1646
- 401: {
3626
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
3627
+ 403: {
1647
3628
  headers: {
1648
3629
  [name: string]: unknown;
1649
3630
  };
@@ -1651,8 +3632,8 @@ interface operations {
1651
3632
  "application/json": components["schemas"]["ProblemDetail"];
1652
3633
  };
1653
3634
  };
1654
- /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
1655
- 403: {
3635
+ /** @description Shipment not found */
3636
+ 404: {
1656
3637
  headers: {
1657
3638
  [name: string]: unknown;
1658
3639
  };
@@ -1660,8 +3641,8 @@ interface operations {
1660
3641
  "application/json": components["schemas"]["ProblemDetail"];
1661
3642
  };
1662
3643
  };
1663
- /** @description Shipment not found */
1664
- 404: {
3644
+ /** @description Internal server error */
3645
+ 500: {
1665
3646
  headers: {
1666
3647
  [name: string]: unknown;
1667
3648
  };
@@ -1671,32 +3652,32 @@ interface operations {
1671
3652
  };
1672
3653
  };
1673
3654
  };
1674
- trackShipment: {
3655
+ getShipmentTracking: {
1675
3656
  parameters: {
1676
3657
  query?: never;
1677
3658
  header?: never;
1678
3659
  path: {
1679
3660
  /**
1680
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1681
- * @example ZKYQ5
3661
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
3662
+ * @example Y73Q0
1682
3663
  */
1683
- orderNumber: string;
3664
+ identifier: string;
1684
3665
  };
1685
3666
  cookie?: never;
1686
3667
  };
1687
3668
  requestBody?: never;
1688
3669
  responses: {
1689
- /** @description Tracking information retrieved successfully */
3670
+ /** @description Tracking data retrieved successfully */
1690
3671
  200: {
1691
3672
  headers: {
1692
3673
  [name: string]: unknown;
1693
3674
  };
1694
3675
  content: {
1695
- "application/json": components["schemas"]["Tracking"];
3676
+ "application/json": components["schemas"]["TrackingResponse"];
1696
3677
  };
1697
3678
  };
1698
- /** @description Invalid request: orderNumber is required */
1699
- 400: {
3679
+ /** @description Unauthorized: missing or invalid bearer token */
3680
+ 401: {
1700
3681
  headers: {
1701
3682
  [name: string]: unknown;
1702
3683
  };
@@ -1704,8 +3685,8 @@ interface operations {
1704
3685
  "application/json": components["schemas"]["ProblemDetail"];
1705
3686
  };
1706
3687
  };
1707
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1708
- 401: {
3688
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
3689
+ 403: {
1709
3690
  headers: {
1710
3691
  [name: string]: unknown;
1711
3692
  };
@@ -1713,8 +3694,8 @@ interface operations {
1713
3694
  "application/json": components["schemas"]["ProblemDetail"];
1714
3695
  };
1715
3696
  };
1716
- /** @description Forbidden: missing/invalid API key, or shipment does not belong to your company */
1717
- 403: {
3697
+ /** @description Shipment not found */
3698
+ 404: {
1718
3699
  headers: {
1719
3700
  [name: string]: unknown;
1720
3701
  };
@@ -1722,8 +3703,8 @@ interface operations {
1722
3703
  "application/json": components["schemas"]["ProblemDetail"];
1723
3704
  };
1724
3705
  };
1725
- /** @description Shipment not found */
1726
- 404: {
3706
+ /** @description Internal server error */
3707
+ 500: {
1727
3708
  headers: {
1728
3709
  [name: string]: unknown;
1729
3710
  };
@@ -1733,31 +3714,33 @@ interface operations {
1733
3714
  };
1734
3715
  };
1735
3716
  };
1736
- getInvoice: {
3717
+ getShipmentDocument: {
1737
3718
  parameters: {
1738
3719
  query?: never;
1739
3720
  header?: never;
1740
3721
  path: {
1741
3722
  /**
1742
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1743
- * @example ZKYQ5
3723
+ * @description Shipment identifier (offerId, orderNumber, or carrierReference)
3724
+ * @example Y73Q0
1744
3725
  */
1745
- orderNumber: string;
3726
+ identifier: string;
3727
+ /** @description Document type */
3728
+ documentType: "BILL_OF_LADING" | "SHIPPING_LABEL";
1746
3729
  };
1747
3730
  cookie?: never;
1748
3731
  };
1749
3732
  requestBody?: never;
1750
3733
  responses: {
1751
- /** @description Invoice retrieved successfully */
3734
+ /** @description Document URL retrieved successfully */
1752
3735
  200: {
1753
3736
  headers: {
1754
3737
  [name: string]: unknown;
1755
3738
  };
1756
3739
  content: {
1757
- "application/json": components["schemas"]["InvoiceResponse"];
3740
+ "application/json": components["schemas"]["CarrierDocumentResponse"];
1758
3741
  };
1759
3742
  };
1760
- /** @description Invalid request: orderNumber is required, or shipment is not in DELIVERED state */
3743
+ /** @description Invalid document type */
1761
3744
  400: {
1762
3745
  headers: {
1763
3746
  [name: string]: unknown;
@@ -1766,7 +3749,7 @@ interface operations {
1766
3749
  "application/json": components["schemas"]["ProblemDetail"];
1767
3750
  };
1768
3751
  };
1769
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3752
+ /** @description Unauthorized: missing or invalid bearer token */
1770
3753
  401: {
1771
3754
  headers: {
1772
3755
  [name: string]: unknown;
@@ -1775,7 +3758,7 @@ interface operations {
1775
3758
  "application/json": components["schemas"]["ProblemDetail"];
1776
3759
  };
1777
3760
  };
1778
- /** @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 */
1779
3762
  403: {
1780
3763
  headers: {
1781
3764
  [name: string]: unknown;
@@ -1784,7 +3767,7 @@ interface operations {
1784
3767
  "application/json": components["schemas"]["ProblemDetail"];
1785
3768
  };
1786
3769
  };
1787
- /** @description Shipment not found */
3770
+ /** @description Shipment or document not found */
1788
3771
  404: {
1789
3772
  headers: {
1790
3773
  [name: string]: unknown;
@@ -1793,44 +3776,36 @@ interface operations {
1793
3776
  "application/json": components["schemas"]["ProblemDetail"];
1794
3777
  };
1795
3778
  };
3779
+ /** @description Internal server error */
3780
+ 500: {
3781
+ headers: {
3782
+ [name: string]: unknown;
3783
+ };
3784
+ content: {
3785
+ "application/json": components["schemas"]["ProblemDetail"];
3786
+ };
3787
+ };
1796
3788
  };
1797
3789
  };
1798
- getDocument: {
3790
+ getOffers: {
1799
3791
  parameters: {
1800
3792
  query?: never;
1801
3793
  header?: never;
1802
- path: {
1803
- /**
1804
- * @description Order number (5-character alphanumeric code, commonly called PRO number)
1805
- * @example ZKYQ5
1806
- */
1807
- orderNumber: string;
1808
- /** @description Type of document to retrieve */
1809
- documentType: "BILL_OF_LADING" | "INVOICE" | "SHIPPING_LABEL" | "POD";
1810
- };
3794
+ path?: never;
1811
3795
  cookie?: never;
1812
3796
  };
1813
3797
  requestBody?: never;
1814
3798
  responses: {
1815
- /** @description Document URL retrieved successfully */
3799
+ /** @description Offers retrieved successfully */
1816
3800
  200: {
1817
3801
  headers: {
1818
3802
  [name: string]: unknown;
1819
3803
  };
1820
3804
  content: {
1821
- "application/json": components["schemas"]["DocumentResponse"];
1822
- };
1823
- };
1824
- /** @description Invalid request: orderNumber and documentType are required */
1825
- 400: {
1826
- headers: {
1827
- [name: string]: unknown;
1828
- };
1829
- content: {
1830
- "application/json": components["schemas"]["ProblemDetail"];
3805
+ "application/json": components["schemas"]["Offer"][];
1831
3806
  };
1832
3807
  };
1833
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
3808
+ /** @description Unauthorized: missing or invalid bearer token */
1834
3809
  401: {
1835
3810
  headers: {
1836
3811
  [name: string]: unknown;
@@ -1839,7 +3814,7 @@ interface operations {
1839
3814
  "application/json": components["schemas"]["ProblemDetail"];
1840
3815
  };
1841
3816
  };
1842
- /** @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 */
1843
3818
  403: {
1844
3819
  headers: {
1845
3820
  [name: string]: unknown;
@@ -1848,7 +3823,7 @@ interface operations {
1848
3823
  "application/json": components["schemas"]["ProblemDetail"];
1849
3824
  };
1850
3825
  };
1851
- /** @description Shipment or document not found */
3826
+ /** @description Carrier not found */
1852
3827
  404: {
1853
3828
  headers: {
1854
3829
  [name: string]: unknown;
@@ -1868,29 +3843,32 @@ interface operations {
1868
3843
  };
1869
3844
  };
1870
3845
  };
1871
- getQuote: {
3846
+ getOffer: {
1872
3847
  parameters: {
1873
3848
  query?: never;
1874
3849
  header?: never;
1875
3850
  path: {
1876
- /** @description Unique quote ID */
1877
- quoteId: string;
3851
+ /**
3852
+ * @description Offer identifier (offerId, orderNumber, or carrierReference)
3853
+ * @example Y73Q0
3854
+ */
3855
+ identifier: string;
1878
3856
  };
1879
3857
  cookie?: never;
1880
3858
  };
1881
3859
  requestBody?: never;
1882
3860
  responses: {
1883
- /** @description Quote retrieved successfully */
3861
+ /** @description Offer retrieved successfully */
1884
3862
  200: {
1885
3863
  headers: {
1886
3864
  [name: string]: unknown;
1887
3865
  };
1888
3866
  content: {
1889
- "application/json": components["schemas"]["QuoteResponse"];
3867
+ "application/json": components["schemas"]["Offer"];
1890
3868
  };
1891
3869
  };
1892
- /** @description Invalid request: quote ID format is invalid */
1893
- 400: {
3870
+ /** @description Unauthorized: missing or invalid bearer token */
3871
+ 401: {
1894
3872
  headers: {
1895
3873
  [name: string]: unknown;
1896
3874
  };
@@ -1898,8 +3876,8 @@ interface operations {
1898
3876
  "application/json": components["schemas"]["ProblemDetail"];
1899
3877
  };
1900
3878
  };
1901
- /** @description Unauthorized: missing or invalid Bearer token (authentication failed) */
1902
- 401: {
3879
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
3880
+ 403: {
1903
3881
  headers: {
1904
3882
  [name: string]: unknown;
1905
3883
  };
@@ -1907,8 +3885,8 @@ interface operations {
1907
3885
  "application/json": components["schemas"]["ProblemDetail"];
1908
3886
  };
1909
3887
  };
1910
- /** @description Forbidden: missing, invalid, or expired API key (authorization failed) */
1911
- 403: {
3888
+ /** @description Offer not found */
3889
+ 404: {
1912
3890
  headers: {
1913
3891
  [name: string]: unknown;
1914
3892
  };
@@ -1916,8 +3894,8 @@ interface operations {
1916
3894
  "application/json": components["schemas"]["ProblemDetail"];
1917
3895
  };
1918
3896
  };
1919
- /** @description Quote not found */
1920
- 404: {
3897
+ /** @description Internal server error */
3898
+ 500: {
1921
3899
  headers: {
1922
3900
  [name: string]: unknown;
1923
3901
  };
@@ -1927,25 +3905,25 @@ interface operations {
1927
3905
  };
1928
3906
  };
1929
3907
  };
1930
- getCarrierApiConfig: {
3908
+ getBundles: {
1931
3909
  parameters: {
1932
- query?: never;
1933
- header?: never;
1934
- path: {
1935
- /** @description The unique identifier of the carrier */
1936
- carrierId: string;
3910
+ query?: {
3911
+ /** @description Filter bundles by status (OPEN, ACCEPTED, DECLINED, EXPIRED) */
3912
+ status?: string;
1937
3913
  };
3914
+ header?: never;
3915
+ path?: never;
1938
3916
  cookie?: never;
1939
3917
  };
1940
3918
  requestBody?: never;
1941
3919
  responses: {
1942
- /** @description Configuration retrieved successfully */
3920
+ /** @description Bundles retrieved successfully */
1943
3921
  200: {
1944
3922
  headers: {
1945
3923
  [name: string]: unknown;
1946
3924
  };
1947
3925
  content: {
1948
- "application/json": components["schemas"]["CarrierApiConfigResponse"];
3926
+ "application/json": components["schemas"]["Bundle"][];
1949
3927
  };
1950
3928
  };
1951
3929
  /** @description Unauthorized: missing or invalid bearer token */
@@ -1957,7 +3935,7 @@ interface operations {
1957
3935
  "application/json": components["schemas"]["ProblemDetail"];
1958
3936
  };
1959
3937
  };
1960
- /** @description Forbidden: API access is not enabled for this carrier */
3938
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
1961
3939
  403: {
1962
3940
  headers: {
1963
3941
  [name: string]: unknown;
@@ -1966,15 +3944,6 @@ interface operations {
1966
3944
  "application/json": components["schemas"]["ProblemDetail"];
1967
3945
  };
1968
3946
  };
1969
- /** @description Carrier not found */
1970
- 404: {
1971
- headers: {
1972
- [name: string]: unknown;
1973
- };
1974
- content: {
1975
- "application/json": components["schemas"]["ProblemDetail"];
1976
- };
1977
- };
1978
3947
  /** @description Internal server error */
1979
3948
  500: {
1980
3949
  headers: {
@@ -1986,32 +3955,28 @@ interface operations {
1986
3955
  };
1987
3956
  };
1988
3957
  };
1989
- getJobs: {
3958
+ getBundle: {
1990
3959
  parameters: {
1991
- query?: {
1992
- /** @description If true, only return currently active jobs */
1993
- activeOnly?: boolean;
1994
- /** @description Filter jobs created after this time (ISO 8601 format) */
1995
- startTime?: string;
1996
- /** @description Filter jobs created before this time (ISO 8601 format) */
1997
- endTime?: string;
1998
- };
3960
+ query?: never;
1999
3961
  header?: never;
2000
3962
  path: {
2001
- /** @description The unique identifier of the carrier */
2002
- carrierId: string;
3963
+ /**
3964
+ * @description Bundle ID
3965
+ * @example 507f1f77bcf86cd799439012
3966
+ */
3967
+ bundleId: string;
2003
3968
  };
2004
3969
  cookie?: never;
2005
3970
  };
2006
3971
  requestBody?: never;
2007
3972
  responses: {
2008
- /** @description Jobs retrieved successfully */
3973
+ /** @description Bundle retrieved successfully */
2009
3974
  200: {
2010
3975
  headers: {
2011
3976
  [name: string]: unknown;
2012
3977
  };
2013
3978
  content: {
2014
- "application/json": components["schemas"]["OfferWithOrderDataDTO"][];
3979
+ "application/json": components["schemas"]["Bundle"];
2015
3980
  };
2016
3981
  };
2017
3982
  /** @description Unauthorized: missing or invalid bearer token */
@@ -2023,7 +3988,7 @@ interface operations {
2023
3988
  "application/json": components["schemas"]["ProblemDetail"];
2024
3989
  };
2025
3990
  };
2026
- /** @description Forbidden: API access is not enabled for this carrier */
3991
+ /** @description Forbidden: missing/invalid API key or API access not enabled */
2027
3992
  403: {
2028
3993
  headers: {
2029
3994
  [name: string]: unknown;
@@ -2032,7 +3997,7 @@ interface operations {
2032
3997
  "application/json": components["schemas"]["ProblemDetail"];
2033
3998
  };
2034
3999
  };
2035
- /** @description Carrier not found */
4000
+ /** @description Bundle not found */
2036
4001
  404: {
2037
4002
  headers: {
2038
4003
  [name: string]: unknown;
@@ -2054,111 +4019,81 @@ interface operations {
2054
4019
  };
2055
4020
  }
2056
4021
 
4022
+ /** A single field-level validation failure. */
4023
+ type Violation = components['schemas']['Violation'];
2057
4024
  interface OwayConfig {
2058
- /**
2059
- * M2M Client ID (REQUIRED for all integrations)
2060
- * Provided by Oway Sales Engineering team
2061
- */
4025
+ /** M2M Client ID (required). */
2062
4026
  clientId: string;
2063
- /**
2064
- * M2M Client Secret (REQUIRED for all integrations)
2065
- * Provided by Oway Sales Engineering team
2066
- */
4027
+ /** M2M Client Secret (required). */
2067
4028
  clientSecret: string;
2068
4029
  /**
2069
- * Default company API key (optional)
2070
- *
2071
- * Single-company: Set this to your company's API key
2072
- * Multi-company: Omit this and provide per-request
2073
- *
2074
- * 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.
2075
4032
  */
2076
4033
  apiKey?: string;
2077
- /**
2078
- * Base URL for the Oway API
2079
- * @default "https://api.sandbox.oway.io"
2080
- */
4034
+ /** Base URL. Defaults to https://api.sandbox.oway.io. */
2081
4035
  baseUrl?: string;
2082
- /**
2083
- * Token endpoint for authentication
2084
- * @default "https://api.sandbox.oway.io/v1/auth/token"
2085
- */
4036
+ /** Token endpoint. Defaults to `${baseUrl}/v1/auth/token`. */
2086
4037
  tokenUrl?: string;
2087
- /**
2088
- * Maximum number of retry attempts for failed requests
2089
- * @default 3
2090
- */
4038
+ /** Maximum retry attempts on transient errors. Defaults to 3. Pass 0 to disable. */
2091
4039
  maxRetries?: number;
2092
- /**
2093
- * Timeout in milliseconds for API requests
2094
- * @default 30000
2095
- */
4040
+ /** Request timeout in milliseconds. Defaults to 30000. */
2096
4041
  timeout?: number;
2097
- /**
2098
- * Enable debug logging (logs sanitized request/response metadata)
2099
- * @default false
2100
- */
4042
+ /** Enable structured debug logging. */
2101
4043
  debug?: boolean;
2102
- /**
2103
- * Custom logger implementation
2104
- */
4044
+ /** Custom logger. When omitted the SDK is silent. */
2105
4045
  logger?: {
2106
- debug: (msg: string, meta?: Record<string, any>) => void;
2107
- info: (msg: string, meta?: Record<string, any>) => void;
2108
- warn: (msg: string, meta?: Record<string, any>) => void;
2109
- 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;
2110
4050
  };
2111
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
+ */
2112
4057
  declare class OwayError extends Error {
2113
- code?: string | undefined;
2114
- statusCode?: number | undefined;
2115
- requestId?: string | undefined;
2116
- constructor(message: string, code?: string | undefined, statusCode?: number | undefined, requestId?: string | undefined);
2117
- /**
2118
- * Determines if this error represents a transient failure that should be retried
2119
- */
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). */
2120
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;
2121
4085
  }
2122
- /**
2123
- * HTTP client for making authenticated requests to the Oway API
2124
- */
2125
4086
  declare class HttpClient {
2126
- private config;
4087
+ private readonly config;
2127
4088
  private accessToken;
2128
4089
  private tokenExpiry;
2129
4090
  private tokenRefreshPromise;
2130
4091
  constructor(config: OwayConfig);
2131
- /**
2132
- * Internal logging with sanitization
2133
- */
2134
4092
  private log;
2135
- /**
2136
- * Sanitize objects for logging - remove sensitive fields
2137
- */
2138
- private sanitizeForLogging;
2139
- /**
2140
- * Get or refresh the access token using the API key
2141
- * Handles concurrent requests by queuing them behind a single refresh
2142
- */
4093
+ private sanitize;
2143
4094
  private getAccessToken;
2144
- /**
2145
- * Perform the actual token refresh using M2M credentials
2146
- */
2147
4095
  private refreshToken;
2148
- /**
2149
- * Generate a unique request ID
2150
- */
2151
- private generateRequestId;
2152
- /**
2153
- * Make an authenticated request to the Oway API
2154
- */
2155
- request<T>(method: string, path: string, options?: {
2156
- query?: Record<string, string | number | boolean>;
2157
- body?: unknown;
2158
- headers?: Record<string, string>;
2159
- requestId?: string;
2160
- companyApiKey?: string;
2161
- }): Promise<T>;
4096
+ request<T>(method: string, path: string, options?: RequestOptions): Promise<T>;
2162
4097
  get<T>(path: string, query?: Record<string, string | number | boolean>, companyApiKey?: string): Promise<T>;
2163
4098
  post<T>(path: string, body?: unknown, companyApiKey?: string): Promise<T>;
2164
4099
  put<T>(path: string, body?: unknown, companyApiKey?: string): Promise<T>;