> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kasiye.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Coverage and quotes

> Check whether a route is covered and how Kasiye calculates fees.

Kasiye only books shipments whose pickup and dropoff both fall inside a coverage zone. Quote first so you know the total before you create the shipment.

## Quote a route

`POST /v1/shipments/quote` does not create a shipment. It returns whether the route is covered and the fee breakdown.

```bash theme={null}
curl -X POST https://api.kasiye.com/v1/shipments/quote \
  -H "Authorization: Bearer shp_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "pickup_lat": -13.9626,
    "pickup_lng": 33.7741,
    "dropoff_lat": -13.9833,
    "dropoff_lng": 33.7689,
    "weight_kg": 5
  }'
```

Covered response:

```json theme={null}
{
  "covered": true,
  "message": null,
  "failure_type": null,
  "distance_km": 2.37,
  "distance_fee": 4.74,
  "weight_fee": 12.5,
  "base_fee": 25,
  "subtotal": 17.24,
  "total": 25,
  "currency": "USD"
}
```

The charged total is the greater of `subtotal` (distance fee plus weight fee) and `base_fee`.

## When a quote fails

If `covered` is `false`, do not create the shipment. Creating the same route returns `422`.

| `failure_type` | Meaning                                                |
| -------------- | ------------------------------------------------------ |
| `coverage`     | Pickup or dropoff is outside every coverage zone       |
| `weight`       | Package weight is outside the configured pricing tiers |

```json theme={null}
{
  "covered": false,
  "message": "We don't cover this area.",
  "failure_type": "coverage",
  "distance_km": 0,
  "distance_fee": 0,
  "weight_fee": 0,
  "base_fee": 25,
  "subtotal": 0,
  "total": 0,
  "currency": "USD"
}
```

<Info>
  Coverage zones and weight tiers are configured on the platform, not per workspace. Use the quote endpoint as the source of truth for a given pair of coordinates.
</Info>

## Creating after a quote

Pass the same coordinates and weight to [create a shipment](/api-reference/create-shipment). Kasiye recalculates the quote at create time. If coverage changed, create fails with `422` on `coverage` or `weight_kg`.
