---
title: "Ship the specified parcels."
method: POST
path: "/v1/parcels/ship"
tags: ["shipment"]
---

# Ship the specified parcels.

`POST /v1/parcels/ship`

## Request

- Base URL: `https://logistics.api.cabify-sandbox.com`
- URL: `https://logistics.api.cabify-sandbox.com/v1/parcels/ship`
- Auth: HTTP bearer

Marks the given parcels as ready to ship using the specified shipping type.

The available shipping types for your account and location can be retrieved from the
[GET /v1/shipping_types/available](https://developers.cabify.com/reference/shippingtypesavailable) endpoint.

## Request body

- ShipParcels
  - `parcel_ids` string[], required: IDs of the parcels to ship.
  - `shipping_type_id` string, required: Identifier of the shipping type to use, as returned for the pickup location by [GET /v1/shipping_types/available](https://developers.cabify.com/reference/shippingtypesavailable). Opaque and environment-dependent: send it back exactly as it was returned.
  - `pickup_time` string, date-time: Desired pickup time. Only applicable for the `express` modality. Formatted according to RFC 3339, section 5.6.
  - `with_return` boolean: Request a return leg: after the delivery, the rider goes back to the pickup point in the same journey. Returns must be enabled for the shipping type; asking for one on a shipping type without it fails with `shipping type not enabled for return`.

## Response `200`

The shipment was created. The response carries the parcel ids and their tracking URLs. Dispatch happens afterwards: a driver has not been assigned yet, so follow the parcel state to know how the delivery progresses.

- ShipParcelsResponse
  - `parcels` ParcelShipment[], required: List of parcels with their assigned tracking URLs.
    - `id` string, uuid, required: System-generated UUID for this parcel.
    - `tracking_url` string, url: Public URL where the parcel's live tracking can be viewed.
  - `shipping_type_id` string, required: Identifier of the shipping type used for this shipment.

## Other responses

- `400`: Bad request. The body is malformed or a required field is missing, no product or vehicle matches the parcels, or the country is not served. The API error messages guide explains each message.
- `401`: Unauthorized. Missing or invalid authentication token.
- `403`: A parcel does not belong to your account, or the shipping type is not enabled for it.
- `404`: A parcel or the shipping type could not be found. To find valid shipping type IDs, use [GET /v1/shipping_types/available](https://developers.cabify.com/reference/shippingtypesavailable).
- `409`: The shipment conflicts with the state of a parcel, or with coverage and account configuration: no vehicle available for the route, no price or products configured for the shipping type, or another check that failed downstream. Coverage is checked per shipping type. The API error messages guide explains each message.
- `422`: The request is well-formed but the shipment cannot be created: the account has no usable payment method or is disabled, pickup and dropoff are too far apart, the parcels do not fit the vehicles available, the delivery window is missing or spans more than one day, or a parcel has neither a usable address nor coordinates. The API error messages guide explains each message.
- `429`: Too many requests. This API is rate limited per account and per endpoint. A 429 is an expected condition rather than a failed request: back off and retry it. The limits are not the same for every endpoint and can change, so handle the status instead of hard-coding a rate. See the Limits and reliability guide.

---

[API](https://skmtc.dev/cabify/apis/cabify-logistics-api.md) - [All operations](https://skmtc.dev/cabify/apis/cabify-logistics-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cabify/apis/cabify-logistics-api/revisions/dff49457aac9?raw)
