API

       

Внешнее API

Адреса серверов:

Авторизация и общая информация

Сервер ожидает заголовки Accept: application/json и Content-Type: application/json для запросов и ответов в формате JSON

В рамках интеграции клиенту предоставляется токен авторизации <AUTH_TOKEN>. Аутентификация и авторизация для всех запросов происходит при помощи этого токена, который отправляется в заголовке Authorization: Bearer <AUTH_TOKEN>

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

curl https://rest.myequipage-test.com/external/rates?from=55.761303,37.614602&to=55.962710,37.404920 \
  -X GET \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>'

Коды ошибок авторизации:

  • 401 - {"type": "bad_auth", "message": "user_required"} - в запросе не найден токен авторизации
  • 401 - {"type": "bad_auth", "message": "bad_token"} - некорректный токен
  • 401 - {"type": "bad_auth", "message": "expired_token"} - токен недействителен
  • 401 - {"type": "bad_auth", "message": "company_required"} - не найдена компания
  • 401 - {"type": "bad_auth", "message": "insufficient_rights"} - недостаточно прав

Важно!

Сервер работает с временем UTC. При бронировании заказов, время подачи машины необходимо указывать в UTC.

Пример:

Москва. Необходимо заказать машину на 15:00МСК. Время UTC в данном случае это 12:00UTC, т.е. -3 часа. Если отправить время подачи 15:00, подразумевая МСК время, то заказ будет создан на 18:00МСК.

Список эндпоинтов

Получение списка тарифов по координатам

GET /external/rates

Параметры запроса:

Параметр Описание Обязательный? Пример
from Координаты точки подачи Да from=55.7613382222,37.5936103333
to Координаты точки назначения Нет to=55.7713382222,37.5956103333
payment_method_id Метод оплаты Нет payment_method_id=corp-100008
pickup_at Время подачи (в UTC!) - для предзаказа Нет pickup_at=2019-01-20T19:46:30.768Z
flight_id ID рейса, в случае использования Нет flight_id=DDP404SVX201911010755

cURL example:

curl https://rest.myequipage-test.com/external/rates?from=55.761303,37.614602&to=55.962710,37.404920 \
  -X GET \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>'

Коды ошибок:

  • 404 - Not Found - не найдены тарифы для заданных параметров
  • 400 - {"type": "validation_error", "message": "from_is_required"} - необходимо указать точку подачи (параметр from)
  • 400 - {"type": "validation_error", "message": "position_bad_format"} - параметр to или from не прошел валидацию

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

{
  "route": {
    "duration": 4089.42917107,
    "distance": 32038.0932843,
    "from": [
      55.761303,
      37.6146
    ],
    "to": [
      55.96271,
      37.40492
    ],
    "polyline": [
      [
        55.76130111,
        37.61459365
      ],
      [
        55.96208007,
        37.40522251
      ]
    ]
  },
  "rates": [
    {
      "id": 1,
      "rate": "e_class",
      "title": "BUSINESS",
      "description": "Mercedes-Benz E-class",
      "passengers": 4,
      "photo_url": null,
      "baggage": 3,
      "price": 1079700,
      "time_unit_hour": 150000
    }
  ]
}

Параметры в ответе:

  • route - содержит данные о предварительном маршруте поездки от точки from до точки to
    • duration - длительность поездки (значение в секундах)
    • distance - расстояние (значение в метрах)
    • from - координаты точки подачи
    • to - координаты точки назначения
    • polyline - массив координат точек маршрута (трек)
  • rates - список доступных тарифов. См. Поля тарифа

Поля тарифа

  • id - идентификатор тарифа
  • title - название тарифа
  • passengers - кол-во пассажиров
  • baggage - кол-во мест багажа
  • description - описание тарифа (список авто)
  • rate - код класса авто. Используется для отображения изображения и информации. Возможные значения:
    • e_class
    • s_class
    • maybach
    • v_class
    • bl_class
    • sprinter

