iPost REST API

API Version: 1.20

Важное сообщение об изменениях в API 1.10

Плановый отказ от поля delivery_type в заказе!

ПОДРОБНЕЕ

Getting started

Запрос к API

API_URL: https://api.ipost.life/public/v1

API_URL нужно считать как начальную часть url’а для запроса. Т.е. конечный урл запроса должен состоять из начального url и части, указанной в описании каждого конкретного метода API.

Пример

Для метода: GET /orders урл запроса будет: {API_URL}/orders т.е.: https://api.ipost.life/public/v1/orders


Запросы, требующие отправки сообщения (HTTP BODY) должны быть отосланы с HTTP хедером Content-Type: application/x-www-form-urlencoded или Content-Type: application/json, и быть закодированными соответственно указанному в запросе Content-Type.

Ответ API

Сервер отвечает в формате JSON.

В случае успеха сервер возвращает http код 200 с ожидаемым ответом.

В случае возникновения ожидаемой ошибки, сервер возвращает ответ об ошибке с http кодом 422. В таком случае сервер возвращает тело ответа, которое рекомендуется парсить и разбирать ошибки.

{
    "code": {code},
    "message": {message}
}

Где {code} - это (integer) номер ошибки, а {message} - это (string) текстовое описание ошибки.

Подробнее коды ошибок описаны в разделе Errors.

Внимание!

Ответы с другими http кодами могут содержать неожиданный ответ, потому его не рекомендуется парсить, а полагаться только на http код.

В случае неудачной идентификации/авторизации пользователя сервер отвечает с http кодом 401.

Так же сервер может вернуть ошибки 403, 404, 500, и прочие. При нормальном ходе работы их возникать не должно, потому любые http коды ошибок, не обозначенные выше, должны считаться непредвиденными (5xx), или ошибкой клиента (4xx).

В случае неожиданной ошибки (например, 500) можно попробовать повторить запрос через небольшой интервал времени.

Notes

Сериализация float

Текущая реализация сериализации данных в JSON предполагает отрезание точки и следующие за ней символы у float-даннных в случае, если дробная часть равна нулю. Тем не менее, парсить такие данные нужно как float.

Сериализация денежных представлений

Таковые в документации указаны как float, но в большинстве случаев эти значения сериализируются в строку, типа "126.95".

Сериализация bool

Значения bool сериализируются как 0 и 1 для false и true соответственно.

Номер телефона

Допускается ввод номера любой страны. Валидация номера производится с помощью гугловоской библиотеки libphonenumber, которая доступна в т.ч. для Android и iOS.

Authentication

Большинство методов API требуют идентификации пользователя. Для этого, нужно слать следующий хедер:

Authorization: Bearer {access_token}

где {access_token} - это токен, который можно получить в ЛК: АККАУНТ → ПРОФИЛЬ → вкладка API.

В случае, если метод, требующий идентификации пользователя, запрашивается без хедера авторизации или запрос не прошел авторизацию, сервер ответит с http кодом 401.

Edges

API состоит из т.н. edges, т.е. логически разделенными точками входа / краями. Далее в документации указывается http метод и путь, добавляемый к base url.

Edge: /orders (Заказы)

Получение всех заказов

Метод требует идентификации

GET /orders

QueryString (GET) параметры:

Parameter Validation Required? Description
date_from integer No Фильтр по времени “от” (unix timestamp)
date_to integer No Фильтр по времени “до” (unix timestamp)
status integer|string No Фильтр по статусу (значение OrderStatusEnum, или active, или inactive)

Пример

GET /orders?status=active

Результат:

В случае успеха сервер возвращает список заказов в следующем виде:

{
    items: OrderShort[],
    links: NavLinks,
    meta: NavMeta
}

Пример ответа

{
    "items": [{
        "id": 188,
        "tariff_type": 1,
        "delivery_time": 7200,
        "delivery_distance": 10223,
        "description": "Дверная ручка",
        "length": 500,
        "width": 500,
        "height": 300,
        "valuation": 600,
        "weight": 600,
        "places": 1,
        "name": "Грек Светлана",
        "phone": "380965156948",
        "price": "178.00",
        "payment_type": 4,
        "status": 0,
        "reason": 0,
        "created_at": 1529963283,
        "updated_at": 1529963283,
        "payment_split": {
            "balance": "100.00",
            "sender": "78.00"
        },
        "custom_price": 0
    }, {
        "id": 187,
        "tariff_type": 1,
        "delivery_time": 5400,
        "delivery_distance": 10223,
        "description": "Компакт-диск",
        "length": 200,
        "width": 200,
        "height": 10,
        "valuation": 250,
        "weight": 100,
        "places": 1,
        "name": "Стриллер Вачеслав",
        "phone": "380508695044",
        "price": "74.00",
        "payment_type": 4,
        "status": 0,
        "reason": 0,
        "created_at": 1529962563,
        "updated_at": 1529962563,
        "payment_split": {
            "balance": "50.00",
            "sender": "24.00"
        },
        "custom_price": 0
    }, {
        "id": 186,
        "tariff_type": 1,
        "delivery_time": null,
        "delivery_distance": 10223,
        "description": "Процессор",
        "length": 200,
        "width": 200,
        "height": 150,
        "valuation": 5000,
        "weight": 1,
        "places": 1,
        "name": "iPCStore Ukraine",
        "phone": "380961212121",
        "price": "94.00",
        "payment_type": 1,
        "status": 0,
        "reason": 0,
        "created_at": 1529962552,
        "updated_at": 1529962552,
        "payment_split": null,
        "custom_price": 20
    }],
    "links": {
        "self": "http://api.ipost.local/public/v1/orders?page=1",
    },
    "meta": {
        "total_count": 3,
        "page_count": 1,
        "current_page": 1
    }
}

Коды ошибок:

Получение подробной информации по заказу

Метод требует идентификации

GET /orders/{id}

Где {id} - это id заказа.

Метод возвращает ту же информацию, что и GET /orders.


Результат:

В случае успеха сервер возвращает объект Order.

Пример ответа

{
    "id": 188,
    "origin_id": null,
    "recreated_id": null,
    "tariff_type": 1,
    "delivery_time": 7200,
    "delivery_distance": 10223,
    "description": "Дверная ручка",
    "length": 500,
    "width": 500,
    "height": 300,
    "valuation": 600,
    "weight": 600,
    "places": 1,
    "name": "Грек Светлана",
    "phone": "380965156948",
    "price": "178.00",
    "payment_type": 4,
    "status": 0,
    "reason": 0,
    "created_at": 1529963283,
    "updated_at": 1529963283,
    "payment_split": {
        "balance": "100.00",
        "sender": "78.00"
    },
    "address": {
        "lat": 50.4327,
        "long": 30.4304,
        "city": "Київ",
        "street": "вул. Михайла Донця",
        "number": "7",
        "flat": null
    },
    "pickup": {
        "time_from": null,
        "time_to": null,
        "comment": null,
        "status": 0,
        "reason": 0,
        "reason_custom": null,
        "updated_at": 1529963283,
        "images": []
    },
    "deliveries": [{
        "id": 2269,
        "name": "И",
        "phone": "380985588999",
        "time_from": null,
        "time_to": null,
        "payment_type": null,
        "finance_type": 0,
        "redelivery_type": 0,
        "age_check_required": 0,
        "personal_id_check_required": 0,
        "order_number": null,
        "confirm_code": 139770,
        "comment": null,
        "status": 0,
        "reason": 0,
        "reason_custom": null,
        "updated_at": 1529963283,
        "payment_amount": null,
        "address": {
            "lat": 50.4399,
            "long": 30.5215,
            "city": "Київ",
            "street": "вул. Шота Руставелі",
            "number": "8",
            "flat": null
        },
        "parcels": [{
            "id": 3422,
            "description": "BLa-bla",
            "valuation": 100,
            "weight": 1,
            "places": 1
        }],
        "images": []
    }],
    "redelivery": null,
    "codtoaccount": null,
    "courier": null,
    "review_meta": {
        "avg_rating": 4.5,
        "count": 5 
    },
    "custom_price": 0
}

