Skip to content

Instantly share code, notes, and snippets.

@kamotos
Last active September 16, 2015 16:44
Show Gist options
  • Save kamotos/b45a4a9458295c85dc93 to your computer and use it in GitHub Desktop.
Save kamotos/b45a4a9458295c85dc93 to your computer and use it in GitHub Desktop.
FriendRyde API documentation

FORMAT: 1A HOST: http://api.friendryde.com

FriendRyde

This is the official documentation of the FriendRyde service to be used by the iOS and Android apps.

Requests Authorization header

Beside signup resources, all others endpoints must be request with an Authorization header. Example:

Authorization: Token 6d37107fccd2db239a2386b791b7fdf9adc17915

##Typical Server Responses

  • 200 OK - The request was successful (some API calls may return 201 instead).
  • 201 Created - The request was successful and a resource was created.
  • 400 Bad Request - The request could not be understood, was missing required parameters or some parameters were invalid.
  • 401 Unauthorized - Authentication failed or user does not have permissions for the requested operation.
  • 404 Not Found - Resource was not found.
  • 405 Method Not Allowed - Requested method is not supported for the specified resource.
  • 500 Internal Server Error - Some error has occured on our servers. We are usually notified when similar errors happens. Feel free to send us an email here zahim@friendryde.com

Group Signup

The user can either signup with his email or using his Facebook

/v1/auth/register/

POST

####Regular signup

  • Parameters

    • password1 (required, string) ... Password
    • phone_number (required, string) ... User's phone number
    • user_type (required, string) ... Possible options are : rider or driver
    • email (required, string, ``) ... Email field
    • first_name (required, string, ``) ... User's first name
    • last_name (required, string, ``) ... User's last name
    • avatar (optional, image file, ``) ... The user's picture.
  • Request

  • Response 201 (application/json)

      {
          "user_type": "rider",
          "token": "4f3b86bcbebd5ab048ef42c93f3985d9753a008a",
          "id": 76
      }
    
  • Response 400

      {
          "phone_number": [
              "This field is required."
          ],
          "password1": [
              "This field is required."
          ],
          "first_name": [
              "This field is required."
          ],
          "last_name": [
              "This field is required."
          ],
          "user_type": [
              "This field is required."
          ],
          "email": [
              "A user with that username already exists."
          ]
      }
    

/v1/auth/login/facebook/

POST

Facebook signup/login

This endpoint must be used for both signup and login with Facebook access token. If some error is generated by Facebook, we return it using as a response with 400 status code.

  • Parameters

    • access_token (required, string) ... Facebook's access token. Facebook authorization must be done by iOS or Android app
    • user_type (required, string) ... Possible options are : rider or driver
  • Request

      {
          "access_token": "CAAFITQPVWrYBANYRyjL5Fqy2WxUZCGTb9SFtbIK0xWB42EWNqjB4JNq7zdwoQGZCN4ak1r5m6LcDZBeZArbyPJdwQLhRlVnLnrijSJuj12vcnZCbsL5gYWUT7lEaLkIZAFSC4C9TuLx2G0MuMh9qZAaIlZAghPOvli8TRXqNwyeF3HZCqMB6bJT2sFryNgG5qli0ZD",
          "user_type": "rider"
      }
    
  • Response 201 (application/json)

      {
          "user_type": "rider",
          "token": "4f3b86bcbebd5ab048ef42ceef3985d9753a008a",
          "id": 56
      }
    
  • Response 400

      {
          "detail": {
              "code": 2,
              "message": "An unexpected error has occurred. Please retry your request later.",
              "is_transient": true,
              "type": "OAuthException"
          }
      }
    

Group Login

POST /v1/auth/login/

Check the credentials and return the REST Token if the credentials are valid and authenticated. Accept the following POST parameters: username, password.

  • Parameters

    • username (required, string) ... Username
    • password (required, string) ... Password
  • Request (application/json)

      {"username": "john.doe", "password": "my_password"}
    
  • Response 200

      {
          "key": "8714b9ebffc4170e11092984d323f619fe2cf720"
      }
    
  • Response 401

      {
          "error": "Invalid Username/Password."
      }
    

Group Users

User [/v1/user/]

Authenticated user detail [GET]

Use this resource to get the authenticated user's information.

Fields:

| Field | Description | Editable |---|---|---|---|---| |url |User's absolute URL | No | |reviews_url |URL to the resource providing reviews about the user |No | |driverprofile |The driver profile resource url. Only available if the user_type is driver. | No | |car |The user's car resource url. Only available if the user_type is driver | No | |id |User id | No |
|user_type |Possible options are driver & rider| No |
|truncated_name |The user's first name + first letter of his last name. Used to display drivers names to travelers | No | |full_name |The user's full name| No | |rating |score is the user's rating for count rating he received | No | |first_name |The user's first name|Yes | |last_name |The user's last name|Yes | |email |User's email | Yes | |city |The user's city |Yes | |country |two-letter country codes following the ISO 3166-1 alpha-2 standard|Yes | |phone_number |The user's phone number |Yes | |languages |An array of the languages spoken by the user |No | |avatar |Avatar of the user |Yes | |wiretransfer |The user's wire transfer resource URL |No |

  • Request

    • Headers

        Accept: application/json
        Authorization: Token {user-token}
      
  • Response 200 (application/json)

      {
          "url": "https://api.friendryde.com/v1/user/52/",
          "avatar": "http://www.friendryde.com/media/avatar/52.jpg",
          "id": 52,
          "email": "john.doe@gmail.com",
          "city": "Rabat, Morocco",
          "country": "MA",
          "full_name": "John Doe",
          "driverprofile": "http://api.friendryde.com/v1/driver/15/",
          "phone_number": "+212600112233",
          "first_name": "John",
          "last_name": "Doe",
          "car": "https://api.friendryde.com/v1/car/14/",
          "truncated_name": "John d.",
          "user_type": "driver",
          "rating": {
              "count": 0,
              "score": null
          },
          "reviews_url": "http://api.friendryde.com/v1/user/52/reviews/",
          "languages": [
              "English",
              "Arabic",
              "Moroccan Arabic",
              "Berber",
              "French"
          ],
          "wiretransfer": "http://localhost.com:8000/api/v1/withdrawal/wiretransfer/5/"
      }
    

Update user information [PATCH]

Use this resource to update the user's information.

  • Parameters

    • avatar (optional, image file, ``) ... The user's picture.
    • phone_number (required, string) ... User's phone number
    • email (required, string, ``) ... Email field
    • first_name (required, string, ``) ... User's first name
    • last_name (required, string, ``) ... User's last name
    • city (required, string, ``) ... User's city
    • country (optional, string, US) ... two-letter country codes following the ISO 3166-1 alpha-2 standard
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200 (application/json)

      {
          "url": "https://api.friendryde.com/v1/user/52/",
          "avatar": "http://www.friendryde.com/media/avatar/52.jpg",
          "id": 52,
          "email": "john.doe@gmail.com",
          "city": "Rabat, Morocco",
          "country": "MA",
          "full_name": "John Doe",
          "driverprofile": "http://api.friendryde.com/v1/driver/15/",
          "phone_number": "+21260000000",
          "first_name": "John",
          "last_name": "Doe",
          "car": "https://api.friendryde.com/v1/car/14/",
          "truncated_name": "John d.",
          "user_type": "driver",
          "rating": {
              "count": 0,
              "score": null
          },
          "reviews_url": "http://api.friendryde.com/v1/user/52/reviews/",
          "languages": [
              "English",
              "Arabic",
              "Moroccan Arabic",
              "Berber",
              "French"
          ]
      }
    
  • Response 400

      {
          "email": [
              "Enter a valid email address."
          ]
      }
    