Опциональные поля:

  • price - расчетная стоимость поездки по данному тарифу (значение в копейках)
  • photo_url - url изображения для тарифа
  • time_unit_hour - стоимость часа поездки (для почасовых тарифов, значение в копейках)
  • flight - данные по рейсу (как при поиске рейса). См. Автоматическое отслеживание рейсов
  • recommended_pickup_at - рекомендуемое время подачи для заказов с привязкой к рейсу (если NULL - значит рекомендуется АСАП)

Получение списка тарифов по городу

GET /external/rates/:city, где :city - идентификатор города

Параметры запроса:

Параметр Описание Обязательный? Пример
payment_method_id Метод оплаты Нет payment_method_id=corp-100008

cURL example:

curl https://rest.myequipage-test.com/external/rates/moscow \
  -X GET \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>'

В ответе вернется список доступных тарифов:

{"rates": [{Поля тарифа} ...]}

См. Поля тарифа

Коды ошибок:

  • 404 - Not Found - не найдены тарифы для заданных параметров
  • 400 - {"type": "validation_error", "message": "invalid_city"} - не прошел валидацию параметр :city

Получение списка трансферов для тарифа

GET /external/rates3/:id/transfers, где :id - идентификатор тарифа

cURL example:

curl https://rest.myequipage-test.com/external/rates3/9/transfers \
  -X GET \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>'

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

{
  "transfers": [
    {
      "from": {
        "type": "airport",
        "position": [
          55.605688,
          37.287003
        ],
        "city": "Москва",
        "display_name": "аэропорт Внуково"
      },
      "to": {
        "type": "railway",
        "position": [
          55.743131,
          37.566944
        ],
        "city": "Москва",
        "display_name": "Киевский вокзал"
      },
      "price": 130000
    }
  ]
}

Параметры в ответе:

  • transfers - список трансферов. Поля трансфера:
    • from - отправная точка трансфера. Поля:
      • type - тип. Возможные значения: airport, railway, object
      • position - координаты точки (широта и долгота)
      • city - город
      • display_name - адрес (описание)
    • to - конечная точка трансфера. Поля те же, что в from
    • price - стоимость трансфера (значение в копейках)

Коды ошибок:

  • 404 - Not Found - не найдены трансферы для тарифа

Размещение заказа

POST /external/orders

cURL example:

curl https://rest.myequipage-test.com/external/orders \
  -X POST \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>' \
  -d '{
  "payment_method_id": "corp-100008",
  "rate_id": 1,
  "route": [
    {
      "position": [
        55.764334, 37.611842
      ],
      "address": "ул. Малая Дмитровка, 25"
    },
    {
      "position": [
        55.752792, 37.595133
      ],
      "address": "Новый Арбат ул., 8-10"
    }
  ],
  "pickup_at": "2020-05-21T18:00:00.511Z",
  "comment": "Please, wait me",
  "passenger_info": {
    "first_name": "John Doe",
    "phone": "+79123456789"
  },
  "flight_id": "DSU1164SVO20200323"
}'

Описание параметров в теле запроса:

Параметр Описание Обязательный? Формат
rate_id id тарифа Да integer
route Массив путевых точек Да array of objects (Location)
payment_method_id Метод оплаты Да text
pickup_at Время подачи (в UTC) Нет text
comment Комментарий к заказу Нет text
passenger_info Данные о пассажире Нет object (PassengerInfo)
flight_id ID рейса, в случае использования Нет text

Описание параметров объектов:

Объект Параметр Описание Обязательный? Формат
Location position Координаты точки (широта и долгота) Да array
Location address Текстовое описание адреса точки Да (нет, если указан "go_to_pin": true) text
Location go_to_pin В случае отсутствия address, должен быть указан данный параметр со значением true Нет (да, при отсутствии address) boolean (only true)
Location city Наименование города Нет text
PassengerInfo phone Телефон пассажира Да text
PassengerInfo first_name Имя пассажира Да text
  • Срочный заказ (менее 60 минут до подачи, без предварительного времени подачи) размещается без указания параметра времени подачи :pickup_at (поле не передается в запросе)
  • Предварительный заказ (на указанное предварительное время, более 60 минут, но не ранее чем за 6 мес.) размещается с обязательным указанием параметра :pickup_at (обязательно передавать в запросе в указанном формате, время UTC)

