v.1.3.1

API построен на основе REST + JSON.
URL для подключения: https://widget.myrentacar.me/api

Авторизация

Каждому партнёру выдаётся ключ (key), идентифицирующий партнёра при подключениях и секретный ключ (secret), использующиеся для подписи запросов. При выполнении любого запроса независимо от HTTP-метода выполняется по следующему принципу:
— Ваш key соединяется с секретным ключом
— от получившейся суммы вычисляются MD5 подписи (signature), данная signature не изменяется без генерации нового secret
— в список отправляемых параметров добавляются параметры key=<значение ключа партнёра> и signature=<получившийся MD5-хэш>

Пример обращения к API на js (получение списка мест в городе):

 data = {city_id: 17};
 data.signature = CryptoJS.MD5("<key secret>").toString();
 data.key = '<api key>';
 $.get(‘/api/places/’, data, function(response) {
    alert(response);
 });

Ошибки авторизации:
— Неверный ключ (key) — выводится сообщение Unknown key и код ответа 404
— Неверное значение подписи — выводится сообщение Wrong signature и код ответа 403

Точки подключения

GET /cities/<country_id> — получение списка доступных городов (country_id — идентификатор страны, можете посмотреть его в вашем партнерском кабинете)
Параметры: нет
Возвращаемые данные:
Массив записей со следующими полями:
id — идентификатор города
name — русское название города
name_en — английское название города
airoport — есть ли в городе аэропорт
priority — приоритет для сортировки

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

[{"id":17,"name":"\u0422\u0438\u0432\u0430\u0442","name_en":"Tivat","airport":true, "priority": 0},
{"id":7,"name":"\u0416\u0430\u0431\u043b\u044f\u043a","name_en":"Űdabljak","airport": false "priority": 1}]

GET /places/<city_id> — получение списка мест доставки в конкретном городе (city_id — числовой идентификатор города)
Параметры: city_id — ID города, из которого необходимо получить места
Возвращаемые данные:
Массив записей со следующими полями:
id — идентификатор места
name — русское название места
name_en — английское название места
name_rs — название на сербском
is_airport — является ли место аэропортом (спрашивать ли номер рейса для встречи)

Пример ответа c входным параметром city_id = 17:

[{"id":70,"name":"\u0410\u044d\u0440\u043e\u043f\u043e\u0440\u0442","name_en":"Airport","is_airport":true},
{"id":71,"name":"Hotel Palma","name_en":"Hotel Palma","is_airport":false},
{"id":92,"name":"\u0420\u0435\u0441\u0442\u043e\u0440\u0430\u043d Prova","name_en":"Restourant Prova","is_airport":false},
{"id":94,"name":"\u0410\u0432\u0442\u043e\u0431\u0443\u0441\u043d\u0430\u044f \u0441\u0442\u0430\u043d\u0446\u0438\u044f","name_en":"Bus Terminal","is_airport":false},
{"id":95,"name":"\u0417\u0430\u043f\u0440\u0430\u0432\u043a\u0430 EKO","name_en":"Petrol EKO"},"is_airport":false]

GET /cars/search — поиск автомобилей
Параметры:
Основные:
type
pickup_city_id — ID города получения, обязателен
dropoff_city_id — ID города сдачи, обязателен
pickup_date — дата получения авто в формате ГГГГ/ММ/ДД, обязательна
dropoff_date — дата сдачи авто в формате ГГГГ/ММ/ДД, обязательна
offset — сколько автомобилей пропустить из начала выдачи. Обязательное поле! В случае, если выдача должна показываться сначала, передаётся offset=0
limit — максимальное количество выдаваемых автомобилей, обязательное поле
type — категория автомобилей: 1 — малолитражные, 2 — семейные/средний класс, 3 — люкс, 4 — внедорожники

