---
title: "Confirm shipment delivery"
method: PUT
path: "/v1/carrier/shipments/{identifier}/deliver"
tags: ["Carrier API"]
---

# Confirm shipment delivery

`PUT /v1/carrier/shipments/{identifier}/deliver`

## Request

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

Confirm that the shipment has been delivered. Transitions the order to DELIVERED status and initiates carrier payout.

**Required fields:** `deliveryTime` is required. Proof of delivery fields (`signedBy`, `signatureImageUrl`, `proofOfDeliveryUrl`) are optional but recommended.

**State requirement:** The shipment must be in ACCEPTED or PICKED_UP status.

## Path parameters

- `identifier` string, required

## Request body

- DeliveryConfirmationRequest: Request body for confirming shipment delivery
  - `delivery_time` string, date-time, required: Time the shipment was delivered
  - `location` EventLocation: Location where a shipment event occurred
    - `address1` string: Primary street address
    - `address2` string: Secondary address line (suite, unit, etc.)
    - `city` string: City name
    - `state` string: Two-letter state abbreviation
    - `zip_code` string: 5-digit ZIP code
    - `country` string: Country code
  - `coordinates` EventCoordinates: GPS coordinates for a shipment event
    - `latitude` number, double: Latitude in decimal degrees
    - `longitude` number, double: Longitude in decimal degrees
  - `signed_by` string: Name of the person who signed for the delivery
  - `signature_image_url` string: URL to the signature image
  - `proof_of_delivery_url` string: URL to the proof of delivery document
  - `notes` string: Additional notes about the delivery

## Response `200`

Delivery confirmed, order status updated to DELIVERED

- CarrierShipment: Carrier shipment details (post-acceptance)
  - `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: deliveryTime is required
- `401`: Unauthorized: missing or invalid bearer token
- `403`: Forbidden: missing/invalid API key or API access not enabled
- `404`: Shipment not found
- `409`: Shipment not in valid state for delivery confirmation
- `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/shipments/:identifier/deliver/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)