В случае успешного размещения в ответе вернется информация о заказе:

{"order": {Поля заказа}}

См. Поля заказа

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

GET /external/orders

Параметры запроса:

Параметр Описание Обязательный? Пример
skip Пропуск строк для пажинации Нет skip=10
limit Предел строк для пажинации Нет limit=20

Также предусмотрены различные параметры для сортировки и фильтрации

cURL example:

curl https://rest.myequipage-test.com/external/orders \
  -X GET \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>'

Ошибки:

  • invalid_skip_limit - неверный формат параметров skip или limit

В ответе вернется список заказов:

{"orders": [{Поля заказа} ...]}

См. Поля заказа

Получение информации о заказе

GET /external/orders/:id, где :id - идентификатор заказа

cURL example:

curl https://rest.myequipage-test.com/external/orders/8472 \
  -X GET \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>'

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

{
  "order": {
    "seconds_on_the_way": 808,
    "timezone": "Europe/Moscow",
    "car_eta_seconds_left": 0,
    "car": {
      "id": 2,
      "license_plate": "X777XX777",
      "color": "000000",
      "brand": "Mersedes-Benz",
      "model": "S-class"
    },
    "passenger_info": {
      "phone": "+79123456789",
      "first_name": "John Doe"
    },
    "car_eta_at": "2020-03-23T14:45:45.771Z",
    "completed_at": "2020-02-10T18:06:35.867Z",
    "payment": {
      "id": "corp-100008",
      "title": "ООО \"xSpace\""
    },
    "time": 1996,
    "breakdown": [
      {
        "type": "min_price",
        "price": 60000
      }
    ],
    "done_at": "2020-02-10T18:06:35.867Z",
    "sorted_at": "2020-02-10T18:06:35.867Z",
    "route": [
      {
        "address": "проспект Защитников Москвы 10-184",
        "position": [
          55.76279,
          37.59288
        ]
      },
      {
        "position": [
          55.974283,
          37.423107
        ],
        "go_to_pin": true
      }
    ],
    "rate": {
      "id": 1,
      "title": "BUSINESS"
    },
    "ride_etc_at": "2020-02-10T18:05:24.835Z",
    "employee": {
      "id": 123,
      "phone": "+79123456780",
      "first_name": "John",
      "last_name": "Smith",
      "avatar_url": null
    },
    "current_price": 60000,
    "updated_at": "2019-06-26T16:21:15.408Z",
    "status": "done",
    "arrived_at": "2020-02-10T17:05:24.835Z",
    "id": 8472,
    "enroute_at": "2020-02-10T17:10:24.835Z",
    "comment": "Please, wait me at first porch",
    "paid": null,
    "estimated_price": 55000,
    "free_cancel_seconds_left": 0,
    "additional_expenses": null,
    "distance": 11114,
    "driver": {
      "id": 50,
      "first_name": "John Snow",
      "rating": 5,
      "phone": "+78005553535",
      "photo_url": null
    },
    "current_price_discounted": null,
    "city_id": "moscow",
    "confidence": "trust",
    "price": 60000,
    "pickup_at": "2020-02-10T17:09:24.835Z",
    "credit": 0,
    "estimated_price_discounted": null,
    "created_at": "2019-06-26T16:21:15.408Z",
    "rating": null,
    "track": [],
    "currency_code": "643"
  }
}

Параметры в ответе:

