iPost REST API
API Version: 1.20
- iPost REST API
- Getting started
- Authentication
- Edges
- Edge: /orders (Заказы)
- Получение всех заказов
- Получение подробной информации по заказу
- Создание заказа
- FormOrderAddress : Object
- FormOrderPickup : Object
- FormOrderDelivery : Object
- FormOrderParcel : Object
- FormOrderRedelivery : Object
- FormOrderCodToAccount : Object
- FormOrderPaymentTypeEnum : integer
- FormOrderPaymentSplit : Object
- FormOrderTargetPaymentTypeEnum : integer
- FormOrderDeliveryFinanceTypeEnum : integer
- FormOrderDeliveryRedeliveryTypeEnum : integer
- Разьяснения по оплате
- Редактирование существующего заказа
- Отмена заказа
- Получить стикер для доставки
- Оставить отзыв об исполнении заказа
- Изменить отзыв об исполнении заказа
- Удалить отзыв об исполнении заказа
- Получить отзывы об исполнении заказа
- Получить локацию курьера
- Получить все отзывы о курьере
- Отзывы на заказы
- Edge: /cards (Платежные карты)
- Уведомления об изменении статуса заказа
- Типы данных
- Order : Object
- OrderShort : Object
- OrderDelivery : Object
- OrderRedelivery : Object
- OrderCodToAccount : Object
- OrderAddress : Object
- OrderPickup : Object
- OrderParcel : Object
- PaymentCard : Object
- OrderStatusEnum : integer
- OrderReasonEnum : integer
- OrderPaymentTypeEnum : integer
- OrderPaymentSplit : Object
- OrderTariffTypeEnum : integer
- OrderTargetStatusEnum : integer
- OrderTargetReasonEnum : integer
- OrderTargetPaymentTypeEnum : integer
- OrderCodToAccountStatusEnum : integer
- OrderDeliveryFinanceTypeEnum : integer
- OrderDeliveryRedeliveryTypeEnum : integer
- CourierInfo : Object
- CourierReview : Object
- CourierReviewAuthorTypeEnum : integer
- Image : Object
- Review : Object
- ReviewMeta : Object
- Location : Object
- NotifyOrderStatusEnum : string
- NotifyOrderReasonEnum : string
- NotifyPickupUpdate : Object
- NotifyDeliveryUpdate : Object
- NotifyRedeliveryUpdate : Object
- NotifyCodToAccountUpdate : Object
- NotifyOrderTargetStatusEnum : string
- NotifyOrderTargetReasonEnum : string
- NotifyCodToAccountStatusEnum : string
- NavLinks : Object
- NavMeta : Object
- Errors
- Важная заметка касательно обновления 1.10
- Changelog
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 домены не принимаются. подробнее |
- 1 Если указать значение в данном поле, то время доставки будет считаться относительным - “доставить за X”, где X - кол-во секунд, кратное 1800 (30 минут), но не менее 1800 (30 минут) и не более 10800 (3 часа). При этом поля
time_from
иtime_to
в объектахFormOrderPickup
,FormOrderDelivery
иFormOrderRedelivery
будут проигнорированны. Данное поле возможно установить только в том случае, если в заказе указан только один пункт доставки (order.deliveries
). - 2 Если в заказе более 1 пункта доставки, тогда поле обязательно. В других случаях, если значение не указано, оно подставляется из описания посылки.
- 3 Если не указывать, значения будут взяты из профиля пользователя.
- 4 Если в заказе более 1 пункта доставки, данное поле не обязательно и игнорируется. В этом случае необходимо заполнить аналогичное поле в доставке (
FormOrderDelivery
). - 5 Данное поле может быть установлено только если в заказе задан только один пункт доставки.
- 6 Значение обязательно в случае, если есть наложенный платеж на расчетный счет. В других случаях игнорируется.
- 7 Значение обязательно в случае, если оплата доставки картой. В других случаях игнорируется.
ВНИМАНИЕ: в некоторых случаях (если клиент — бизнес) при использовании ваучера вместе с оплатой с баланса (включая разделение платежа) может вернуться ошибка 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 | Осторожно, злой консьерж! | Комментарий заказчика касательно прибытия курьера к отправителю, забора посылок |
- 1 В случае, если в заказе установлено значение
delivery_time
, то поляtime_from
иtime_to
заполнять не нужно. Они будут проигнорированны и выставленны другие после принятия заказа курьером.
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: список/массив объектов |
- 1 В случае, если в заказе установлено значение
delivery_time
, то поляtime_from
иtime_to
заполнять не нужно. Они будут проигнорированны и выставленны другие после принятия заказа курьером. - 2 Поле требуется только при мультидоставке - когда способ оплаты в форме заказа не указан (т.е. для каждого получателя оплата определяется отдельно.). В ином случае оно игнорируется, используется значение
order.payment_type
. - 3 Может быть установлено только одно из двух полей -
finance_type
илиredelivery_type
. (Т.е. второе должно быть 0 или вовсе отсутствовать). - 4 В настоящее время возможность оформлять обартную доставку для межгорода закрыта!
- 5 Поле требуется только при наложенном платеже на карту (если
finance_type
=FormOrderDeliveryFinanceTypeEnum::FINANCE_TYPE_COD_CARD
).
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 |
- 1 В случае, если в заказе установлено значение
delivery_time
, то поляtime_from
иtime_to
заполнять не нужно. Они будут проигнорированны и выставленны другие после принятия заказа курьером. - 2 Поле требуется только при мультидоставке и только если хотя бы у одного из получателей указана обратная доставка, в ином случае оно игнорируется, используется значение
order.payment_type
. Допускаются только следующие значения:PAYMENT_TYPE_RECIPIENT
,PAYMENT_TYPE_BALANCE
,PAYMENT_TYPE_CARD
.
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% с округлением каждой части вверх до целой у.д.е.
Примеры:
- 40 у.д.е. получателем и остальное отправителем:
payment_type = PAYMENT_TYPE_SPLIT_SENDER_AND_RECIPIENT payment_split = {recipient: 40}
- 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 | Множитель стоимости доставки (пиковое время, погодные условия и т.п.) |
price
иprice_parts
могут бытьnull
, когда не хватает данных для расчета стоимости- поле
min_delivery_time
равноnull
при наличии более одного пункта доставки, а так же если не хватает данных для расчета времени доставки. - поле
tariff_type
может бытьnull
, если не хватает данных для определения типа доставки.
Минимальное время доставки:
Система определяет для заказа минимальное время доставки исходя из расстояния.
Время доставки — это значение, указанное в delivery_time
или разница между deliveries[].time_to
и pickup.time_from
.
В случае, если в заказе есть обратная доставка, то это так же разница между redelivery.time_to
и deliveries[].time_from
.
Коды ошибок:
- 44 — Нет привязанной карты (в случае наложенного платежа на карту клиента)
- 104 — Недостаточно средств на балансе
- 105 — Баланс ниже нуля
- 109 — Для заказа не нашлось подходящего тарифа
- 114 — Cумма оценочной стоимости больше допустимой
- 117 — Указаный адрес находится вне допустимых пределах карты
- 123 — Cумма оценочной стоимости для выкупа больше допустимой
- 124 — Время доставки слишком малое для этого маршрута
- 125 — Время обратной доставки слишком малое для этого маршрута
- 128 — Cумма оценочной стоимости для наложенного платежа на расчетный счет больше допустимой
- 130 — Значение
age_check_dob
не соответствует совершеннолетию на дату доставки. - 132 — Опция отключена. В поле
message
ошибки есть текстовое описание - 135 — Ваучер не найден
- 136 — Нельзя произвести оплату с баланса при использовании ваучера
- 139 — Платежная карта не найдена
- 140 — Неуспешный платеж
- + общие ошибки
Редактирование существующего заказа
Метод требует идентификации
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 |
Баланс пользователя после запроса |
Коды ошибок:
- 44 — в запросе указанные неизвестные или не соответствующие заказу id доставок или посылок
- 104 — Недостаточно средств на балансе
- 105 — Баланс ниже нуля
- 106 — запрос пытается отредактировать завершенную точку забора/доставки (
STATUS_DONE
,STATUS_CANCELED
) - 112 — статус у заказа не
STATUS_NEW
,STATUS_INWORK
илиSTATUS_MODERATE
- 114 — Cумма оценочной стоимости больше допустимой
- 116 — запрос пытается отредактировать добавочную стоимость доставки, когда заказ не в статусе
STATUS_NEW
- 118 — в заказе есть несколько получателей, или значение
payment_type
не соответствует одному изPAYMENT_TYPE_BALANCE
,PAYMENT_TYPE_SENDER
,PAYMENT_TYPE_RECIPIENT
- 123 — Cумма оценочной стоимости для выкупа больше допустимой
- 128 — Cумма оценочной стоимости для наложенного платежа на расчетный счет больше допустимой
- 132 — Опция отключена. В поле
message
ошибки есть текстовое описание - 140 — Неуспешный платеж
- 142 — Ограничение редактирования заказа: в запросе указаны габариты/вес свыше допустимого в тарифе или суммарная разница изменения объявленной стоимости выше определенного лимита (лимит лучше уточнять у менеджера).
- + общие ошибки
Отмена заказа
Метод требует идентификации
Для отмены заказа:
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
без тела ответа.
Коды ошибок:
106
- нельзя оставить отзыв, т.к. курьер не назначен или заказ отменен клиентом.131
- требуется добавить комментарий.- + общие ошибки
Изменить отзыв об исполнении заказа
Метод требует идентификации
Является синонимом 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
.
Коды ошибок:
- 44 — Заказ с таким id не найден
- + общие ошибки
Получить все отзывы о курьере
Метод требует идентификации
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
}
}
Коды ошибок:
106
- отзывы курьера не доступны, заказ находится не в работе.- + общие ошибки
Отзывы на заказы
Получить все отзывы на заказы
Метод требует идентификации
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 ) |
NavLinks : Object
Данный объект представляет словарь (Map<String, String>
) ссылок навигации перечисления.
Возможные пары:
Field | Description |
---|---|
self | Ссылка на текущую страницу |
prev | Ссылка на предыдущую страницу |
next | Ссылка на следующую страницу |
first | Ссылка на первую страницу |
last | Ссылка на последнюю страницу |
Все ключи, кроме self
могут отсутствовать. Например, если все элементы укладываются в одну страницу, будет существовать только self
. В случае, если следующей или предыдущей страницы нет, будут отсутствовать next
(и last
) или prev
(и first
) соответственно.
NavMeta : Object
Данный объект представляет словарь (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
С этой ошибкой есть дополнительное поле:
balance
(float) - текущая сумма на балансе пользователя
Ошибка 109
С этой ошибкой есть дополнительные поля:
maxLength
(integer) - Максимальная длина (мм) отправления NB: Это значение может изменяться!maxWidth
(integer) - Максимальная ширина (мм) отправления NB: Это значение может изменяться!maxHeight
(integer) - Максимальная высота (мм) отправления NB: Это значение может изменяться!maxWeight
(integer) - Максимальный вес (г) отправления NB: Это значение может изменяться!
Ошибка 114
С этой ошибкой есть дополнительные поля:
max
(float) - Максимальное допустимая сумма оценочной стоимости. NB: Это значение может изменяться!
Ошибка 117
Допустимые пределы карты на данный момент - Киев и Киевская область (по версии Google Maps).
С этой ошибкой есть дополнительные поля:
reason
(string|null) - Текстовое описание ошибки, которое можно показать пользователю. NB: Этого поля может вовсе не быть!lat
(float) - Гео-координаты адреса - latitude NB: Это значение может изменяться!long
(float) - Гео-координаты адреса - longitude NB: Это значение может изменяться!
Ошибка 123
С этой ошибкой есть дополнительные поля:
max
(float) - Максимальное допустимая сумма для выкупа посылки. NB: Это значение может изменяться!
Ошибка 124
С этой ошибкой есть дополнительные поля:
min
(integer) - Минимальное допустимое время доставки. NB: Это значение может изменяться!
Ошибка 125
С этой ошибкой есть дополнительные поля:
min
(integer) - Минимальное допустимое время обратной доставки. NB: Это значение может изменяться!
Ошибка 128
С этой ошибкой есть дополнительные поля:
max
(float) - Максимальное допустимая сумма наложенного платежа. NB: Это значение может изменяться!
Важная заметка касательно обновления 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
- Добавлено поле
id
в структуруOrderParcel
. - Добавлена ошибка
142
(Ограничение редактирования заказа). - Метод редактирования объявленной стоимости (
PATCH /orders/{id}
) расширен до частичного редактирования заказа.
1.19
- Добавлен метод получения стикера для доставки
GET /stickers/{id}
.
1.18
- При создании заказа с мульти-доставкой (несколько получателей) теперь можно указывать пункты доставки в разных населенных пунктах.
- Значение
MULTI
переименовано вMULTI_INCITY
в перечисленииOrderTariffTypeEnum
. - Добавлено значение
MULTI_INTERCITY
в перечислениеOrderTariffTypeEnum
. - Удалена ошибка
119
(Адрес отправителя и адрес получателя находятся в разных населенных пунктах).
1.17
- Добавлено поле
recreated_id
в структуруOrder
.
1.16
- Добавлено поле
payment_card_id
в запрос метода создания заказа (POST /orders
). Так же добавлены ошибки139
(Платежная карта не найдена) и140
(Неуспешный платеж). - Добавлено значение
REASON_PAYMENT_FAILED
в перечислениеOrderReasonEnum
. - Добавлено значение
PAYMENT_FAILED
в перечислениеNotifyOrderReasonEnum
. - Добавлено значение
PAYMENT_TYPE_CARD
в перечисленияOrderTargetPaymentTypeEnum
иFormOrderTargetPaymentTypeEnum
. - Добавлены значения
PAYMENT_TYPE_CARD
,PAYMENT_TYPE_SPLIT_CARD_AND_SENDER
,PAYMENT_TYPE_SPLIT_CARD_AND_RECIPIENT
в перечисленияOrderPaymentTypeEnum
иFormOrderPaymentTypeEnum
. - Добавлено поле
card
в структуруFormOrderPaymentSplit
.
1.15
- В структуру
Review
добавлено полеorder_id
. - Добавлен метод получения всех отзывов на заказы
GET /order-reviews
. - Добавлен метод вывода списка привязанных платежных карт (
GET /cards
) - Добавлено поле
cod_card_id
в структуруFormOrderDelivery
. - Добавлена структура
PaymentCard
.
1.14
- В структуре
Review
добавлено полеtarget_id
. - В структуре
Order
удалено полеreview
и добавлено полеreview_meta
. - Добавлена структура
ReviewMeta
. - Добавлен метод получения отзывов о выполнении заказа (
GET /orders/{id}/reviews
). - Добавлен метод получения всех отзывов о курьере (
GET /orders/{id}/courier/reviews
). - Добавлена структура
CourierReview
. - Добавлено перечисление
CourierReviewAuthorTypeEnum
.
1.13
- Максимальное значение
delivery_time
в методе создания заказа (POST /orders
) увеличено до 10800 (3 часа)
1.12
- Добавлено поле
voucher_code
в запрос метода создания заказа (POST /orders
). Так же добавлены ошибки135
(Ваучер не найден) и136
(Нельзя произвести оплату заказа с баланса при использовании ваучера). - Добавлена аутентификация уведомлений об изменении статуса заказа (на
notify_url
)
1.11
- Добавлена проверка возраста получателя:
- поле
personal_id_check_required
в структуреFormOrderDelivery
@ метод создания заказа (POST /orders
) - поле
personal_id_check_value
в структуреFormOrderDelivery
@ метод создания заказа (POST /orders
) - поле
personal_id_check_required
в структуреOrderDelivery
- значение
6
(REASON_PERSONAL_ID_CHECK_NOT_PASSED) в перечислениеOrderTargetReasonEnum
причин статуса пункта доставки - значение
PERSONAL_ID_CHECK_NOT_PASSED
в перечислениеNotifyOrderTargetReasonEnum
причин статуса пункта доставки в уведомлении наnotify_url
- поле
1.10
- Изменения в методе создания заказа (
POST /orders
):- удалено поле
delivery_type
из формы запроса - добавлено поле
delivery_time
в форму запроса - удалены значения
delivery_time_from
иdelivery_time_to
из структуры ответа при запросе сpreview=1
- добавлено значение
tariff_type
в структуру ответа при запросе сpreview=1
- ошибка
119
теперь актуальна только для мульти-доставок
- удалено поле
- В методе изменения добавочной стоимости существующего заказа (
PATCH /orders/{id}
) изменены условия — в заказе должен быть только один пункт доставки (вместо проверкиdelivery_type == DELIVERY_TYPE_MULTI
, т.к. полеdelivery_type
удалено). - В структуре
Order
удалено полеdelivery_type
и добавлены поляtariff_type
иdelivery_time
. - В структуре
OrderShort
удалено полеdelivery_type
и добавлено полеtariff_type
. - Удалено перечисление
OrderDeliveryTypeEnum
и добавлено новое —OrderTariffTypeEnum
.
1.9
- В методах создания/обновления отзыва об исполнении заказа (
POST /orders/{id}/review
иPATCH /orders/{id}/review
) полеtext
стало условно обязательным, добавлена ошибка131
. - Удалено значение
5
(FINANCE_TYPE_REDEEM_RECIPIENT_NORESERVE) из перечисленияOrderDeliveryFinanceTypeEnum
и из перечисленияFormOrderDeliveryFinanceTypeEnum
, таким образом, выкупа отправления с компенсацией получателем без гарантирования (со стороны клиента) более нет. Если будет передано значение5
, оно будет неявно преобразовано в2
(FINANCE_TYPE_REDEEM_RECIPIENT). - В методе создания заказа (
POST /orders
) отключены опции наложенного платежа на баланс и карту (значения3
и6
поляfinance_type
вFormOrderDelivery
). - Добавлена ошибка
132
.
1.8
- Добавлено поле
age_check_dob
в формуFormOrderDelivery
метода создания заказа (POST /orders
). - Добавлена ошибка
130
в метод создания заказа (POST /orders
). - Добавлено поле
age_check_dob
в структуруOrderDelivery
.
1.7
- Теперь в случаях, когда не был вовремя назначен курьер, заказ переходит на модерирование вместо конечного статуса
UNAPPLIED
. После этого курьер может быть назначен вручную (переход в статусINWORK
), или заказ может быть отменен (переход в статусCANCELED
), или подтвержден, что курьер не найден (переход в статусUNAPPLIED
). В последних двух случаях заказ может быть пересоздан сrecreated_id
в уведомлении. - Добавлено значение
6
в перечислениеOrderReasonEnum
. - Добавлено значение
COURIER_NOT_ASSIGNED
в перечислениеNotifyOrderReasonEnum
.
1.6
- Добавлено поле
courier_location
в запросе наnotify_url
.
1.5
- Добавлены значения
4
и5
в перечислениеOrderReasonEnum
. - Добавлены значения
MANUAL_REVIEW
иFRAUD
в перечислениеNotifyOrderReasonEnum
. - Изменена максимальная длина поля
notify_url
в запросе создания заказаPOST /orders
до 1024.
1.4
- В метод создания заказа (
POST /orders
) добавлена ошибка128
. - Добавлено описание ошибки
128
. - Добавлена проверка возраста получателя:
- поле
age_check_required
в структуреFormOrderDelivery
- поле
age_check_required
в структуреOrderDelivery
- значение
5
(REASON_AGE_CHECK_NOT_PASSED) в перечислениеOrderTargetReasonEnum
причин статуса пункта доставки - значение
AGE_CHECK_NOT_PASSED
в перечислениеNotifyOrderTargetReasonEnum
причин статуса пункта доставки в уведомлении наnotify_url
- поле
1.3
- Добавлены поля
pickup_update
,delivery_updates
,redelivery_update
,codtoaccount_update
в запросе наnotify_url
. - Добавлены типы
NotifyPickupUpdate
,NotifyDeliveryUpdate
,NotifyRedeliveryUpdate
,NotifyCodToAccountUpdate
,NotifyOrderStatusEnum
,NotifyOrderReasonEnum
,NotifyOrderTargetStatusEnum
,NotifyOrderTargetReasonEnum
,NotifyCodToAccountStatusEnum
. - Добавлены перечисления
NotifyPickupUpdate
,NotifyDeliveryUpdate
,NotifyRedeliveryUpdate
,NotifyCodToAccountUpdate
. - Добавлены примеры запросов на
notify_url
.
1.2.2
- Добавлено поле
origin_id
в структуруOrder
. - Добавлено поле
recreated_id
в запросе наnotify_url
.
1.2.1
- Добавлено поле
idhash
в структуруCourierInfo
. - Добавлено поле
courier
в запросе наnotify_url
.
1.2
- Добавлено значение
7
в перечислениеOrderDeliveryFinanceTypeEnum
- Добавлена структура
OrderCodToAccount
в структуруOrder
(полеcodtoaccount
) - Добавлено перечисление
OrderCodToAccountStatusEnum
- Изменения в методе создания заказа (
POST /orders
):- Добавлено поле запроса
codtoaccount
- Добавлена структура
FormOrderCodToAccount
- Добавлено значение
7
в перечисление формыFormOrderDeliveryFinanceTypeEnum
, а так же в этой секции добавлен разъяснительный текст касательно этого значения.
- Добавлено поле запроса
- Удалено поле
company_name
из структурыCourierInfo
, т.к. не используется. - Добавлено поле
order_number
в формеFormOrderDelivery
методаPOST /orders
. - Добавлено поле
order_number
в структуруclient::OrderDelivery
.
1.1
- Добавлено поле
notify_url
в тело запросаPOST /orders
.