Geoapify · Schema

RoutePlannerRequest

GeocodingGeospatialLocationMapsRoutingPlacesTimezoneMCPGeoJSONOpenStreetMapStatic MapsIsolines

Properties

Name Type Description
mode string Travel profile used for all agent routes. `drive` represents passenger cars.
agents array Resources—such as vehicles or workers—to which jobs and shipments can be assigned.
jobs array Independent service or delivery tasks. At least one job or shipment is required.
shipments array Paired pickup-delivery tasks. Pickup always precedes delivery and both are assigned to the same agent.
locations array Reusable coordinates referenced by zero-based `location_index` fields. Regular calls may contain at most 300 unique coordinates across the complete task.
avoid array Road features, locations, polygons, or countries the calculated agent routes should avoid.
traffic string Traffic model for motorized modes. `free_flow` assumes uncongested roads; `approximated` accounts for likely congestion.
type string Route preference used for agent travel. `balanced` balances time and distance; `short` prioritizes distance; `less_maneuvers` penalizes turns.
max_speed number Maximum speed for driving, truck, and bus modes. Use 10–252 km/h with `units=metric`, or 6.5–155 mph with `units=imperial`.
units string Unit system for returned route distances. `metric` returns meters; `imperial` returns miles.
View JSON Schema on GitHub

JSON Schema