Поля заказа

  • id - идентификатор заказа
  • status - статус заказа. Возможные значения:
    • new - новый заказ
    • looking_for_drivers - производится поиск машины
    • car_not_found - машина не найдена
    • on_the_way - водитель на пути к пассажиру
    • arrived - водитель прибыл и ожидает пассажира
    • enroute - водитель выполняет поездку (в пути с пассажиром)
    • done - заказ выполнен
    • cancelled - заказ отменен
    • no_show - заказ прерван водителем (пассажир не вышел)
    • failed - заказ прерван администратором
  • currency_code - код валюты. На данный момент поддерживаются следующие валюты:
    • 643 - Российский рубль
    • 644 - EQ Coin
    • 826 - Фунт стерлингов Соединенного королевства
    • 978 - Евро
  • price - сумма заказа (фактическая стоимость)
  • credit - скидка
  • city_id - id города, в котором находится точка подачи
  • route - массив объектов - путевых точек. Поля объекта:
    • position - координаты точки (широта и долгота)
    • address - адрес (текстовое описание)
    • city - наименование города
    • go_to_pin - флаг для случая, когда отсутствует address
  • breakdown - массив объектов - элементов, составляющих сумму заказа. Поля объекта:
    • type - тип. Возможные типы:
      • distance_overlimit - превышение (по расстоянию)
      • transfer - трансфер
      • time - время аренды (длительность аренды авто в почасовом заказе)
      • waiting_time - время ожидания
      • fixed_price - стоимость по калькулятору
      • pickup_charge - стоимость подачи
      • min_price - минимальная стоимость
      • tips - чаевые
    • price - стоимость
    • value - значение величины, для которой определена стоимость в данном элементе
    • unit - единица измерения величины
    • discount - скидка
  • comment - комментарий к заказу
  • passenger_info - информация о пассажире. Поля:
    • phone - телефон
    • first_name - имя пассажира
  • timezone - таймзона заказа. Значение в формате Europe/Moscow, Europe/London и тп.
  • sorted_at - дата, по которой производятся разл. сортировки и выборки
  • created_at - дата создания заказа
  • updated_at - дата обновления заказа
  • current_price - текущая стоимость, меняется в течение поездки
  • estimated_price - расчетная стоимость, как она была оценена при размещении заказа/назначении водителя
  • distance - фактическая дистанция поездки (общее расстояние), в метрах
  • time - фактическая длительность поездки (время в пути), в секундах
  • rate - информация о тарифе. Поля:
    • id - идентификатор тарифа
    • title - наименование тарифа
  • payment - информация о методе оплаты. Поля:
    • id - идентификатор метода оплаты
    • title - наименование

Опциональные поля:

  • paid - флаг, означающий, что заказ оплачен/не оплачен
  • rating - оценка заказа
  • pickup_at - время подачи
  • current_price_discounted - текущая стоимость с учетом скидки
  • estimated_price_discounted - расчетная стоимость с учетом скидки
  • free_cancel_seconds_left - остаток секунд до момента, после которого отмена заказа будет платной
  • car_eta_seconds_left - расчетная длительность движения водителя к пассажиру / остаток секунд до прибытия машины к точке подачи
  • seconds_on_the_way - фактическая длительность движения водителя к пассажиру, в секундах
  • ride_etc_seconds_left - расчетная длительность поездки (время в пути) / остаток секунд до окончания поездки (завершения заказа)
  • arrived_at - фактический таймстамп момента прибытия машины к точке подачи
  • enroute_at - фактический таймстамп начала поездки (начало движения с пассажиром/отъезд из точки подачи)
  • done_at - фактический таймстамп окончания поездки (окончание движения с пассажиром/прибытие в точку назначения)
  • completed_at - фактический таймстамп завершения заказа (в результате окончания поездки, отмены заказа, либо его прерывания)
  • car - информация о машине. Поля:
    • id - id машины
    • license_plate - номер
    • color - цвет
    • brand - бренд
    • model - модель
    • heading - направление (только для активных заказов)
    • position - координаты (только для активных заказов)
  • driver - информация о водителе. Поля:
    • id - id водителя
    • first_name - имя
    • rating - рейтинг
    • phone - телефон
    • photo_url - url фотографии
  • user - информация о пользователе (разместившем заказ). Поля:
    • id - id пользователя
    • phone - телефон
    • first_name - имя
    • last_name - фамилия
    • avatar_url - url аватара
  • employee - информация о пользователе-сотруднике компании (разместившем корп. заказ). Поля:
    • id - id пользователя
    • phone - телефон
    • first_name - имя
    • last_name - фамилия
    • avatar_url - url аватара
  • flight - данные по рейсу (как при поиске рейса). См. Автоматическое отслеживание рейсов
  • track - массив координат точек маршрута
  • time_unit_hour - стоимость часа пути (наличие этого поля говорит о том, что это заказ с почасовым тарифом)
  • rent_seconds_elapsed - прошедшее кол-во секунд с момента начала аренды/фактическая длительность аренды авто в почасовом заказе
  • additional_expenses - массив объектов - доп. расходов/услуг. Поля объекта:
    • id - внутренний идентификатор (UUID)
    • expense_type - тип услуги:
      • parking - парковка
      • tollway - платная дорога
      • childseat - детское кресло
      • custom - другое (в поле description ожидается описание)
    • description - описание услуги
    • amount - сумма услуги
    • image_url - опциональный URL изображения (например фото чека)
  • ride_etc_at - расчетный таймстамп окончания поездки (окончание движения с пассажиром/прибытие в точку назначения)
  • car_eta_at - расчетный таймстамп момента прибытия машины к точке подачи с учетом цепочки заказов водителя
  • confidence - уровень доверия к пассажиру в заказе