Options [OPTIONS]

  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "name": "User instance",
          "description": "",
          "renders": [
              "application/json",
              "text/html"
          ],
          "parses": [
              "application/json",
              "application/x-www-form-urlencoded",
              "multipart/form-data"
          ],
          "actions": {
              "PATCH": {
                  "url": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "avatar": {
                      "type": "image upload",
                      "required": true,
                      "read_only": false
                  },
                  "id": {
                      "type": "integer",
                      "required": false,
                      "read_only": true,
                      "label": "ID"
                  },
                  "email": {
                      "type": "email",
                      "required": false,
                      "read_only": false,
                      "label": "email address",
                      "max_length": 75
                  },
                  "city": {
                      "type": "string",
                      "required": true,
                      "read_only": false,
                      "label": "city",
                      "max_length": 255
                  },
                  "country": {
                      "type": "choice",
                      "required": false,
                      "read_only": false,
                      "label": "country",
                      "choices": [
                          {
                              "display_name": "---------",
                              "value": ""
                          },
                          {
                              "display_name": "Afghanistan",
                              "value": "AF"
                          },
                          {
                              "display_name": "Albania",
                              "value": "AL"
                          },
                          {
                              "display_name": "Algeria",
                              "value": "DZ"
                          },
                          {
                              "display_name": "American Samoa",
                              "value": "AS"
                          },
                          {
                              "display_name": "Andorra",
                              "value": "AD"
                          },
                          {
                              "display_name": "Angola",
                              "value": "AO"
                          },
                          {
                              "display_name": "Anguilla",
                              "value": "AI"
                          },
                          {
                              "display_name": "Antarctica",
                              "value": "AQ"
                          },
                          {
                              "display_name": "Antigua and Barbuda",
                              "value": "AG"
                          },
                          {
                              "display_name": "Argentina",
                              "value": "AR"
                          },
                          {
                              "display_name": "Armenia",
                              "value": "AM"
                          },
                          {
                              "display_name": "Aruba",
                              "value": "AW"
                          },
                          {
                              "display_name": "Australia",
                              "value": "AU"
                          },
                          {
                              "display_name": "Austria",
                              "value": "AT"
                          },
                          {
                              "display_name": "Azerbaijan",
                              "value": "AZ"
                          },
                          {
                              "display_name": "Bahamas",
                              "value": "BS"
                          },
                          {
                              "display_name": "Bahrain",
                              "value": "BH"
                          },
                          {
                              "display_name": "Bangladesh",
                              "value": "BD"
                          },
                          {
                              "display_name": "Barbados",
                              "value": "BB"
                          },
                          {
                              "display_name": "Belarus",
                              "value": "BY"
                          },
                          {
                              "display_name": "Belgium",
                              "value": "BE"
                          },
                          {
                              "display_name": "Belize",
                              "value": "BZ"
                          },
                          {
                              "display_name": "Benin",
                              "value": "BJ"
                          },
                          {
                              "display_name": "Bermuda",
                              "value": "BM"
                          },
                          {
                              "display_name": "Bhutan",
                              "value": "BT"
                          },
                          {
                              "display_name": "Bolivia, Plurinational State of",
                              "value": "BO"
                          },
                          {
                              "display_name": "Bonaire, Sint Eustatius and Saba",
                              "value": "BQ"
                          },
                          {
                              "display_name": "Bosnia and Herzegovina",
                              "value": "BA"
                          },
                          {
                              "display_name": "Botswana",
                              "value": "BW"
                          },
                          {
                              "display_name": "Bouvet Island",
                              "value": "BV"
                          },
                          {
                              "display_name": "Brazil",
                              "value": "BR"
                          },
                          {
                              "display_name": "British Indian Ocean Territory",
                              "value": "IO"
                          },
                          {
                              "display_name": "Brunei Darussalam",
                              "value": "BN"
                          },
                          {
                              "display_name": "Bulgaria",
                              "value": "BG"
                          },
                          {
                              "display_name": "Burkina Faso",
                              "value": "BF"
                          },
                          {
                              "display_name": "Burundi",
                              "value": "BI"
                          },
                          {
                              "display_name": "Cambodia",
                              "value": "KH"
                          },
                          {
                              "display_name": "Cameroon",
                              "value": "CM"
                          },
                          {
                              "display_name": "Canada",
                              "value": "CA"
                          },
                          {
                              "display_name": "Cape Verde",
                              "value": "CV"
                          },
                          {
                              "display_name": "Cayman Islands",
                              "value": "KY"
                          },
                          {
                              "display_name": "Central African Republic",
                              "value": "CF"
                          },
                          {
                              "display_name": "Chad",
                              "value": "TD"
                          },
                          {
                              "display_name": "Chile",
                              "value": "CL"
                          },
                          {
                              "display_name": "China",
                              "value": "CN"
                          },
                          {
                              "display_name": "Christmas Island",
                              "value": "CX"
                          },
                          {
                              "display_name": "Cocos (Keeling) Islands",
                              "value": "CC"
                          },
                          {
                              "display_name": "Colombia",
                              "value": "CO"
                          },
                          {
                              "display_name": "Comoros",
                              "value": "KM"
                          },
                          {
                              "display_name": "Congo",
                              "value": "CG"
                          },
                          {
                              "display_name": "Congo (the Democratic Republic of the)",
                              "value": "CD"
                          },
                          {
                              "display_name": "Cook Islands",
                              "value": "CK"
                          },
                          {
                              "display_name": "Costa Rica",
                              "value": "CR"
                          },
                          {
                              "display_name": "Croatia",
                              "value": "HR"
                          },
                          {
                              "display_name": "Cuba",
                              "value": "CU"
                          },
                          {
                              "display_name": "Curaçao",
                              "value": "CW"
                          },
                          {
                              "display_name": "Cyprus",
                              "value": "CY"
                          },
                          {
                              "display_name": "Czech Republic",
                              "value": "CZ"
                          },
                          {
                              "display_name": "Côte d'Ivoire",
                              "value": "CI"
                          },
                          {
                              "display_name": "Denmark",
                              "value": "DK"
                          },
                          {
                              "display_name": "Djibouti",
                              "value": "DJ"
                          },
                          {
                              "display_name": "Dominica",
                              "value": "DM"
                          },
                          {
                              "display_name": "Dominican Republic",
                              "value": "DO"
                          },
                          {
                              "display_name": "Ecuador",
                              "value": "EC"
                          },
                          {
                              "display_name": "Egypt",
                              "value": "EG"
                          },
                          {
                              "display_name": "El Salvador",
                              "value": "SV"
                          },
                          {
                              "display_name": "Equatorial Guinea",
                              "value": "GQ"
                          },
                          {
                              "display_name": "Eritrea",
                              "value": "ER"
                          },
                          {
                              "display_name": "Estonia",
                              "value": "EE"
                          },
                          {
                              "display_name": "Ethiopia",
                              "value": "ET"
                          },
                          {
                              "display_name": "Falkland Islands  [Malvinas]",
                              "value": "FK"
                          },
                          {
                              "display_name": "Faroe Islands",
                              "value": "FO"
                          },
                          {
                              "display_name": "Fiji",
                              "value": "FJ"
                          },
                          {
                              "display_name": "Finland",
                              "value": "FI"
                          },
                          {
                              "display_name": "France",
                              "value": "FR"
                          },
                          {
                              "display_name": "French Guiana",
                              "value": "GF"
                          },
                          {
                              "display_name": "French Polynesia",
                              "value": "PF"
                          },
                          {
                              "display_name": "French Southern Territories",
                              "value": "TF"
                          },
                          {
                              "display_name": "Gabon",
                              "value": "GA"
                          },
                          {
                              "display_name": "Gambia (The)",
                              "value": "GM"
                          },
                          {
                              "display_name": "Georgia",
                              "value": "GE"
                          },
                          {
                              "display_name": "Germany",
                              "value": "DE"
                          },
                          {
                              "display_name": "Ghana",
                              "value": "GH"
                          },
                          {
                              "display_name": "Gibraltar",
                              "value": "GI"
                          },
                          {
                              "display_name": "Greece",
                              "value": "GR"
                          },
                          {
                              "display_name": "Greenland",
                              "value": "GL"
                          },
                          {
                              "display_name": "Grenada",
                              "value": "GD"
                          },
                          {
                              "display_name": "Guadeloupe",
                              "value": "GP"
                          },
                          {
                              "display_name": "Guam",
                              "value": "GU"
                          },
                          {
                              "display_name": "Guatemala",
                              "value": "GT"
                          },
                          {
                              "display_name": "Guernsey",
                              "value": "GG"
                          },
                          {
                              "display_name": "Guinea",
                              "value": "GN"
                          },
                          {
                              "display_name": "Guinea-Bissau",
                              "value": "GW"
                          },
                          {
                              "display_name": "Guyana",
                              "value": "GY"
                          },
                          {
                              "display_name": "Haiti",
                              "value": "HT"
                          },
                          {
                              "display_name": "Heard Island and McDonald Islands",
                              "value": "HM"
                          },
                          {
                              "display_name": "Holy See  [Vatican City State]",
                              "value": "VA"
                          },
                          {
                              "display_name": "Honduras",
                              "value": "HN"
                          },
                          {
                              "display_name": "Hong Kong",
                              "value": "HK"
                          },
                          {
                              "display_name": "Hungary",
                              "value": "HU"
                          },
                          {
                              "display_name": "Iceland",
                              "value": "IS"
                          },
                          {
                              "display_name": "India",
                              "value": "IN"
                          },
                          {
                              "display_name": "Indonesia",
                              "value": "ID"
                          },
                          {
                              "display_name": "Iran (the Islamic Republic of)",
                              "value": "IR"
                          },
                          {
                              "display_name": "Iraq",
                              "value": "IQ"
                          },
                          {
                              "display_name": "Ireland",
                              "value": "IE"
                          },
                          {
                              "display_name": "Isle of Man",
                              "value": "IM"
                          },
                          {
                              "display_name": "Israel",
                              "value": "IL"
                          },
                          {
                              "display_name": "Italy",
                              "value": "IT"
                          },
                          {
                              "display_name": "Jamaica",
                              "value": "JM"
                          },
                          {
                              "display_name": "Japan",
                              "value": "JP"
                          },
                          {
                              "display_name": "Jersey",
                              "value": "JE"
                          },
                          {
                              "display_name": "Jordan",
                              "value": "JO"
                          },
                          {
                              "display_name": "Kazakhstan",
                              "value": "KZ"
                          },
                          {
                              "display_name": "Kenya",
                              "value": "KE"
                          },
                          {
                              "display_name": "Kiribati",
                              "value": "KI"
                          },
                          {
                              "display_name": "Korea (the Democratic People's Republic of)",
                              "value": "KP"
                          },
                          {
                              "display_name": "Korea (the Republic of)",
                              "value": "KR"
                          },
                          {
                              "display_name": "Kuwait",
                              "value": "KW"
                          },
                          {
                              "display_name": "Kyrgyzstan",
                              "value": "KG"
                          },
                          {
                              "display_name": "Lao People's Democratic Republic",
                              "value": "LA"
                          },
                          {
                              "display_name": "Latvia",
                              "value": "LV"
                          },
                          {
                              "display_name": "Lebanon",
                              "value": "LB"
                          },
                          {
                              "display_name": "Lesotho",
                              "value": "LS"
                          },
                          {
                              "display_name": "Liberia",
                              "value": "LR"
                          },
                          {
                              "display_name": "Libya",
                              "value": "LY"
                          },
                          {
                              "display_name": "Liechtenstein",
                              "value": "LI"
                          },
                          {
                              "display_name": "Lithuania",
                              "value": "LT"
                          },
                          {
                              "display_name": "Luxembourg",
                              "value": "LU"
                          },
                          {
                              "display_name": "Macao",
                              "value": "MO"
                          },
                          {
                              "display_name": "Macedonia (the former Yugoslav Republic of)",
                              "value": "MK"
                          },
                          {
                              "display_name": "Madagascar",
                              "value": "MG"
                          },
                          {
                              "display_name": "Malawi",
                              "value": "MW"
                          },
                          {
                              "display_name": "Malaysia",
                              "value": "MY"
                          },
                          {
                              "display_name": "Maldives",
                              "value": "MV"
                          },
                          {
                              "display_name": "Mali",
                              "value": "ML"
                          },
                          {
                              "display_name": "Malta",
                              "value": "MT"
                          },
                          {
                              "display_name": "Marshall Islands",
                              "value": "MH"
                          },
                          {
                              "display_name": "Martinique",
                              "value": "MQ"
                          },
                          {
                              "display_name": "Mauritania",
                              "value": "MR"
                          },
                          {
                              "display_name": "Mauritius",
                              "value": "MU"
                          },
                          {
                              "display_name": "Mayotte",
                              "value": "YT"
                          },
                          {
                              "display_name": "Mexico",
                              "value": "MX"
                          },
                          {
                              "display_name": "Micronesia (the Federated States of)",
                              "value": "FM"
                          },
                          {
                              "display_name": "Moldova (the Republic of)",
                              "value": "MD"
                          },
                          {
                              "display_name": "Monaco",
                              "value": "MC"
                          },
                          {
                              "display_name": "Mongolia",
                              "value": "MN"
                          },
                          {
                              "display_name": "Montenegro",
                              "value": "ME"
                          },
                          {
                              "display_name": "Montserrat",
                              "value": "MS"
                          },
                          {
                              "display_name": "Morocco",
                              "value": "MA"
                          },
                          {
                              "display_name": "Mozambique",
                              "value": "MZ"
                          },
                          {
                              "display_name": "Myanmar",
                              "value": "MM"
                          },
                          {
                              "display_name": "Namibia",
                              "value": "NA"
                          },
                          {
                              "display_name": "Nauru",
                              "value": "NR"
                          },
                          {
                              "display_name": "Nepal",
                              "value": "NP"
                          },
                          {
                              "display_name": "Netherlands",
                              "value": "NL"
                          },
                          {
                              "display_name": "New Caledonia",
                              "value": "NC"
                          },
                          {
                              "display_name": "New Zealand",
                              "value": "NZ"
                          },
                          {
                              "display_name": "Nicaragua",
                              "value": "NI"
                          },
                          {
                              "display_name": "Niger",
                              "value": "NE"
                          },
                          {
                              "display_name": "Nigeria",
                              "value": "NG"
                          },
                          {
                              "display_name": "Niue",
                              "value": "NU"
                          },
                          {
                              "display_name": "Norfolk Island",
                              "value": "NF"
                          },
                          {
                              "display_name": "Northern Mariana Islands",
                              "value": "MP"
                          },
                          {
                              "display_name": "Norway",
                              "value": "NO"
                          },
                          {
                              "display_name": "Oman",
                              "value": "OM"
                          },
                          {
                              "display_name": "Pakistan",
                              "value": "PK"
                          },
                          {
                              "display_name": "Palau",
                              "value": "PW"
                          },
                          {
                              "display_name": "Palestine, State of",
                              "value": "PS"
                          },
                          {
                              "display_name": "Panama",
                              "value": "PA"
                          },
                          {
                              "display_name": "Papua New Guinea",
                              "value": "PG"
                          },
                          {
                              "display_name": "Paraguay",
                              "value": "PY"
                          },
                          {
                              "display_name": "Peru",
                              "value": "PE"
                          },
                          {
                              "display_name": "Philippines",
                              "value": "PH"
                          },
                          {
                              "display_name": "Pitcairn",
                              "value": "PN"
                          },
                          {
                              "display_name": "Poland",
                              "value": "PL"
                          },
                          {
                              "display_name": "Portugal",
                              "value": "PT"
                          },
                          {
                              "display_name": "Puerto Rico",
                              "value": "PR"
                          },
                          {
                              "display_name": "Qatar",
                              "value": "QA"
                          },
                          {
                              "display_name": "Romania",
                              "value": "RO"
                          },
                          {
                              "display_name": "Russian Federation",
                              "value": "RU"
                          },
                          {
                              "display_name": "Rwanda",
                              "value": "RW"
                          },
                          {
                              "display_name": "Réunion",
                              "value": "RE"
                          },
                          {
                              "display_name": "Saint Barthélemy",
                              "value": "BL"
                          },
                          {
                              "display_name": "Saint Helena, Ascension and Tristan da Cunha",
                              "value": "SH"
                          },
                          {
                              "display_name": "Saint Kitts and Nevis",
                              "value": "KN"
                          },
                          {
                              "display_name": "Saint Lucia",
                              "value": "LC"
                          },
                          {
                              "display_name": "Saint Martin (French part)",
                              "value": "MF"
                          },
                          {
                              "display_name": "Saint Pierre and Miquelon",
                              "value": "PM"
                          },
                          {
                              "display_name": "Saint Vincent and the Grenadines",
                              "value": "VC"
                          },
                          {
                              "display_name": "Samoa",
                              "value": "WS"
                          },
                          {
                              "display_name": "San Marino",
                              "value": "SM"
                          },
                          {
                              "display_name": "Sao Tome and Principe",
                              "value": "ST"
                          },
                          {
                              "display_name": "Saudi Arabia",
                              "value": "SA"
                          },
                          {
                              "display_name": "Senegal",
                              "value": "SN"
                          },
                          {
                              "display_name": "Serbia",
                              "value": "RS"
                          },
                          {
                              "display_name": "Seychelles",
                              "value": "SC"
                          },
                          {
                              "display_name": "Sierra Leone",
                              "value": "SL"
                          },
                          {
                              "display_name": "Singapore",
                              "value": "SG"
                          },
                          {
                              "display_name": "Sint Maarten (Dutch part)",
                              "value": "SX"
                          },
                          {
                              "display_name": "Slovakia",
                              "value": "SK"
                          },
                          {
                              "display_name": "Slovenia",
                              "value": "SI"
                          },
                          {
                              "display_name": "Solomon Islands",
                              "value": "SB"
                          },
                          {
                              "display_name": "Somalia",
                              "value": "SO"
                          },
                          {
                              "display_name": "South Africa",
                              "value": "ZA"
                          },
                          {
                              "display_name": "South Georgia and the South Sandwich Islands",
                              "value": "GS"
                          },
                          {
                              "display_name": "South Sudan",
                              "value": "SS"
                          },
                          {
                              "display_name": "Spain",
                              "value": "ES"
                          },
                          {
                              "display_name": "Sri Lanka",
                              "value": "LK"
                          },
                          {
                              "display_name": "Sudan",
                              "value": "SD"
                          },
                          {
                              "display_name": "Suriname",
                              "value": "SR"
                          },
                          {
                              "display_name": "Svalbard and Jan Mayen",
                              "value": "SJ"
                          },
                          {
                              "display_name": "Swaziland",
                              "value": "SZ"
                          },
                          {
                              "display_name": "Sweden",
                              "value": "SE"
                          },
                          {
                              "display_name": "Switzerland",
                              "value": "CH"
                          },
                          {
                              "display_name": "Syrian Arab Republic",
                              "value": "SY"
                          },
                          {
                              "display_name": "Taiwan (Province of China)",
                              "value": "TW"
                          },
                          {
                              "display_name": "Tajikistan",
                              "value": "TJ"
                          },
                          {
                              "display_name": "Tanzania, United Republic of",
                              "value": "TZ"
                          },
                          {
                              "display_name": "Thailand",
                              "value": "TH"
                          },
                          {
                              "display_name": "Timor-Leste",
                              "value": "TL"
                          },
                          {
                              "display_name": "Togo",
                              "value": "TG"
                          },
                          {
                              "display_name": "Tokelau",
                              "value": "TK"
                          },
                          {
                              "display_name": "Tonga",
                              "value": "TO"
                          },
                          {
                              "display_name": "Trinidad and Tobago",
                              "value": "TT"
                          },
                          {
                              "display_name": "Tunisia",
                              "value": "TN"
                          },
                          {
                              "display_name": "Turkey",
                              "value": "TR"
                          },
                          {
                              "display_name": "Turkmenistan",
                              "value": "TM"
                          },
                          {
                              "display_name": "Turks and Caicos Islands",
                              "value": "TC"
                          },
                          {
                              "display_name": "Tuvalu",
                              "value": "TV"
                          },
                          {
                              "display_name": "Uganda",
                              "value": "UG"
                          },
                          {
                              "display_name": "Ukraine",
                              "value": "UA"
                          },
                          {
                              "display_name": "United Arab Emirates",
                              "value": "AE"
                          },
                          {
                              "display_name": "United Kingdom",
                              "value": "GB"
                          },
                          {
                              "display_name": "United States",
                              "value": "US"
                          },
                          {
                              "display_name": "United States Minor Outlying Islands",
                              "value": "UM"
                          },
                          {
                              "display_name": "Uruguay",
                              "value": "UY"
                          },
                          {
                              "display_name": "Uzbekistan",
                              "value": "UZ"
                          },
                          {
                              "display_name": "Vanuatu",
                              "value": "VU"
                          },
                          {
                              "display_name": "Venezuela, Bolivarian Republic of",
                              "value": "VE"
                          },
                          {
                              "display_name": "Viet Nam",
                              "value": "VN"
                          },
                          {
                              "display_name": "Virgin Islands (British)",
                              "value": "VG"
                          },
                          {
                              "display_name": "Virgin Islands (U.S.)",
                              "value": "VI"
                          },
                          {
                              "display_name": "Wallis and Futuna",
                              "value": "WF"
                          },
                          {
                              "display_name": "Western Sahara",
                              "value": "EH"
                          },
                          {
                              "display_name": "Yemen",
                              "value": "YE"
                          },
                          {
                              "display_name": "Zambia",
                              "value": "ZM"
                          },
                          {
                              "display_name": "Zimbabwe",
                              "value": "ZW"
                          },
                          {
                              "display_name": "Åland Islands",
                              "value": "AX"
                          }
                      ]
                  },
                  "full_name": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "driverprofile": {
                      "type": "field",
                      "required": true,
                      "read_only": false
                  },
                  "phone_number": {
                      "type": "string",
                      "required": true,
                      "read_only": false,
                      "label": "phone number",
                      "max_length": 100
                  },
                  "first_name": {
                      "type": "string",
                      "required": false,
                      "read_only": false,
                      "label": "first name",
                      "max_length": 30
                  },
                  "last_name": {
                      "type": "string",
                      "required": false,
                      "read_only": false,
                      "label": "last name",
                      "max_length": 30
                  },
                  "car": {
                      "type": "field",
                      "required": true,
                      "read_only": true
                  },
                  "truncated_name": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "user_type": {
                      "type": "choice",
                      "required": true,
                      "read_only": true,
                      "label": "user type",
                      "choices": [
                          {
                              "display_name": "Traveler",
                              "value": "rider"
                          },
                          {
                              "display_name": "Driver",
                              "value": "driver"
                          },
                          {
                              "display_name": "Partner",
                              "value": "partner"
                          }
                      ]
                  },
                  "rating": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "reviews_url": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "languages": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "units_of_measurement": {
                      "type": "choice",
                      "required": true,
                      "read_only": false,
                      "label": "units of measurement",
                      "choices": [
                          {
                              "display_name": "imperial",
                              "value": "imperial"
                          },
                          {
                              "display_name": "metric",
                              "value": "metric"
                          }
                      ]
                  }
              }
          }
      }
    