Коды ошибок:

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

Метод требует идентификации

Для создания нового заказа:

POST /orders

Для оценки стоимости заказа (без создания):

POST /orders?preview=1

NB: при запросе с preview=1 отменяются проверки на обязательность полей (required => nonrequired). Остальные проверки остаются, но могут быть пропущены, если для какой-то проверки не хватает данных (например, если нет габаритов отправления или веса посылок, то проверка на наличие подходящего тарифа не будет произведена, соответственно, ошибки 109 быть не может.)

Поля запроса:

Field Validation Required? Example Description
delivery_time integer No1 3600 Время доставки в секундах
description string /^.{1,400}$/ No2 Книги Краткое описание заказа
length integer Yes 200 Габариты отправления: длина, мм
width integer Yes 300 Габариты отправления: ширина, мм
height integer Yes 45 Габариты отправления: высота, мм
name string /^.{1,120}$/ No3 Василий Галкин Имя и фамилия отправителя
phone string /^(?=.{1,20}$)\+?\d+$/ No3 380961234567 Номер телефона отправителя
payment_type integer Yes4 2 Способ оплаты FormOrderPaymentTypeEnum
payment_split FormOrderPaymentSplit No 2 Настройка разделения оплаты
payment_card_id integer No7 123 ID привязанной карты
custom_price float No5 50 Добавочная стоимость доставки
address FormOrderAddress Yes - Адрес отправителя
pickup FormOrderPickup Yes - Информация о заборе посылки
deliveries FormOrderDelivery[] Yes - Информация о доставках NB: список/массив объектов
redelivery FormOrderRedelivery No - Информация об обратной доставке
codtoaccount FormOrderCodToAccount No6 - Информация об наложенном платеже на расчетный счет
voucher_code /^[A-Z0-9]+$/ No DISCOUNT50 Код ваучера для скидки
notify_url string /^.{0,1024}$/ No https://myproject.com/ipost-respond/systemid-325643fsdgn4 Урл, на который сервер будет присылать уведомления об изменении статуса заказа. Значение должно быть валидным урлом. IDN домены не принимаются. подробнее

ВНИМАНИЕ: в некоторых случаях (если клиент — бизнес) при использовании ваучера вместе с оплатой с баланса (включая разделение платежа) может вернуться ошибка 136, что значит, что произвести оплату с баланса при использовании ваучера невозможно. Доступные варианты оплаты остатка (если после применения ваучера он есть): наличными отправителем, наличными получателем, разделение платежа на наличными отправителем и получателем.

Количество пунктов доставки (элементов в order.deliveries) должно быть не более 30, в противном случае будет ошибка валидации.

Пустые структуры и значения можно не отправлять.

FormOrderAddress : Object

Field Validation Required? Example Description
lat float Yes 50.4385526 Гео-координаты - latitude
long float Yes 30.5233046 Гео-координаты - longitude
city string /^.{1,120}$/ Yes Киев Название города/населенного пункта
street string /^.{1,120}$/ Yes ул. Пушкина Название улицы (должно начинаться с “ул.”, “пр.”, и т.п.)
number string /^.{1,20}$/ No 112/11 Номер дома/здания
flat string /^.{1,20}$/ No 4a Номер квартиры/офиса

FormOrderPickup : Object

Field Validation Required? Example Description
time_from integer Yes1 1458637363 Время прибытия курьера - С
time_to integer Yes1 1458638363 Время прибытия курьера - До
comment string /^.{1,4000} No Осторожно, злой консьерж! Комментарий заказчика касательно прибытия курьера к отправителю, забора посылок

FormOrderDelivery : Object

Field Validation Required? Example Description
name string /^.{1,120}$/ Yes Василий Галкин Имя и фамилия получателя
phone string /^(?=.{1,20}$)\+?\d+$/ Yes 380961234567 Номер телефона получателя NB: без “+”
time_from integer Yes1 1458645563 Время прибытия курьера - С
time_to integer Yes1 1458649163 Время прибытия курьера - До
payment_type integer No2 2 Способ оплаты FormOrderTargetPaymentTypeEnum
finance_type integer No3 1 Дополнительные финансовые операции FormOrderDeliveryFinanceTypeEnum. NB: для доставки по межгороду вариант FINANCE_TYPE_COD_REDELIVERY недоступен!
redelivery_type integer No34 1 Тип обратной доставки FormOrderDeliveryRedeliveryTypeEnum
cod_card_id integer No5 123 ID привязанной карты пользователя для наложенного платежа
age_check_required bool (0|1) No 1 Требуется ли проверка возраста получателя (совершеннолетие) курьером
age_check_dob string /^\d{4}-\d{2}-\d{2}$/ No 1990-07-23 Дата рождения получателя. Формат YYYY-MM-DD. Активно только вместе с age_check_required=1. Если указано, система даст завершить доставку только если дата рождения получателя, которую проверяет курьер, соответствует указанному в этом поле. Если значение не указано, будет произведена проверка на соотвутствие даты рождения совершеннолетию
personal_id_check_required bool (0|1) No 1 Требуется ли сверка документов получателя (ИНН). Если указано, то поле personal_id_check_value становится обязательным; Курьер будет проверять ИНН у получателя, вводить в приложении, хеш из поля personal_id_check_value будет сверяться со ИНН получателя. Система не даст завершить заказ, если значения не совпадают.
personal_id_check_value string /^sha256:[0-9a-f]{64}$/ No sha256:edf313897c899896343171f4bc5431877061a5182301975048cf162e803c1976 Хеш документов (ИНН) для сверки. Будет проигнорировано, если не установлено поле personal_id_check_required. Значение должно состоять из алгоритма, и самого хеша в шестнадцатиричной кодировке (hex) разделенных двоеточием (algo:hash). Изначальная строка для хеш-функции должна состоять исключительно из цифр (0-9).
order_number string /^[\x21-\x7E]{1,25}$/ No 2555/12QWE Внутренний номер заказа
comment string /^.{1,4000} No Спуститесь в подвал Комментарий заказчика касательно прибытия курьера к получателю, доставки посылок
address FormOrderAddress Yes - Адрес получателя
parcels FormOrderParcel[] Yes - Посылки NB: список/массив объектов

FormOrderParcel : Object

Field Validation Required? Example Description
description string /^.{1,400}$/ Yes Кастрюля Описание посылки
valuation integer Yes 500 Объявленная стоимость посылки
weight integer Yes 1300 Вес посылки, в граммах
places integer Yes 1 Количество мест

FormOrderRedelivery : Object

Field Validation Required? Example Description
time_from integer Yes1 1458645563 Время прибытия курьера - С
time_to integer Yes1 1458649163 Время прибытия курьера - До
payment_type integer No2 2 Способ оплаты FormOrderTargetPaymentTypeEnum

FormOrderCodToAccount : Object

Field Validation Required? Example Description
destination string /^.{10,160}$/ Yes Наложенный платеж по счету 32443 Назначение наложенного платежа

NB: остальные значения для наложенного платежа подтягиваются из бизнес-профиля. Потому последний должен быть заполнен.

FormOrderPaymentTypeEnum : integer

Возможные значения:

Value Name
1 PAYMENT_TYPE_BALANCE
2 PAYMENT_TYPE_SENDER
3 PAYMENT_TYPE_RECIPIENT
4 PAYMENT_TYPE_SPLIT_BALANCE_AND_SENDER
5 PAYMENT_TYPE_SPLIT_BALANCE_AND_RECIPIENT
6 PAYMENT_TYPE_SPLIT_SENDER_AND_RECIPIENT
7 PAYMENT_TYPE_CARD
8 PAYMENT_TYPE_SPLIT_CARD_AND_SENDER
9 PAYMENT_TYPE_SPLIT_CARD_AND_RECIPIENT

(описания см. в OrderPaymentTypeEnum)

FormOrderPaymentSplit : Object

Field Validation Required? Example Description
balance integer No 50 Сумма оплаты с баланса
card integer No 50 Сумма оплаты с карты
sender integer No 50 Сумма оплаты отправителем
recipient integer No 50 Сумма оплаты получателем

NB: если будет установлено более одного поля, использоваться будет только первое подходящее, остальные будут проигнорированы.

FormOrderTargetPaymentTypeEnum : integer

Возможные значения:

Value Name
1 PAYMENT_TYPE_BALANCE
2 PAYMENT_TYPE_SENDER
3 PAYMENT_TYPE_RECIPIENT
7 PAYMENT_TYPE_CARD

(описания см. в OrderTargetPaymentTypeEnum)

FormOrderDeliveryFinanceTypeEnum : integer

Возможные значения:

Value Name
0 FINANCE_TYPE_NONE
1 FINANCE_TYPE_REDEEM_BALANCE
2 FINANCE_TYPE_REDEEM_RECIPIENT
3 FINANCE_TYPE_COD_BALANCE
6 FINANCE_TYPE_COD_CARD
7 FINANCE_TYPE_COD_TOACCOUNT

NB: на данный момент опции 3 и 6 недоступны! При использовании этих опций будет приходить ошибка 132.

NB: значение 7 (Наложенный платеж на расчетный счет) не может быть установлено для мультидоставки. В противном случае будет ошибка валидации. Так же, это значение (7) может быть использовано только бизнес-клиентом, у которого заполнен бизнес-профиль. Иначе — ошибка валидации. (Предполагается, что у всех бизнес-клиентов этот профиль заполнен, но есть несколько исключений).

(описания см. в OrderDeliveryFinanceTypeEnum)

FormOrderDeliveryRedeliveryTypeEnum : integer

Возможные значения:

Value Name
0 REDELIVERY_TYPE_NONE
1 REDELIVERY_TYPE_REGULAR

(описания см. в OrderDeliveryRedeliveryTypeEnum)

Разьяснения по оплате

Для определения способа оплаты используется поле order.payment_type. Оно определяет способ оплаты как за доставку, так и за обратную доставку. Но в мультидоставке за обратную доставку отвечает поле FormOrderRedelivery.payment_type.

При установке order.payment_type имеется возможность разбить платеж на 2 способа оплаты, установив в объекте order.payment_split одно из соответсвующих способу разделения оплаты - второе будет расчитано автоматически. Если указаное значение будет больше или равно стоимости доставки, то order.payment_type будет изменен на соответствующий способ (например, выбрали способ оплаты - разделение: с баланса и получателем, но указали фиксированную сумму получателем 200 у.д.е. при стоимости заказа в 150 у.д.е., в таком случае, order.payment_type будет изменен с PAYMENT_TYPE_SPLIT_BALANCE_AND_RECIPIENT на PAYMENT_TYPE_RECIPIENT). Если будет выбран способ платежа - разделение оплаты, но order.payment_split не будет установлен, то разделение будет 50%/50% с округлением каждой части вверх до целой у.д.е.

Примеры:

  1. 40 у.д.е. получателем и остальное отправителем:
    payment_type = PAYMENT_TYPE_SPLIT_SENDER_AND_RECIPIENT
    payment_split = {recipient: 40}
    
  2. 40 у.д.е. отправителем и остальное получателем:
    payment_type = PAYMENT_TYPE_SPLIT_SENDER_RECIPIENT
    payment_split = {sender: 40}
    

Пример запроса

{
    "delivery_time": 5400,
    "description": "Мед. препараты",
    "length": 500,
    "width": 500,
    "height": 300,
    "name": "Имя фамилия отправителя",
    "phone": "380500000001",
    "payment_type": 1,
    "custom_price": 0,
    "address": {
        "lat": 50.45180590,
        "long": 30.52591339,
        "city": "Киев",
        "street": "Крещатик улица",
        "number": "10",
        "flat": "24"
    },
    "pickup": {
        "comment": "Во дворе злой консьерж"
    },
    "deliveries": [
        {
            "name": "Имя фамилия получателя",
            "phone": "380500000002",
            "finance_type": 0,
            "redelivery_type": 0,
            "comment": "Комментарий по получателю",
            "address": {
                "lat": 50.45010990,
                "long": 30.52261900,
                "city": "Киев",
                "street": "Крещатик улица",
                "number": "20-22"
            },
            "parcels": [{
                "description": "Мед. препараты (Аспирин x 1)",
                "valuation": 40.00,
                "weight": 1000,
                "places": 1
            }]
        }
    ],
    "notify_url": "https://example.com/myproject/notify/34353"
}

Результат:

В случае успеха сервер возвращает id заказа и цену.

Пример ответа

{
    "id": 10,
    "price": 80,
    "price_parts": {
        "delivery": 30, // Базовая стоимость доставки
        "fast": 40, // Надбавка за срочность
        "weight": 10, // Надбавка за вес
        "distance": 0, // Надбавка за расстояние
        "night": 20, // Надбавка за нерабочее время
        "holiday": 20, // Надбавка за выходной / праздник
        "cod": 0, // Надбавка за наложенный платеж (в случае передачи суммы наложенного платежа на счет iPOST клиента)
        "redeem": 0, // Надбавка на выкуп посылки курьером
        "valuation": 0, // Надбавка на оценочную стоимость
        "redelivery": 0, // Стоимость обратной доставки
        "custom": 50, // Свободная надбавка клиента
    },
    "balance": 510
}
Field Type Description
id integer Id заказа
price float Стоимость
price_parts Map<string,float> Составные части стоимости заказа
balance float Баланс пользователя после запроса

При запросе с preview=1 поля в ответе следующие:

Field Type Description
price float|null Стоимость
price_parts Map<string,float>|null Составные части стоимости заказа
pledge float|null Сумма залога которая будет заблокирована у клиента (при выкупе посылки курьером с гарантированием)
balance float Баланс пользователя после запроса
min_delivery_time integer|null Минимальное время доставки
tariff_type OrderTariffTypeEnum|null Тип доставки
multiplier float Множитель стоимости доставки (пиковое время, погодные условия и т.п.)

Минимальное время доставки: Система определяет для заказа минимальное время доставки исходя из расстояния. Время доставки — это значение, указанное в delivery_time или разница между deliveries[].time_to и pickup.time_from. В случае, если в заказе есть обратная доставка, то это так же разница между redelivery.time_to и deliveries[].time_from.

Коды ошибок:

Редактирование существующего заказа

Метод требует идентификации

PATCH /orders/{id}

Поля запроса:

Field Validation Required? Example Description
description string /^.{1,400}$/ No Книги Краткое описание заказа
length integer No 200 Габариты отправления: длина, мм
width integer No 300 Габариты отправления: ширина, мм
height integer No 45 Габариты отправления: высота, мм
custom_price float No 50 Добавочная стоимость доставки
name string /^.{1,120}$/ No Василий Галкин Имя и фамилия отправителя
phone string /^(?=.{1,20}$)\+?\d+$/ No 380961234567 Номер телефона отправителя
pickup FormOrderUpdatePickup No - Информация о заборе посылки
deliveries FormOrderUpdateDelivery[] No - Информация о доставках NB: список/массив объектов