Примечания:

  1. Номинальный формат стоимостей и скидок - денежная единица * 100 (т.е. значение в копейках, пенсах, центах и тп). Например, price = 60000 при currency_code = "643" означает что сумма заказа = 600 рублей.
  2. Фактические величины это величины, полученные из реальных данных по достижению заказом определенного состояния. Расчетные величины отличаются от фактических тем, что они вычисляются по предполагаемым/прогнозируемым сведениям и могут быть вычислены в любой момент состояния заказа.
  3. Когда будет назначен водитель на заказ, то в ответе будет присутствовать ключ driver. Если водитель еще не назначен, то данный ключ в ответе будет отсутствовать.
  4. Заказ является завершенным (completed, закрытым), если он имеет статус done, cancelled, no_show или failed.

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

PATCH /external/orders/:id/cancel, где :id - идентификатор заказа

cURL example:

curl https://rest.myequipage-test.com/external/orders/8472/cancel \
  -X PATCH \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>'

В случае успешной отмены в ответе вернется информация о заказе:

{"order": {Поля заказа}}

См. Поля заказа

Эндпойнт изменения времени подачи предзаказа

POST /external/orders/:id/pickup_at, где :id - идентификатор заказа

cURL example:

curl https://rest.myequipage-test.com/external/orders/8472/pickup_at \
  -X POST \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>' \
  -d '{
  "pickup_at": "2019-08-23T19:40:00.000Z"
}'

Описание параметров в теле запроса:

Параметр Описание Обязательный? Формат
pickup_at Новое время подачи (в UTC) Да text

Коды ошибок:

  • 404 - Not Found - Не найден заказ
  • 400 - {"type": "invalid_operation", "message": "invalid_pickup_at"} - неверный формат нового времени подачи
  • 400 - {"type": "invalid_operation", "message": "only_preorders_supported"} - менять время подачи можно только для предзаказов
  • 400 - {"type": "invalid_operation", "message": "only_forward_change"} - время подачи можно переводить только вперед
  • 400 - {"type": "invalid_operation", "message": "too_late"} - слишком поздно - уже началась (начинается) раздача предзаказа
  • 400 - {"type": "invalid_operation", "message": "cant_change_pickup_at"} - поменять не удалось, обратитесь в поддержку

В случае успешного изменения в ответе вернется информация о заказе:

{"order": {Поля заказа}}

См. Поля заказа

Автоматическое отслеживание рейсов

Поиск рейсов

GET /external/flights?q=<query>&date_from=2019-10-02&date_to=2019-10-03