* с этими параметрами не возвращаются автомобили с депозитом, для получения и автомобилей с депозитом добавьте параметр insurance[]=2
Фильтрация (все параметры необязательны):
van — при наличии непустого значения в выдаче будут только минивэны
cabrio — при наличии непустого значения в выдаче будут только кабриолеты
gearbox — показывать только авто с ручной (=1) или автоматической (=2) коробкой
cost_min — мин. цена в день в валюте региона (для европейских стран евро, а для России в рублях), может использоваться только в паре со следующим параметром
cost_max — макс. цена в день в валюте региона, может использоваться только с предыдущим параметром
engine_min — мин. объем двигателя в литрах (десятичный разделитель — точка), может использоваться только в паре со следующим параметром
engine_max — макс. объем двигателя в литрах (десятичный разделитель — точка), может использоваться только в паре с предыдущим параметром
drive — только передний (1), задний(2), или полный(3) привод
insurance[] — массив страховок. Возможные значения: 1 -показывать только авто с КАСКО, 2 — показывать авто с депозитом (по умолчанию эти автомобили не отображаются, добавление этого параметра не скрывает автомобили без депозита), 3 — показывать автомобили с СуперКаско
year — мин. год выпуска (то есть будут показываться более новые машины)
discounted_only — если значение не пустое, будут показаны только машины, на которые есть скидки в указанный период

Формат выдачи:
id — номер машины в системе
full_name — название автомобиля
discount — сумма скидки на автомобиль
transmission — Трансмиссия от 1 до 3 (соответственно: Механика, Автомат, Автомат + Типтроник). У нас третий пункт везде отображается как Автомат.
daily_cost — стоимость задень (на основе pickup_date и dropoff_date из запроса)
kasko — есть ли страховка Каско (true/false)
engine — объём двигателя
image_url — изображение автомобиля
delivery_cost — массив из минимальной и максимальной цены за доставку в данный город на основе данных из запроса город, страна, день начала аренды, последний день аренды
deposit — сумма депозита, может отсутствовать
deposited — необходим ли депозит при аренеде авто (true/false)

GET /cars/<id> — Информация о конкретном авто + список похожих авто

Параметры:
pickup_city_id — ID города получения, обязателен
dropoff_city_id — ID города сдачи, обязателен
pickup_date — дата получения авто в формате ГГГГ/ММ/ДД, обязательна
dropoff_date — дата сдачи авто в формате ГГГГ/ММ/ДД, обязательна