FormOrderUpdatePickup : Object

Field Validation Required? Example Description
comment string /^.{0,4000} No Осторожно, злой консьерж! Комментарий заказчика касательно прибытия курьера к отправителю, забора посылок. Если указана пустая строка, комментарий будет очищен

FormOrderUpdateDelivery : Object

Field Validation Required? Example Description
id integer Yes 23421 Id доставки
name string /^.{1,120}$/ No Василий Галкин Имя и фамилия отправителя
phone string /^(?=.{1,20}$)\+?\d+$/ No 380961234567 Номер телефона отправителя
comment string /^.{0,4000} No Спуститесь в подвал Комментарий заказчика касательно прибытия курьера к получателю, доставки посылок. Если указана пустая строка, комментарий будет очищен
parcels FormOrderUpdateParcel[] No - Посылки NB: список/массив объектов

FormOrderUpdateParcel : Object

Field Validation Required? Example Description
id integer Yes 45323 Id посылки
description string /^.{1,400}$/ No Кастрюля Описание посылки
valuation integer No 500 Объявленная стоимость посылки
weight integer No 1300 Вес посылки, в граммах
places integer No 1 Количество мест

Результат:

В случае успеха сервер возвращает новую цену.

Пример ответа

{
    "price": "80",
    "balance": "510"
}
Field Type Description
price float Стоимость
balance float Баланс пользователя после запроса

Коды ошибок:

Отмена заказа

Метод требует идентификации

Для отмены заказа:

POST /orders/{id}/cancel

Для оценки штрафа (без отмены):

POST /orders/{id}/cancel?preview=1

Где {id} - это id заказа.


Результат:

В случае успеха сервер возвращает размер штрафа.

Пример ответа

{
    "fine": 0,
    "balance": "510"
}
Field Type Description
fine float Размер штрафа
balance float Баланс пользователя после запроса

Коды ошибок:

Получить стикер для доставки

Метод требует идентификации

GET /stickers/{id}

Где {id} - это id доставки (order.deliveries[].id).


Результат:

В случае успеха сервер возвращает файл в формате pdf размером 100mm x 100mm. В случае, если запрашивается стикер с неизвестным id заказа, будет возвращена ошибка 44.

Коды ошибок:

Оставить отзыв об исполнении заказа

Метод требует идентификации

POST /orders/{id}/review

Где {id} - это id заказа.

Поля запроса:

Field Validation Required? Example Description
rating integer (1-5) Yes 5 Оценка заказа
text string /^.{,4000}$/ No* Супер! Курьер молодец! Текст отзыва.

Поле text является обязательным при оценке 1 и 2. Если в этом случае оно не будет указано, то будет ошибка 131.

Если курьер еще не был назначен, или заказ был отменен курьером ранее, то в ответ придет ошибка 106.


Результат:

В случае успеха сервер отвечает с http кодом 200 без тела ответа.

Коды ошибок:

Изменить отзыв об исполнении заказа

Метод требует идентификации

Является синонимом POST /orders/{id}/review

PATCH /orders/{id}/review

Описание смотреть в POST /orders/{id}/review, т.к. фактически является синонимом. Отличается только http-методом и только для семантической разницы.

Удалить отзыв об исполнении заказа

Метод требует идентификации

DELETE /orders/{id}/review

Где {id} - это id заказа.


Результат:

В случае успеха сервер отвечает с http кодом 200 без тела ответа.

Коды ошибок:

Получить отзывы об исполнении заказа

Метод требует идентификации

GET /orders/{id}/reviews

Где {id} - это id заказа.


Результат:

В случае успеха сервер возвращает список значений в следующем виде:

{
    items: Review[],
}

Пример ответа

{
    "items": [
        {
            "order_id": 123,
            "target_id": null,
            "rating": 5,
            "text": "Все ок, хорошо поработал, красафчег!",
            "created_at": 1459799323,
            "updated_at": 1459800411
        },
        {
            "order_id": 123,
            "target_id": 2,
            "rating": 5,
            "text": "Хороший курьер, быстро доставил!",
            "created_at": 1459898132,
            "updated_at": 1459898132
        }
    ]
}

Коды ошибок:

Получить локацию курьера

Метод требует идентификации

GET /orders/{id}/tracking

Где {id} - это id заказа.


Результат:

В случае успеха сервер возвращает объект Location.

Пример ответа

{
    "lat": 12.33333,
    "long": 0.13232
}

В случае, если запрашивается отзыв с неизвестным id заказа, придет ошибка 44.

Коды ошибок:

Получить все отзывы о курьере

Метод требует идентификации

GET /orders/{id}/courier/reviews

Где {id} - это id заказа.


Результат:

В случае успеха сервер возвращает список значений в следующем виде:

{
    items: CourierReview[],
    links: NavLinks,
    meta: NavMeta
}

Пример ответа

{
    "items": [
        {
            "author_type": 1,
            "rating": 5,
            "text": "Все ок, хорошо поработал, красафчег!",
            "created_at": 1459799323,
            "updated_at": 1459800411
        },
        {
            "author_type": 2,
            "rating": 5,
            "text": "Хороший курьер, быстро доставил!",
            "created_at": 1459898132,
            "updated_at": 1459898132
        }
    ],
    "links": {
        "self": "http://api.ipost.local/public/v1/orders/1234/courier-reviews?page=1",
    },
    "meta": {
        "total_count": 2,
        "page_count": 1,
        "current_page": 1
    }
}

Коды ошибок:

Отзывы на заказы

Получить все отзывы на заказы

Метод требует идентификации

GET /order-reviews

QueryString (GET) параметры:

Parameter Validation Required? Description
date_from /^\d+$/ No Фильтр по времени “от” (unix timestamp)
date_to /^\d+$/ No Фильтр по времени “до” (unix timestamp)
order_id /^\d+$/ No Фильтр по ID заказа
author_type /^\d+$/ No Фильтр по типу автора (значение CourierReviewAuthorTypeEnum)
sort /^-?\w+$/ No Сортировка. Значение - имя поля. Только по примитивным полям. Если перед именем поля есть минус (-), порядок сортировки будет DESC, иначе ASC. Сортировка по умолчанию - id DESC

Пример

GET /order-reviews?author_type=1

Результат:

В случае успеха сервер возвращает список значений в следующем виде:

{
    items: Review[],
    links: NavLinks,
    meta: NavMeta
}

Пример ответа

{
    "items": [
        {
            "order_id": 123,
            "target_id": null,
            "rating": 5,
            "text": "Все ок, хорошо поработал, красафчег!",
            "created_at": 1459799323,
            "updated_at": 1459800411
        },
        {
            "order_id": 123,
            "target_id": 155,
            "rating": 5,
            "text": "Хороший курьер, быстро доставил!",
            "created_at": 1459898132,
            "updated_at": 1459898132
        }
    ],
    "links": {
        "self": "https://api.ipost.life/public/v1/order-reviews?page=1",
    },
    "meta": {
        "total_count": 2,
        "page_count": 1,
        "current_page": 1
    }
}

Коды ошибок:

Edge: /cards (Платежные карты)

Получение списка платежных карт

Метод требует идентификации

GET /cards

Результат:

В случае успеха сервер возвращает список значений в следующем виде:

{
    items: PaymentCard[],
}

Пример ответа

{
    "items": [
        {
            "id": 123,
            "type": "VISA",
            "number": "44****2154"
        },
        {
            "id": 250,
            "type": "MASTERCARD",
            "number": "51****3453"
        }
    ]
}

