Sapa Moto

Quotes, zones & slots

Price and ETA before the order, a price that holds for 10 minutes, delivery zones and time slots.

Quote

POST /v1/quotes prices a delivery without creating anything:

Request
{
  "pickup": { "point_id": "0192e8a0-11aa-7b3c-9d4e-6f7a8b9c0d1e" },
  "dropoff": { "address": "Алматы, Жандосова 58", "latitude": 43.214, "longitude": 76.88 },
  "cargo": { "places": 1, "weight_kg": 2.5, "size": "M" },
  "type": "asap"
}
201 Created
{
  "quote_id": "0192f1b0-2a11-7c55-8e0d-3f6a9b7c1d20",
  "price": { "amount": 145000, "currency": "KZT" },
  "breakdown": [
    { "code": "base", "title": "Базовая цена", "amount": { "amount": 80000, "currency": "KZT" } },
    { "code": "distance", "title": "Расстояние 4.3 км", "amount": { "amount": 65000, "currency": "KZT" } }
  ],
  "eta_minutes": 38,
  "zone": "alm-center",
  "valid_until": "2026-10-24T09:20:00Z",
  "livemode": true
}
  • The price holds for 10 minutes. An order created with quote_id before valid_until gets exactly this price, even if the tariff changed in between. Later it is refused with 422 quote_expired — ask for a new quote.
  • breakdown adds up to price; codes are stable (base, distance, cod, size_l…), titles are for people.
  • Cash on delivery and size L add surcharges — pass cod and cargo to get the real price.
  • eta_minutes is an estimate from now; the order's eta is updated while it moves.

Zones

Deliveries are possible inside our delivery zones in Almaty. A pickup or drop-off outside them is refused with 422 out_of_zone — both for quotes and orders. zone in the quote is the code of the drop-off's zone.

Send coordinates whenever you have them. A text-only address that cannot be geocoded precisely is refused with 422 address_ambiguous.

Delivery types

typeMeaningscheduled_at
asap (default)as soon as possible—
scheduledby a given timerequired, the delivery time
slotin a time slotrequired, from of the slot

A missing or past scheduled_at or one outside working hours is 422 window_invalid.

Slots

GET /v1/slots?point_id=…&date=2026-10-24 lists the slots of a pickup point for a local date:

200 OK
[
  { "from": "2026-10-24T10:00:00Z", "to": "2026-10-24T12:00:00Z", "available": false },
  { "from": "2026-10-24T12:00:00Z", "to": "2026-10-24T14:00:00Z", "available": true }
]

Create the order with type: "slot" and scheduled_at = from of an available slot. A slot that filled up meanwhile is 409 slot_full. In the sandbox every pickup point has two-hour slots from 10:00 to 22:00.

Pickup points

GET /v1/pickup-points returns your organization's points (managed in the cabinet): address, coordinates, working hours, assembly norm. Use id as pickup.point_id — live orders require it; the sandbox also accepts a plain address with coordinates.

These docs are built from the platform's OpenAPI specification. Download OpenAPI