---
title: "Accept an offer"
method: PUT
path: "/v1/carrier/offers/{identifier}/accept"
tags: ["Carrier API"]
---

# Accept an offer

`PUT /v1/carrier/offers/{identifier}/accept`

## Request

- Base URL: `https://api.oway.io`
- URL: `https://api.oway.io/v1/carrier/offers/{identifier}/accept`
- Auth: HTTP bearer and API key in header `x-oway-api-key`

Accept a pending offer. Once accepted, the offer becomes a shipment and is accessible via `/shipments` endpoints.

**Optional fields:** All request body fields are optional. You can provide driver details and a carrier reference number now, or update them later.

**State requirement:** The offer must be in PENDING status. Returns 409 if the offer has already been accepted, rejected, or expired.

## Path parameters

- `identifier` string, required

## Request body

- AcceptOfferRequest: Request body for accepting an offer
  - `estimated_pickup_time` string, date-time: Estimated time of pickup
  - `carrier_reference` string: Carrier's internal reference number for this shipment
  - `driver_name` string: Name of the assigned driver
  - `driver_phone` string: Phone number of the assigned driver
  - `vehicle_id` string: Identifier of the vehicle assigned to this shipment

## Response `200`

Offer accepted successfully

- Offer: Carrier offer details
  - `id` string: Unique offer identifier
  - `status` 'PENDING' | 'ACCEPTED' | 'PICKED_UP' | 'DELIVERED' | 'REJECTED' | 'EXPIRED' | 'CANCELLED': Current offer/shipment status
  - `carrier_reference` string: Carrier's own tracking reference number
  - `rejection_reason` string: Reason for rejection (populated when status is REJECTED)
  - `rejection_reason_text` string: Free-text explanation for rejection
  - `order` Order: Order details visible to the carrier
    - `order_number` string: Human-readable PRO number for the shipment (5-character alphanumeric)
    - `order_status` 'INITIALIZED' | 'CONFIRMED' | 'ACCEPTED' | 'ASSIGNED' | 'PICKED_UP' | 'IN_TRANSIT' | 'DELIVERED' | 'CANCELLED' | 'REJECTED': Current status of the order
    - `description` string: Cargo description
    - `total_pallet_count` integer: Total number of pallets
    - `total_pounds_weight` number, float: Total weight in pounds
    - `po_number` string: Shipper's purchase order number
    - `ref_number` string: Shipper's reference number
    - `components` CarrierComponent[]: Individual pallet/component details
      - `pallet_count` integer: Number of pallets in this component
      - `pounds_weight` number, float: Weight in pounds for this component
      - `pallet_dimensions` number[]: Pallet dimensions [length, width, height] in inches
      - `freight_class` string: Freight class code
    - `created_at` string, date-time: When the order was created
    - `updated_at` string, date-time: When the order was last updated
  - `pickup` CarrierAddress: Address information for pickup or delivery locations
    - `name` string, required: Name of the location or business
    - `address1` string, required: Primary street address
    - `address2` string: Secondary address line (suite, unit, etc.)
    - `city` string, required: City name
    - `state` string, required: Two-letter subdivision code: a US state, territory or DC, or the subdivision of the country the country field names.
    - `zip_code` string, required: Postal code of the location, in the format of the country the country field names: a 5-digit ZIP code for a US stop.
    - `country` string: Two-letter ISO 3166-1 alpha-2 country code of the stop. Oway serves the US and its territories, so this is one of US, PR, GU, VI, AS or MP.
    - `phone_number` string, required: Contact phone number in E.164 format
    - `contact_person` string, required: Name of the contact person at this location
    - `open_time` string: Opening time for the location in 24-hour format (HH:mm). Defaults to 10:00 if not provided.
    - `close_time` string: Closing time for the location in 24-hour format (HH:mm). Defaults to 16:00 if not provided.
    - `notes` string: Additional notes or instructions for the driver
    - `liftgate_required` boolean: Whether a liftgate is required at this location
    - `limited_access` boolean: Whether this is a limited access location (residential, construction site, etc.)
    - `appointment_required` boolean: Whether an appointment is required for pickup/delivery
    - `lumper_required` boolean: Third-party labor handles loading/unloading at this stop; the driver does not handle freight.
    - `inside_required` boolean: Freight must be brought inside the facility rather than left at the dock.
  - `delivery` CarrierAddress: Address information for pickup or delivery locations
    - `name` string, required: Name of the location or business
    - `address1` string, required: Primary street address
    - `address2` string: Secondary address line (suite, unit, etc.)
    - `city` string, required: City name
    - `state` string, required: Two-letter subdivision code: a US state, territory or DC, or the subdivision of the country the country field names.
    - `zip_code` string, required: Postal code of the location, in the format of the country the country field names: a 5-digit ZIP code for a US stop.
    - `country` string: Two-letter ISO 3166-1 alpha-2 country code of the stop. Oway serves the US and its territories, so this is one of US, PR, GU, VI, AS or MP.
    - `phone_number` string, required: Contact phone number in E.164 format
    - `contact_person` string, required: Name of the contact person at this location
    - `open_time` string: Opening time for the location in 24-hour format (HH:mm). Defaults to 10:00 if not provided.
    - `close_time` string: Closing time for the location in 24-hour format (HH:mm). Defaults to 16:00 if not provided.
    - `notes` string: Additional notes or instructions for the driver
    - `liftgate_required` boolean: Whether a liftgate is required at this location
    - `limited_access` boolean: Whether this is a limited access location (residential, construction site, etc.)
    - `appointment_required` boolean: Whether an appointment is required for pickup/delivery
    - `lumper_required` boolean: Third-party labor handles loading/unloading at this stop; the driver does not handle freight.
    - `inside_required` boolean: Freight must be brought inside the facility rather than left at the dock.
  - `tracking` CarrierTracking: Shipment tracking information
    - `order_number` string: Human-readable PRO number for the shipment (5-character alphanumeric)
    - `order_status` 'INITIALIZED' | 'CONFIRMED' | 'ACCEPTED' | 'ASSIGNED' | 'PICKED_UP' | 'IN_TRANSIT' | 'DELIVERED' | 'CANCELLED' | 'REJECTED': Current status of the order
    - `actual_pickup_date` string, date-time: Actual pickup date/time (ISO 8601 format)
    - `actual_delivery_date` string, date-time: Actual delivery date/time (ISO 8601 format)
    - `estimated_pickup_date` string, date-time: Estimated pickup date/time (ISO 8601 format)
    - `estimated_delivery_date` string, date-time: Estimated delivery date/time (ISO 8601 format)
  - `payout` Payout: Carrier payout information
    - `total_in_cents` integer: Total payout amount in cents (USD). Includes base payout plus all additional charges.
  - `currency` string: ISO 4217 currency code for payout amounts
  - `assigned_driver` Driver: Assigned driver information
    - `name` string: Driver's full name
    - `phone` string: Driver's phone number in E.164 format (e.g., +15551234567)
    - `vehicle_id` string: Vehicle identifier assigned to this shipment
  - `pickup_confirmation` PickupConfirmation: Carrier-reported pickup confirmation details
    - `pickup_time` string, date-time: Actual pickup time
    - `address` string: Formatted pickup address
    - `latitude` number, double: GPS latitude at pickup
    - `longitude` number, double: GPS longitude at pickup
    - `driver_name` string: Name of driver who picked up
    - `signed_by` string: Name of person who handed over the shipment
    - `notes` string: Additional notes about the pickup
    - `recorded_at` string, date-time: When this confirmation was recorded
  - `delivery_confirmation` DeliveryConfirmation: Carrier-reported delivery confirmation details
    - `delivery_time` string, date-time: Actual delivery time
    - `address` string: Formatted delivery address
    - `latitude` number, double: GPS latitude at delivery
    - `longitude` number, double: GPS longitude at delivery
    - `signed_by` string: Name of person who received the shipment
    - `signature_image_url` string: URL to signature image
    - `proof_of_delivery_url` string: URL to proof of delivery document
    - `notes` string: Additional notes about the delivery
    - `recorded_at` string, date-time: When this confirmation was recorded
  - `pickup_pin` string: PIN code for pickup verification
  - `delivery_pin` string: PIN code for delivery verification
  - `deadline` string, date-time: Offer expiration time — must accept or reject before this time
  - `created_at` string, date-time: When this offer was created
  - `updated_at` string, date-time: When this offer was last updated

## Other responses

- `400`: Invalid request
- `401`: Unauthorized: missing or invalid bearer token
- `403`: Forbidden: missing/invalid API key or API access not enabled
- `404`: Offer not found
- `409`: Offer not in valid state for acceptance
- `500`: Internal server error

## Changes

- **2026-11-03** `8d96932e1dc6`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/shipoway/apis/oway-carrier-api/changes/v1/carrier/offers/:identifier/accept/put.md)

---

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