Возвращаемые данные:
Объект с описанием конкретного автомобиля.
model — модель автомобиля
mark — марка автомобиля
prices — массив с объектами, описывающими цены в формате[{from, to, cost}, …]
price — цена за выбранный период
где — from: со сколько дней аренды начинается данная цена,
to: на скольки заканчивается,
cost: сама цена в валюте региона (для всех стран, кроме России, евро. Для России — это российский рубль)
year — год выпуска
climate — идентификатор климатического оборудования, установленного в автомобиле (1: Кондиционер, 2: Климат 1-зонный, 3: Климат 2-зонный, 4: Климат. 4 зоны, 5: Нет)
drive — идентификатор типа привода, установленного в автомобиле (1: передний, 2: задний, 3: полный привод)
roof — идентификатор типа крыши (1: Обычная, 2: Люк, 3: Жесткая складная автоматическая, 4: Мягкая складная механическая, 5: Мягкая складная автоматическа)
tank — Объем бака в литрах (например 50.0 — объем бака 50 литров)
fuel — тип топлива (1: Бензин, 2: Дизель, 3: Гибридный, 4: Турбодизел)
seats — количество мест в автомобиле
consumption — Расход в литрах на 100км.
interior — тип салона (1: Ткань, 2: Кожа, 3: Спорт, 4: Кожа-спорт)
airbags — количество подушек безопасности
hp — мощность в лошадиных силах
abs — ABS (1 — наличие, 0 — отсутствие)
kasko — Есть ли страховка Каско (true/false)
kasko_price — Цена страховки Каско в день, если она присутствует. Если параметр kasko = true, а kasko_price = 0 — то Страховка включена в цену.
osago — наличие страховки ОСАГО (true/false)
deposited — необходим ли депозит для аренды автомобиля (true/false)
deposit — сумма депозита в валюте региона
without_deposit — есть ли услуга «без депозита» (true/false)
without_deposit_price: — сумма услуги «без дипозита»
ebd — наличие EBD (true/false)
esp — наличие ESP (true/false)
main_insurences — вывод текстом основных страховок (ОСАГО, КАСКО). исключительно справочные данные
advanced_insurences — массив, объектов описывающих типы дополнительных страховок [{id, cost, name, i_id}, …] (id — номер страховки для данного автомобиля, cost — цена, name — название кодом, i_id — Номер названия страховки) (i_id — 1: СуперКАСКО, 2: Страхование пассажиров, 3: Страхование от угона, 4: Грин-Карта)
windows — количество стеклоподъемников
color — объект, описывающий цвет автомобиля {«id»,»name»,»color»,»name_sr»} (id — идентификатор цвета, name — название на русском, color — код цвета RGB в формате AABBCC, name_sr — название цвета на сербском)
audio — массив с названиями аудио-устройств в виде [«Radio»,»Audio-CD»,»MP3″,»AUX»]
image1, image2, image3, image4 — адреса четырёх картинок автомобиля или null, если изображения нет
pickup_delivery_price — массив объектов, описывающий доставки в город получения автомобиля в виде [{«id»,»city_id»,»cost»,»halava»,»htime»,»place_id»}, …] (id — идентификатор доставки, city_id — идентификатор города получения автомобиля, cost — цена доставки, halava — количество дней аренды с которой начинается бесплатная доставка в это место, place_id — идентификатор места, в любое место если place_id = null, htime — время доставки автомобиля в этом место в формате 1.75 = 1 час 45 минут, 1.5 — 1 час 30 минут) прим. под одному городу может быт несколько мест доставки, в выдаче они отсортированы по возрастанию цены
dropoff_delivery_price — массив объектов, описывающий доставки в город приема автомобиля в виде [{«id»,»city_id»,»cost»,»halava»,»htime»,»place_id»}, …] (id — идентификатор доставки, city_id — идентификатор города получения автомобиля, cost — цена доставки, halava — количество дней аренды с которой начинается бесплатная доставка из этого место, place_id — идентификатор места, в любое место если place_id = null, htime — время доставки автомобиля в этом место в формате 1.75 = 1 час 45 минут, 1.5 — 1 час 30 минут) прим. под одному городу может быт несколько мест доставки, в выдаче они отсортированы по возрастанию цены
run_limit — Наличие ограничения пробега (будет рабочим в версии 1.0, ориентировочное время работы в 20.04.2015. в данный момент аналогичен noRunLimit)
noRunLimit — Отсутствие ограничения пробега (true — нет ограничения, false — есть ограничение)
discount — скидка в процентах (для информации)
km_limit_for_day — лимит пробега километров в день, если ограничение включено
km_overlimit_price — цена за превышение лимита за километр
run_without_limit — цена в день за снятие ограничения пробега
percentage — размер авансового платежа в процентах от стоимости аренды (исключая стоимость доставки, депозит и оборудование)
pickup_day_is_workday, dropoff_day_is_workday — если в этих полях true, автомобиль не может быть выдан либо получен, так как прокатная компания не работает в эти дни при условии (следующее уточнение будет в версии 1.0, дата начала работы 20.04.2015), что компания не включила услугу «обслуживание вне рабочего времени». если включена услуга то вернет true
pickup_free_delivery — (устаревший метод, не рабочий) минимальное количество дней заказа автомобиля для бесплатной доставки
dropoff_free_delivery — (устаревший метод, не рабочий) минимальное количество дней заказа автомобиля для бесплатной доставки
available — доступность автомобиля на выбранные даты (true/false)
type_id — типа/категория автомобиля от 1 до 4 (соответственно: Компактные, Средний класс, Люкс, Внедорожники )
engine — объём двигателя
transmission — Трансмиссия от 1 до 3 (соответственно: Механика, Автомат, Автомат + Типтроник). У нас третий пункт везде отображается как Автомат.
workingHours — Объект с информацией о рабочем времени прокатной компании: {pickupDate: объект с информацией о дне начала аренды в формате: {worked: рабочий ли день компании (true/false),start: начало рабочего дня (в минутах, 120 соответствует 02:00),end: конец рабочего дня (в минутах, 1260 соответствует 21:00},dropoffDate: Объект с информацией о дне конца аренды в формате аналогичном предыдущему, holiday: предоставляет ли компания услуги в нерабочие дни или в нерабочее время (true/false), holidayPrice: цена за предоставление услуг в нерабочее время или в нерабочий день}
equipment — массив объектов, описывающий список доступного оборудования и услуг в формате [{«id»,»name»,»price»,»max_price»,»cost»,»service_id»:3}, …] (name — кодовое наименование услуги, id — идентификатор данной услуги для этого автомобиля, price — цена в день, max_price — макс. цена за это оборудование (то есть, если оборудование стоит 10 евро в день, аренда на 10 дней и max_price = 50, то оборудование будет стоить 50 евро), cost — рассчитанная стоимость аренды с учётом правила выше, service_id — идентификатор услуги)
similar — массив близких по параметрам авто (та же модель, объем двигателя и коробка передач) в формате: id, year, price_1…price_4, image

Пример:
{
abs: 1
advanced_insurences: [{id: 8200, cost: 5, name: "supercasko", i_id: 1},…]
airbags: 6
audio: ["Radio", "Audio-CD"]
available: true
climate: 3
color: {id: 6, name: "Красный", color: "AA0000", name_sr: "Crvena"}
consumption: "6.5"
deposit: 0
deposited: false
discount: null
drive: 1
dropoff_day_is_workday: true
dropoff_delivery_price: [{id: 950, cost: 0, place_id: null, deliveryFreeDays: 3}]
dropoff_free_delivery: 3
ebd: 1
engine: 1.3
equipment: [{id: 31, name: "child_seat", price: 0, max_price: 40, cost: 0, service_id: 3},…]
esp: 1
fuel: 1
hp: 97
image1: "http://s3-eu-west-1.amazonaws.com/images.myrentacar/cars/image1s/000/001/670/original/Suzuki-Swift-2010-orange.png"
image2: null
image3: null
image4: null
interior: 1
kasko: true
kasko_price: 0
km_limit_for_day: null
km_overlimit_price: 0
main_insurences: "КАСКО, ОСАГО"
mark: "Suzuki"
model: "Swift"
noRunLimit: true
osago: true
percentage: 15
pickup_day_is_workday: true
pickup_delivery_price: [{id: 950, cost: 0, place_id: null, deliveryFreeDays: 3}]
pickup_free_delivery: 3
price: 19
prices: [{from: 1, to: 4, cost: 20}, {from: 5, to: 8, cost: 19}, {from: 9, to: 15, cost: 17},…]
roof: 1
run_limit: false
run_without_limit: null
seats: 5
tank: 45
transmission: 1
type_id: 1
windows: 4
without_deposit: true
without_deposit_price: 5
workingHours: {pickupDate: {worked: true, start: 360, end: 1200}, dropoffDate: {worked: true, start: 360, end: 1200},…}
year: 2008
}

POST /bookings — создание брони (все параметры обязательны, если не указано обратное)
<strong style=’color:grey;’>agent_id — ID компании-партнёра (ваш идентификатор в системе)
car_id — ID автомобиля
pickup_date — дата выдачи в формате JSON Date
dropoff_date — дата возврата в формате JSON Date
pickup_city_id — ID города получения
dropoff_city_id — ID города возврата
pickup_place_id — ID места получения
dropoff_place_id — ID места возврата
service_ids — массив ID выбранных доп. услуг и оборудования
insurence_ids — массив ID выбранных доп. страховок
skip_deposit — 1 если пользователь выбрал услугу «без депозита» и он доступна, 0 — если не выбирал.
without_limit_km — 1 если пользователь выбрал услугу «Без ограничения пробега» , 0 — если не выбрал
name — имя и фамилия водителя латиницей, как в правах
kasko — 1 если нужна платная страховка КАСКО (не обязателен если kasko включен в цену)
birthdate — дата рождения водителя в формате дд.мм.гггг
email — адрес для ваучера и связи на всякий случай
flight — номер рейса, если авто выдаётся в аэропорту
phone — контактный телефон
phone2 — второй телефон
comment — комментарий клиента

Формат ответа:
При успешном бронировании —

{success: true, redirect: “<урл, куда надо редиректнуть клиента”, advance: сумма предоплаты для оплаты клиентом , order: номер заказа}

При наличии ошибок:
объект, содержащий описание ошибок по каждому полю.

{errors: объект ошибок}

GET /bookings/get_advance — для подсчета суммы предоплаты (все парамтры аналогичны созданию брони)

Формат ответа (JSON):

{advance: сумма}

P.S. все суммы передаются в валюте региона, в данный момент это российский рубль для регионов России и евро для остальных.