Password [/v1/user/set-password/]

Use this endpoint to set a password for the user when he signs up using Facebook

Set user password for new users [POST]

Fields:

  • new_password1
  • new_password2
  • Request (application/json)

      + Headers
              Authorization: Token {user-token}
    
    • Body

        {"new_password1": "my_password", "new_password2": "my_password"}
      
  • Response 200

      {'detail': 'password set'}
    
  • Response 400

      {
          "detail": {
              "__all__": [
                  "You can set a password only for new accounts"
              ]
          }
      }
    

Change password [/v1/auth/password/change/]

Use this endpoint to change a user's password

Change password for user [POST]

Fields:

  • new_password1
  • new_password2
  • Request (application/json)

      + Headers
              Authorization: Token {user-token}
    
    • Body

        {"new_password1": "my_password", "new_password2": "my_password"}
      
  • Response 200

      {"success": "New password has been saved."}
    
  • Response 400

      {
          new_password2: [
              "The two password fields didn't match."
          ]
      }
    

Position [/v1/user/position/]

Used for tracking the user's position.

Add a new position [POST]

Adds a user's position.

  • Request (application/json)

      + Headers
              Authorization: Token {user-token}
    
    • Body

        {"lat": 15.15, "lng":36.36}
      
  • Response 201

      {
          "position": {
              "type": "Point",
              "coordinates": [
                  15.15,
                  36.36
              ]
          },
          "last_seen": "2014-09-11T17:20:56.254"
      }
    
  • Response 400

      {
          "detail": {
              "lat": [
                  "Enter a number."
              ]
          }
      }
    

User position [GET]

Returns the user's last position in GeoJSON format

  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "position": {
              "type": "Point",
              "coordinates": [
                  37,
                  56
              ]
          },
          "last_seen": "2014-09-11T17:20:56.254"
      }
    

Reviews [/v1/user/{id}/reviews/]

Use this endpoint to get reviews about a user.

Get a list of reviews about a user [GET]

  • Parameters

    • id (required, string, 34) ... The user's id
  • Request (application/json)

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      [
          {
              "comment": "Great driver !",
              "id": 15,
              "score": 5,
              "creation_date": "2014-09-27T01:20:57.294Z"
          },
          {
              "comment": "",
              "id": 11,
              "score": 3,
              "creation_date": "2014-09-11T17:55:11.555Z"
          }
      ]
    

Android registration ID [/v1/user/set-registration-id/]

Set Android registration ID [POST]

Stores Android registration ID on the server side for the authentication user. Returns a list of the registration IDs for the same user.

  • Request (application/json)

    • Headers

        Authorization: Token {user-token}
      
    • Body

        {"registration_id": "5245rc9e56g648f6dd"}
      
  • Response 200

      [
          "5245rc9e56g648f6dd"
      ]
    
  • Response 400

      {
          "detail": {
              "registration_id": [
                  "This field is required."
              ]
          }
      }
    

Traveler to driver account [/v1/user/become-driver/]

Convert traveler account to driver account [POST]