geoapify-route-planner-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/geoapify/json-schema/geoapify-route-planner-request-schema.json",
  "title": "RoutePlannerRequest",
  "x-generated": "2026-11-05",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/geoapify-route-planner-api-openapi.yml#/components/schemas/RoutePlannerRequest",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "mode",
    "agents"
  ],
  "anyOf": [
    {
      "required": [
        "jobs"
      ],
      "properties": {
        "jobs": {
          "minItems": 1
        }
      }
    },
    {
      "required": [
        "shipments"
      ],
      "properties": {
        "shipments": {
          "minItems": 1
        }
      }
    }
  ],
  "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"
      ],
      "description": "Travel profile used for all agent routes. `drive` represents passenger cars."
    },
    "agents": {
      "type": "array",
      "minItems": 1,
      "maxItems": 100,
      "description": "Resources—such as vehicles or workers—to which jobs and shipments can be assigned.",
      "items": {
        "$ref": "#/$defs/PlannerAgent"
      }
    },
    "jobs": {
      "type": "array",
      "maxItems": 1000,
      "description": "Independent service or delivery tasks. At least one job or shipment is required.",
      "items": {
        "$ref": "#/$defs/PlannerJob"
      }
    },
    "shipments": {
      "type": "array",
      "maxItems": 1000,
      "description": "Paired pickup-delivery tasks. Pickup always precedes delivery and both are assigned to the same agent.",
      "items": {
        "$ref": "#/$defs/PlannerShipment"
      }
    },
    "locations": {
      "type": "array",
      "maxItems": 1000,
      "description": "Reusable coordinates referenced by zero-based `location_index` fields. Regular calls may contain at most 300 unique coordinates across the complete task.",
      "items": {
        "$ref": "#/$defs/PlannerLocation"
      }
    },
    "avoid": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "tolls",
              "ferries",
              "highways",
              "green_zones",
              "transfers",
              "locations",
              "polygons",
              "country_codes"
            ]
          },
          "importance": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "values": {
            "type": "array",
            "items": {}
          }
        }
      },
      "maxItems": 100,
      "description": "Road features, locations, polygons, or countries the calculated agent routes should avoid."
    },
    "traffic": {
      "type": "string",
      "enum": [
        "free_flow",
        "approximated"
      ],
      "default": "free_flow",
      "description": "Traffic model for motorized modes. `free_flow` assumes uncongested roads; `approximated` accounts for likely congestion."
    },
    "type": {
      "type": "string",
      "enum": [
        "balanced",
        "short",
        "less_maneuvers"
      ],
      "default": "balanced",
      "description": "Route preference used for agent travel. `balanced` balances time and distance; `short` prioritizes distance; `less_maneuvers` penalizes turns."
    },
    "max_speed": {
      "type": "number",
      "minimum": 6.5,
      "maximum": 252,
      "description": "Maximum speed for driving, truck, and bus modes. Use 10–252 km/h with `units=metric`, or 6.5–155 mph with `units=imperial`."
    },
    "units": {
      "type": "string",
      "enum": [
        "metric",
        "imperial"
      ],
      "default": "metric",
      "description": "Unit system for returned route distances. `metric` returns meters; `imperial` returns miles."
    }
  },
  "$defs": {
    "PlannerAgent": {
      "type": "object",
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "start_location"
          ]
        },
        {
          "required": [
            "start_location_index"
          ]
        },
        {
          "required": [
            "end_location"
          ]
        },
        {
          "required": [
            "end_location_index"
          ]
        }
      ],
      "allOf": [
        {
          "not": {
            "required": [
              "start_location",
              "start_location_index"
            ]
          }
        },
        {
          "not": {
            "required": [
              "end_location",
              "end_location_index"
            ]
          }
        },
        {
          "not": {
            "required": [
              "pickup_capacity",
              "delivery_capacity"
            ]
          }
        }
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Optional unique agent identifier."
        },
        "start_location": {
          "type": "array",
          "minItems": 2,
          "maxItems": 2,
          "prefixItems": [
            {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "description": "Longitude."
            },
            {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "description": "Latitude."
            }
          ],
          "items": false,
          "description": "Agent start coordinate. Alternative to `start_location_index`."
        },
        "end_location": {
          "type": "array",
          "minItems": 2,
          "maxItems": 2,
          "prefixItems": [
            {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "description": "Longitude."
            },
            {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "description": "Latitude."
            }
          ],
          "items": false,
          "description": "Optional agent end coordinate. Alternative to `end_location_index`."
        },
        "start_location_index": {
          "type": "integer",
          "minimum": 0,
          "description": "Zero-based index in `locations` for the agent start."
        },
        "end_location_index": {
          "type": "integer",
          "minimum": 0,
          "description": "Zero-based index in `locations` for the agent end."
        },
        "pickup_capacity": {
          "type": "number",
          "minimum": 0,
          "description": "Maximum amount the agent can pick up."
        },
        "delivery_capacity": {
          "type": "number",
          "minimum": 0,
          "description": "Maximum amount initially loaded for delivery."
        },
        "capabilities": {
          "type": "array",
          "maxItems": 1000,
          "uniqueItems": true,
          "description": "Capabilities available to satisfy job or shipment `requirements`.",
          "items": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_. -]{1,100}$"
          }
        },
        "time_windows": {
          "type": "array",
          "maxItems": 10,
          "description": "Agent availability windows in relative seconds.",
          "items": {
            "type": "array",
            "minItems": 2,
            "maxItems": 2,
            "prefixItems": [
              {
                "type": "number",
                "minimum": 0,
                "description": "Interval start in relative seconds."
              },
              {
                "type": "number",
                "minimum": 0,
                "description": "Interval end in relative seconds."
              }
            ],
            "items": false
          }
        },
        "breaks": {
          "type": "array",
          "maxItems": 10,
          "description": "Optional breaks scheduled within one of their allowed time windows.",
          "items": {
            "$ref": "#/$defs/PlannerBreak"
          }
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "description": "Optional human-readable agent description."
        }
      }
    },
    "PlannerBreak": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "time_windows"
      ],
      "properties": {
        "duration": {
          "type": "number",
          "minimum": 0,
          "default": 0,
          "description": "Break duration in seconds."
        },
        "time_windows": {
          "type": "array",
          "maxItems": 10,
          "description": "Intervals in which the break may start.",
          "items": {
            "type": "array",
            "minItems": 2,
            "maxItems": 2,
            "prefixItems": [
              {
                "type": "number",
                "minimum": 0,
                "description": "Interval start in relative seconds."
              },
              {
                "type": "number",
                "minimum": 0,
                "description": "Interval end in relative seconds."
              }
            ],
            "items": false
          }
        }
      }
    },
    "PlannerJob": {
      "type": "object",
      "additionalProperties": false,
      "oneOf": [
        {
          "required": [
            "location"
          ]
        },
        {
          "required": [
            "location_index"
          ]
        }
      ],
      "allOf": [
        {
          "not": {
            "required": [
              "pickup_amount",
              "delivery_amount"
            ]
          }
        }
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Optional unique job identifier."
        },
        "location": {
          "type": "array",
          "minItems": 2,
          "maxItems": 2,
          "prefixItems": [
            {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "description": "Longitude."
            },
            {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "description": "Latitude."
            }
          ],
          "items": false,
          "description": "Job coordinate. Alternative to `location_index`."
        },
        "location_index": {
          "type": "integer",
          "minimum": 0,
          "description": "Zero-based index in `locations`. Alternative to `location`."
        },
        "priority": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100,
          "default": 0,
          "description": "Assignment priority from 0 (lowest) to 100 (highest)."
        },
        "duration": {
          "type": "number",
          "minimum": 0,
          "default": 0,
          "description": "Service duration in seconds."
        },
        "pickup_amount": {
          "type": "number",
          "minimum": 0,
          "description": "Amount added to the agent pickup load."
        },
        "delivery_amount": {
          "type": "number",
          "minimum": 0,
          "description": "Amount removed from the agent delivery load."
        },
        "requirements": {
          "type": "array",
          "maxItems": 1000,
          "uniqueItems": true,
          "description": "Capabilities an agent must have to perform the job.",
          "items": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_. -]{1,100}$"
          }
        },
        "time_windows": {
          "type": "array",
          "maxItems": 10,
          "description": "Intervals in which an agent must reach the job.",
          "items": {
            "type": "array",
            "minItems": 2,
            "maxItems": 2,
            "prefixItems": [
              {
                "type": "number",
                "minimum": 0,
                "description": "Interval start in relative seconds."
              },
              {
                "type": "number",
                "minimum": 0,
                "description": "Interval end in relative seconds."
              }
            ],
            "items": false
          }
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "description": "Optional human-readable job description."
        }
      }
    },
    "PlannerLocation": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "location"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Optional unique location identifier returned with related plan actions and waypoints."
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "description": "Optional human-readable location label."
        },
        "location": {
          "type": "array",
          "minItems": 2,
          "maxItems": 2,
          "prefixItems": [
            {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "description": "Longitude."
            },
            {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "description": "Latitude."
            }
          ],
          "items": false,
          "description": "Reusable coordinate in GeoJSON order: `[longitude, latitude]`."
        }
      }
    },
    "PlannerShipment": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "pickup",
        "delivery"
      ],
      "properties": {
        "id": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100,
          "description": "Optional unique shipment identifier."
        },
        "pickup": {
          "$ref": "#/$defs/PlannerShipmentStop"
        },
        "delivery": {
          "$ref": "#/$defs/PlannerShipmentStop"
        },
        "requirements": {
          "type": "array",
          "maxItems": 1000,
          "uniqueItems": true,
          "description": "Capabilities an agent must have to handle the shipment.",
          "items": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_. -]{1,100}$"
          }
        },
        "priority": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100,
          "default": 0,
          "description": "Assignment priority from 0 (lowest) to 100 (highest)."
        },
        "amount": {
          "type": "number",
          "minimum": 0,
          "description": "Shipment amount counted against agent capacity."
        },
        "description": {
          "type": "string",
          "maxLength": 1000,
          "description": "Optional human-readable shipment description."
        }
      }
    },
    "PlannerShipmentStop": {
      "type": "object",
      "additionalProperties": false,
      "oneOf": [
        {
          "required": [
            "location"
          ]
        },
        {
          "required": [
            "location_index"
          ]
        }
      ],
      "properties": {
        "location": {
          "type": "array",
          "minItems": 2,
          "maxItems": 2,
          "prefixItems": [
            {
              "type": "number",
              "minimum": -180,
              "maximum": 180,
              "description": "Longitude."
            },
            {
              "type": "number",
              "minimum": -90,
              "maximum": 90,
              "description": "Latitude."
            }
          ],
          "items": false,
          "description": "Pickup or delivery coordinate. Alternative to `location_index`."
        },
        "location_index": {
          "type": "integer",
          "minimum": 0,
          "description": "Zero-based index in `locations`. Alternative to `location`."
        },
        "duration": {
          "type": "number",
          "minimum": 0,
          "default": 0,
          "description": "Pickup or delivery service duration in seconds."
        },
        "time_windows": {
          "type": "array",
          "maxItems": 10,
          "description": "Intervals in which an agent must reach this stop.",
          "items": {
            "type": "array",
            "minItems": 2,
            "maxItems": 2,
            "prefixItems": [
              {
                "type": "number",
                "minimum": 0,
                "description": "Interval start in relative seconds."
              },
              {
                "type": "number",
                "minimum": 0,
                "description": "Interval end in relative seconds."
              }
            ],
            "items": false
          }
        }
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/geoapify-route-planner-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.