Параметры для запроса

  • q - обязательный, строка поиска, ищет по началу строки, регистронезависимо. Например SU2011
  • date_from - опциональный, timestamp в UTC - фильтрует рейсы, не раньше указанного времени прибытия
  • date_to - опциональный, timestamp в UTC - фильтрует рейсы по дате, не позднее этого времени прибытия

cURL example:

curl https://rest.myequipage-test.com/external/flights?q=SU2011&date_from=2019-10-02&date_to=2019-10-03 \
  -X GET \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>'

Возвращает список рейсов в формате

{"flights":[
  {"flight":"SU1401",
   "id":"SVXDSU140120190924163000",
   "dep_airport":"SVX",
   "dep_airport_details": null,
   "dest_airport":"SVO",
   "direction": "arrival",
   "dest_airport_details": {"type":"airport",
                            "position": [55.972641, 37.414581],
                            "display_name": "аэропорт Шереметьево"},

   "scheduled_arrival":"2019-09-24T16:30:00.000+00:00",
   "estimated_arrival":"2019-09-24T16:10:32.000+00:00",

   "scheduled_departure":"2019-09-24T16:10:32.000+00:00",
   "estimated_departure":"2019-09-24T16:10:32.000+00:00",

   "recommended_pickup_at":"2019-09-24T16:40:32.000+00:00"
   }
]}

С полями

  • flight - название рейса
  • id - внутренний идентификатор рейса
  • dep_airport - аэропорт отправления
  • dest_airport - аэропорт прибытия
  • dep_airport_details/dest_airport_details - детали соответствующего аэропорта
  • direction - arrival - прилет, departure - отлет
  • scheduled_arrival - назначенное время прибытия
  • estimated_arrival - расчетное время прибытия
  • scheduled_departure - назначенное время отлета
  • estimated_departure - расчетное время отлета

Для получения информации о маршруте и рекомендуемом времени подачи авто необходимо в запросе GET /external/rates указать параметр flight_id

Для привязки заказа к рейсу требуется в теле запроса POST /external/orders указать параметр:

"flight_id": "<идентификатор рейса из поля id>"

Если такой рейс будет найден то заказ создастся с привязкой ко времени прибытия/отправления

В частности

  1. Будет произведена проверка того,что это предзаказ
  2. Будет произведена проверка времени подачи - чтобы подача была не сильно раньше и не сильно позже планируемого времени прибытия
  3. Будет производиться автоматическое отслеживание и корректировка времени прибытия такого рейса
  4. В информации о таком заказе появится дополнительное поле flight с данными о рейсе (в том же формате, что и для поиска)

Ошибки:

  • invalid_flight_data - рейс не найден
  • pickup_at_required - не указано время подачи
  • invalid_pickup_at - неверное время подачи

Получение списка машин, выполняющих текущие заказы клиента (в т.ч. для отображения на карте)

GET /external/cars

Параметры запроса:

Параметр Описание Обязательный? Пример
skip Пропуск строк для пажинации Нет skip=10
limit Предел строк для пажинации Нет limit=20
online Фильтр машин "на линии" Нет online=true
kwfilter Фильтр по номеру авто Нет kwfilter=777X

cURL example:

curl https://rest.myequipage-test.com/external/cars \
  -X GET \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer <AUTH_TOKEN>'

Ошибки:

  • invalid_skip_limit - неверный формат параметров skip или limit

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

{
  "cars": [
    {
      "driver_id": 103,
      "color": "000000",
      "orders_count": 1,
      "brand": "Mercedes-Benz",
      "year": 2018,
      "status": "active",
      "id": 92,
      "position": [
        55.76279,
        37.59288
      ],
      "rates": [
        "e_class"
      ],
      "driver": {
        "id": 103,
        "phone": "+79123456789",
        "first_name": "Carlos",
        "last_name": "Sainz",
        "avatar_url": null,
        "child_seats_count": 0
      },
      "highlight_color": "ffa500",
      "license_plate": "A003AA777",
      "heading": 0.0,
      "model": "E-class"
    }
  ]
}