Use this resource to convert a traveler's account to driver account.

  • Request (application/json)

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "url": "https://api.friendryde.com/v1/user/52/",
          "avatar": "http://www.friendryde.com/media/avatar/52.jpg",
          "id": 52,
          "email": "john.doe@gmail.com",
          "city": "Rabat, Morocco",
          "country": "MA",
          "full_name": "John Doe",
          "driverprofile": "http://api.friendryde.com/v1/driver/15/",
          "phone_number": "+21260000000",
          "first_name": "John",
          "last_name": "Doe",
          "car": "https://api.friendryde.com/v1/car/14/",
          "truncated_name": "John D.",
          "user_type": "driver",
          "rating": {
              "count": 3,
              "score": 4
          },
          "reviews_url": "http://api.friendryde.com/v1/user/52/reviews/",
          "languages": [
              "English",
              "Arabic",
              "Moroccan Arabic",
              "Berber",
              "French",
          ]
      }
    

Traveler's rides [/v1/user/rides/]

Rides made by traveler [GET]

  • Request (application/json)

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {"confirmed": [], "pending": [], "history": []}
    

Group Cars

Car [/v1/car/{id}/]

Retrieve a car [GET]

Use this resource to get the car's information.

Fields:

| Field | Description | Editable |---|---|---|---|---| |url |Car's absolute URL | No | |user |Car owner | No | |car_make_display |Car make to display to the user|No | |luggage_display |Number of luggage the car can hold. To display to the user|No | |image |Image of the car |Yes | |car_make |Car make |Yes | |car_model |Car model|Yes | |seats |Number of seats |Yes | |doors |Number of doors |Yes | |car_type |Car type |Yes | |has_ac |Car has air conditionner|Yes | |wheelchair |Car has wheelchair capability|Yes | |luggage |Number of luggage the car can hold|Yes |

  • Parameters

    • id (required, number, 55) ... The car id
  • Request

    • Headers

        Accept: application/json
        Authorization: Token {user-token}
      
  • Response 200 (application/json)

      {
          "image": "https://www.friendryde.com/media/users/car/Audi-A1.jpg",
          "car_make_display": "Volvo",
          "seats_display": "4 passengers",
          "luggage_display": "1 luggage",
          "url": "https://api.friendryde.com/v1/car/10/",
          "user": "https://api.friendryde.com/v1/user/34/",
          "car_make": "volvo",
          "car_model": "A1",
          "seats": 4,
          "doors": null,
          "car_type": "Economy",
          "has_ac": true,
          "wheelchair": true,
          "luggage": 1,
          "year": 2012
      }
    

Update car information [PATCH]

Use this resource to update the car's information.

  • Parameters

    • image (optional, image file, ``) ... Image of the car.
    • car_make (required, string, volvo) ... Car make
    • car_model (required, string, S80) ... Car model
    • seats (required, integer, ``) ... Number of seats of the car
    • doors (required, integer, ``) ... Number of doors
    • luggage (required, integer, ``) ... Number of luggage the car can hold
    • car_type (required, string, Economy) ... Car type. Possible options are : Economy, Standard, SUV, Luxury or Minivan. Values are case sensitive
    • has_ac (optional, bool, true) ... Indicates if the car has air condtionner
    • wheelchair (optional, bool, true) ... Indicates if the car is disabled friendly
    • year (optional, integer, 2010) ... The year the car was made
  • Request

    • Headers

        Authorization: Token {user-token}
      
    • Body

        {"seats": 5}
      
  • Response 200 (application/json)

      {
          "image": "https://www.friendryde.com/media/users/car/Audi-A1.jpg",
          "car_make_display": "Volvo",
          "seats_display": "5 passengers",
          "luggage_display": "1 luggage",
          "url": "https://api.friendryde.com/v1/car/10/",
          "user": "https://api.friendryde.com/v1/user/34/",
          "car_make": "volvo",
          "car_model": "A1",
          "seats": 5,
          "doors": null,
          "car_type": "Economy",
          "has_ac": true,
          "wheelchair": true,
          "luggage": 1,
          "year": 2012
      }
    
  • Response 400

      {
          "car_type": [
              "Select a valid choice. bike is not one of the available choices."
          ]
      }
    

Get possible options for car endpoint [OPTIONS]

