Заказы

Раздел описывает API для расчёта стоимости доставки, создания заказа и получения истории статусов отправления.

1. Общее

Все запросы отправляются на {BASE_URL}/api/v2/orders/.... Базовый URL и токен предоставляет Starex.

Authorization: Bearer {TOKEN}
Content-Type: application/json
Accept: application/json
Accept-Language: ru
Для всех методов этого раздела в вашем аккаунте должен быть включён сервис «Заказы». Иначе вернётся ошибка -401.

Список методов:

МетодАдресНазначение
POST /api/v2/orders/calculate Расчёт стоимости доставки
POST /api/v2/orders/create Создание заказа (отправления)
GET /api/v2/orders/trace История статусов отправления
Суммы возвращаются в тийинах. Например 4500000 — это 45 000 сум.

2. Тип доставки

Поле service определяет, куда доставляется отправление, и от него зависит, какие поля обязательны.

serviceТипОбязательные поля
1 До двери (курьер везёт по адресу) receiver_district_id + receiver_address
2 До ПВЗ (забирают в филиале) receiver_branch_id

ID районов и филиалов берутся из раздела Справочники.

При service = 1 поле receiver_branch_id игнорируется, а при service = 2 игнорируется receiver_district_id.

3. Расчёт стоимости

Позволяет узнать стоимость доставки до создания заказа.

POST {BASE_URL}/api/v2/orders/calculate

Параметры запроса
ПараметрТипОбяз.Описание
sender_district_idintegerДаID района отправителя
sender_addressstringНетАдрес отправителя
serviceintegerДа1 — до двери, 2 — до ПВЗ
receiver_district_idintegerДа при service=1ID района получателя
receiver_branch_idintegerДа при service=2ID филиала (ПВЗ)
receiver_addressstringНетАдрес получателя
weightnumberДаВес, кг (например 1.5)
Пример запроса
POST {BASE_URL}/api/v2/orders/calculate
Authorization: Bearer {TOKEN}
Content-Type: application/json
{
  "sender_district_id": 12,
  "sender_address": "улица Амира Темура, 1",
  "receiver_district_id": 45,
  "receiver_address": "улица Мустакиллик, 20",
  "weight": 1.5,
  "service": 1
}
Ответ (200)
{
  "success": true,
  "data": {
    "price": 4500000,
    "from_town": { "code": 3922, "name": "TASHKENT" },
    "to_town": { "code": 3969, "name": "SAMARKAND" },
    "mass": 1.5,
    "service": { "code": 1, "name": "Курьерская доставка" }
  }
}
ПолеТипОписание
priceintegerСтоимость доставки, в тийинах
from_town.codeinteger|nullКод города отправителя (внутренний код Starex)
from_town.namestring|nullНазвание города отправителя
to_town.codeinteger|nullКод города получателя
to_town.namestring|nullНазвание города получателя
massnumber|nullУчтённый вес (кг)
service.codeinteger|nullКод типа доставки
service.namestring|nullНазвание типа доставки
При service = 2 (ПВЗ) поле to_town может вернуться пустым — в этом случае адрес определяется по филиалу.

4. Создание заказа

Создаёт новое отправление и возвращает штрих-код (barcode).

POST {BASE_URL}/api/v2/orders/create

Параметры запроса
ПараметрТипОбяз.Описание
sender_district_idintegerДаID района отправителя
sender_personstringНетФИО отправителя
sender_phonestringНетТелефон отправителя
sender_addressstringНетАдрес отправителя
serviceintegerДа*1 — до двери, 2 — до ПВЗ
receiver_district_idintegerДа при service=1ID района получателя
receiver_branch_idintegerДа при service=2ID филиала (ПВЗ)
receiver_personstringДа**ФИО получателя (физлицо)
receiver_companystringДа**Название компании-получателя
receiver_phonestringДаТелефон получателя
receiver_addressstringНетАдрес получателя (нужен для доставки до двери)
weightnumberНетВес, кг

* Технически поле можно не передавать, но тогда отправление уйдёт без адреса — всегда передавайте 1 или 2.

** Должно быть заполнено хотя бы одно из полей receiver_person или receiver_company.

