API от GetTransfer

С помощью API от GetTransfer партнёры могут:

  • получать и отображать информацию о трансферах у себя на сайте;
  • создавать заявки на трансфер у себя на сайте;
  • получать вознаграждение за оплаченные заявки после завершения трансфера.

Для работы с API вам потребуется специальный ключ (API_KEY). Чтобы его получить, пожалуйста, пришлите в нашу службу поддержки следующую информацию:

  • где и как планируется использовать API;
  • прототипы/дизайны будущего проекта или существующий проект, где планируется использовать функцию;
  • количество посетителей/пользователей в месяц;
  • язык/регион ресурса;
  • как привлекаете трафик.

Условия предоставления доступа к API:

  • цены могут запрашиваться только если запрос инициируется реальным пользователем с указанием точек от/до и даты поездки. Сбор данных по ценам в автоматическом режиме без реальных запросов пользователей запрещен;
  • для показа пользователям должна использоваться всегда актуальная информация, полученная из API GetTransfer.com, кеширование данных на стороне партнера запрещено;
  • в интерфейсе партнёра цена, полученная с помощью запроса Отображение цен, должна обязательно быть указана с уточнением, что это начальная цена (цена «от»);
  • в запросе Создание заявки на трансфер партнёр обязательно должен указать актуальный email пользователя, который запрашивает трансфер. Именно на этот email пользователь получит ссылку в свой кабинет для просмотра полученных предложений от перевозчиков и последующего бронирования;
  • для запуска в продакшн партнер должен успешно пройти тестирование со стороны GetTransfer.com на тестовой среде (для тестирования специалистам GetTransfer.com должен быть предоставлен доступ к тестовой среде партнера).

Адрес для отправки запросов

Запросы к API отправляются на адрес: https://gettransfer.com/api.

Тестовая среда: https://gtrbox.org/api.

Получение API-токена

GET /access_token?api_key=API_KEY

Где api_key — ваш ключ, который будет предоставлен после обращения в службу поддержки.

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

https://gettransfer.com/api/access_token?b288898c36e9a438b0577ecca41ae495

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

{
   "result":"success",
   "data":{
      "token":"f679fa7c628ec12f9229dbf52a5ec1cece364b23ff09841567c9ea7c25473569"
   }
}

Создание заявки на трансфер

POST /api/transfers

В Header запроса обязательно должен быть указан полученный access token:

'X-ACCESS-TOKEN: f679fa7c628ec12f9229dbf52a5ec1cece364b23ff09841567c9ea7c25473569'

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

Обязательные параметры:

  • point — точки откуда/куда (для почасового трансфера можно только откуда), может быть отправлен Google Place_id или координаты и название точки;
  • trip_to (опционально trip_return) — дата и время поездки туда (обратно), для почасового трансфера указывается дата и время начала и окончания поездки;
  • pax — количество пассажиров;
  • сhild_seats — количество кресел каждого типа: child_seats_infant, child_seats_convertible, child_seats_booster;
  • transport_type_ids — тип транспорта;
  • email, phone — контакты клиента: email, телефон (можно только email).

Дополнительные параметры:

  • comment — комментарии для водителя (например, что у пассажира с собой животное,
    сноуборд, крупногабаритный багаж);
  • full_name — имя, которое нужно указать на табличке для встречи;
  • flight_number — номер рейса.

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

type Point = string // I.e. "(55.7563174,37.6170465)";
type CityPoint = {
name: string, // I.e. "Moscow, Russia"
point: Point,
place_id: string // Google`s place_id
};
type TripParams = {
date: string, // _YYYY/MM/DD_
time: string // _HH:MM_ (in `CityPoint` timezone ),
flight_number: ?string
};
type TransportTypeId = "economy" | "comfort" | "business" | "premium" | "limousine" | "suv" | "van" | "mini
bus" | "bus" | "helicopter";
type Params = {
transfer: {
from: CityPoint,
to: CityPoint,
trip_to: TripParams,
trip_return?: TripParams,
duration: number // for per hour transfers only, In hours, i.e. 3,
transport_type_ids: TransportTypeId[], // Transport type ids, at least one requred
pax: number, // Total number of passengers (adults + child seats), >= 1
child_seats_infant?: number, // >=0
child_seats_convertible?: number, // >=0
child_seats_booster?: number, // >=0
name_sign?: string,
comment?: string,
}
passenger_account?: { //real passenger data, email is mandatory, phone is optional
email: string,
full_name: string, // may be any nickname
phone: string // I.e. "+78005553535" leading "+" requried
},
promo_code: string?
}

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