OPTIONS is also valid for /v1/car/ when needed.

  • Parameters

    • id (optional, integer, 1) ... Car id.
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200 (application/json)

          {
              "name": "Car List",
              "description": "",
              "renders": [
                  "application/json",
                  "text/html"
              ],
              "parses": [
                  "application/json",
                  "application/x-www-form-urlencoded",
                  "multipart/form-data"
              ],
              "actions": {
                  "POST": {
                      "image": {
                          "type": "image upload",
                          "required": true,
                          "read_only": false
                      },
                      "car_make_display": {
                          "type": "string",
                          "required": false,
                          "read_only": true
                      },
                      "seats_display": {
                          "type": "string",
                          "required": false,
                          "read_only": true
                      },
                      "luggage_display": {
                          "type": "string",
                          "required": false,
                          "read_only": true
                      },
                      "url": {
                          "type": "field",
                          "required": false,
                          "read_only": true
                      },
                      "user": {
                          "type": "field",
                          "required": true,
                          "read_only": true,
                          "label": "user"
                      },
                      "car_make": {
                          "type": "choice",
                          "required": true,
                          "read_only": false,
                          "label": "What's your car make?",
                          "choices": [
                              {
                                  "display_name": "Abarth",
                                  "value": "abarth"
                              },
                              {
                                  "display_name": "AC",
                                  "value": "ac"
                              },
                              {
                                  "display_name": "Acura",
                                  "value": "acura"
                              },
                              {
                                  "display_name": "Alfa Romeo",
                                  "value": "alfa-romeo"
                              },
                              {
                                  "display_name": "Allard",
                                  "value": "allard"
                              },
                              {
                                  "display_name": "Alpina",
                                  "value": "alpina"
                              },
                              {
                                  "display_name": "Alpine",
                                  "value": "alpine"
                              },
                              {
                                  "display_name": "Alvis",
                                  "value": "alvis"
                              },
                              {
                                  "display_name": "AMC",
                                  "value": "amc"
                              },
                              {
                                  "display_name": "Ariel",
                                  "value": "ariel"
                              },
                              {
                                  "display_name": "Armstrong Siddeley",
                                  "value": "armstrong-siddeley"
                              },
                              {
                                  "display_name": "Ascari",
                                  "value": "ascari"
                              },
                              {
                                  "display_name": "Aston Martin",
                                  "value": "aston-martin"
                              },
                              {
                                  "display_name": "Audi",
                                  "value": "audi"
                              },
                              {
                                  "display_name": "Austin",
                                  "value": "austin"
                              },
                              {
                                  "display_name": "Austin-Healey",
                                  "value": "austin-healey"
                              },
                              {
                                  "display_name": "Autobianchi",
                                  "value": "autobianchi"
                              },
                              {
                                  "display_name": "Auverland",
                                  "value": "auverland"
                              },
                              {
                                  "display_name": "Avanti",
                                  "value": "avanti"
                              },
                              {
                                  "display_name": "Beijing",
                                  "value": "beijing"
                              },
                              {
                                  "display_name": "Bentley",
                                  "value": "bentley"
                              },
                              {
                                  "display_name": "Berkeley",
                                  "value": "berkeley"
                              },
                              {
                                  "display_name": "Bitter",
                                  "value": "bitter"
                              },
                              {
                                  "display_name": "Bizzarrini",
                                  "value": "bizzarrini"
                              },
                              {
                                  "display_name": "BMW",
                                  "value": "bmw"
                              },
                              {
                                  "display_name": "Brilliance",
                                  "value": "brilliance"
                              },
                              {
                                  "display_name": "Bristol",
                                  "value": "bristol"
                              },
                              {
                                  "display_name": "Bugatti",
                                  "value": "bugatti"
                              },
                              {
                                  "display_name": "Buick",
                                  "value": "buick"
                              },
                              {
                                  "display_name": "Cadillac",
                                  "value": "cadillac"
                              },
                              {
                                  "display_name": "Caterham",
                                  "value": "caterham"
                              },
                              {
                                  "display_name": "Checker",
                                  "value": "checker"
                              },
                              {
                                  "display_name": "Chevrolet",
                                  "value": "chevrolet"
                              },
                              {
                                  "display_name": "Chrysler",
                                  "value": "chrysler"
                              },
                              {
                                  "display_name": "Citroen",
                                  "value": "citroen"
                              },
                              {
                                  "display_name": "Dacia",
                                  "value": "dacia"
                              },
                              {
                                  "display_name": "Daewoo",
                                  "value": "daewoo"
                              },
                              {
                                  "display_name": "DAF",
                                  "value": "daf"
                              },
                              {
                                  "display_name": "Daihatsu",
                                  "value": "daihatsu"
                              },
                              {
                                  "display_name": "Daimler",
                                  "value": "daimler"
                              },
                              {
                                  "display_name": "Datsun",
                                  "value": "datsun"
                              },
                              {
                                  "display_name": "De Tomaso",
                                  "value": "de-tomaso"
                              },
                              {
                                  "display_name": "DKW",
                                  "value": "dkw"
                              },
                              {
                                  "display_name": "Dodge",
                                  "value": "dodge"
                              },
                              {
                                  "display_name": "Donkervoort",
                                  "value": "donkervoort"
                              },
                              {
                                  "display_name": "Eagle",
                                  "value": "eagle"
                              },
                              {
                                  "display_name": "Fairthorpe",
                                  "value": "fairthorpe"
                              },
                              {
                                  "display_name": "Ferrari",
                                  "value": "ferrari"
                              },
                              {
                                  "display_name": "Fiat",
                                  "value": "fiat"
                              },
                              {
                                  "display_name": "Fisker",
                                  "value": "fisker"
                              },
                              {
                                  "display_name": "Ford",
                                  "value": "ford"
                              },
                              {
                                  "display_name": "GAZ",
                                  "value": "gaz"
                              },
                              {
                                  "display_name": "Geely",
                                  "value": "geely"
                              },
                              {
                                  "display_name": "Ginetta",
                                  "value": "ginetta"
                              },
                              {
                                  "display_name": "GMC",
                                  "value": "gmc"
                              },
                              {
                                  "display_name": "Holden",
                                  "value": "holden"
                              },
                              {
                                  "display_name": "Honda",
                                  "value": "honda"
                              },
                              {
                                  "display_name": "Hudson",
                                  "value": "hudson"
                              },
                              {
                                  "display_name": "Humber",
                                  "value": "humber"
                              },
                              {
                                  "display_name": "Hummer",
                                  "value": "hummer"
                              },
                              {
                                  "display_name": "Hyundai",
                                  "value": "hyundai"
                              },
                              {
                                  "display_name": "Infiniti",
                                  "value": "infiniti"
                              },
                              {
                                  "display_name": "Innocenti",
                                  "value": "innocenti"
                              },
                              {
                                  "display_name": "Isuzu",
                                  "value": "isuzu"
                              },
                              {
                                  "display_name": "Italdesign",
                                  "value": "italdesign"
                              },
                              {
                                  "display_name": "JAC",
                                  "value": "jac"
                              },
                              {
                                  "display_name": "Jaguar",
                                  "value": "jaguar"
                              },
                              {
                                  "display_name": "Jeep",
                                  "value": "jeep"
                              },
                              {
                                  "display_name": "Jensen",
                                  "value": "jensen"
                              },
                              {
                                  "display_name": "Kia",
                                  "value": "kia"
                              },
                              {
                                  "display_name": "Koenigsegg",
                                  "value": "koenigsegg"
                              },
                              {
                                  "display_name": "Lada",
                                  "value": "lada"
                              },
                              {
                                  "display_name": "Lamborghini",
                                  "value": "lamborghini"
                              },
                              {
                                  "display_name": "Lancia",
                                  "value": "lancia"
                              },
                              {
                                  "display_name": "Land Rover",
                                  "value": "land-rover"
                              },
                              {
                                  "display_name": "Lexus",
                                  "value": "lexus"
                              },
                              {
                                  "display_name": "Lincoln",
                                  "value": "lincoln"
                              },
                              {
                                  "display_name": "Lotec",
                                  "value": "lotec"
                              },
                              {
                                  "display_name": "Lotus",
                                  "value": "lotus"
                              },
                              {
                                  "display_name": "Luxgen",
                                  "value": "luxgen"
                              },
                              {
                                  "display_name": "Mahindra",
                                  "value": "mahindra"
                              },
                              {
                                  "display_name": "Marcos",
                                  "value": "marcos"
                              },
                              {
                                  "display_name": "Maserati",
                                  "value": "maserati"
                              },
                              {
                                  "display_name": "Matra-Simca",
                                  "value": "matra-simca"
                              },
                              {
                                  "display_name": "Maybach",
                                  "value": "maybach"
                              },
                              {
                                  "display_name": "Mazda",
                                  "value": "mazda"
                              },
                              {
                                  "display_name": "MCC",
                                  "value": "mcc"
                              },
                              {
                                  "display_name": "McLaren",
                                  "value": "mclaren"
                              },
                              {
                                  "display_name": "Mercedes-Benz",
                                  "value": "mercedes-benz"
                              },
                              {
                                  "display_name": "Mercury",
                                  "value": "mercury"
                              },
                              {
                                  "display_name": "MG",
                                  "value": "mg"
                              },
                              {
                                  "display_name": "Mini",
                                  "value": "mini"
                              },
                              {
                                  "display_name": "Mitsubishi",
                                  "value": "mitsubishi"
                              },
                              {
                                  "display_name": "Monteverdi",
                                  "value": "monteverdi"
                              },
                              {
                                  "display_name": "Moretti",
                                  "value": "moretti"
                              },
                              {
                                  "display_name": "Morgan",
                                  "value": "morgan"
                              },
                              {
                                  "display_name": "Morris",
                                  "value": "morris"
                              },
                              {
                                  "display_name": "Nissan",
                                  "value": "nissan"
                              },
                              {
                                  "display_name": "Noble",
                                  "value": "noble"
                              },
                              {
                                  "display_name": "NSU",
                                  "value": "nsu"
                              },
                              {
                                  "display_name": "Oldsmobile",
                                  "value": "oldsmobile"
                              },
                              {
                                  "display_name": "Opel",
                                  "value": "opel"
                              },
                              {
                                  "display_name": "Packard",
                                  "value": "packard"
                              },
                              {
                                  "display_name": "Pagani",
                                  "value": "pagani"
                              },
                              {
                                  "display_name": "Panoz",
                                  "value": "panoz"
                              },
                              {
                                  "display_name": "Peugeot",
                                  "value": "peugeot"
                              },
                              {
                                  "display_name": "Pininfarina",
                                  "value": "pininfarina"
                              },
                              {
                                  "display_name": "Plymouth",
                                  "value": "plymouth"
                              },
                              {
                                  "display_name": "Pontiac",
                                  "value": "pontiac"
                              },
                              {
                                  "display_name": "Porsche",
                                  "value": "porsche"
                              },
                              {
                                  "display_name": "Proton",
                                  "value": "proton"
                              },
                              {
                                  "display_name": "Reliant",
                                  "value": "reliant"
                              },
                              {
                                  "display_name": "Renault",
                                  "value": "renault"
                              },
                              {
                                  "display_name": "Riley",
                                  "value": "riley"
                              },
                              {
                                  "display_name": "Rolls-Royce",
                                  "value": "rolls-royce"
                              },
                              {
                                  "display_name": "Rover",
                                  "value": "rover"
                              },
                              {
                                  "display_name": "Saab",
                                  "value": "saab"
                              },
                              {
                                  "display_name": "Saleen",
                                  "value": "saleen"
                              },
                              {
                                  "display_name": "Samsung",
                                  "value": "samsung"
                              },
                              {
                                  "display_name": "Saturn",
                                  "value": "saturn"
                              },
                              {
                                  "display_name": "Scion",
                                  "value": "scion"
                              },
                              {
                                  "display_name": "Seat",
                                  "value": "seat"
                              },
                              {
                                  "display_name": "Simca",
                                  "value": "simca"
                              },
                              {
                                  "display_name": "Singer",
                                  "value": "singer"
                              },
                              {
                                  "display_name": "Skoda",
                                  "value": "skoda"
                              },
                              {
                                  "display_name": "Smart",
                                  "value": "smart"
                              },
                              {
                                  "display_name": "Spyker",
                                  "value": "spyker"
                              },
                              {
                                  "display_name": "SsangYong",
                                  "value": "ssangyong"
                              },
                              {
                                  "display_name": "SSC",
                                  "value": "ssc"
                              },
                              {
                                  "display_name": "Steyr",
                                  "value": "steyr"
                              },
                              {
                                  "display_name": "Studebaker",
                                  "value": "studebaker"
                              },
                              {
                                  "display_name": "Subaru",
                                  "value": "subaru"
                              },
                              {
                                  "display_name": "Sunbeam",
                                  "value": "sunbeam"
                              },
                              {
                                  "display_name": "Suzuki",
                                  "value": "suzuki"
                              },
                              {
                                  "display_name": "Talbot",
                                  "value": "talbot"
                              },
                              {
                                  "display_name": "Tata",
                                  "value": "tata"
                              },
                              {
                                  "display_name": "Tatra",
                                  "value": "tatra"
                              },
                              {
                                  "display_name": "Tesla",
                                  "value": "tesla"
                              },
                              {
                                  "display_name": "Toyota",
                                  "value": "toyota"
                              },
                              {
                                  "display_name": "Trabant",
                                  "value": "trabant"
                              },
                              {
                                  "display_name": "Triumph",
                                  "value": "triumph"
                              },
                              {
                                  "display_name": "TVR",
                                  "value": "tvr"
                              },
                              {
                                  "display_name": "Vauxhall",
                                  "value": "vauxhall"
                              },
                              {
                                  "display_name": "Vector",
                                  "value": "vector"
                              },
                              {
                                  "display_name": "Venturi",
                                  "value": "venturi"
                              },
                              {
                                  "display_name": "Volkswagen",
                                  "value": "volkswagen"
                              },
                              {
                                  "display_name": "Volvo",
                                  "value": "volvo"
                              },
                              {
                                  "display_name": "Wartburg",
                                  "value": "wartburg"
                              },
                              {
                                  "display_name": "Westfield",
                                  "value": "westfield"
                              },
                              {
                                  "display_name": "Willys-Overland",
                                  "value": "willys-overland"
                              },
                              {
                                  "display_name": "Xedos",
                                  "value": "xedos"
                              },
                              {
                                  "display_name": "Zagato",
                                  "value": "zagato"
                              },
                              {
                                  "display_name": "Zastava",
                                  "value": "zastava"
                              },
                              {
                                  "display_name": "ZAZ",
                                  "value": "zaz"
                              },
                              {
                                  "display_name": "Zenvo",
                                  "value": "zenvo"
                              },
                              {
                                  "display_name": "ZIL",
                                  "value": "zil"
                              }
                          ]
                      },
                      "car_model": {
                          "type": "string",
                          "required": true,
                          "read_only": false,
                          "label": "What's your car model",
                          "max_length": 50
                      },
                      "seats": {
                          "type": "choice",
                          "required": true,
                          "read_only": false,
                          "label": "Number of passengers",
                          "choices": [
                              {
                                  "display_name": "1 passenger",
                                  "value": 1
                              },
                              {
                                  "display_name": "2 passengers",
                                  "value": 2
                              },
                              {
                                  "display_name": "3 passengers",
                                  "value": 3
                              },
                              {
                                  "display_name": "4 passengers",
                                  "value": 4
                              },
                              {
                                  "display_name": "5 passengers",
                                  "value": 5
                              },
                              {
                                  "display_name": "6 passengers",
                                  "value": 6
                              }
                          ]
                      },
                      "doors": {
                          "type": "choice",
                          "required": false,
                          "read_only": false,
                          "label": "doors",
                          "choices": [
                              {
                                  "display_name": "---------",
                                  "value": ""
                              },
                              {
                                  "display_name": "2 doors",
                                  "value": 2
                              },
                              {
                                  "display_name": "4 doors",
                                  "value": 4
                              }
                          ]
                      },
                      "car_type": {
                          "type": "choice",
                          "required": true,
                          "read_only": false,
                          "label": "What's your car type?",
                          "choices": [
                              {
                                  "display_name": "Economy",
                                  "value": "Economy"
                              },
                              {
                                  "display_name": "Standard",
                                  "value": "Standard"
                              },
                              {
                                  "display_name": "SUV (4x4)",
                                  "value": "SUV"
                              },
                              {
                                  "display_name": "Minivan",
                                  "value": "Minivan"
                              },
                              {
                                  "display_name": "Luxury",
                                  "value": "Luxury"
                              }
                          ]
                      },
                      "has_ac": {
                          "type": "boolean",
                          "required": false,
                          "read_only": false,
                          "label": "has ac"
                      },
                      "wheelchair": {
                          "type": "boolean",
                          "required": false,
                          "read_only": false,
                          "label": "Disabled friendly"
                      },
                      "luggage": {
                          "type": "choice",
                          "required": true,
                          "read_only": false,
                          "label": "luggage",
                          "choices": [
                              {
                                  "display_name": "1 luggage",
                                  "value": 1
                              },
                              {
                                  "display_name": "2 luggages",
                                  "value": 2
                              },
                              {
                                  "display_name": "3 luggages",
                                  "value": 3
                              },
                              {
                                  "display_name": "4 luggages",
                                  "value": 4
                              },
                              {
                                  "display_name": "5 luggages",
                                  "value": 5
                              }
                          ]
                      },
                      "year": {
                          "type": "choice",
                          "required": false,
                          "read_only": false,
                          "label": "year",
                          "choices": [
                              {
                                  "display_name": "---------",
                                  "value": ""
                              },
                              {
                                  "display_name": 2014,
                                  "value": 2014
                              },
                              {
                                  "display_name": 2013,
                                  "value": 2013
                              },
                              {
                                  "display_name": 2012,
                                  "value": 2012
                              },
                              {
                                  "display_name": 2011,
                                  "value": 2011
                              },
                              {
                                  "display_name": 2010,
                                  "value": 2010
                              },
                              {
                                  "display_name": 2009,
                                  "value": 2009
                              },
                              {
                                  "display_name": 2008,
                                  "value": 2008
                              },
                              {
                                  "display_name": 2007,
                                  "value": 2007
                              },
                              {
                                  "display_name": 2006,
                                  "value": 2006
                              },
                              {
                                  "display_name": 2005,
                                  "value": 2005
                              },
                              {
                                  "display_name": 2004,
                                  "value": 2004
                              },
                              {
                                  "display_name": 2003,
                                  "value": 2003
                              },
                              {
                                  "display_name": 2002,
                                  "value": 2002
                              },
                              {
                                  "display_name": 2001,
                                  "value": 2001
                              },
                              {
                                  "display_name": 2000,
                                  "value": 2000
                              },
                              {
                                  "display_name": 1999,
                                  "value": 1999
                              },
                              {
                                  "display_name": 1998,
                                  "value": 1998
                              },
                              {
                                  "display_name": 1997,
                                  "value": 1997
                              },
                              {
                                  "display_name": 1996,
                                  "value": 1996
                              }
                          ]
                      }
                  }
              }
          }       
    