Коды ошибок:

Уведомления об изменении статуса заказа

Если при отправке заказа добавить поле notify_url, то сервер будет делать POST-запрос на этот урл при изменении статуса заказа.

Аутентификация запроса

Для аутентификации запроса передается заголовок X-Signature, содержащий подпись запроса.

Алгоритм формирования подписи — HMAC-SHA256:

Signature = HMAC_SHA256(Key, Content)
где Key — это Ваш access_token для доступа к данному API, а Content — полное тело HTTP-запроса. Подпись передается в шестнадцатиричном формате (hex).

Для аутентификации/авторизации запроса требуется локально сформировать подпись и сопоставить с переданной в заголовке.

Содержимое запроса

Содержимое запроса передается в формате JSON.

Структура содержимого следующая:

Field Type Description
type string Тип уведомления. На данный момент единственное значение - “order:status-update”. Рекомендуется все же проверять это поле, и игнорировать уведомление, если значение отличается от этого.
order_id integer Id заказа
status NotifyOrderStatusEnum Статус заказа
reason NotifyOrderReasonEnum|null Причина для статуса
courier CourierInfo|null Информация о курьере
courier_location Location|null Текущая геолокация курьера
recreated_id integer|null Id пересозданного заказа
pickup_update NotifyPickupUpdate|null Обновление по пункту отправителя
delivery_updates NotifyDeliveryUpdate[]|null Обновления по пунктам получателя
redelivery_update NotifyRedeliveryUpdate|null Обновление по пункту обратной доставки
codtoaccount_update NotifyCodToAccountUpdate|null Обновление по наложенному платежу на р/с

Поля type, order_id, status присутствуют в запросе всегда.

Поле reason присутствует в запросе только при наличии причины для статуса (актуально для “MODERATE”, “CANCELED”).

Поле courier присутствует в запросе только при назначении курьера на заказ! (То есть, при первом запросе со статусом INWORK).

Поле courier_location присутствует в запросе только когда на заказ назначен курьер.

Поле recreated_id может присутствовать в запросе только при отмене заказа (status = "CANCELED") или при статусе “курьер не найден” (status = "UNAPPLIED"), если оператор iPOST в это же время пересоздал заказ. В таком случае нужно считать новый заказ (recreated_id) замещающим текущий. Дальнейшие обновления будут приходить по новому заказу. Если пересоздания заказа не было, то поле отсутствует, заказ считается закрытым. Реализовано ввиду невозможности в настоящий момент переназначать курьера в заказе.

Поля pickup_update, delivery_updates, redelivery_update, codtoaccount_update присутствуют в запросе только при наличии обновления по соответствующим пунктам заказа.

За весь цикл работы с заказом может несколько раз приходить уведомление со значением status = "INWORK", но разными значениями пунктов (pickup_update, delivery_updates …).

Конечные статусы заказа - CANCELED (если нет recreated_id), UNAPPLIED (если нет recreated_id), DONE.

Заказ из статуса MODERATE может вновь стать активным (INWORK), отмененным (CANCELED) или “курьер не назначен” (UNAPPLIED).

Примеры

Назначен курьер на заказ

{
    "type":"order:status-update",
    "order_id":342,
    "status":"INWORK",
    "courier": {
        "idhash": "hpdjXS73QxwDCFH0TU0MYMz6hosY6AJj9/tymHya9H4",
        "name": "Соловьев Кирилл",
        "phone": "380501234567",
        "avatar": "https://api.ipost.life/path/to/image.jpg",
        "rating": 5.84,
        "orders_count": 320,
        "created_at": 1558264087
    },
    "courier_location": {
        "lat": 50.4502499,
        "long": 30.5222594
    }
}

Курьер получил отправление

{
    "type":"order:status-update",
    "order_id":342,
    "status":"INWORK",
    "pickup_update": {
        "status": "DONE"
    },
    "courier_location": {
        "lat": 50.4502499,
        "long": 30.5222594
    }
}

Курьер доставил отправление

{
    "type":"order:status-update",
    "order_id":342,
    "status":"DONE",
    "delivery_updates": [
        {
            "id": 849,
            "status": "DONE"
        }
    ],
    "courier_location": {
        "lat": 50.4502499,
        "long": 30.5222594
    }
}

В некоторых случаях может прийти уведомление без статуса назначения, сразу с завершенным заказом.

{
    "type":"order:status-update",
    "order_id":342,
    "status":"DONE",
    "courier_location": {
        "lat": 50.4502499,
        "long": 30.5222594
    }
}

Курьер отменяет заказ

{
    "type":"order:status-update",
    "order_id":342,
    "status":"MODERATE",
    "reason":"CANCELED_BY_COURIER",
    "courier_location": {
        "lat": 50.4502499,
        "long": 30.5222594
    }
}

Заказ стал на модерацию оператором.

Заказ отменен

{
    "type":"order:status-update",
    "order_id":342,
    "status":"CANCELED",
    "reason":"CANCELED_BY_COURIER",
    "courier_location": {
        "lat": 50.4502499,
        "long": 30.5222594
    }
}

Заказ полностью отменен.

Заказ отменен и пересоздан

{
    "type":"order:status-update",
    "order_id":342,
    "status":"CANCELED",
    "reason":"CANCELED_BY_COURIER",
    "recreated_id":345,
    "courier_location": {
        "lat": 50.4502499,
        "long": 30.5222594
    }
}

Типы данных

Order : Object

Field Type Description
id integer Id заказа
origin_id integer|null Id родительского заказа (только в пересозданных системой заказах)
recreated_id integer|null Id дочернего заказа (только если заказ был пересоздан)
status OrderStatusEnum Текущий статус исполнения заказа
reason OrderReasonEnum Причина текущего статуса
tariff_type OrderTariffTypeEnum Тип доставки
delivery_time integer|null Время доставки (доставить за X)
description string Краткое описание доставляемого
valuation float Суммарная объявленная стоимость посылок
length integer Габариты отправления: длина, мм
width integer Габариты отправления: ширина, мм
height integer Габариты отправления: высота, мм
weight integer Суммарный вес посылок
places integer Суммарное кол-во мест, занимаемое посылками
name string Имя и фамилия отправителя
phone string Номер телефона отправителя NB: без “+”
price float Стоимость заказа
payment_type OrderPaymentTypeEnum Способ оплаты
payment_split OrderPaymentSplit|null Разделение оплаты
custom_price float Надбавка клиента
delivery_distance integer Расстояние доставки (в метрах)
updated_at integer Дата изменения заказа
created_at integer Дата создания заказа
address OrderAddress Адрес отправителя
pickup OrderPickup Информация о заборе посылки
deliveries OrderDelivery[] Информация о доставках
redelivery OrderRedelivery Информация об обратной доставке
codtoaccount OrderCodToAccount Информация о наложенном платеже на расчетный счет
courier CourierInfo Информация о курьере
review_meta ReviewMeta Информация об отзывах

NB: Поле updated_at означает дату изменения полей заказа. Это значение не относится ко вложенным структурам.

OrderShort : Object

Field Type Description
id integer Id заказа
status OrderStatusEnum Текущий статус исполнения заказа
reason OrderReasonEnum Причина текущего статуса
tariff_type OrderTariffTypeEnum Тип доставки
description string Краткое описание доставляемого
valuation float Суммарная объявленная стоимость посылок
length integer Габариты отправления: длина, мм
width integer Габариты отправления: ширина, мм
height integer Габариты отправления: высота, мм
weight integer Суммарный вес посылок
places integer Суммарное кол-во мест, занимаемое посылками
name string Имя и фамилия отправителя
phone string Номер телефона отправителя NB: без “+”
price float Стоимость заказа
payment_type OrderPaymentTypeEnum Способ оплаты
payment_split OrderPaymentSplit|null Разделение оплаты
custom_price float Надбавка клиента
delivery_distance integer Расстояние доставки (в метрах)
updated_at integer Дата изменения заказа
created_at integer Дата создания заказа

