{
  "openapi": "3.1.0",
  "info": {
    "title": "Geoapify Isoline API",
    "version": "1.1.0",
    "description": "Calculate reachable areas as travel-time isochrones or travel-distance isodistances, or retrieve a previously generated isoline by ID."
  },
  "servers": [
    {
      "url": "https://api.geoapify.com/v1",
      "description": "Default API endpoint."
    },
    {
      "url": "https://api-eu.geoapify.com/v1",
      "description": "EU-focused endpoint. Geoapify service processing uses EU infrastructure."
    }
  ],
  "tags": [
    {
      "name": "Isoline"
    }
  ],
  "paths": {
    "/isoline": {
      "get": {
        "tags": [
          "Isoline"
        ],
        "operationId": "calculateIsoline",
        "summary": "Calculate an isochrone or isodistance",
        "description": "Calculates the area reachable from an origin within one or more travel-time or travel-distance limits.\n\n- To calculate an isoline, provide `lat`, `lon`, `type`, `mode`, and one or more `range` values.\n- With `type=time`, each range is travel time in seconds. With `type=distance`, ranges use meters for `units=metric` or miles for `units=imperial`.\n- Up to 10 ranges can be requested; the GeoJSON response contains one Polygon or MultiPolygon feature per range.\n- `transit` and `approximated_transit` support time-based isolines only.\n- Alternatively, provide only `id` to retrieve a previously generated isoline.\n- The default `format=geojson` response is a GeoJSON FeatureCollection. `topojson` and `geobuf` are available for clients that support those formats.\n\n**Example:** `lat=36.9743711&lon=-76.4166222&type=time&mode=drive&range=900`",
        "parameters": [
          {
            "name": "lat",
            "in": "query",
            "required": false,
            "description": "Origin latitude in decimal degrees. Required when calculating an isoline; omit when retrieving by `id`.",
            "schema": {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "example": 36.9743711
            }
          },
          {
            "name": "lon",
            "in": "query",
            "required": false,
            "description": "Origin longitude in decimal degrees. Required when calculating an isoline; omit when retrieving by `id`.",
            "schema": {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "example": -76.4166222
            }
          },
          {
            "name": "range",
            "in": "query",
            "required": false,
            "description": "One to 10 reachability limits. Required when calculating. Values are seconds for `type=time`; for `type=distance`, values are meters with metric units or miles with imperial units.",
            "schema": {
              "type": "array",
              "minItems": 1,
              "maxItems": 10,
              "items": {
                "type": "number",
                "minimum": 1
              },
              "example": [
                900
              ]
            },
            "style": "form",
            "explode": false
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Isoline kind. Use `time` for an isochrone or `distance` for an isodistance. Required when calculating.",
            "schema": {
              "type": "string",
              "enum": [
                "time",
                "distance"
              ],
              "example": "time"
            }
          },
          {
            "name": "mode",
            "in": "query",
            "required": false,
            "description": "Travel mode used to calculate reachability. `drive` represents passenger-car routing. Required when calculating.",
            "schema": {
              "type": "string",
              "enum": [
                "walk",
                "hike",
                "scooter",
                "motorcycle",
                "drive",
                "light_truck",
                "bicycle",
                "mountain_bike",
                "road_bike",
                "bus",
                "medium_truck",
                "truck",
                "truck_dangerous_goods",
                "heavy_truck",
                "long_truck",
                "transit",
                "approximated_transit"
              ],
              "example": "drive"
            }
          },
          {
            "name": "units",
            "in": "query",
            "required": false,
            "description": "Unit system for distance ranges and `max_speed`. Metric uses meters and km/h; imperial uses miles and mph. Time ranges are always seconds.",
            "schema": {
              "type": "string",
              "enum": [
                "metric",
                "imperial"
              ],
              "default": "metric"
            }
          },
          {
            "name": "avoid",
            "in": "query",
            "required": false,
            "description": "Routing features or areas to avoid. Examples include `tolls`, `highways`, `ferries`, `location:latitude,longitude`, `polygon:lat,lon;lat,lon;...`, and `country_codes:us,ca`.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^(tolls|ferries|highways|green_zones|transfers|location|location_lonlat|location_latlon|polygon|polygon_lonlat|polygon_latlon|country_codes)(:.*)?$"
              }
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "route_type",
            "in": "query",
            "required": false,
            "description": "Route optimization preference: balanced, shortest distance, or fewer maneuvers.",
            "schema": {
              "type": "string",
              "enum": [
                "balanced",
                "short",
                "less_maneuvers"
              ],
              "default": "balanced"
            }
          },
          {
            "name": "traffic",
            "in": "query",
            "required": false,
            "description": "Traffic model. Use `approximated` to account for typical traffic where supported.",
            "schema": {
              "type": "string",
              "enum": [
                "free_flow",
                "approximated"
              ],
              "default": "free_flow"
            }
          },
          {
            "name": "max_speed",
            "in": "query",
            "required": false,
            "description": "Optional maximum travel speed: 10–252 km/h with metric units or 6.5–155 mph with imperial units.",
            "schema": {
              "type": "number",
              "minimum": 6.5,
              "maximum": 252
            }
          },
          {
            "name": "details",
            "in": "query",
            "required": false,
            "description": "Optional detail datasets to add to every isoline feature, such as `population`.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 5,
                "maxLength": 100
              }
            },
            "style": "form",
            "explode": false
          },
          {
            "name": "id",
            "in": "query",
            "required": false,
            "description": "ID returned for a previously generated isoline. Use `id` by itself instead of the calculation parameters.",
            "schema": {
              "type": "string",
              "pattern": "^[a-f0-9]{32}$"
            }
          },
          {
            "name": "format",
            "in": "query",
            "required": false,
            "description": "Response encoding. The documented success schema and example describe the default `geojson` format.",
            "schema": {
              "type": "string",
              "enum": [
                "geojson",
                "topojson",
                "geobuf"
              ],
              "default": "geojson"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Calculated or retrieved isoline. The example represents a 900-second passenger-car isochrone; its coordinates are intentionally simplified to demonstrate the GeoJSON MultiPolygon structure. Actual responses contain more detailed geometry.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IsolineFeatureCollection"
                },
                "example": {
                  "type": "FeatureCollection",
                  "properties": {
                    "id": "768fc88900268ab0ec5aa67fbfa09cc2"
                  },
                  "features": [
                    {
                      "type": "Feature",
                      "properties": {
                        "lat": 36.9743711,
                        "lon": -76.4166222,
                        "mode": "drive",
                        "type": "time",
                        "range": 900,
                        "id": "768fc88900268ab0ec5aa67fbfa09cc2"
                      },
                      "geometry": {
                        "type": "MultiPolygon",
                        "coordinates": [
                          [
                            [
                              [
                                -76.44,
                                36.97
                              ],
                              [
                                -76.42,
                                36.95
                              ],
                              [
                                -76.39,
                                36.97
                              ],
                              [
                                -76.41,
                                36.99
                              ],
                              [
                                -76.44,
                                36.97
                              ]
                            ]
                          ],
                          [
                            [
                              [
                                -76.38,
                                36.975
                              ],
                              [
                                -76.37,
                                36.97
                              ],
                              [
                                -76.365,
                                36.98
                              ],
                              [
                                -76.375,
                                36.985
                              ],
                              [
                                -76.38,
                                36.975
                              ]
                            ]
                          ]
                        ]
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Invalid calculation parameters, an unsupported mode and range-type combination, or a range that exceeds the API limit.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayError"
                },
                "examples": {
                  "missingLatitude": {
                    "summary": "Missing calculation origin",
                    "value": {
                      "statusCode": 400,
                      "error": "Bad Request",
                      "message": "\"lat\" is required"
                    }
                  },
                  "timeRangeTooLarge": {
                    "summary": "Isochrone range exceeds the regular-request limit",
                    "value": {
                      "statusCode": 400,
                      "error": "Bad Request",
                      "message": "\"range\" must be less than or equal to 3600 seconds"
                    }
                  },
                  "distanceRangeTooLarge": {
                    "summary": "Isodistance range exceeds the regular-request limit",
                    "value": {
                      "statusCode": 400,
                      "error": "Bad Request",
                      "message": "\"range\" must be less than or equal to 100000 meters"
                    }
                  },
                  "unsupportedTransitIsodistance": {
                    "summary": "Distance isoline requested for transit",
                    "value": {
                      "statusCode": 400,
                      "error": "Bad Request",
                      "message": "type=distance is not supported for multimodal transit routing"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Missing or invalid Geoapify API key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayError"
                },
                "example": {
                  "statusCode": 401,
                  "error": "Unauthorized",
                  "message": "Invalid apiKey"
                }
              }
            }
          },
          "429": {
            "description": "Rate limit or quota exceeded.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayError"
                },
                "example": {
                  "statusCode": 429,
                  "error": "Too Many Requests",
                  "message": "Quota exceeded"
                }
              }
            }
          },
          "500": {
            "description": "Internal gateway error.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayError"
                },
                "example": {
                  "statusCode": 500,
                  "error": "Internal Server Error",
                  "message": "Request failed, please try again later"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "LongitudeLatitude": {
        "type": "array",
        "minItems": 2,
        "maxItems": 2,
        "prefixItems": [
          {
            "type": "number",
            "minimum": -180,
            "maximum": 180
          },
          {
            "type": "number",
            "minimum": -90,
            "maximum": 90
          }
        ],
        "items": false
      },
      "JsonValue": {
        "oneOf": [
          {
            "type": "string"
          },
          {
            "type": "number"
          },
          {
            "type": "boolean"
          },
          {
            "type": "null"
          },
          {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JsonValue"
            }
          },
          {
            "$ref": "#/components/schemas/JsonObject"
          }
        ]
      },
      "JsonObject": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/JsonValue"
        }
      },
      "LocationData": {
        "type": "object",
        "required": [
          "lat",
          "lon"
        ],
        "properties": {
          "lat": {
            "type": "number",
            "minimum": -90,
            "maximum": 90
          },
          "lon": {
            "type": "number",
            "minimum": -180,
            "maximum": 180
          },
          "address": {
            "type": "string"
          }
        }
      },
      "Avoid": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "tolls",
              "ferries",
              "highways",
              "locations",
              "polygons",
              "green_zones",
              "country_codes",
              "transfers"
            ]
          },
          "importance": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "values": {
            "oneOf": [
              {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/LocationData"
                }
              },
              {
                "type": "array",
                "items": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LocationData"
                  }
                }
              }
            ]
          }
        }
      },
      "MultiLineStringGeometry": {
        "type": "object",
        "required": [
          "type",
          "coordinates"
        ],
        "properties": {
          "type": {
            "const": "MultiLineString"
          },
          "coordinates": {
            "type": "array",
            "items": {
              "type": "array",
              "minItems": 2,
              "items": {
                "$ref": "#/components/schemas/LongitudeLatitude"
              }
            }
          }
        }
      },
      "PolygonGeometry": {
        "type": "object",
        "required": [
          "type",
          "coordinates"
        ],
        "properties": {
          "type": {
            "const": "Polygon"
          },
          "coordinates": {
            "type": "array",
            "items": {
              "type": "array",
              "minItems": 4,
              "items": {
                "$ref": "#/components/schemas/LongitudeLatitude"
              }
            }
          }
        }
      },
      "MultiPolygonGeometry": {
        "type": "object",
        "required": [
          "type",
          "coordinates"
        ],
        "properties": {
          "type": {
            "const": "MultiPolygon"
          },
          "coordinates": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "type": "array",
                "minItems": 4,
                "items": {
                  "$ref": "#/components/schemas/LongitudeLatitude"
                }
              }
            }
          }
        }
      },
      "IsolineGeometry": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/PolygonGeometry"
          },
          {
            "$ref": "#/components/schemas/MultiPolygonGeometry"
          }
        ]
      },
      "RouteInstruction": {
        "type": "object",
        "required": [
          "text"
        ],
        "properties": {
          "text": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "transition_instruction": {
            "type": "string"
          },
          "pre_transition_instruction": {
            "type": "string"
          },
          "post_transition_instruction": {
            "type": "string"
          },
          "contains_next_instruction": {
            "type": "boolean"
          },
          "streets": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "exit_number": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "exit_road_name": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "exit_towards": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "roundabout_exit": {
            "type": "number"
          }
        }
      },
      "RouteStep": {
        "type": "object",
        "required": [
          "from_index",
          "to_index",
          "time",
          "distance"
        ],
        "properties": {
          "from_index": {
            "type": "integer"
          },
          "to_index": {
            "type": "integer"
          },
          "time": {
            "type": "number"
          },
          "distance": {
            "type": "number"
          },
          "instruction": {
            "$ref": "#/components/schemas/RouteInstruction"
          },
          "toll": {
            "type": "boolean"
          },
          "ferry": {
            "type": "boolean"
          },
          "bridge": {
            "type": "boolean"
          },
          "tunnel": {
            "type": "boolean"
          },
          "elevation": {
            "type": "number"
          },
          "elevation_gain": {
            "type": "number"
          },
          "max_elevation": {
            "type": "number"
          },
          "min_elevation": {
            "type": "number"
          },
          "admin_area": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "speed": {
            "type": "number"
          },
          "speed_limit": {
            "type": "number"
          },
          "truck_limit": {
            "type": "number"
          },
          "surface": {
            "type": "string"
          },
          "lane_count": {
            "type": "number"
          },
          "road_class": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "roundabout": {
            "type": "boolean"
          },
          "rightside": {
            "type": "boolean"
          },
          "traversability": {
            "type": "string"
          },
          "from_stop_id": {
            "type": "string"
          },
          "from_stop_name": {
            "type": "string"
          },
          "to_stop_id": {
            "type": "string"
          },
          "to_stop_name": {
            "type": "string"
          }
        }
      },
      "RouteLeg": {
        "type": "object",
        "required": [
          "time",
          "distance",
          "steps"
        ],
        "properties": {
          "time": {
            "type": "number"
          },
          "distance": {
            "type": "number"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteStep"
            }
          },
          "country_code": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "elevation": {
            "type": "array",
            "items": {
              "type": "number"
            }
          },
          "elevation_range": {
            "type": "array",
            "items": {
              "type": "array",
              "minItems": 2,
              "maxItems": 2,
              "prefixItems": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "items": false
            }
          },
          "agency_name": {
            "type": "string"
          },
          "agency_id": {
            "type": "string"
          },
          "agency_url": {
            "type": "string"
          },
          "route_id": {
            "type": "string"
          },
          "route_short_name": {
            "type": "string"
          },
          "route_long_name": {
            "type": "string"
          },
          "trip_id": {
            "type": "string"
          }
        }
      },
      "SnappedRouteWaypoint": {
        "type": "object",
        "required": [
          "location"
        ],
        "properties": {
          "original_index": {
            "type": "integer"
          },
          "location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          }
        }
      },
      "InputRouteWaypoint": {
        "type": "object",
        "required": [
          "lat",
          "lon"
        ],
        "properties": {
          "lat": {
            "type": "number",
            "minimum": -90,
            "maximum": 90
          },
          "lon": {
            "type": "number",
            "minimum": -180,
            "maximum": 180
          },
          "address": {
            "type": "string"
          }
        }
      },
      "RouteWaypoint": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/SnappedRouteWaypoint"
          },
          {
            "$ref": "#/components/schemas/InputRouteWaypoint"
          }
        ]
      },
      "RoutingResponseOptions": {
        "type": "object",
        "required": [
          "mode",
          "units",
          "waypoints"
        ],
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "walk",
              "hike",
              "scooter",
              "motorcycle",
              "drive",
              "light_truck",
              "bicycle",
              "mountain_bike",
              "road_bike",
              "bus",
              "medium_truck",
              "truck",
              "truck_dangerous_goods",
              "heavy_truck",
              "long_truck",
              "transit",
              "approximated_transit"
            ]
          },
          "units": {
            "type": "string",
            "enum": [
              "metric",
              "imperial"
            ]
          },
          "waypoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteWaypoint"
            }
          },
          "avoid": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Avoid"
            }
          },
          "details": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "instruction_details",
                "route_details",
                "elevation",
                "admin_areas"
              ]
            }
          },
          "traffic": {
            "type": "string",
            "enum": [
              "free_flow",
              "approximated"
            ]
          },
          "intermediate_waypoint_mode": {
            "type": "string",
            "enum": [
              "stopover",
              "through_stop",
              "pass_through"
            ]
          }
        }
      },
      "RouteAdminArea": {
        "type": "object",
        "required": [
          "country_code"
        ],
        "properties": {
          "country_code": {
            "type": "string"
          },
          "country_text": {
            "type": "string"
          },
          "state_code": {
            "type": "string"
          },
          "state_text": {
            "type": "string"
          }
        }
      },
      "RouteAdminAreaCrossing": {
        "type": "object",
        "required": [
          "from_admin_index",
          "to_admin_index",
          "begin_shape_index",
          "end_shape_index"
        ],
        "properties": {
          "from_admin_index": {
            "type": "integer"
          },
          "to_admin_index": {
            "type": "integer"
          },
          "begin_shape_index": {
            "type": "integer"
          },
          "end_shape_index": {
            "type": "integer"
          }
        }
      },
      "RoutingFeatureProperties": {
        "type": "object",
        "required": [
          "mode",
          "units",
          "waypoints",
          "distance",
          "time",
          "legs"
        ],
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "walk",
              "hike",
              "scooter",
              "motorcycle",
              "drive",
              "light_truck",
              "bicycle",
              "mountain_bike",
              "road_bike",
              "bus",
              "medium_truck",
              "truck",
              "truck_dangerous_goods",
              "heavy_truck",
              "long_truck",
              "transit",
              "approximated_transit"
            ]
          },
          "units": {
            "type": "string",
            "enum": [
              "metric",
              "imperial"
            ]
          },
          "waypoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteWaypoint"
            }
          },
          "avoid": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Avoid"
            }
          },
          "details": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "instruction_details",
                "route_details",
                "elevation",
                "admin_areas"
              ]
            }
          },
          "traffic": {
            "type": "string",
            "enum": [
              "free_flow",
              "approximated"
            ]
          },
          "intermediate_waypoint_mode": {
            "type": "string",
            "enum": [
              "stopover",
              "through_stop",
              "pass_through"
            ]
          },
          "distance": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "distance_units": {
            "type": "string",
            "enum": [
              "meters",
              "miles"
            ]
          },
          "max_speed": {
            "type": "number"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteLeg"
            }
          },
          "country_code": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "admin_areas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteAdminArea"
            }
          },
          "admin_area_crossings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteAdminAreaCrossing"
            }
          },
          "toll": {
            "type": "boolean"
          },
          "ferry": {
            "type": "boolean"
          }
        }
      },
      "RoutingFeature": {
        "type": "object",
        "required": [
          "type",
          "geometry",
          "properties"
        ],
        "properties": {
          "type": {
            "const": "Feature"
          },
          "geometry": {
            "$ref": "#/components/schemas/MultiLineStringGeometry"
          },
          "properties": {
            "$ref": "#/components/schemas/RoutingFeatureProperties"
          },
          "id": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "bbox": {
            "type": "array",
            "minItems": 4,
            "maxItems": 6,
            "items": {
              "type": "number"
            }
          }
        }
      },
      "RoutingFeatureCollection": {
        "type": "object",
        "required": [
          "type",
          "features",
          "properties"
        ],
        "properties": {
          "type": {
            "const": "FeatureCollection"
          },
          "features": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutingFeature"
            }
          },
          "bbox": {
            "type": "array",
            "minItems": 4,
            "maxItems": 6,
            "items": {
              "type": "number"
            }
          },
          "properties": {
            "$ref": "#/components/schemas/RoutingResponseOptions"
          }
        }
      },
      "RoutingJsonPoint": {
        "type": "object",
        "required": [
          "lon",
          "lat"
        ],
        "properties": {
          "lon": {
            "type": "number",
            "minimum": -180,
            "maximum": 180
          },
          "lat": {
            "type": "number",
            "minimum": -90,
            "maximum": 90
          }
        }
      },
      "RoutingJsonResult": {
        "type": "object",
        "required": [
          "mode",
          "units",
          "waypoints",
          "distance",
          "time",
          "legs",
          "geometry"
        ],
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "walk",
              "hike",
              "scooter",
              "motorcycle",
              "drive",
              "light_truck",
              "bicycle",
              "mountain_bike",
              "road_bike",
              "bus",
              "medium_truck",
              "truck",
              "truck_dangerous_goods",
              "heavy_truck",
              "long_truck",
              "transit",
              "approximated_transit"
            ]
          },
          "units": {
            "type": "string",
            "enum": [
              "metric",
              "imperial"
            ]
          },
          "waypoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteWaypoint"
            }
          },
          "avoid": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Avoid"
            }
          },
          "details": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "instruction_details",
                "route_details",
                "elevation",
                "admin_areas"
              ]
            }
          },
          "traffic": {
            "type": "string",
            "enum": [
              "free_flow",
              "approximated"
            ]
          },
          "intermediate_waypoint_mode": {
            "type": "string",
            "enum": [
              "stopover",
              "through_stop",
              "pass_through"
            ]
          },
          "distance": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "distance_units": {
            "type": "string",
            "enum": [
              "meters",
              "miles"
            ]
          },
          "max_speed": {
            "type": "number"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteLeg"
            }
          },
          "country_code": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "admin_areas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteAdminArea"
            }
          },
          "admin_area_crossings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteAdminAreaCrossing"
            }
          },
          "toll": {
            "type": "boolean"
          },
          "ferry": {
            "type": "boolean"
          },
          "geometry": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RoutingJsonPoint"
              }
            }
          }
        }
      },
      "RoutingJsonResponse": {
        "type": "object",
        "required": [
          "results",
          "properties"
        ],
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutingJsonResult"
            }
          },
          "properties": {
            "$ref": "#/components/schemas/RoutingResponseOptions"
          },
          "bbox": {
            "type": "array",
            "minItems": 4,
            "maxItems": 6,
            "items": {
              "type": "number"
            }
          }
        }
      },
      "MapMatchingStepAddress": {
        "type": "object",
        "required": [],
        "properties": {
          "street": {
            "type": "string"
          },
          "suburb": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "county": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "postcode": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "country_code": {
            "type": "string"
          }
        }
      },
      "MapMatchingStepOverlap": {
        "type": "object",
        "required": [
          "osm_way_id",
          "osmtags",
          "intersection_points"
        ],
        "properties": {
          "osm_way_id": {
            "type": "number"
          },
          "osmtags": {
            "$ref": "#/components/schemas/JsonObject"
          },
          "intersection_points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LongitudeLatitude"
            }
          }
        }
      },
      "MapMatchingStep": {
        "type": "object",
        "required": [
          "from_index",
          "to_index",
          "time",
          "distance",
          "osm_way_id"
        ],
        "properties": {
          "from_index": {
            "type": "integer"
          },
          "to_index": {
            "type": "integer"
          },
          "time": {
            "type": "number"
          },
          "distance": {
            "type": "number"
          },
          "instruction": {
            "$ref": "#/components/schemas/RouteInstruction"
          },
          "toll": {
            "type": "boolean"
          },
          "ferry": {
            "type": "boolean"
          },
          "bridge": {
            "type": "boolean"
          },
          "tunnel": {
            "type": "boolean"
          },
          "elevation": {
            "type": "number"
          },
          "elevation_gain": {
            "type": "number"
          },
          "max_elevation": {
            "type": "number"
          },
          "min_elevation": {
            "type": "number"
          },
          "admin_area": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "speed": {
            "type": "number"
          },
          "speed_limit": {
            "type": "number"
          },
          "truck_limit": {
            "type": "number"
          },
          "surface": {
            "type": "string"
          },
          "lane_count": {
            "type": "number"
          },
          "road_class": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "roundabout": {
            "type": "boolean"
          },
          "rightside": {
            "type": "boolean"
          },
          "traversability": {
            "type": "string"
          },
          "from_stop_id": {
            "type": "string"
          },
          "from_stop_name": {
            "type": "string"
          },
          "to_stop_id": {
            "type": "string"
          },
          "to_stop_name": {
            "type": "string"
          },
          "osm_way_id": {
            "type": "number"
          },
          "address": {
            "$ref": "#/components/schemas/MapMatchingStepAddress"
          },
          "osmtags": {
            "$ref": "#/components/schemas/JsonObject"
          },
          "overlaps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MapMatchingStepOverlap"
            }
          },
          "begin_bearing": {
            "type": "number"
          },
          "end_bearing": {
            "type": "number"
          }
        }
      },
      "MapMatchingLeg": {
        "type": "object",
        "required": [
          "time",
          "distance",
          "steps"
        ],
        "properties": {
          "time": {
            "type": "number"
          },
          "distance": {
            "type": "number"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MapMatchingStep"
            }
          }
        }
      },
      "MapMatchingWaypoint": {
        "type": "object",
        "required": [
          "original_index",
          "location",
          "original_location",
          "match_type"
        ],
        "properties": {
          "original_index": {
            "type": "integer"
          },
          "location": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/LongitudeLatitude"
              },
              {
                "type": "null"
              }
            ]
          },
          "original_location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          },
          "match_type": {
            "type": "string",
            "enum": [
              "matched",
              "unmatched",
              "interpolated",
              "merged"
            ]
          },
          "match_distance": {
            "type": [
              "number",
              "null"
            ]
          },
          "leg_index": {
            "type": "integer"
          },
          "step_index": {
            "type": "integer"
          }
        }
      },
      "MapMatchingFeatureProperties": {
        "type": "object",
        "required": [
          "distance",
          "time",
          "legs",
          "mode",
          "waypoints"
        ],
        "properties": {
          "distance": {
            "type": "number"
          },
          "time": {
            "type": "number"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MapMatchingLeg"
            }
          },
          "mode": {
            "type": "string",
            "enum": [
              "walk",
              "hike",
              "scooter",
              "motorcycle",
              "drive",
              "light_truck",
              "bicycle",
              "mountain_bike",
              "road_bike",
              "bus",
              "medium_truck",
              "truck",
              "truck_dangerous_goods",
              "heavy_truck",
              "long_truck",
              "transit",
              "approximated_transit"
            ]
          },
          "waypoints": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/MapMatchingWaypoint"
                },
                {
                  "type": "null"
                }
              ]
            }
          }
        }
      },
      "MapMatchingFeature": {
        "type": "object",
        "required": [
          "type",
          "geometry",
          "properties"
        ],
        "properties": {
          "type": {
            "const": "Feature"
          },
          "geometry": {
            "$ref": "#/components/schemas/MultiLineStringGeometry"
          },
          "properties": {
            "$ref": "#/components/schemas/MapMatchingFeatureProperties"
          },
          "id": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "bbox": {
            "type": "array",
            "minItems": 4,
            "maxItems": 6,
            "items": {
              "type": "number"
            }
          }
        }
      },
      "MapMatchingFeatureCollection": {
        "type": "object",
        "required": [
          "type",
          "features"
        ],
        "properties": {
          "type": {
            "const": "FeatureCollection"
          },
          "features": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MapMatchingFeature"
            }
          },
          "bbox": {
            "type": "array",
            "minItems": 4,
            "maxItems": 6,
            "items": {
              "type": "number"
            }
          },
          "properties": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/JsonObject"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "RouteMatrixLocation": {
        "type": "object",
        "required": [
          "original_location"
        ],
        "properties": {
          "original_location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          },
          "location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          }
        }
      },
      "RouteMatrixCell": {
        "type": "object",
        "required": [
          "distance",
          "time",
          "source_index",
          "target_index"
        ],
        "properties": {
          "distance": {
            "type": [
              "number",
              "null"
            ]
          },
          "time": {
            "type": [
              "number",
              "null"
            ]
          },
          "source_index": {
            "type": "integer"
          },
          "target_index": {
            "type": "integer"
          }
        }
      },
      "RouteMatrixResponse": {
        "type": "object",
        "required": [
          "sources",
          "targets",
          "sources_to_targets",
          "units",
          "distance_units",
          "mode"
        ],
        "properties": {
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteMatrixLocation"
            }
          },
          "targets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouteMatrixLocation"
            }
          },
          "sources_to_targets": {
            "type": "array",
            "items": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/RouteMatrixCell"
              }
            }
          },
          "units": {
            "type": "string",
            "enum": [
              "metric",
              "imperial"
            ]
          },
          "distance_units": {
            "type": "string",
            "enum": [
              "meters",
              "miles"
            ]
          },
          "mode": {
            "type": "string",
            "enum": [
              "walk",
              "hike",
              "scooter",
              "motorcycle",
              "drive",
              "light_truck",
              "bicycle",
              "mountain_bike",
              "road_bike",
              "bus",
              "medium_truck",
              "truck",
              "truck_dangerous_goods",
              "heavy_truck",
              "long_truck",
              "transit",
              "approximated_transit"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "balanced",
              "short",
              "less_maneuvers"
            ]
          },
          "max_speed": {
            "type": "number"
          },
          "avoid": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Avoid"
            }
          },
          "traffic": {
            "type": "string",
            "enum": [
              "free_flow",
              "approximated"
            ]
          }
        }
      },
      "IsolineDetails": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/JsonValue"
        },
        "properties": {
          "population": {
            "type": "object",
            "required": [],
            "properties": {
              "attribution": {
                "type": "string"
              },
              "value": {
                "type": "number"
              }
            }
          }
        }
      },
      "IsolineFeatureProperties": {
        "type": "object",
        "required": [
          "id",
          "lat",
          "lon",
          "mode",
          "type",
          "range"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "lat": {
            "type": "number",
            "minimum": -90,
            "maximum": 90
          },
          "lon": {
            "type": "number",
            "minimum": -180,
            "maximum": 180
          },
          "mode": {
            "type": "string",
            "enum": [
              "walk",
              "hike",
              "scooter",
              "motorcycle",
              "drive",
              "light_truck",
              "bicycle",
              "mountain_bike",
              "road_bike",
              "bus",
              "medium_truck",
              "truck",
              "truck_dangerous_goods",
              "heavy_truck",
              "long_truck",
              "transit",
              "approximated_transit"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "time",
              "distance"
            ]
          },
          "range": {
            "type": "number"
          },
          "details": {
            "$ref": "#/components/schemas/IsolineDetails"
          },
          "route_type": {
            "type": "string",
            "enum": [
              "balanced",
              "short",
              "less_maneuvers"
            ]
          },
          "max_speed": {
            "type": "number"
          },
          "units": {
            "type": "string",
            "enum": [
              "metric",
              "imperial"
            ]
          },
          "traffic": {
            "type": "string",
            "enum": [
              "free_flow",
              "approximated"
            ]
          },
          "avoid": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Avoid"
            }
          }
        }
      },
      "IsolineCollectionProperties": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "string"
          }
        }
      },
      "IsolineFeature": {
        "type": "object",
        "required": [
          "type",
          "geometry",
          "properties"
        ],
        "properties": {
          "type": {
            "const": "Feature"
          },
          "geometry": {
            "$ref": "#/components/schemas/IsolineGeometry"
          },
          "properties": {
            "$ref": "#/components/schemas/IsolineFeatureProperties"
          },
          "id": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "bbox": {
            "type": "array",
            "minItems": 4,
            "maxItems": 6,
            "items": {
              "type": "number"
            }
          }
        }
      },
      "IsolineFeatureCollection": {
        "type": "object",
        "required": [
          "type",
          "features",
          "properties"
        ],
        "properties": {
          "type": {
            "const": "FeatureCollection"
          },
          "features": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IsolineFeature"
            }
          },
          "bbox": {
            "type": "array",
            "minItems": 4,
            "maxItems": 6,
            "items": {
              "type": "number"
            }
          },
          "properties": {
            "$ref": "#/components/schemas/IsolineCollectionProperties"
          }
        }
      },
      "RoutePlannerParamLocation": {
        "type": "object",
        "required": [
          "id",
          "location"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          }
        }
      },
      "RoutePlannerParamStop": {
        "type": "object",
        "required": [
          "location_index",
          "location",
          "duration",
          "time_windows"
        ],
        "properties": {
          "location_index": {
            "type": "integer"
          },
          "location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          },
          "duration": {
            "type": "number"
          },
          "time_windows": {
            "type": "array",
            "items": {
              "type": "array",
              "minItems": 2,
              "maxItems": 2,
              "prefixItems": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "items": false
            }
          }
        }
      },
      "RoutePlannerParamShipment": {
        "type": "object",
        "required": [
          "id",
          "pickup",
          "delivery",
          "priority",
          "amount",
          "requirements"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "pickup": {
            "$ref": "#/components/schemas/RoutePlannerParamStop"
          },
          "delivery": {
            "$ref": "#/components/schemas/RoutePlannerParamStop"
          },
          "priority": {
            "type": "number"
          },
          "amount": {
            "type": "number"
          },
          "requirements": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "RoutePlannerParamJob": {
        "type": "object",
        "required": [],
        "properties": {
          "id": {
            "type": "string"
          },
          "location_index": {
            "type": "integer"
          },
          "location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          },
          "priority": {
            "type": "number"
          },
          "duration": {
            "type": "number"
          },
          "time_windows": {
            "type": "array",
            "items": {
              "type": "array",
              "minItems": 2,
              "maxItems": 2,
              "prefixItems": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "items": false
            }
          },
          "delivery_amount": {
            "type": "number"
          },
          "pickup_amount": {
            "type": "number"
          },
          "requirements": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "RoutePlannerParamAgent": {
        "type": "object",
        "required": [],
        "properties": {
          "id": {
            "type": "string"
          },
          "start_location_index": {
            "type": "integer"
          },
          "start_location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          },
          "end_location_index": {
            "type": "integer"
          },
          "end_location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          },
          "delivery_capacity": {
            "type": "number"
          },
          "pickup_capacity": {
            "type": "number"
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "time_windows": {
            "type": "array",
            "items": {
              "type": "array",
              "minItems": 2,
              "maxItems": 2,
              "prefixItems": [
                {
                  "type": "number"
                },
                {
                  "type": "number"
                }
              ],
              "items": false
            }
          },
          "breaks": {
            "$ref": "#/components/schemas/JsonValue"
          }
        }
      },
      "RoutePlannerParams": {
        "type": "object",
        "required": [
          "locations",
          "agents",
          "mode"
        ],
        "properties": {
          "locations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerParamLocation"
            }
          },
          "agents": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerParamAgent"
            }
          },
          "jobs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerParamJob"
            }
          },
          "shipments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerParamShipment"
            }
          },
          "mode": {
            "type": "string",
            "enum": [
              "walk",
              "hike",
              "scooter",
              "motorcycle",
              "drive",
              "light_truck",
              "bicycle",
              "mountain_bike",
              "road_bike",
              "bus",
              "medium_truck",
              "truck",
              "truck_dangerous_goods",
              "heavy_truck",
              "long_truck",
              "transit",
              "approximated_transit"
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "balanced",
              "short",
              "less_maneuvers"
            ]
          },
          "max_speed": {
            "type": "number"
          },
          "traffic": {
            "type": "string",
            "enum": [
              "free_flow",
              "approximated"
            ]
          },
          "units": {
            "type": "string",
            "enum": [
              "metric",
              "imperial"
            ]
          },
          "avoid": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Avoid"
            }
          }
        }
      },
      "RoutePlannerAction": {
        "type": "object",
        "required": [
          "index",
          "type",
          "start_time",
          "duration"
        ],
        "properties": {
          "index": {
            "type": "integer"
          },
          "type": {
            "type": "string",
            "enum": [
              "start",
              "end",
              "job",
              "pickup",
              "delivery",
              "break"
            ]
          },
          "start_time": {
            "type": "number"
          },
          "duration": {
            "type": "number"
          },
          "location_index": {
            "type": "integer"
          },
          "location_id": {
            "type": "string"
          },
          "shipment_id": {
            "type": "string"
          },
          "shipment_index": {
            "type": "integer"
          },
          "job_id": {
            "type": "string"
          },
          "job_index": {
            "type": "integer"
          },
          "waypoint_index": {
            "type": "integer"
          }
        }
      },
      "RoutePlannerWaypoint": {
        "type": "object",
        "required": [
          "original_location",
          "location",
          "start_time",
          "duration",
          "actions"
        ],
        "properties": {
          "next_leg_index": {
            "type": "integer"
          },
          "prev_leg_index": {
            "type": "integer"
          },
          "original_location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          },
          "location": {
            "$ref": "#/components/schemas/LongitudeLatitude"
          },
          "start_time": {
            "type": "number"
          },
          "duration": {
            "type": "number"
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerAction"
            }
          },
          "original_location_index": {
            "type": "integer"
          },
          "original_location_id": {
            "type": "string"
          }
        }
      },
      "RoutePlannerStep": {
        "type": "object",
        "required": [
          "from_index",
          "to_index",
          "time",
          "distance"
        ],
        "properties": {
          "from_index": {
            "type": "integer"
          },
          "to_index": {
            "type": "integer"
          },
          "time": {
            "type": [
              "number",
              "null"
            ]
          },
          "distance": {
            "type": [
              "number",
              "null"
            ]
          }
        }
      },
      "RoutePlannerLeg": {
        "type": "object",
        "required": [
          "time",
          "distance",
          "from_waypoint_index",
          "to_waypoint_index",
          "steps"
        ],
        "properties": {
          "time": {
            "type": [
              "number",
              "null"
            ]
          },
          "distance": {
            "type": [
              "number",
              "null"
            ]
          },
          "from_waypoint_index": {
            "type": "integer"
          },
          "to_waypoint_index": {
            "type": "integer"
          },
          "steps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerStep"
            }
          }
        }
      },
      "RoutePlannerFeatureProperties": {
        "type": "object",
        "required": [
          "agent_index",
          "time",
          "start_time",
          "end_time",
          "distance",
          "legs",
          "mode",
          "actions",
          "waypoints"
        ],
        "properties": {
          "agent_index": {
            "type": "integer"
          },
          "agent_id": {
            "type": "string"
          },
          "time": {
            "type": "number"
          },
          "start_time": {
            "type": "number"
          },
          "end_time": {
            "type": "number"
          },
          "distance": {
            "type": "number"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerLeg"
            }
          },
          "mode": {
            "type": "string",
            "enum": [
              "walk",
              "hike",
              "scooter",
              "motorcycle",
              "drive",
              "light_truck",
              "bicycle",
              "mountain_bike",
              "road_bike",
              "bus",
              "medium_truck",
              "truck",
              "truck_dangerous_goods",
              "heavy_truck",
              "long_truck",
              "transit",
              "approximated_transit"
            ]
          },
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerAction"
            }
          },
          "waypoints": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerWaypoint"
            }
          }
        }
      },
      "RoutePlannerIssues": {
        "type": "object",
        "required": [],
        "properties": {
          "unassigned_shipments": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "unassigned_agents": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "unassigned_jobs": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          }
        }
      },
      "RoutePlannerCollectionProperties": {
        "type": "object",
        "required": [
          "mode",
          "params"
        ],
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "walk",
              "hike",
              "scooter",
              "motorcycle",
              "drive",
              "light_truck",
              "bicycle",
              "mountain_bike",
              "road_bike",
              "bus",
              "medium_truck",
              "truck",
              "truck_dangerous_goods",
              "heavy_truck",
              "long_truck",
              "transit",
              "approximated_transit"
            ]
          },
          "params": {
            "$ref": "#/components/schemas/RoutePlannerParams"
          },
          "issues": {
            "$ref": "#/components/schemas/RoutePlannerIssues"
          }
        }
      },
      "RoutePlannerFeature": {
        "type": "object",
        "required": [
          "type",
          "geometry",
          "properties"
        ],
        "properties": {
          "type": {
            "const": "Feature"
          },
          "geometry": {
            "$ref": "#/components/schemas/MultiLineStringGeometry"
          },
          "properties": {
            "$ref": "#/components/schemas/RoutePlannerFeatureProperties"
          },
          "id": {
            "oneOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              }
            ]
          },
          "bbox": {
            "type": "array",
            "minItems": 4,
            "maxItems": 6,
            "items": {
              "type": "number"
            }
          }
        }
      },
      "RoutePlannerFeatureCollection": {
        "type": "object",
        "required": [
          "type",
          "features",
          "properties"
        ],
        "properties": {
          "type": {
            "const": "FeatureCollection"
          },
          "features": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RoutePlannerFeature"
            }
          },
          "bbox": {
            "type": "array",
            "minItems": 4,
            "maxItems": 6,
            "items": {
              "type": "number"
            }
          },
          "properties": {
            "$ref": "#/components/schemas/RoutePlannerCollectionProperties"
          }
        }
      },
      "RoutePlannerDataError": {
        "type": "object",
        "required": [
          "error",
          "message"
        ],
        "properties": {
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "RoutePlannerResponse": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/RoutePlannerFeatureCollection"
          },
          {
            "$ref": "#/components/schemas/RoutePlannerDataError"
          }
        ]
      },
      "GatewayError": {
        "type": "object",
        "required": [
          "statusCode",
          "error",
          "message"
        ],
        "properties": {
          "statusCode": {
            "type": "integer",
            "description": "HTTP status code returned by the API gateway."
          },
          "error": {
            "type": "string",
            "description": "Standard HTTP error name."
          },
          "message": {
            "type": "string",
            "description": "Human-readable explanation of the error."
          }
        }
      }
    },
    "securitySchemes": {
      "ApiKeyInQuery": {
        "type": "apiKey",
        "in": "query",
        "name": "apiKey",
        "description": "Geoapify API key query parameter. Recommended authentication method for public APIs. API keys in URLs can be logged; use x-api-key for server-to-server clients."
      },
      "ApiKeyInHeader": {
        "type": "apiKey",
        "in": "header",
        "name": "x-api-key",
        "description": "Geoapify API key header. Supported as an alternative authentication method for public APIs."
      }
    }
  },
  "security": [
    {
      "ApiKeyInQuery": []
    },
    {
      "ApiKeyInHeader": []
    }
  ]
}
