{
  "swagger": "2.0",
  "info": {
    "title": "Uber API",
    "description": "Move your app forward with the Uber API",
    "version": "1.0.0"
  },
  "host": "api.uber.com",
  "schemes": [
    "https"
  ],
  "basePath": "/v1",
  "produces": [
    "application/json"
  ],
  "parameters": {
    "id": {
      "name": "id",
      "in": "path",
      "type": "integer",
      "format": "int32",
      "required": true
    }
  },
  "paths": {
    "/products": {
      "get": {
        "summary": "Product Types",
        "description": "The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order.",
        "parameters": [
          {
            "name": "latitude",
            "in": "query",
            "description": "Latitude component of location.",
            "required": true,
            "type": "number",
            "format": "double"
          },
          {
            "name": "longitude",
            "in": "query",
            "description": "Longitude component of location.",
            "required": true,
            "type": "number",
            "format": "double"
          }
        ],
        "tags": [
          "Products"
        ],
        "responses": {
          "200": {
            "description": "An array of products",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "Product"
              }
            }
          },
          "default": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "Error"
            }
          }
        }
      }
    },
    "/products/{id}": {
      "get": {
        "summary": "Product Types",
        "description": "The Products endpoint returns information about the Uber products offered at a given location. The response includes the display name and other details about each product, and lists the products in the proper display order.",
        "parameters": [
          {
            "$ref": "id"
          },
          {
            "name": "latitude",
            "in": "query",
            "description": "Latitude component of location.",
            "required": true,
            "type": "number",
            "format": "double"
          },
          {
            "name": "longitude",
            "in": "query",
            "description": "Longitude component of location.",
            "required": true,
            "type": "number",
            "format": "double"
          }
        ],
        "tags": [
          "Products"
        ],
        "responses": {
          "200": {
            "description": "An array of products",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "Product"
              }
            }
          },
          "default": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "Error"
            }
          }
        }
      }
    },
    "/estimates/price": {
      "get": {
        "summary": "Price Estimates",
        "description": "The Price Estimates endpoint returns an estimated price range for each product offered at a given location. The price estimate is provided as a formatted string with the full price range and the localized currency symbol.<br><br>The response also includes low and high estimates, and the [ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code for situations requiring currency conversion. When surge is active for a particular product, its surge_multiplier will be greater than 1, but the price estimate already factors in this multiplier.",
        "parameters": [
          {
            "name": "start_latitude",
            "in": "query",
            "description": "Latitude component of start location.",
            "required": true,
            "type": "number",
            "format": "double"
          },
          {
            "name": "start_longitude",
            "in": "query",
            "description": "Longitude component of start location.",
            "required": true,
            "type": "number",
            "format": "double"
          },
          {
            "name": "end_latitude",
            "in": "query",
            "description": "Latitude component of end location.",
            "required": true,
            "type": "number",
            "format": "double"
          },
          {
            "name": "end_longitude",
            "in": "query",
            "description": "Longitude component of end location.",
            "required": true,
            "type": "number",
            "format": "double"
          }
        ],
        "tags": [
          "Estimates"
        ],
        "responses": {
          "200": {
            "description": "An array of price estimates by product",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "PriceEstimate"
              }
            }
          },
          "default": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "Error"
            }
          }
        }
      }
    },
    "/estimates/time": {
      "get": {
        "summary": "Time Estimates",
        "description": "The Time Estimates endpoint returns ETAs for all products offered at a given location, with the responses expressed as integers in seconds. We recommend that this endpoint be called every minute to provide the most accurate, up-to-date ETAs.",
        "parameters": [
          {
            "name": "start_latitude",
            "in": "query",
            "description": "Latitude component of start location.",
            "required": true,
            "type": "number",
            "format": "double"
          },
          {
            "name": "start_longitude",
            "in": "query",
            "description": "Longitude component of start location.",
            "required": true,
            "type": "number",
            "format": "double"
          },
          {
            "name": "customer_uuid",
            "in": "query",
            "type": "string",
            "format": "uuid",
            "description": "Unique customer identifier to be used for experience customization."
          },
          {
            "name": "product_id",
            "in": "query",
            "type": "string",
            "description": "Unique identifier representing a specific product for a given latitude & longitude."
          }
        ],
        "tags": [
          "Estimates"
        ],
        "responses": {
          "200": {
            "description": "An array of products",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "Product"
              }
            }
          },
          "default": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "Error"
            }
          }
        }
      }
    },
    "/me": {
      "get": {
        "summary": "User Profile",
        "description": "The User Profile endpoint returns information about the Uber user that has authorized with the application.",
        "tags": [
          "User"
        ],
        "responses": {
          "200": {
            "description": "Profile information for a user",
            "schema": {
              "$ref": "Profile"
            }
          },
          "default": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "Error"
            }
          }
        }
      }
    },
    "/history": {
      "get": {
        "summary": "User Activity",
        "description": "The User Activity endpoint returns data about a user's lifetime activity with Uber. The response will include pickup locations and times, dropoff locations and times, the distance of past requests, and information about which products were requested.<br><br>The history array in the response will have a maximum length based on the limit parameter. The response value count may exceed limit, therefore subsequent API requests may be necessary.",
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "type": "integer",
            "format": "int32",
            "description": "Offset the list of returned results by this amount. Default is zero."
          },
          {
            "name": "limit",
            "in": "query",
            "type": "integer",
            "format": "int32",
            "description": "Number of items to retrieve. Default is 5, maximum is 100."
          }
        ],
        "tags": [
          "User"
        ],
        "responses": {
          "200": {
            "description": "History information for the given user",
            "schema": {
              "$ref": "Activities"
            }
          },
          "default": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "Error"
            }
          }
        }
      }
    }
  },
  "definitions": {
    "Product": {
      "properties": {
        "product_id": {
          "type": "string",
          "description": "Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles."
        },
        "description": {
          "type": "string",
          "description": "Description of product."
        },
        "display_name": {
          "type": "string",
          "description": "Display name of product."
        },
        "capacity": {
          "type": "string",
          "description": "Capacity of product. For example, 4 people."
        },
        "image": {
          "type": "string",
          "description": "Image URL representing the product."
        }
      }
    },
    "PriceEstimate": {
      "properties": {
        "product_id": {
          "type": "string",
          "description": "Unique identifier representing a specific product for a given latitude & longitude. For example, uberX in San Francisco will have a different product_id than uberX in Los Angeles"
        },
        "currency_code": {
          "type": "string",
          "description": "[ISO 4217](http://en.wikipedia.org/wiki/ISO_4217) currency code."
        },
        "display_name": {
          "type": "string",
          "description": "Display name of product."
        },
        "estimate": {
          "type": "string",
          "description": "Formatted string of estimate in local currency of the start location. Estimate could be a range, a single number (flat rate) or \"Metered\" for TAXI."
        },
        "low_estimate": {
          "type": "number",
          "description": "Lower bound of the estimated price."
        },
        "high_estimate": {
          "type": "number",
          "description": "Upper bound of the estimated price."
        },
        "surge_multiplier": {
          "type": "number",
          "description": "Expected surge multiplier. Surge is active if surge_multiplier is greater than 1. Price estimate already factors in the surge multiplier."
        }
      }
    },
    "Profile": {
      "properties": {
        "first_name": {
          "type": "string",
          "description": "First name of the Uber user."
        },
        "last_name": {
          "type": "string",
          "description": "Last name of the Uber user."
        },
        "email": {
          "type": "string",
          "description": "Email address of the Uber user"
        },
        "picture": {
          "type": "string",
          "description": "Image URL of the Uber user."
        },
        "promo_code": {
          "type": "string",
          "description": "Promo code of the Uber user."
        }
      }
    },
    "Activity": {
      "properties": {
        "uuid": {
          "type": "string",
          "description": "Unique identifier for the activity"
        }
      }
    },
    "Activities": {
      "properties": {
        "offset": {
          "type": "integer",
          "format": "int32",
          "description": "Position in pagination."
        },
        "limit": {
          "type": "integer",
          "format": "int32",
          "description": "Number of items to retrieve (100 max)."
        },
        "count": {
          "type": "integer",
          "format": "int32",
          "description": "Total number of items available."
        },
        "history": {
          "type": "array",
          "$ref": "Activity"
        }
      }
    },
    "Error": {
      "properties": {
        "code": {
          "type": "integer",
          "format": "int32"
        },
        "message": {
          "type": "string"
        },
        "fields": {
          "type": "string"
        }
      }
    }
  }
}