Group Drivers

Driver [/v1/driver/{id}/]

Retrieve a driver profile [GET]

Use this resource to get information about a driver

Fields:

| Field | Description | Editable |---|---|---|---|---| |url |Driver's absolute URL | No | |user |User | No | |stats |Provides stats about driver such as the number or rides given, the overall distance of rides & the balance. This field is shown only if the authenticated user is the concerned driver|No | |license_scan |Driver license image|Yes | |insurance_scan |Insurance image|Yes | |license_number |Driver license number |Yes | |license_country |Country where the driver license was provided|Yes | |license_state |State where the driver license was provided (only valid for the US for now)|Yes | |paypal_account |Email of the Paypal account to be used for transfering money |Yes | |insurance_policy_number|Insurance policy number |Yes | |insurance_company |Company that provided the insurance|Yes | |confirmed |Confirmed driver or not|No | |drive_distance |How far can the user go from his city|Yes | |smart_phone_type |Smart phone type|Yes | |availability |0 for unvailable. 1 for taking only scheduled rides. 2 for taking instant rides as well|Yes |

  • Parameters

    • id (required, number) ... The driver profile id
  • Request

    • Headers

        Accept: application/json
        Authorization: Token {user-token}
      
  • Response 200 (application/json)

      {
          "license_scan": "https://www.friendryde.com/media/users/licence/scan.png",
          "insurance_scan": "http://www.friendryde.com/media/users/insurance/736778.jpg",
          "stats": {
              "rides_given": 5,
              "distance": {
                  "mi": 19.01,
                  "m": 30600,
                  "km": 30.6
              },
              "balance": {
                  "USD": 560,
                  "MAD": 4882.64
              }
          },
          "url": "http://api.friendryde.com/v1/driver/15/",
          "license_number": null,
          "license_country": null,
          "license_state": null,
          "paypal_account": null,
          "insurance_policy_number": null,
          "insurance_company": null,
          "confirmed": false,
          "drive_distance": 50,
          "smart_phone_type": null,
          "availability": 0,
          "user": "http://api.friendryde.com/v1/user/52/"
      }
    

Update driver information [PATCH]

Use this resource to update the driver's information.

  • Parameters

    • id (required, number, 25) ... The driver profile id
    • insurance_scan (optional, image file, ``) ... Insurance image
    • insurance_policy_number (optional, string, ``) ... Insurance policy number
    • insurance_company (optional, string, ``) ... Company that provided the insurance
    • license_scan (optional, image file, ``) ... Driver license image.
    • license_country (optional, string, US) ... two-letter country codes following the ISO 3166-1 alpha-2 standard
    • license_state (optional, string, CA) ... two-letter USA state code
    • license_number (optional, string, ``) ... Driver license number
    • availability (required, integer, 2) ... 0 for unvailable. 1 for taking only scheduled rides. 2 for taking instant rides.
    • smart_phone_type (optional, string, Android) ... Possible options are : Android, iPhone, Windows Phone or other
    • drive_distance (required, integer, 100) ... How far can the user go from his city (in km). Possible values are : 50, 100, 250, 500, 1000.
    • paypal_account (optional, string, true) ... Email of the Paypal account to be used for transfering money
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200 (application/json)

      {
          "url": "https://api.friendryde.com/v1/user/52/",
          "avatar": "http://www.friendryde.com/media/avatar/52.jpg",
          "id": 52,
          "email": "john.doe@gmail.com",
          "city": "Rabat, Morocco",
          "country": "MA",
          "full_name": "John Doe",
          "driverprofile": "http://api.friendryde.com/v1/driver/15/",
          "phone_number": "+21260000000",
          "first_name": "John",
          "last_name": "Doe",
          "car": "https://api.friendryde.com/v1/car/14/",
          "truncated_name": "John d.",
          "user_type": "driver",
          "rating": {
              "count": 0,
              "score": null
          },
          "reviews_url": "http://api.friendryde.com/v1/user/52/reviews/",
          "languages": [
              "English",
              "Arabic",
              "Moroccan Arabic",
              "Berber",
              "French"
          ]
      }
    
  • Response 400

      {
          "availability": [
              "Select a valid choice. 654 is not one of the available choices."
          ]
      }
    

Driver rides [/v1/driver/rides/]

Retrieve the driver's rides [GET]

Returns the rides specific to the authenticated driver. Rides are divided to 3 categories:

  • pending : List of rides that has no driver yet and are waiting for driver confirmation
  • confirmed : List of rides confirmed by the driver that
  • past : List of rides that has been completed
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200 (application/json)

      {
          "past": [],
          "confirmed": [],
          "pending": []
      }
    

Group Coupon

Coupon validation [/v1/coupon/{coupon_code}/validate/{?price}]

Validate coupon [GET]

  • Parameters

    • coupon_code (required, string) ... The coupon to be used.
    • price (required, string) ... Price in USD to be discounted.
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200 (application/json)

      {
          "original_price": {
              "USD": 50,
              "MAD": 435.95
          },
          "price": {
              "USD": 25,
              "MAD": 217.97
          }
      }
    
  • Response 400

      {
          "detail": {
              "code": [
                  "Invalid coupon."
              ]
          }
      }
    

Group Scheduled ride search

There are 2 steps for the scheduled ride search process:

  • Car type selection
  • Drivers selection

GET /v1/search/car-types/{?source,destination,needed_on_date,needed_on_time,seats,luggage}

Car type selection

This resource returns a list of the car types available for the query string provided

Response fields:

  • car_make : Example of a matching car make
  • car_model : Example of a matching car model available
  • image : Example of a car image available
  • car_type : Car type
  • original_price : Price that would be applied if no discount is made
  • price : Price that would be a discount code is used
  • drivers-url : URL to the drivers selection endpoint
  • driver:
    • count: Number of drivers available for a car type
    • truncated_name: Truncated name of one of the drivers available for this car type
    • avatar: Avatar of one of the drivers available for this car type
  • Parameters

    • source (required, string, Barcelona El Prat Airport) ... Pickup address.
    • destination (required, string, Plaça Catalunya, Barcelona) ... Dropoff address.
    • needed_on_date (required, string, 20/10/2014) ... date when the ride is needed. If value is wrong, error is rendered under needed_on field
    • needed_on_time (required, string, 22:00) ... time when the ride is needed. If value is wrong, error is rendered under needed_on field
    • seats (optional, integer, 2) ... Number of passengers. Possible values 1..6
    • luggage (optional, integer, 2) ... Number of luggage that will need to be carried. Possible values 1..5
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      [
          {
              "car_make": "audi",
              "car_model": "A1",
              "image": "https://www.friendryde.com/users/car/Audi-A1.jpg",
              "car_type": "Economy",
              "original_price": {
                  "USD": 134,
                  "MAD": 1100
              },
              "price": {
                  "USD": 134,
                  "MAD": 1100
              },
              "drivers-url": "https://api.friendryde.com/v1/search/Economy/drivers/?source=Helsinki&needed_on_date=20%2F10%2F2014&destination=Turku&needed_on=20%2F10%2F2014+10%3A20&needed_on_time=10%3A20",
              "driver": {
                  "count": 2,
                  "truncated_name": "Zahim A.",
                  "avatar": "https://www.friendryde.com/media/avatar/34.jpg"
              }
          }
      ]
    
  • Response 400

      {
          "detail": {
              "source": [
                  "This field is required."
              ],
              "destination": [
                  "This field is required."
              ],
              "needed_on": [
                  "This field is required."
              ]
          }
      }
    

GET /v1/search/{car_type}/drivers/{?source,destination,needed_on_date,needed_on_time,seats,luggage}

Drivers selection

  • Parameters

    • car_type (required, string, Economy) ... Car type. Possible options are : Economy, Standard, SUV, Luxury or Minivan. Values are case sensitive
    • source (required, string, Barcelona El Prat Airport) ... Pickup address.
    • destination (required, string, Plaça Catalunya, Barcelona) ... Dropoff address.
    • needed_on_date (required, string, 20/10/2014) ... date when the ride is needed. If value is wrong, error is rendered under needed_on field
    • needed_on_time (required, string, 22:00) ... time when the ride is needed. If value is wrong, error is rendered under needed_on field
    • seats (optional, integer, 2) ... Number of passengers. Possible values 1..6
    • luggage (optional, integer, 2) ... Number of luggage that will need to be carried. Possible values 1..5
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      [
          {
              "car_make": "audi",
              "car_model": "A1",
              "image": "https://www.friendryde.com/users/car/Audi-A1.jpg",
              "car_type": "Economy",
              "original_price": {
                  "USD": 134,
                  "MAD": 1100
              },
              "price": {
                  "USD": 134,
                  "MAD": 1100
              },
              "drivers-url": "https://api.friendryde.com/v1/search/Economy/drivers/?source=Helsinki&needed_on_date=20%2F10%2F2014&destination=Turku&needed_on=20%2F10%2F2014+10%3A20&needed_on_time=10%3A20",
              "driver": {
                  "count": 2,
                  "truncated_name": "Zahim A.",
                  "avatar": "https://www.friendryde.com/media/avatar/34.jpg"
              }
          }
      ]
    
  • Response 400

      {
          "detail": {
              "source": [
                  "This field is required."
              ],
              "destination": [
                  "This field is required."
              ],
              "needed_on": [
                  "This field is required."
              ]
          }
      }
    

Group Instant ride search

GET /v1/search/drivers/nearby/{?lat,lng}

Returns drivers nearby provided coordinates.

  • Parameters

    • lat (required, number, 36.512456) ... Latitude
    • lng (required, number, 57.512456) ... Longitude
  • Request (application/json)

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      [
          {
              "last_seen": "2014-09-30T12:52:23.137",
              "user": 34,
              "loc": {
                  "type": "Point",
                  "coordinates": [
                      36.512429,
                      57.512445
                  ]
              }
          }
      ]
    
  • Response 400

      {
          "detail": {
              "lat": [
                  "This field is required."
              ],
              "lng": [
                  "This field is required."
              ]
          }
      }
    

Group Rides

Ride statuses

A ride has many different statuses:

  • created : Ride was created.
  • pending : Ride is paid and requests are sent to adequate drivers
  • confirmed : The driver has confirmed the ride
  • client_confirmed: In instant rides, when traveler confirms he wants that driver.
  • declined : When the driver declines to give the ride
  • canceled : When the rider or the driver cancels a ride.
  • started : The rider has entered his personal code after pick-up.
  • done : The rider has entered his personal code after drop-off.
  • pickup_checkin : The driver checked in at the pickup location.
  • dropoff_checkin : The driver checked in at the drop-off location.

Ride [/v1/ride/]

Ride creation [POST]