Параметры в ответе:

Поля машины

  • id - идентификатор машины
  • status - статус машины. Возможные значения:
    • active - активна
    • pending - ожидает подтверждения администратором
    • blocked - заблокирована
  • license_plate - регистрационный номер автомобиля
  • color - цвет
  • brand - бренд
  • model - модель
  • year - год
  • heading - текущее направление (вектор), в радианах
  • position - текущие координаты автомобиля
  • rates - текущие тарифы авто

Опциональные поля:

  • driver_id - ID водителя
  • driver - информация о водителе. Поля:
    • id - id водителя
    • first_name - имя
    • last_name - фамилия
    • phone - телефон
    • photo_url - url фотографии
    • child_seats_count - кол-во детских кресел
  • orders_count - кол-во текущих заказов на авто
  • highlight_color - цвет подсветки для авто (для карты)

Сортировка и фильтрация

Правила сортировки

Колонки для сортировки передаются через query-параметр sort_by. Колонки перечисляются через запятую, в конце указывается желаемое направление сортировки: _asc или _desc (по-умолчанию _asc)

Примеры:

  • sort_by=price_desc,id_asc - сделает запрос вида ORDER BY price DESC, id ASC
  • sort_by=price - сделаем запрос вида ORDER BY price ASC

Правила фильтрации

Колонки для фильтрации передаются через query-параметры совпадающие с именем колонки. В конце может указываться суффикс, определяющий правила фильтрации, поддерживаются множественные значения для одной колонки как с перечислением через запятую, так и с множественным указанием параметра.

  • Нет суффикса - точное совпадение, например

    id=1&email=aa@aa.com -> id = 1 AND email='aa@aa.com'

  • Суффикс _from - больше или равно, например

    sorted_at_from=2010-01-01 -> sorted_at >= '2010-01-01

  • Суффикс _to - меньше или равно, например

    sorted_at_to=2010-01-02 -> sorted_at <= '2010-01-01'

  • Суффикс _in - включено в список, например

    status_in=done,new,failed -> status IN ('done', 'new', 'failed')

    Точно также работают множественные параметры:

    status=done&status=new&status=failed -> status IN ('done', 'new', 'failed')

  • Суффикс _ilike - регистронезависимый поиск по началу строки

    first_name_ilike=Iva -> first_name ILIKE 'Iva%' - найдёт Ivan

  • Суффикс _isubstr - регистронезависимый поиск по вхождению строки

    first_name_isubstr=va -> first_name ILIKE '%va%' - найдёт Ivan, Vasiliy

Все условия собираются через логическое И

Выбор нужных полей в результатах

Если для отображения выборки полей слишком много, то можно ограничить выборку с помощью query-параметра fields, в котором указываются через запятую все необходимые поля. Если параметра нет, то возвращаются все поля.

Например

  • GET /external/orders?fields=id,status,price - вернёт список из объектов, у которых будут только по три поля
  • GET /external/orders - вернёт список из объектов, у которых будут все доступные поля

Фильтр по "ключевому слову" kwfilter (keyword-filter) для заказов

Фильтрует ИЛИ по ID заказа, ИЛИ по номеру телефона пассажира. Выборка на точные совпадения.

  • GET /external/orders?kwfilter=%2B79199342004 вернёт список заказов, у которых телефон пассажира 79199342004 (символ + кодируется в URL в %2B, без знака + будет воспринимать как integer ID заказа)
  • GET /external/orders?kwfilter=777 вернёт заказ с ID 777

Фильтр заказов по логическим статусам assigned и booked

  • GET /external/orders?booked=true вернет список забронированных заказов (у которых pickup_at != NULL, pickup_at > now, status = "new", driver_id = NULL)
  • GET /external/orders?assigned=true вернет список заказов с назначенным водителем (для которых выполеяются условия pickup_at != NULL, pickup_at > now, status = "new", driver_id != NULL)
Наши приложения

Приложение
для пассажиров

Приложение
для водителей

Приложение
для контроля