Важно: не передавайте receiver_person и receiver_company одновременно — при передаче обоих имя получателя не попадёт в отправление. Для физлица передавайте только receiver_person, для юрлица — только receiver_company.
Пример запроса (до двери)
POST {BASE_URL}/api/v2/orders/create
Authorization: Bearer {TOKEN}
Content-Type: application/json
{
  "sender_district_id": 12,
  "sender_person": "Али Валиев",
  "sender_phone": "998901234567",
  "sender_address": "улица Амира Темура, 1",
  "receiver_district_id": 45,
  "receiver_person": "Вали Алиев",
  "receiver_phone": "998907654321",
  "receiver_address": "улица Мустакиллик, 20",
  "weight": 1.5,
  "service": 1
}
Пример запроса (до ПВЗ)
{
  "sender_district_id": 12,
  "sender_person": "Али Валиев",
  "sender_phone": "998901234567",
  "receiver_branch_id": 7,
  "receiver_person": "Вали Алиев",
  "receiver_phone": "998907654321",
  "weight": 1.5,
  "service": 2
}
Ответ (200)
{
  "success": true,
  "data": {
    "order_code": "AB123456789UZ",
    "price": 4500000,
    "api_response": {
      "orderNo": "123456",
      "barcode": "AB123456789UZ",
      "error": 0,
      "errorMessage": null,
      "errorMessageRu": null,
      "orderPrice": 45000
    }
  }
}
ПолеТипОписание
order_codestring|nullШтрих-код (barcode) — используется во всех последующих запросах и в webhook
priceinteger|nullСтоимость отправления, в тийинах
api_response.orderNostring|nullВнутренний номер отправления
api_response.barcodestring|nullШтрих-код
api_response.errorinteger|null0 — успешно, другое значение — ошибка
api_response.errorMessagestring|nullТекст ошибки
api_response.errorMessageRustring|nullТекст ошибки на русском
api_response.orderPricenumber|nullЦена (в сумах, без тийинов)
Внимание: даже если внешняя система вернула ошибку, ответ приходит с "success": true. Поэтому всегда проверяйте data.api_response.error: 0 — отправление создано, иначе — нет.

Пример ответа с ошибкой:

{
  "success": true,
  "data": {
    "order_code": null,
    "price": null,
    "api_response": {
      "orderNo": null,
      "barcode": null,
      "error": 1,
      "errorMessage": "Wrong town code",
      "errorMessageRu": "Неверный код города",
      "orderPrice": null
    }
  }
}
После создания заказ попадает в систему Starex, и его статусы начинают меняться. Отслеживать их можно запросом статусов отправления или через webhook.

5. Статусы отправления

Возвращает историю статусов одного отправления по штрих-коду.

GET {BASE_URL}/api/v2/orders/trace

ПараметрТипОбяз.Описание
barcodestringДаШтрих-код отправления
GET {BASE_URL}/api/v2/orders/trace?barcode=AB123456789UZ
Authorization: Bearer {TOKEN}
Accept: application/json
Ответ (200)
{
  "success": true,
  "data": {
    "barcode": "AB123456789UZ",
    "date": "2026-06-10 09:00:00",
    "weight": 1.5,
    "recipient": "Вали Алиев",
    "trace": [
      { "code": 1, "name": "Новый",     "advanced": "NEW",      "statetime": "2026-06-10 09:00:00", "branch": "Центральный склад Ташкента", "description": "Заказ принят" },
      { "code": 9, "name": "Доставлен", "advanced": "COMPLETE", "statetime": "2026-06-15 14:30:00", "branch": "Филиал Самарканд",          "description": "Вручено получателю" }
    ]
  }
}
ПолеТипОписание
barcodestringШтрих-код отправления
datestring|nullДата и время приёма
weightnumber|nullВес (кг)
recipientstring|nullПолучатель
trace[]arrayИстория статусов (по возрастанию времени)
trace[].codeintegerКод статуса (раздел 6)
trace[].namestring|nullНазвание статуса (на русском)
trace[].advancedstring|nullЯзыконезависимый мнемонический код (например NEW)
trace[].statetimestring|nullВремя статуса
trace[].branchstring|nullНазвание филиала или склада, где зафиксирован статус
trace[].descriptionstring|nullДополнительный комментарий к статусу

Если штрих-код не найден:

{
  "success": false,
  "error": {
    "code": -404,
    "message": "Данные не найдены"
  }
}

6. Коды статусов

Каждый статус отправления обозначается числовым code. Эти коды используются в трёх местах в одном и том же значении:

Расшифровку кодов даёт запрос справочника:

GET {BASE_URL}/api/v2/dictionaries/states

{
  "success": true,
  "data": [
    { "code": 0, "name": "Ожидает синхронизации", "advanced": "AWAITING_SYNC" },
    { "code": 1, "name": "Новый",                  "advanced": "NEW" },
    { "code": 9, "name": "Доставлен",              "advanced": "COMPLETE" }
  ]
}
ПолеТипОписание
codeintegerКод статуса
namestring|nullНазвание статуса (на русском)
advancedstring|nullСтабильный языконезависимый мнемонический код
Важно: список статусов не является постоянным — могут появиться новые или измениться существующие. Не «зашивайте» список в код; получайте его из API и кэшируйте.

7. Ошибки

При ошибке в ответе success = false и возвращается объект error:

{
  "success": false,
  "error": {
    "code": -2006,
    "message": "Необходимо выбрать район"
  }
}
КодHTTPПричина
422422Ошибка валидации (например, отсутствует receiver_phone)
401401Токен не передан или недействителен
-423423Аккаунт заблокирован
-401200Нет доступа к сервису «Заказы»
-500200Не заполнены параметры доступа для вашего аккаунта — свяжитесь со Starex
-2001200Район отправителя не найден
-2002200Район получателя не найден
-2004200Филиал получателя не найден
-2005200Не переданы ни receiver_person, ни receiver_company
-2006200service=1, но не передан receiver_district_id
-2007200service=2, но не передан receiver_branch_id
-404200Отправление не найдено (для trace)
100200Непредвиденная внутренняя ошибка
Текст ошибки возвращается на языке из заголовка Accept-Language: uz, ru или en.