type Point = string // I.e. "(55.7563174,37.6170465)";
type CityPoint = {
name: string, // I.e. "Moscow, Russia"
point: Point,
place_id: string // Google`s place_id
};
type DateTime = string // ISO 8601, i.e. "2018-03-02T16:00:00+02:00";
type TransferStatus = "new" | "performed" | "completed" | "canceled" | "not_completed" | "rejected" | "pen
ding_confirmation" | "outdated";
type TransportTypeId = "economy" | "comfort" | "business" | "premium" | "limousine" | "suv" | "van" | "mini
bus" | "bus" | "helicopter";
type Money = {
default: string, // I.e. "9,98 ₽" in base currency
preferred?: string // I.e. "US$1.00" exchanged to preferred currency
};
type BookNowOffer = {
TransportTypeId: {
currency: string,
amount: number,
base: Money,
?without_discount: Money
}
};
type TransferType = 'one_way' | 'hourly' | 'round_trip';
type Transfer = {
id: number,
created_at: DateTime,
duration: ?number, // In hours
distance: ?number, // In km or miles depending on account settings (distance_unit)
status: TransferStatus,
from: CityPoint,
to: ?CityPoint,
date_to_local: DateTime,
date_return_local: ?DateTime,
flight_number: ?string,
flight_number_return: ?string,
transport_type_ids: TransportTypeId[],
pax: number, // Total number of passengers (adults + child seats)
book_now: ?TransportTypeId,
time: ?integer, // estimated time in minutes
name_sign: ?string,
comment: ?string,
child_seats_infant: number,
child_seats_convertible: number,
child_seats_booster: number,
promo_code: ?string,
passenger_offered_price: ?string,
price: ?Money,
paid_sum: Money,
remains_to_pay: ?Money,
paid_percentage: number,
watertaxi: boolean,
book_now_offers: { ?BookNowOffer },
// Number of active offers for this transfer
offers_count: number,
// Number of carriers relevant to this transfer
relevant_carriers_count: number,
offers_updated_at: ?DateTime,
date_refund: DateTime, // In UTC
paypal_only: ?boolean,
carrier_main_phone: ?string,
pending_payment_id: ?number,
analytics_sent: boolean,
rub_price: ?number,
usd_price: ?number,
refunded_price: ?Money,
refunded_date: ?DateTime
campaign: ?string,
editable_fields: string[], // fields that can be updated in current transfer
airline_card: ?string,
airline_card_surname: ?string,
partner_passenger: ?PartnerPassenger,
payment_percentages: number[], // deprecated
cancelable: boolean, // for passenger and partner as passenger
refundable: boolean, // for partner as passenger
type: TransferType
};
type AccountFoundBy = {
id?: number,
email?: string,
phone?: string
}
type Response = {
result: "success",
data: {
transfer: Transfer,
account_found_by: AccountFoundBy?
}
};

После создания трансфера на email пользователя придет письмо, содержащее ссылку на созданный кабинет. В нем пользователь может выбрать предложение перевозчика и сделать заказ.

Отображение цен

Дополнительно партнер на начальном этапе может показать предварительные цены:

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

GET /api/route_info?points[]=%2850.4501%2C30.523400000000038%29&points[]=%2850.4501%2C30.523400
000000038%29&with_prices=true&return_way=false&date_to=2018-01-12+13%3A00%3A00

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

type Params = {
points: Point[],
with_prices: boolean,
return_way: boolean // true if roundtrip
date_to: DateTime
}

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

TransportTypePrice = {
min_float: number, // I.e. 43.4323421
min: string, // formatted, in passenger's currency
max: string,
book_now?: string // Price to book now
}
type Response = {
result: "success",
// Key is transport type id
data: {
success: boolean, //is route available?
distance?: Int, //if known - distance for one way travel, km
duration?: Int, //if known - expected one way travel time, min
prices?: { [string]: TransportTypePrice }, // if `with_prices` and `success` is tru
e
watertaxi: boolean,
DirectionsResultsObject? //if route available - https://developers.google.co
m/maps/documentation/javascript/directions#DirectionsResults
date_to_ok: ?boolean //is date_to has passed minimum datetime, null if no `
points[0]`
hints_to_comments: string[]
}
}