At this step the ride's status is created.

  • Parameters

    • car_type (required, string, Economy) ... Car type. Possible options are : Economy, Standard, SUV, Luxury or Minivan. Values are case sensitive
    • source (required, string, Barcelona El Prat Airport) ... Pickup address.
    • destination (required, string, Plaça Catalunya, Barcelona) ... Dropoff address.
    • needed_on (required, string, 2014-10-20T20:53) ... date when the ride is needed. format : YYYY-MM-DDTHH:MM
    • seats (optional, integer, 2) ... Number of passengers. Possible values 1..6
    • luggage (optional, integer, 2) ... Number of luggage that will need to be carried. Possible values 1..5
    • ride_type (optional, string, instant) ... Possible options are : instant or scheduled, defaults to instant.
    • coupon_code (optional, string, SpecialCode) ... Discount code
    • cars_to_contact (required, CSV, 542,654,12) ... Comma seperated ids of cars to be contacted.
    • comment (optional, string) ... Comment left by the traveler
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 201

      {
          "user": {
              "url": "https://api.friendryde.com/v1/user/35/",
              "avatar": "https://www.friendryde.com/media/avatar/6868.jpg",
              "id": 35,
              "email": "zanass0@gmail.com",
              "city": "Agdal, Rabat, Rabat-Sale-Zemmour-Zaer, Morocco",
              "country": null,
              "full_name": "John Doe",
              "driverprofile": null,
              "phone_number": "+212600112233",
              "first_name": "John",
              "last_name": "Doe",
              "car": null,
              "truncated_name": "John D.",
              "user_type": "rider",
              "rating": {
                  "count": 1,
                  "score": 4
              },
              "reviews_url": "https://api.friendryde.com/v1/user/35/reviews/",
              "languages": [
                  "English",
                  "Arabic",
                  "Moroccan Arabic",
                  "Berber",
                  "French",
                  "Français"
              ]
          },
          "effective_price": {
              "USD": 60,
              "MAD": 492
          },
          "estimated_price": {
              "USD": 0,
              "MAD": 0
          },
          "driver_fare": {
              "USD": "51.30",
              "MAD": 421
          },
          "coupon": 1,
          "requests": {
              "count": 1,
              "url": "http://localhost.com:8000/v1/ride/354/requests/"
          }
          "comments": [],
          "car": null,
          "url": "https://api.friendryde.com/v1/ride/354/",
          "status": "created",
          "car_type": "Economy",
          "distance": 165781,
          "duration": 6277,
          "source": "Helsinki",
          "destination": "Turku",
          "source_point": {
              "type": "Point",
              "coordinates": [
                  24.9410248,
                  60.17332440000001
              ]
          },
          "destination_point": {
              "type": "Point",
              "coordinates": [
                  22.2666303,
                  60.4518126
              ]
          },
          "needed_on": "2012-12-20T14:20:00",
          "seats": 1,
          "luggage": 1,
          "ride_type": "scheduled"
      }
    
  • Response 400

      {
          "source": [
              "This field is required."
          ],
          "destination": [
              "This field is required."
          ],
          "needed_on": [
              "This field is required."
          ]
      }
    

Ride options [OPTIONS]

  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200 (application/json)

      {
          "name": "Ride list",
          "description": "",
          "renders": [
              "application/json",
              "text/html"
          ],
          "parses": [
              "application/json",
              "application/x-www-form-urlencoded",
              "multipart/form-data"
          ],
          "actions": {
              "PUT": {
                  "user": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "effective_price": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "estimated_price": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "driver_fare": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "coupon": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "requests": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "comments": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "car": {
                      "type": "field",
                      "required": false,
                      "read_only": true
                  },
                  "id": {
                      "type": "integer",
                      "required": false,
                      "read_only": true,
                      "label": "ID"
                  },
                  "status": {
                      "type": "choice",
                      "required": true,
                      "read_only": true,
                      "label": "status",
                      "choices": [
                          {
                              "display_name": "created",
                              "value": "created"
                          },
                          {
                              "display_name": "confirmed",
                              "value": "confirmed"
                          },
                          {
                              "display_name": "pending",
                              "value": "pending"
                          },
                          {
                              "display_name": "declined",
                              "value": "declined"
                          },
                          {
                              "display_name": "canceled",
                              "value": "canceled"
                          },
                          {
                              "display_name": "client_confirmed",
                              "value": "client_confirmed"
                          },
                          {
                              "display_name": "pickup_checkin",
                              "value": "pickup_checkin"
                          },
                          {
                              "display_name": "dropoff_checkin",
                              "value": "dropoff_checkin"
                          },
                          {
                              "display_name": "started",
                              "value": "started"
                          }
                      ]
                  },
                  "car_type": {
                      "type": "choice",
                      "required": false,
                      "read_only": false,
                      "label": "car type",
                      "choices": [
                          {
                              "display_name": "---------",
                              "value": ""
                          },
                          {
                              "display_name": "Economy",
                              "value": "Economy"
                          },
                          {
                              "display_name": "Standard",
                              "value": "Standard"
                          },
                          {
                              "display_name": "SUV (4x4)",
                              "value": "SUV"
                          },
                          {
                              "display_name": "Minivan",
                              "value": "Minivan"
                          },
                          {
                              "display_name": "Luxury",
                              "value": "Luxury"
                          }
                      ]
                  },
                  "distance": {
                      "type": "integer",
                      "required": true,
                      "read_only": true,
                      "label": "distance",
                      "help_text": "Distance in meters"
                  },
                  "duration": {
                      "type": "integer",
                      "required": true,
                      "read_only": true,
                      "label": "duration",
                      "help_text": "Duration in seconds"
                  },
                  "source": {
                      "type": "string",
                      "required": true,
                      "read_only": false,
                      "label": "From",
                      "max_length": 255
                  },
                  "destination": {
                      "type": "string",
                      "required": true,
                      "read_only": false,
                      "label": "To",
                      "max_length": 255
                  },
                  "source_point": {
                      "type": "field",
                      "required": false,
                      "read_only": true,
                      "label": "source point"
                  },
                  "destination_point": {
                      "type": "field",
                      "required": false,
                      "read_only": true,
                      "label": "destination point"
                  },
                  "needed_on": {
                      "type": "datetime",
                      "required": true,
                      "read_only": false,
                      "label": "needed on"
                  },
                  "seats": {
                      "type": "choice",
                      "required": true,
                      "read_only": false,
                      "label": "seats",
                      "choices": [
                          {
                              "display_name": "1 passenger",
                              "value": 1
                          },
                          {
                              "display_name": "2 passengers",
                              "value": 2
                          },
                          {
                              "display_name": "3 passengers",
                              "value": 3
                          },
                          {
                              "display_name": "4 passengers",
                              "value": 4
                          },
                          {
                              "display_name": "5 passengers",
                              "value": 5
                          },
                          {
                              "display_name": "6 passengers",
                              "value": 6
                          }
                      ]
                  },
                  "luggage": {
                      "type": "choice",
                      "required": true,
                      "read_only": false,
                      "label": "luggage",
                      "choices": [
                          {
                              "display_name": "1 luggage",
                              "value": 1
                          },
                          {
                              "display_name": "2 luggages",
                              "value": 2
                          },
                          {
                              "display_name": "3 luggages",
                              "value": 3
                          },
                          {
                              "display_name": "4 luggages",
                              "value": 4
                          },
                          {
                              "display_name": "5 luggages",
                              "value": 5
                          }
                      ]
                  },
                  "ride_type": {
                      "type": "choice",
                      "required": true,
                      "read_only": false,
                      "label": "ride type",
                      "choices": [
                          {
                              "display_name": "scheduled",
                              "value": "scheduled"
                          },
                          {
                              "display_name": "instant",
                              "value": "instant"
                          }
                      ]
                  }
              }
          }
      }
    

Ride [/v1/ride/{id}/]

Ride detail [GET]

  • Parameters

    • id (required, integer, 89) ... Ride's id
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "user": {
              "url": "https://api.friendryde.com/v1/user/35/",
              "avatar": "https://www.friendryde.com/media/avatar/6868.jpg",
              "id": 35,
              "email": "zanass0@gmail.com",
              "city": "Agdal, Rabat, Rabat-Sale-Zemmour-Zaer, Morocco",
              "country": null,
              "full_name": "John Doe",
              "driverprofile": null,
              "phone_number": "+212600112233",
              "first_name": "John",
              "last_name": "Doe",
              "car": null,
              "truncated_name": "John D.",
              "user_type": "rider",
              "rating": {
                  "count": 1,
                  "score": 4
              },
              "reviews_url": "https://api.friendryde.com/v1/user/35/reviews/",
              "languages": [
                  "English",
                  "Arabic",
                  "Moroccan Arabic",
                  "Berber",
                  "French",
                  "Français"
              ]
          },
          "effective_price": {
              "USD": 60,
              "MAD": 492
          },
          "estimated_price": {
              "USD": 0,
              "MAD": 0
          },
          "driver_fare": {
              "USD": "51.30",
              "MAD": 421
          },
          "coupon": 1,
          "requests": {
              "count": 1,
              "url": "http://localhost.com:8000/v1/ride/354/requests/"
          }
          "comments": [],
          "car": null,
          "url": "https://api.friendryde.com/v1/ride/354/",
          "status": "created",
          "car_type": "Economy",
          "distance": 165781,
          "duration": 6277,
          "source": "Helsinki",
          "destination": "Turku",
          "source_point": {
              "type": "Point",
              "coordinates": [
                  24.9410248,
                  60.17332440000001
              ]
          },
          "destination_point": {
              "type": "Point",
              "coordinates": [
                  22.2666303,
                  60.4518126
              ]
          },
          "needed_on": "2012-12-20T14:20:00",
          "seats": 1,
          "luggage": 1,
          "ride_type": "scheduled",
          "id": 89
      }
    

GET /v1/ride/{id}/requests/

#Scheduled ride requests

  • Parameters

    • id (required, integer, 282) ... Ride id
  • Request (application/json)

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      [  
         {  
            "car":{  
               "image":"http://localhost.com:8005/media/users/car/renewing-the-photo-on-your-driving-license-347-image1_1.jpg",
               "car_make_display":"Alfa Romeo",
               "seats_display":"1 passenger",
               "luggage_display":"1 luggage",
               "url":"/api/v1/car/1/",
               "user":"/api/v1/user/1/",
               "car_make":"alfa-romeo",
               "car_model":"a",
               "seats":1,
               "doors":4,
               "car_type":"Economy",
               "has_ac":false,
               "wheelchair":false,
               "luggage":1,
               "year":2014
            },
            "id":16,
            "status":"taken"
         }
      ]
    
  • Response 400

      {
          "detail": {
              "reason": [
                  "This field is required."
              ],
              "__all__": [
                  "You have already cancelled this ride"
              ]
          }
      }
    

POST /v1/ride/{id}/cancel/

#Ride cancellation

  • Parameters

    • id (required, integer, 282) ... Ride id
    • reason (required, string, Car is down) ... Reason why the user cancelled the ride
  • Request (application/json)

    • Headers

        Authorization: Token {user-token}
      
    • Body

        {"reason": "Car is down"}
      
  • Response 200

      {
          "detail": "Ride cancelled"
      }
    
  • Response 400

      {
          "detail": {
              "reason": [
                  "This field is required."
              ],
              "__all__": [
                  "You have already cancelled this ride"
              ]
          }
      }
    

POST /v1/ride/{id}/decline/

#Ride declination

  • Parameters

    • id (required, integer, 282) ... Ride id
    • reason (required, string, Not available) ... Reason why the driver declined the ride
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "detail": "Ride declined - Thank you."
      }
    
  • Response 400

      {
          "detail": {
              "reason": [
                  "This field is required."
              ],
              "__all__": [
                  "You have already declined this ride"
              ]
          }
      }
    

POST /v1/ride/{id}/accept/

#Ride acceptation

  • Parameters

    • id (required, integer, 282) ... Ride id
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "message": "Your ride is now confirmed.",
          "success": true
      }
    
  • Response 400

      {
          "message": [
              "Too late ! The pickup was already accepted by another driver"
          ],
          "success": false
      }
    

