---
title: "Read a batch of quotes"
method: GET
path: "/v1/shipper/quotes/batch/{batchId}"
tags: ["Shipper API"]
---

# Read a batch of quotes

`GET /v1/shipper/quotes/batch/{batchId}`

## Request

- Base URL: `https://api.oway.io`
- URL: `https://api.oway.io/v1/shipper/quotes/batch/{batchId}`
- Auth: HTTP bearer and API key in header `x-oway-api-key`

The batch and every item's outcome, as they stand: the same body the create call answered with. While the status is `PRICING`, `Retry-After` says how long to wait before reading again. A batch belonging to another company is not found.

## Path parameters

- `batchId` string, required

## Response `200`

The batch

- QuoteBatch: A batch of quote requests and what became of each. The same body comes back from creating the batch and from reading it, so read it until `status` is COMPLETED or FAILED.
  - `id` string: The batch id; read the batch by it
  - `status` 'PRICING' | 'COMPLETED' | 'FAILED', required: PRICING: accepted, still pricing; read the batch again after `Retry-After` seconds. COMPLETED: every item has an outcome; items can still move from UNDER_REVIEW to QUOTED or NOT_QUOTED, and nothing else on the batch changes. FAILED: the run could not finish; submit the items again.
  - `customerReference` string: Your reference for the whole set, as sent
  - `createdAt` string, date-time: When the batch was accepted
  - `completedAt` string, date-time: When every item had an outcome; absent while PRICING
  - `counts` QuoteBatchCounts: How many items ended each way
    - `items` integer: Items in the batch
    - `quoted` integer: Items with a price you can book
    - `notQuoted` integer: Items deliberately not priced
    - `underReview` integer: Items a person will decide
    - `pending` integer: Items not priced yet
  - `items` QuoteBatchItemResult[]: One entry per item, in the order you sent them; match by position
    - `customerReference` string: Your own reference for the load, as sent on the item and stored on the quote; absent when the item carried none. Results are in request order, so the position is the match.
    - `status` 'PENDING' | 'QUOTED' | 'NOT_QUOTED' | 'UNDER_REVIEW', required: The outcome
    - `quote` QuoteResponse: Response containing a shipping quote
      - `id` string: Unique quote identifier
      - `quotedPriceInCents` integer: Total quoted price in cents (USD)
      - `quoteExpirationTime` string, date-time: When this quote expires (ISO 8601 format). Quotes are valid for 2 days.
      - `transitDays` integer, nullable: 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.
      - `estimatedDeliveryDate` string, date-time, nullable: Estimated delivery date and time (ISO 8601 format, UTC). May be null when the ETA cannot be computed.
    - `problem` ProblemDetail: RFC 9457 Problem Details error response
      - `type` string: A URI reference that identifies the problem type
      - `title` string: A short, human-readable summary of the problem type
      - `status` integer: The HTTP status code
      - `detail` string: A human-readable explanation specific to this occurrence of the problem
      - `reason` string: A machine-readable reason code for programmatic handling
      - `violations` Violation[]: Per-field validation failures when a request is rejected for one or more invalid fields. Present only on validation-style errors.
        - `field` string: Field path that failed validation
        - `entity` string: Entity the failing field belongs to (e.g. pickupAddress, deliveryAddress, appointment). Lets clients disambiguate otherwise-identical field paths across stops. Nullable for violations that have no entity context.
        - `reason` string: Human-readable reason the field is invalid. Any dimension or weight ceiling quoted in the message is configuration-driven, so treat the figures in the example as indicative rather than as a fixed part of the contract. The example is one rejection rather than every one: it shows a shipment that requested no liftgate. A shipment whose pickup or delivery requires a liftgate is measured against a different, generally tighter, set of dimension ceilings, and its message quotes whichever figures applied.

## Other responses

- `401`: Unauthorized: missing or invalid Bearer token (authentication failed)
- `403`: Forbidden: missing/invalid API key
- `404`: No batch with this id belongs to your company

---

[API](https://skmtc.dev/shipoway/apis/oway-shipper-api.md) - [All operations](https://skmtc.dev/shipoway/apis/oway-shipper-api/llms.txt) - [OpenAPI document](https://skmtc.dev/shipoway/apis/oway-shipper-api/revisions/35141ac5fb57?raw)