NB: Поле updated_at означает дату изменения полей заказа. Это значение не относится ко вложенным структурам.

OrderDelivery : Object

Field Type Description
id integer Id доставки
name string Имя и фамилия получателя
phone string Номер телефона получателя NB: без “+”
time_from integer|null Время прибытия курьера - С
time_to integer|null Время прибытия курьера - До
payment_type OrderTargetPaymentTypeEnum|null Способ оплаты за доставку (актуально только для мультидоставки)
payment_amount float|null Сумма оплаты за доставку (актуально только для мультидоставки)
finance_type OrderDeliveryFinanceTypeEnum Дополнительные финансовые операции
redelivery_type OrderDeliveryRedeliveryTypeEnum Тип обратной доставки
age_check_required bool Требуется ли проверка возраста получателя (совершеннолетие)
age_check_dob string|null Точная дата рождения получателя, которую необходимо проверить.
personal_id_check_required bool Требуется ли сверка документов (ИНН)
order_number string|null Внутренний номер заказа
confirm_code integer Код подтверждения доставки
comment string|null Комментарий заказчика касательно прибытия курьера к получателю, доставки посылок
status OrderTargetStatusEnum Статус доставки
reason OrderTargetReasonEnum Причина текущего статуса
reason_custom string|null Описание причины (только при reason = REASON_CUSTOM)
updated_at integer Дата изменения полей структуры (В частности, status)
address OrderAddress Адрес получателя
parcels OrderParcel[] Посылки
images Image[] Фотографии посылок

OrderRedelivery : Object

Обратная доставка

Field Type Description
time_from integer|null Время прибытия курьера - С
time_to integer|null Время прибытия курьера - До
payment_type OrderTargetPaymentTypeEnum|null Способ оплаты за доставку (актуально только для мультидоставки)
payment_amount float|null Сумма оплаты за доставку (актуально только для мультидоставки)
confirm_code integer Код подтверждения доставки
status OrderTargetStatusEnum Статус доставки
reason OrderTargetReasonEnum Причина текущего статуса
reason_custom string|null Описание причины (только при reason = REASON_CUSTOM)
updated_at integer Дата изменения полей структуры (В частности, status)
images Image[] Фотографии посылок

OrderCodToAccount : Object

Наложенный платеж на расчетный счет

Field Type Description
time_to integer|null Крайний срок зачисления средств на расчетный счет. Значение устанавливается автоматически после доставки посылки
amount float Сумма наложенного платежа
destination string Назначение платежа
recipient_name string Название компании, получателя платежа
recipient_egrpou string Код ЕГРПОУ компании, получателя платежа
recipient_iban string IBAN компании, получателя платежа
status OrderCodToAccountStatusEnum Статус наложенного платежа
updated_at integer Дата изменения полей структуры (В частности, status)

OrderAddress : Object

Field Type Description
lat float Гео-координаты - latitude
long float Гео-координаты - longitude
city string Название города/населенного пункта
street string Название улицы (должно начинаться с “ул.”, “пр.”, и т.п.)
number string|null Номер дома/здания
flat string|null Номер квартиры/офиса

OrderPickup : Object

Field Type Description
time_from integer|null Время прибытия курьера - С
time_to integer|null Время прибытия курьера - До
comment string|null Комментарий заказчика касательно прибытия курьера к отправителю, забора посылок
status OrderTargetStatusEnum Статус забора посылок
reason OrderTargetReasonEnum Причина текущего статуса
reason_custom string|null Описание причины (только при reason = REASON_CUSTOM)
updated_at integer Дата изменения полей структуры (В частности, status)
images Image[] Фотографии посылок

OrderParcel : Object

Field Type Description
id int Id посылки
description string Описание посылки
valuation integer Объявленная стоимость посылки
weight integer Вес посылки
places integer Количество мест

PaymentCard : Object

Привязанная карта пользователя.

Field Type Description
id integer Id карты
type string Тип карты (MASTERCARD, VISA, может какой-то другой вариант)
number string Номер карты (частично засекреченный)

OrderStatusEnum : integer

Возможные значения:

Value Name Description
0 STATUS_NEW Поиск курьера
1 STATUS_INWORK Заказ находится в работе
3 STATUS_MODERATE Заказ находится на модерации
-1 STATUS_UNAPPLIED Курьер не назначен
-2 STATUS_DONE Заказ завершен
-4 STATUS_CANCELED Заказ отменен

OrderReasonEnum : integer

Возможные значения:

Value Name Description
0 REASON_NONE Нет причины/Все хорошо
1 REASON_CANCELED_BY_CLIENT Заказ отменен клиентом
2 REASON_CANCELED_BY_COURIER Заказ отменен курьером
3 REASON_TARGET_CANCELED Одна из точек (pickup, deliveries[], redelivery) была отменена, из-за чего невозможно продолжить исполнение заказа
4 REASON_MANUAL_REVIEW Заказ на ручной проверке
5 REASON_FRAUD Подозрение на мошенничество
6 REASON_COURIER_NOT_ASSIGNED Курьер не назначен
7 REASON_PAYMENT_FAILED Неудачная оплата с карты

OrderPaymentTypeEnum : integer

Value Name Description
1 PAYMENT_TYPE_BALANCE Оплата с баланса
2 PAYMENT_TYPE_SENDER Оплата отправителем
3 PAYMENT_TYPE_RECIPIENT Оплата получателем
4 PAYMENT_TYPE_SPLIT_BALANCE_AND_SENDER Разделение оплаты: с баланса и отправителем
5 PAYMENT_TYPE_SPLIT_BALANCE_AND_RECIPIENT Разделение оплаты: с баланса и получателем
6 PAYMENT_TYPE_SPLIT_SENDER_AND_RECIPIENT Разделение оплаты: отправителем и получателем
7 PAYMENT_TYPE_CARD Оплата картой
8 PAYMENT_TYPE_SPLIT_CARD_AND_SENDER Разделение оплаты: с карты и отправителем
9 PAYMENT_TYPE_SPLIT_CARD_AND_RECIPIENT Разделение оплаты: с карты и получателем

OrderPaymentSplit : Object

Этот объект динамический - количество полей в нем может меняться. Описание возможных полей:

Field Type Description
balance float|null Сумма оплаты с баланса
card float|null Сумма оплаты с карты
sender float|null Сумма оплаты отправителем
recipient float|null Сумма оплаты получателем

OrderTariffTypeEnum : integer

Возможные значения:

Value Name Description
1 INCITY Доставка по городу
2 INTERCITY Междугородняя доставка
3 MULTI_INCITY Мульти-доставка (несколько получателей) по городу
4 MULTI_INTERCITY Междугородняя мульти-доставка (несколько получателей)

OrderTargetStatusEnum : integer

Возможные значения:

Value Name Description
0 STATUS_NONE Новое назначение / Курьер еще не приступил к этому назначению
1 STATUS_ONWAY Курьер в пути к точке назначения
2 STATUS_WAIT Курьер ожидает отправителя/получателя
3 STATUS_DONE Назначение завершено
4 STATUS_CANCELED Назначение отменено (отмена клиентом, отказ, отправитель/получатель не вышел на связь)

OrderTargetReasonEnum : integer

Возможные значения:

Value Name Description
0 REASON_NONE Нет причины/Не задано
1 REASON_CUSTOM Другая причина (в reason_custom)
2 REASON_REFUSED По назначению получен отказ (отправитель/получатель отказался отправить/получить посылку)
3 REASON_CLIENT_CANCELED Назначение отменено клиентом
4 REASON_CALL_NOT_ANSWERED Курьер не дозвонился отправителю/получателю. / Отправитель/получатель не вышел на связь
5 REASON_AGE_CHECK_NOT_PASSED Получатель не прошел проверку возраста (совершеннолетие) // применяется только к причине в пункте ДОСТАВКИ
6 REASON_PERSONAL_ID_CHECK_NOT_PASSED Получатель не прошел сверку документов (ИНН) // применяется только к причине в пункте ДОСТАВКИ

OrderTargetPaymentTypeEnum : integer

Value Name Description
1 PAYMENT_TYPE_BALANCE Оплата с баланса
2 PAYMENT_TYPE_SENDER Оплата отправителем
3 PAYMENT_TYPE_RECIPIENT Оплата получателем
7 PAYMENT_TYPE_CARD Оплата с карты

OrderCodToAccountStatusEnum : integer

Возможные значения:

Value Name Description
0 STATUS_NONE Задача не начата / Курьер еще не завершил доставку посылки
1 STATUS_AWAITING Ожидание зачисления наложенного платежа
2 STATUS_DONE Наложенный платеж успешно зачислен
3 STATUS_CANCELED Наложенный платеж отменен (например, в случае, если доставка была отменена / получатель отказался принять посылку и т.п.)

OrderDeliveryFinanceTypeEnum : integer

Дополнительные финансовые операции по доставке.

Возможные значения:

Value Name Description
0 FINANCE_TYPE_NONE Нет доп. фин. операций
1 FINANCE_TYPE_REDEEM_BALANCE Выкупить посылку у отправителя, стоимость выкупа будет компенсирована с баланса клиента
2 FINANCE_TYPE_REDEEM_RECIPIENT Выкупить посылку у отправителя, стоимость выкупа компенсирует получатель
3 FINANCE_TYPE_COD_BALANCE Наложенный платеж: перевод суммы на счет клиента
4 FINANCE_TYPE_COD_REDELIVERY Наложенный платеж: доставить сумму обратно отправителю
6 FINANCE_TYPE_COD_CARD Наложенный платеж: перевод суммы на привязанную карту клиента.

OrderDeliveryRedeliveryTypeEnum : integer

Возможные значения:

Value Name Description
0 REDELIVERY_TYPE_NONE Без обратной доставки
1 REDELIVERY_TYPE_REGULAR Обычная обратная доставка по тарифу
2 REDELIVERY_TYPE_COD Обратная доставка наложенного платежа (совместно с OrderDeliveryFinanceTypeEnum(FINANCE_TYPE_COD_REDELIVERY))

CourierInfo : Object

Field Type Description
idhash string Уникальный хеш (ID) курьера
name string Имя и фамилия курьера
phone string Номер телефона курьера
avatar string URL аватара курьера
rating float Рейтинг курьера
orders_count integer Кол-во доставок курьера
created_at integer Дата регистрации курьера

CourierReview : Object

Field Type Description
author_type CourierReviewAuthorTypeEnum Тип пользователя оставившего отзыв
rating integer Рейтинг (от 1 до 5)
text string|null Текст отзыва
created_at integer Дата создания отзыва
updated_at integer Дата изменения отзыва

CourierReviewAuthorTypeEnum : integer

Возможные значения:

Value Name Description
1 TYPE_CLIENT Клиент
2 TYPE_RECIPIENT Получатель

Image : Object

Field Type Description
id integer Id изображения
url string URL изображения

Review : Object

Field Type Description
order_id integer ID заказа
target_id integer|null ID доставки. Если null, то отзыв оставил клиент, иначе оставил получатель.
rating integer Рейтинг (от 1 до 5)
text string|null Текст отзыва
created_at integer Дата создания отзыва
updated_at integer Дата изменения отзыва

ReviewMeta : Object

Field Type Description
avg_rating float Средняя оценка
count integer Количество отзывов

Location : Object

Field Type Description
lat float Гео-координаты курьера latitude
long float Гео-координаты курьера longitude

NotifyOrderStatusEnum : string

Value Description
INWORK Заказ принят в работу
MODERATE Заказ находится на модерации (обычно с причиной)
DONE Заказ успешно завершен
UNAPPLIED Не найдено курьера
CANCELED Заказ отменен

NotifyOrderReasonEnum : string

Value Description
CANCELED_BY_CLIENT Клиент хочет отменить заказ
CANCELED_BY_COURIER Курьер хочет отменить заказ
TARGET_CANCELED Один из пунктов доставки отменен (точная причина отмены пункта - в заказе)
MANUAL_REVIEW Заказ на ручной проверке
FRAUD Подозрение на мошенничество
COURIER_NOT_ASSIGNED Курьер не назначен
PAYMENT_FAILED Неудачная оплата с карты

NotifyPickupUpdate : Object

Field Type Description
status NotifyOrderTargetStatusEnum Статус
reason NotifyOrderTargetReasonEnum|null Причина статуса
reason_custom string|null Другая причина статуса

NB: поле reason присутствует только при наличии причины установки статуса (актуально для “CANCELED”). NB: поле reason_custom присутствует только если reason = "CUSTOM".

NotifyDeliveryUpdate : Object

Field Type Description
id integer Id пункта получателя (OrderDelivery.id)
status NotifyOrderTargetStatusEnum Статус
reason NotifyOrderTargetReasonEnum|null Причина статуса
reason_custom string|null Другая причина статуса

NB: поле reason присутствует только при наличии причины установки статуса (актуально для “CANCELED”). NB: поле reason_custom присутствует только если reason = "CUSTOM".

NotifyRedeliveryUpdate : Object

Field Type Description
status NotifyOrderTargetStatusEnum Статус
reason NotifyOrderTargetReasonEnum|null Причина статуса
reason_custom string|null Другая причина статуса

NB: поле reason присутствует только при наличии причины установки статуса (актуально для “CANCELED”). NB: поле reason_custom присутствует только если reason = "CUSTOM".

NotifyCodToAccountUpdate : Object

Field Type Description
status NotifyCodToAccountStatusEnum Статус

NotifyOrderTargetStatusEnum : string

Value Description
NONE Задача не начата (соответствует OrderTargetStatusEnum::STATUS_NONE)
ONWAY Курьер в пути к точке назначения (соответствует OrderTargetStatusEnum::STATUS_ONWAY)
WAIT Курьер ожидает отправителя/получателя (соответствует OrderTargetStatusEnum::STATUS_WAIT)
DONE Назначение завершено (соответствует OrderTargetStatusEnum::STATUS_DONE)
CANCELED Назначение отменено (отмена клиентом, отказ, отправитель/получатель не вышел на связь) (соответствует OrderTargetStatusEnum::STATUS_CANCELED)

NotifyOrderTargetReasonEnum : string

Value Description
CUSTOM Другая причина. Указана в reason_custom. (соответствует OrderTargetReasonEnum::REASON_CUSTOM)
REFUSED По назначению получен отказ (отправитель/получатель отказался отправить/получить посылку) (соответствует OrderTargetReasonEnum::REASON_REFUSED)
CLIENT_CANCELED Назначение отменено клиентом (соответствует OrderTargetReasonEnum::REASON_CLIENT_CANCELED)
CALL_NOT_ANSWERED Курьер не дозвонился отправителю/получателю. / Отправитель/получатель не вышел на связь (соответствует OrderTargetReasonEnum::REASON_CALL_NOT_ANSWERED)
AGE_CHECK_NOT_PASSED Получатель не прошел проверку возраста (совершеннолетие) // применяется только к причине в пункте ДОСТАВКИ (соответствует OrderTargetReasonEnum::REASON_AGE_CHECK_NOT_PASSED)
PERSONAL_ID_CHECK_NOT_PASSED Получатель не прошел сверку документов (ИНН) // применяется только к причине в пункте ДОСТАВКИ (соответствует OrderTargetReasonEnum::REASON_PERSONAL_ID_CHECK_NOT_PASSED)

NotifyCodToAccountStatusEnum : string

Value Description
NONE Задача не начата / Курьер еще не завершил доставку посылки (соответствует OrderCodToAccountStatusEnum::STATUS_NONE)
AWAITING Ожидание зачисления наложенного платежа (соответствует OrderCodToAccountStatusEnum::STATUS_AWAITING)
DONE Наложенный платеж успешно зачислен (соответствует OrderCodToAccountStatusEnum::STATUS_DONE)
CANCELED Наложенный платеж отменен. Например, в случае, если доставка была отменена / получатель отказался принять посылку и т.п. (соответствует OrderCodToAccountStatusEnum::STATUS_CANCELED)

Данный объект представляет словарь (Map<String, String>) ссылок навигации перечисления.

Возможные пары:

Field Description
self Ссылка на текущую страницу
prev Ссылка на предыдущую страницу
next Ссылка на следующую страницу
first Ссылка на первую страницу
last Ссылка на последнюю страницу

Все ключи, кроме self могут отсутствовать. Например, если все элементы укладываются в одну страницу, будет существовать только self. В случае, если следующей или предыдущей страницы нет, будут отсутствовать nextlast) или prevfirst) соответственно.

Данный объект представляет словарь (Map<String, integer>) метаинформации перечисления.

Возможные пары:

Field Description
total_count Кол-во элементов в перечислении
page_count Кол-во страниц в навигации по перечислению
current_page Текущая страница навигации по перечислению

Errors

Внимание: В данный момент коды ошибок не стандартизированны, и могут измениться в ходе разработки API. Потому рекомендуется создать список констант на клиенте и использовать их при разработке клиента, чтоб в дальнейшем без проблем можно было их изменить.

Список кодов ошибок

Код Имя Описание Общая?
0 COMMON_ERROR Общая ошибка +
1 API_VERSION_CLOSED_ERROR Версия API закрыта. +
44 NOT_FOUND_ERROR Запрашиваемая сущность не известна. +
100 VALIDATION_ERROR Ошибка валидации сущности. +
104 NOT_ENOUGH_BALANCE_ERROR Недостаточно средств на балансе -
105 BALANCE_NEGATIVE_ERROR Баланс меньше нуля -
106 NOT_ALLOWED_BY_CONDITION_ERROR Действие не разрешено по условию ?
109 NO_MATCHING_TARIFF_FOUND_ERROR Не найден тариф для заказа. Возможно, слишком большой размер посылки/вес груза. -
114 IMPERMISSIBLE_VALUATION_ERROR Недопустимая оценочная стоимость -
116 ORDER_ALREADY_INWORK_ERROR Статус заказа был изменен, order.status != STATUS_NEW -
117 ADDRESS_OUT_OF_MAP_BOUNDS_ERROR Адрес находится за допустимыми пределами -
118 PROPERTY_IS_READONLY_ERROR Нельзя изменить свойство по каким-либо причинам -
123 IMPERMISSIBLE_REDEEM_VALUATION_ERROR Недопустимая сумма выкупа посылки -
124 IMPERMISSIBLE_DELIVERY_TIME_ERROR Время доставки слишком малое для этого маршрута -
125 IMPERMISSIBLE_REDELIVERY_TIME_ERROR Время обратной доставки слишком малое для этого маршрута -
128 IMPERMISSIBLE_CODTOACCOUNT_VALUATION_ERROR Недопустимая сумма наложенного платежа на расчетный счет -
130 IMPERMISSIBLE_AGE_CHECK_DOB_ERROR Указанная дата рождения получателя не соответствует совершеннолетию на дату доставки. -
131 COMMENT_REQUIRED_ERROR Требуется добавить комментарий -
132 OPTION_DISABLED_ERROR Опция не доступна -
135 VOUCHER_NOT_FOUND_ERROR Ваучер не найден -
136 CANNOT_PAY_WITH_BALANCE_WHEN_VOUCHER_USED_ERROR Нельзя произвести оплату заказа с баланса при использовании ваучера -
139 PAYMENT_CARD_NOT_FOUND_ERROR Платежная карта не найдена -
140 PAYMENT_FAILED_ERROR Неуспешный платеж -
142 ORDER_UPDATE_RESTRICTION_ERROR Ограничение редактирования заказа -

Ошибка 0

Когда приходит эта ошибка, нужно просто показать сообщение из нее (message) пользователю.

Ошибка 1

Запрашиваемая версия API закрыта. Необходимо обновить приложение. Можно показать пользователю поп-ап с текстом типа “Для продолжения работы требуется обновить приложение” и кнопочкой “Обновить”, нажатие на которую ведет на источник установки приложения (e.g. плей-маркет).

Ошибка 100

С этой ошибкой есть дополнительное поле - errors

[
    {
        "field": {field_name},
        "message": {error_message}
    }
]

где {field_name} - (string) имя поля, {error_message} - (string) текстовое описание ошибки.

Ошибки 104, 105

С этой ошибкой есть дополнительное поле:

Ошибка 109

С этой ошибкой есть дополнительные поля:

Ошибка 114

С этой ошибкой есть дополнительные поля:

Ошибка 117

Допустимые пределы карты на данный момент - Киев и Киевская область (по версии Google Maps).

С этой ошибкой есть дополнительные поля:

Ошибка 123

С этой ошибкой есть дополнительные поля:

Ошибка 124

С этой ошибкой есть дополнительные поля:

Ошибка 125

С этой ошибкой есть дополнительные поля:

Ошибка 128

С этой ошибкой есть дополнительные поля:

Важная заметка касательно обновления 1.10

В обновлении 1.10 был переработан механизм определения тарифа для заказа. Теперь ошибка 119 будет встречаться только при создании мульти-заказа.

В виду этого изменения было убрано поле delivery_type из заказа. Вместо него теперь есть поле tariff_type, определяющее тип тарифа, который был применен к конкретному заказу. Для создания заказа типа “доставить за XX минут” можно использовать новое поле delivery_time.

Для обратной совместимости значение delivery_type все еще обрабатывается в форме и возвращается методами получения списка заказов/информации о заказе, но с корректировками: * в форме создания заказа: - значения DELIVERY_TYPE_REGULAR, DELIVERY_TYPE_INTERCITY и DELIVERY_TYPE_MULTI игнорируются. Тип тарифа (по городу, межгород, мульти) определяется автоматически на основании данных в запросе. - значения DELIVERY_TYPE_FAST30, DELIVERY_TYPE_FAST60, DELIVERY_TYPE_FAST90, DELIVERY_TYPE_FAST120 преобразовываются в соответствующее значение delivery_time, тип тарифа определяется автоматически на основании данных в запросе. * в методах получения списка заказов и подробной информации о заказе данное значение частично эмулируется.

В будущих версиях API поддержка значения delivery_type будет окончательно прекращена. Рекомендуется как можно скорее начать использовать новые значения tariff_type и delivery_time.

На тестовом сервере поле delivery_type не поддерживается.

Changelog

1.20

1.19

1.18

1.17

1.16

1.15

1.14

1.13

1.12

1.11

1.10

1.9

1.8

1.7

1.6

1.5

1.4

1.3

1.2.2

1.2.1

1.2

1.1