POST /v1/ride/{id}/pickup-checkin/

#Pickup checkin Done by driver.

If the checkin succeeds an empty response body is return with a 200 status code

  • Parameters

    • id (required, integer, 282) ... Ride id
    • lat (required, number, 36.512456) ... Latitude of current check in location
    • lng (required, number, 57.512456) ... Longitude of current check in location
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

  • Response 400

      {
          "detail": {
              "__all__": [
                  "You can't do check-in now"
              ]
          }
      }
    

POST /v1/ride/{id}/boarding/

#Boarding Done by driver.

If the checkin succeeds an empty response body is return with a 200 status code

  • Parameters

    • id (required, integer, 282) ... Ride id
    • lat (required, number, 36.512456) ... Latitude of current check in location
    • lng (required, number, 57.512456) ... Longitude of current check in location
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

  • Response 400

      {
          "detail": {
              "__all__": [
                  "You can't do check-in now"
              ]
          }
      }
    

POST /v1/ride/{id}/dropoff-checkin/

#Drop off checkin Done by driver.

If the checkin succeeds an empty response body is return with a 200 status code

  • Parameters

    • id (required, integer, 282) ... Ride id
    • lat (required, number, 36.512456) ... Latitude of current check in location
    • lng (required, number, 57.512456) ... Longitude of current check in location
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

  • Response 400

      {
          "detail": {
              "__all__": [
                  "You can't do check-in now"
              ]
          }
      }
    

POST /v1/ride/{id}/add-review/

#Add review Once the ride is achieved. Both driver and traveler should give a review

If the checkin succeeds an empty response body is return with a 200 status code

  • Parameters

    • id (required, integer, 282) ... Ride id
    • lat (required, number, 36.512456) ... Latitude of current check in location
    • lng (required, number, 57.512456) ... Longitude of current check in location
  • Request (application/json)

    • Headers

        Authorization: Token {user-token}
      
    • Body

        {
            "comment": "Great guy !",
            "score": 4
        }
      
  • Response 200

      {
          "comment": "Great guy !",
          "id": 16,
          "score": 4,
          "creation_date": "2014-09-30T19:02:14.149Z"
      }
    
  • Response 400

      {
          "detail": {
              "__all__": [
                  "You have already rated this ride"
              ]
          }
      }
    
  • Response 403

      {
          "detail": "You can't rate this ride"
      }
    

POST /v1/ride/{id}/driver/change/

#Change driver - instant ride Used when a user wants to change the first driver who accepted the ride.

  • The driver can be changed only once.
  • If the change succeeds an empty response body is return with a 200 status code
  • Parameters

    • id (required, integer, 282) ... Ride id
  • Request (application/json)

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

  • Response 400

      {
          "detail": {
              "__all__": [
                  "You can't change a driver twice."
              ]
          }
      }
    

POST /v1/ride/{id}/confirm-driver/

#Confirm driver - instant ride When a traveler books an instant ride, requests are sent to drivers. The ones who accept the ride should be confirm by the traveler. Use this resource for that.

If the checkin succeeds an empty response body is return with a 200 status code

  • Parameters

    • id (required, integer, 282) ... Ride id
    • driver (required, integer, 212) ... The driver's user id
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

  • Response 400

      {
          "detail": {
              "ryde": [
                  "Select a valid choice. That choice is not one of the available choices."
              ],
              "driver": [
                  "This field is required."
              ]
          }
      }
    

POST /v1/ride/{id}/payment/stripe/

Payment authorization with Stripe

Returns FriendRyde payment id

  • Parameters

    • id (required, integer, 282) ... Ride id
    • token (required, integer, tok_14iwNp20fsbcrfjkp8eTEgsf) ... Token provided by Stripe for transaction
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "payment": 654
      }
    
  • Response 400

      {
          "detail": {
              "error": {
                  "message": "You cannot use a Stripe token more than once: tok_14iwNp20fsbcrfjkp8WTEgsf",
                  "type": "invalid_request_error"
              }
          }
      }
    

Payzone [/v1/ride/{id}/payment/payzone/]

How to manage a Payzone transaction?

https://docs.google.com/a/soovox.com/drawings/d/18zovNNq6puPaXoIG9hILkoy0CYbdavW1hLGe2-o0q4M/edit

Create Payzone transaction [POST]

Using this endpoint, a transaction is created on Payzone side. The user should be redirected to the payment page which is the payment_url field in the response

  • Parameters

    • id (required, integer, 282) ... Ride id
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "customer_token": "59e1d47df61bf92bdd4af0a005946bb0984b35ba39c1b1646cf79ec5d33a3b1e31c4e652bf3b94ab1e6fb0db65936445c40e8462449ba2aa593028b6fb81BTlzyePH7_9GnGpnIsYjs5n_PbJNJqdQLLgFL8wQXyTclZVcYCy41IpF7AKeiMtu6zsnjN6QH-uriGa_dkT0YoAJTcYu4O5J1oOTCNT6OJXBI75mK3yytFEZECMEcDqltbPKmrOTmWEKJpr4vx_v9CVS9f9K1pFBVZrodUPNkwMQDYRAmiV6v9JlgF0uLu-f83wXwdi_L1f6mfc0-6-4ag",
          "message": "New transaction created successfully.",
          "code": "200",
          "amount": "2396.92",
          "payment_url": "https://paiement.payzone.ma/transaction/59e1d47df61bf92bdd4af0a005946bb0984b35ba39c1b1646cf79ec5d33a3b1e31c4e652bf3b94ab1e6fb0db65936445c40e8462449ba2aa593028b6fb81BTlzyePH7_9GnGpnIsYjs5n_PbJNJqdQLLgFL8wQXyTclZVcYCy41IpF7AKeiMtu6zsnjN6QH-uriGa_dkT0YoAJTcYu4O5J1oOTCNT6OJXBI75mK3yytFEZECMEcDqltbPKmrOTmWEKJpr4vx_v9CVS9f9K1pFBVZrodUPNkwMQDYRAmiV6v9JlgF0uLu-f83wXwdi_L1f6mfc0-6-4ag/dopay"
      }
    

Get Payzone transaction status [GET]

Status :

  • not processed: Transaction created but the user didn't proceed to payment yet.
  • authorized: Transaction authorized
  • not authorized:
  • expired: Transaction created but not processed for a long period of time until it got expired
  • call failed
  • Parameters

    • id (required, integer, 282) ... Ride id
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "status": "not processed",
          "id": 0
      }
    

Group Withdrawal

Wire transfer [/v1/withdrawal/wiretransfer/]

Create wire transfer account [POST]

Required fields :

  • iban_number: IBAN and RIB accounts can be stored in this field
  • Request

    • Headers

        Authorization: Token {user-token}
      
    • Body

        {
            "iban_number": "654987123",
        }
      
  • Response 200

      {
          "user": "https://api.friendryde.com/v1/user/2/",
          "iban_number": "654987123",
          "url": "https://api.friendryde.com/v1/withdrawal/wiretransfer/6/"
      }
    

Wire transfer [/v1/withdrawal/wiretransfer/{id}/]

Get wire transfer detail [GET]

  • Parameters

    • id (required, integer, 45) ... Wire transfer account id
  • Request

    • Headers

        Authorization: Token {user-token}
      
  • Response 200

      {
          "user": "https://api.friendryde.com/api/v1/user/81/",
          "iban_number": "654987123",
          "url": "https://api.friendryde.com/api/v1/withdrawal/wiretransfer/{id}/"
      }
    

Change wire transfer detail [PATCH]

  • Parameters

    • id (required, integer, 45) ... Wire transfer account id
  • Request

    • Headers

        Authorization: Token {user-token}
      
    • Body

        {
            "iban_number": "123123123",
        }
      
  • Response 200

      {
          "user": "https://api.friendryde.com/api/v1/user/81/",
          "iban_number": "123123123",
          "url": "https://api.friendryde.com/api/v1/withdrawal/wiretransfer/{id}/"
      }
    

Group Notifications

Notifications are sent to Android devices using Google Cloud Messaging.

In order to receive notifications the users device registration id should be sent to server using this endpoint /v1/user/set-registration-id/

Payload

{
    "type": "{notification-type}",
    "ride": {
        "type": "{ryde_type}",
        "id": {ride_id},
    }
}
  • notification-type : This field defines the type of notification
  • ryde_type : Possible values are instant & scheduled.
  • ride_id : Ex: 10

Ride status change

Whenever a ride status changes, we send a notification to the traveler and driver (if any).

  • Receivers : Traveler, driver.

Payload

{
    "type": "ride-status-changed",
    "ride": {
        "type": {ryde_type},
        "id": {ride_id},
        "status": {ride_status},
        "modified_at": "{ride_status_modified_at}"
    }
}
  • ride_status : Current new ride status. Ex: pickup_checkin
  • ride_status_modified_at : Date/time of ride status. Ex: 2014-11-14 11:45:40.256912+00:00

Ride request - Send requests to drivers

This notification is sent to drivers when a traveler requests a ride

  • Receiver : Drivers

Payload

{
    "type": "new-ride",
    "ride": {
        "type": "instant",
        "id": {ride_id},
    }
}

Ride - Driver confirms ride

This notification is sent to the traveler when a driver confirms his ride.

  • Receiver : Traveler

Payload

{
    "type": "ride-driver-confirmed",
    "ride": {
        "type": {ryde_type},
        "id": {ride_id},
    }
}

Instant Ride - Traveler confirms driver

This notification is sent to the driver who confirmed an instant ride when the user confirms he wants to have the ride with him.

  • Receiver : Driver

Payload

{
    "type": "ride-traveler-confirmed-driver",
    "ride": {
        "type": "instant",
        "id": {ride_id},
    }
}

Ride - Driver pickup checkin

This notification is sent to the traveler when the driver arrives at pickup place.

  • Receiver : Traveler

Payload

{
    "type": "driver-pickup-checkin",
    "ride": {
        "type": {ryde_type},
        "id": {ride_id},
    }
}

Driver position update

This notification is sent to the traveler when a driver nearby changes his position

  • Receiver : Traveler

Payload

{
    "type": "driver-position",
    "user": {
        "loc": {
            "type": "Point", 
            "coordinates": {coords}
        }, 
        "id": {user_id}, 
        "last_seen": "{last_seen}"}
    }
}
  • coords : Geo coordinates of the last tracked position
  • user_id : Driver's user id
  • last_seen : Last time driver position was tracked. Ex: 2014-11-12 13:15:16.061243+00:00

How it works

Each time a driver changes position (POST /v1/user/position/), a notification is sent to travelers near him.

If used to show movement of a driver picking up his traveler, you should manually filter on your application using user.id field, user.id being the concerned driver id.

  • If used in a map containing drivers, this notification should be used to update drivers position.

Group Realtime drivers positions

Drivers nearby positions

Use this method to get updates about drivers nearby's positions. Please note the response is a stream, which mean API consumer should listen to it constantly

  • Parameters

    • id (required, integer, 282) ... Traveler ID
  • Response 200

      {'id': 3,'channel': 'drivers-nearby-50','text': '{"loc": {"type": "Point", "coordinates": [-6.828922, 34.018381]}, "u": {"id": 1, "d": true}, "t": "2014-11-12 12:19:40.441173+00:00"}','event_id': '', 'time': 'Wed, 12 Nov 2014 12:19:42 GMT', 'tag': '1'}
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment