API
Data model
Agreements:
  1. All entities have a unique identifier that will never change.
  2. Some entities have "name" attribute that is translated into a few languages, at the same time the locale prefix is added at the end of the field name. For example: the value of "name" attribute in English will contain"name_en" field, and in Russian - "name_ru". The list of located names will broaden in the course of time and thus new fields "name_%locale%" will be added to the data model, for example "name_fr" for French.
The scheme of interconnection between entities:
UrlDomain
Description:
It contains all data about Url Domain of 1 and 2 level for the locations of KiwiTaxi website.

Attributes:
  1. id (integer) - unique identifier
  2. locale (string) - location (en, ru, fr etc.)
  3. value (string) - domain (kiwitaxi.com, kiwitaxi.ru etc.)
Entity of "Currency"
Description: ~

Attributes:

  1. id (integer) - unique identifier
  2. code (string) - three-character currency code
  3. iso (integer) - unique numeric currency ISO code
Entity of "Country"
Description: ~

Attributes:

  1. id (integer) - unique identifier
  2. iata (string) - unique two-character IATA (ISO) code
  3. published (boolean) - availability of booking a transfer from the country (see comments below)
  4. name_en (string) - the English name
  5. name_ru (string) - the Russian name
  6. currency_id (integer) - unique currency identifier used in the country
  7. time_zone (string) - difference between local time and UTC without daylight saving time. For example: "+2", "+10", "-3" etc.

Comments:
More precise definition of "published" attribute. If the attribute value equals "False", then it's impossible to book transfers in this country, but it's possible to book a transfer from another available country to this one. A situation like this can occur in the European Union if there are two neighbouring countries.

For example:
Belgium's attribute equals "published == false", and France's - "published == true" then transfers "Brussels Charleroi Airport => Paris" are not available but return transfers "Paris =>Brussels Charleroi Airport" are available.
Entity of "Region"
Description:
As a rule, taxi services can not work over all the country territory. That's why every country is subdivided into regions where they can accept and perform the order. Regions can coincide with country's real geographical regions and also be virtual, i.e. have the name of any part of the country.

Attributes:

  1. id (integer) - unique region identifier
  2. country_id (integer) - unique country identifier the region belongs to
  3. name_en (string) - the English name
  4. name_ru (string) - the Russian name
Entity of "PlaceType"
Description:
The type of the place (geographical point) can be: City, Airport, etc.

Attributes:

  1. id (integer) - unique identifier
  2. name_en (string) - the English name
  3. name_ru (string) - the Russian nam
Entity of "Places"
Attributes:
  1. id (integer) - unique identifier
  2. country_id (integer) - unique country identifier the place belongs to
  3. region_id (integer) - unique region identifier the place belongs to
  4. type_id (integer) - unique place type identifier
  5. name_en (string) - the English name
  6. name_ru (string) - the Russian name
  7. iata (string) - unique IATA code
  8. place_polygon (string) - geozone (as a polygon)
Entity of "Route"
Attributes:
  1. id (integer) - unique identifier
  2. country_id (integer) - unique identifier of the country where the route starts
  3. place_from_id (integer) - unique identifier of the pick-up location
  4. place_to_id (integer) - unique identifier of the drop-off location
  5. distance (integer) - distance (km.) between the pick-up and drop-off locations
  6. timeinway (integer) - approximate journey time (minutes)
  7. weight (float) - sort weight (percentage of transfer sales for a route during the current season: winter, spring, etc.)
  8. url (string) - relative URL to the list of transfers for a route
Entity of "TransferType"
Description: It contains the information about available car classes (Economy, Minivan, Minibus etc.) which are available for booking.

Attributes:

  1. id (integer) - unique identifier
  2. name_en (string) - the English name
  3. name_ru (string) - the Russian name
  4. pax (integer) - maximum number of passengers (including babies and children)
  5. baggage (integer) - maximum luggage capacity
  6. description_en (string) - English description
  7. description_ru (string) - Russian description
  8. car_examples_en (string) - car examples in English
  9. car_examples_ru (string) - car examples in Russian
  10. photo (string) - absolute (complete) URL to the conventionalized picture of the car class
  11. sortno (integer) - sort weigh
Entity of "Transfer"
Description: ~

Attributes:

  1. id (integer) - unique identifier
  2. route_id (integer) - unique route identifier
  3. type_id (integer) - unique transfer type identifier
  4. price_rub (flot) - price in rubles
  5. price_eur (float) - price in Euro
  6. price_usd (float) - price in USD
  7. url (string) - relative URL to the transfer booking
Methods
Agreements:
  1. The data are returned by sending HTTP-requests to a certain URL. In case of success the server will return HTTP status "200" and data in "CSV" format.
  2. All requests must contain the following parameter "security_token". Currently, it's the same for everyone: "24e8a1c890fb0d16ecdce4926dc4b2d6". In future, individual security token will be assigned to every user.
  3. All methods return the complete data set without filtration potential
  4. The records are divided by the line break symbol "\n"
  5. The fields and their values are divided by the tab symbol "\t"
  6. The combination of slash and N: "\N" is used as "NULL"
  7. The first record always contains the name of the entity fields
  8. Very important! You need to add the following parameter "pap=%your affiliate ID%"into all links to KiwiTaxi or there will be no sales commission added.
1. Get the list of URL domains (entities type is"UrlDomain"):
https://kiwitaxi.com/services/data/csv/url_domains
Parameters: ~

2. Get the list of currencies (entities type is "Currency"):
https://kiwitaxi.com/services/data/csv/currencies
Parameters: ~

3. Get the list of countries (entities type is "Country"):
https://kiwitaxi.com/services/data/csv/countries
Parameters: ~

4. Get the list of regions (entities type is "Region"):
https://kiwitaxi.com/services/data/csv/regions
Parameters: ~

5. Get the list of places types (entities type is "PlaceType"):
https://kiwitaxi.com/services/data/csv/place_types
Parameters: ~

6. Get the list of places (entities type is "Place"):
https://kiwitaxi.com/services/data/csv/places
Parameters: ~

7. Get the list of routes (entities type is "Route"):
https://kiwitaxi.com/services/data/csv/routes
Parameters: ~

8. Get the list of routes in the format and for White Label (entities type is "Route"):
kiwitaxi.ru/services/data/csv/routes?security_token=24e8a1c890fb0d16ecdce4926dc4b2d6&white_label=1

9. Get the list of transfer types (entities type is "TransferType"):
https://kiwitaxi.com/services/data/csv/transfer_types
Parameters: ~

10. Get the list of transfers (entities type is "Transfer"):
https://kiwitaxi.com/services/data/csv/transfers
Parameters: payment_type (string) - the type of payment: "none" - without prepayment, "partial" - partial prepayment, "full" - 100% prepayment. Depending on the type of prepayment, the transfer price can change. Default value: "partial".
Example (for PHP)
The task is to get the complete list of available routes for further processing.

Using URL http://php.net/manual/ru/book.curl.php we execute the following method http://kiwitaxi.com/services/data/csv/routes?security_token=24e8a1c890fb0d16ecdce4926dc4b2d6

The result (data in the "CSV" format) is written to a variable $data

Then we need to parse the received data into an array
/* -------------------------------------------------------------------------------- */
$data = explode("\n", $data);
foreach ($data as &$item)
{
$item = explode("\t", $item);
}
unset($item);
// Now we have the field names
$fields = $data[0];
unset($data[0]);
/* -------------------------------------------------------------------------------- */
As a result, we get two arrays:
  • $fields - with the list of fields
  • $data - with the list of values