---
title: "Confirm a shipment by order number"
method: PUT
path: "/v1/shipper/shipment/{orderNumber}/confirm"
tags: ["Shipper API"]
---

# Confirm a shipment by order number

`PUT /v1/shipper/shipment/{orderNumber}/confirm`

## Request

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

Confirms an existing shipment using its order number (PRO number).
Moves the shipment from INITIALIZED to CONFIRMED state.

**Prerequisites:**
- The order must be in INITIALIZED state
- The order must have an associated quote

**Validation Requirements:**

The following fields are validated during confirmation. If any are missing or invalid,
the shipment will remain in INITIALIZED state.

*Address Fields (required on BOTH pickup and delivery addresses):*
- `name` - Location/company name
- `address1` - Street address
- `zipCode` - ZIP code
- `contactPerson` - Contact name
- `phoneNumber` - Contact phone (E.164 format, e.g., "+15551234567")
- `openTime` - Opening time in HH:mm format (defaults to "10:00")
- `closeTime` - Closing time in HH:mm format (defaults to "16:00")

*Order Fields:*
- `description` - Must not be empty
- `totalPalletCount` - At least 1, up to the current per-order maximum
- `totalPoundsWeight` - At least 1, within the current per-pallet weight cap

*Order Component Fields (per component):*
- `palletCount` - Must be at least 1
- `poundsWeight` - At least 1, within the current per-pallet weight cap
- `palletDimensions` - Length, width and height in inches, each at least 1 and
  within the current maximums. These limits are configurable and change over
  time, so they are not restated here: a pallet that exceeds them is rejected
  with a 422 whose violation message states the maximum that applied. A pallet
  larger than the standard footprint is still accepted and priced as oversized,
  and a stop that requires a liftgate applies a tighter maximum.

*Component Totals:*
- Sum of component `palletCount` must equal order `totalPalletCount`
- Sum of component `poundsWeight` must equal order `totalPoundsWeight`

## Path parameters

- `orderNumber` string, required

## Response `200`

Shipment confirmed successfully. Verify the response contains `orderStatus: CONFIRMED` to ensure confirmation succeeded.

- Shipment: Shipment/Order details
  - `id` string: Unique identifier for the order
  - `companyId` string: Company ID that owns this order
  - `userId` string: User ID who created this order
  - `orderNumber` string: Human-readable PRO number for the shipment (5-character alphanumeric)
  - `orderStatus` 'INITIALIZED' | 'CONFIRMED' | 'ACCEPTED' | 'ASSIGNED' | 'PICKED_UP' | 'IN_TRANSIT' | 'DELIVERED' | 'CANCELLED' | 'REJECTED': Current status of the order
  - `totalPriceInCents` integer: Total price of the order in cents (USD)
  - `createdAt` string, date-time: Time when the order was created (ISO 8601 format)
  - `updatedAt` string, date-time: Time when the order was last updated (ISO 8601 format)

## Other responses

- `400`: Invalid request: orderNumber is required, order is not in INITIALIZED state, or is missing a quote
- `401`: Unauthorized: missing or invalid Bearer token (authentication failed)
- `403`: Forbidden: missing/invalid API key, or shipment does not belong to your company
- `404`: Shipment not found
- `500`: Internal server error

---

[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)
