{
  "openapi": "3.0.1",
  "info": {
    "title": "AU Road Trip Planner: Rest Areas, Toilets, Fuel & EV by Route",
    "description": "Road trip planner for Australia: rest areas and toilets, fuel stops and gaps, EV charging, food, attractions and Big Things, camping, dump points, water, shops, hospitals and vets on any route, plus low bridges, level crossings, speed cameras, floodways and crash hotspots. By route km, all states.",
    "version": "0.3",
    "x-build-id": "mFldlQm1DHTma0Lbn"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/davidar~au-route-corridor/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-davidar-au-route-corridor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/davidar~au-route-corridor/runs": {
      "post": {
        "operationId": "runs-sync-davidar-au-route-corridor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/davidar~au-route-corridor/run-sync": {
      "post": {
        "operationId": "run-sync-davidar-au-route-corridor",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "origin": {
            "title": "Origin",
            "type": "string",
            "description": "Where the drive starts, when you want the route computed for you: a place name or address (`\"Goondiwindi QLD\"`) or `\"lat,lng\"` (`\"-28.5332,150.3115\"`). Needs `destination`. The route is computed by the Directions, Routing & Distance Matrix API actor (davidar/openstreetmap-directions-api), run under your account: its per-route ($0.003) and per-place-name ($0.001) charges appear on that actor in your billing, not on this one. Free Apify plans get its community-router tier: coordinates only, car only. `polyline` and `coordinates` take precedence when given."
          },
          "destination": {
            "title": "Destination",
            "type": "string",
            "description": "Where the drive ends: a place name or address, or `\"lat,lng\"`. Needs `origin`. Routed by the Directions, Routing & Distance Matrix API actor under your account — see Origin for what that costs."
          },
          "waypoints": {
            "title": "Waypoints",
            "type": "array",
            "description": "Towns or points the drive must pass through, in order, between origin and destination: place names (`\"Gilgandra NSW\"`) or `\"lat,lng\"` strings, one per entry. Up to 18. The router takes the shortest road, not necessarily the highway — add a waypoint to keep it on the road you will drive (e.g. the Newell Highway via Gilgandra).",
            "items": {
              "type": "string"
            }
          },
          "profile": {
            "title": "Travel mode",
            "enum": [
              "car",
              "bike",
              "foot",
              "truck",
              "motorcycle",
              "scooter",
              "bus",
              "taxi"
            ],
            "type": "string",
            "description": "Vehicle the route is computed for, when you give origin/destination: `car` (default), `truck`, `bike`, `foot`, `motorcycle`, `scooter`, `bus` or `taxi`. The free-plan community router serves `car` only. Ignored for a polyline or coordinates.",
            "default": "car"
          },
          "polyline": {
            "title": "Route polyline",
            "type": "string",
            "description": "Your own route, when you already have one: an encoded polyline string (Google Directions `overview_polyline.points`, OSRM, Mapbox, Valhalla, or the Directions, Routing & Distance Matrix API actor's `polyline6`). Set `polylinePrecision` to match. Takes precedence over `coordinates` and origin/destination."
          },
          "polylinePrecision": {
            "title": "Polyline precision",
            "minimum": 5,
            "maximum": 6,
            "type": "integer",
            "description": "How `polyline` was encoded: 5 for Google Directions and OSRM's default; 6 for Mapbox Directions, Valhalla, OSRM `polyline6` and openstreetmap-directions-api. Default 5.",
            "default": 5
          },
          "coordinates": {
            "title": "Route coordinates",
            "type": "array",
            "description": "Your own route as a list of points, when you have points instead of a polyline: `[lat, lng]` pairs, latitude first (the same order as origin/destination), e.g. `[[-28.5332, 150.3115], [-29.4651, 149.8275]]`. Use the full road geometry, not a few towns — features are matched to the line. A pair in GeoJSON `[lng, lat]` order is refused with a hint, never swapped for you. Ignored when `polyline` is set; takes precedence over origin/destination.",
            "items": {
              "type": "array",
              "items": {
                "type": "number"
              }
            }
          },
          "layers": {
            "title": "Layers",
            "type": "array",
            "description": "What to find along the route, one or more of: `rest_areas` (rest stops, service centres and public toilets), `fuel` (service stations, roadhouses, truck stops), `ev_charging` (EV chargers), `camping` (campsites and caravan parks), `water` (drinking-water taps), `dump_points` (caravan dump points), `supermarkets`, `pharmacies`, `hospitals`, `vets`, `food` (restaurants, cafes, fast food, bakeries: brand, cuisine, opening hours), `attractions` (museums, lookouts, monuments, telescopes, Big Things; ones with a Wikidata/Wikipedia entry up to 10 km off the road), `rail_crossings` (level crossings), `speed_cameras`, `traffic_cameras` (QLD), `clearances` (height and weight limits: low bridges, overbridges, tunnels), `floodways` (floodways and fords), `crashes` (crash density per `binKm` bin, QLD). Default `[\"rest_areas\"]`. Pricing: rest areas `corridor_rest_area` $0.0005/row; other places (incl. food and attractions) `corridor_site` $0.0002; road features and crash bins `corridor_feature` $0.0002.",
            "items": {
              "type": "string",
              "enum": [
                "rest_areas",
                "fuel",
                "ev_charging",
                "camping",
                "water",
                "dump_points",
                "supermarkets",
                "pharmacies",
                "hospitals",
                "vets",
                "food",
                "attractions",
                "rail_crossings",
                "speed_cameras",
                "traffic_cameras",
                "clearances",
                "floodways",
                "crashes"
              ],
              "enumTitles": [
                "Rest areas & toilets",
                "Fuel stations",
                "EV charging",
                "Campsites & caravan parks",
                "Drinking water",
                "Dump points",
                "Supermarkets",
                "Pharmacies",
                "Hospitals",
                "Vets",
                "Food (cafes, fast food, bakeries)",
                "Attractions & Big Things",
                "Rail level crossings",
                "Speed cameras",
                "Traffic cameras (QLD)",
                "Height & weight limits",
                "Floodways & fords",
                "Crash density (QLD)"
              ]
            },
            "default": [
              "rest_areas"
            ]
          },
          "bufferKm": {
            "title": "Corridor half-width (km)",
            "minimum": 0.1,
            "maximum": 10,
            "type": "number",
            "description": "How far off the road a place may be and still count: sites (rest areas, fuel, camping, shops, hospitals…) within this many km of the route line are reported. Default 1.5 km catches highway rest areas and town services just off the road; a straight-line or coarse route needs more. Max 10. Road features are capped regardless (clearances and rail crossings 40 m, floodways and speed cameras 60 m, crashes 100 m, traffic cameras 300 m).",
            "default": 1.5
          },
          "requireToilet": {
            "title": "Rest areas: only sites with a toilet",
            "type": "boolean",
            "description": "Rest-areas layer only: whether to keep only stops with a toilet. When on (default), rest-area sites whose source says no toilet or doesn't say are not emitted and not charged (service centres are assumed to have one); OUTPUT.droppedNoToilet counts them. Turn off to see every rest area and truck bay.",
            "default": true
          },
          "gapKm": {
            "title": "Gap to flag (km)",
            "minimum": 5,
            "maximum": 2000,
            "type": "number",
            "description": "Longest acceptable stretch without a stop, for spacing driver-fatigue breaks and fuel stops: OUTPUT.gaps lists, per layer that supports it (rest areas with a toilet, fuel, EV charging), every stretch of at least this many route-km with no emitted row, including start → first stop and last stop → end. Default 100.",
            "default": 100
          },
          "binKm": {
            "title": "Crash bin length (km)",
            "minimum": 1,
            "maximum": 100,
            "type": "number",
            "description": "Crash-density layer only: length of each road segment crashes are counted over, in route-km. One row per bin with reported crashes counted by severity (fatal, hospitalisation, medical treatment, minor injury, property damage). Default 10.",
            "default": 10
          },
          "notableOnly": {
            "title": "Attractions: only notable ones",
            "type": "boolean",
            "description": "Attractions layer only: keep just the well-known sights (attributes.notable: a Wikipedia article, a Wikidata entry on a museum or attraction, or a Big Thing) and leave out the small local ones. Fewer rows to pay for and to read. OUTPUT.droppedByLimit counts what was left out.",
            "default": false
          },
          "maxRowsPer10Km": {
            "title": "Max rows per layer per 10 km",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Thins towns and cities, where rows pile up and matter least: each place layer (rest areas, fuel, food, attractions, shops…) keeps at most this many rows in every 10 km of route — the best ones: named, then notable, then nearest the road. Country stretches are rarely touched, road features (low bridges, level crossings, floodways, cameras) never are, and gaps are computed from every row found. Rows left out are not charged; OUTPUT.droppedByLimit counts them. Default 5; 0 = every row.",
            "default": 5
          },
          "maxRowsPerLayer": {
            "title": "Max rows per layer",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Optional cap for a short answer (e.g. an AI agent reading the results): at most this many rows per layer, spread along the route — the route is split into that many equal stretches and each keeps its best row (named, then notable, then nearest the road). Gaps (OUTPUT.gaps) are still computed from every row found, so a cap never hides or invents a gap. Rows left out are not charged; OUTPUT.droppedByLimit counts them. Default: no cap."
          },
          "states": {
            "title": "States",
            "type": "array",
            "description": "Keep only features in these Australian states and territories. Default: every state the route crosses. Agency layers exist for QLD, NSW, VIC, WA, TAS and ACT; SA and NT come from OpenStreetMap only (see README).",
            "items": {
              "type": "string",
              "enum": [
                "QLD",
                "NSW",
                "VIC",
                "SA",
                "WA",
                "TAS",
                "NT",
                "ACT"
              ],
              "enumTitles": [
                "Queensland",
                "New South Wales",
                "Victoria",
                "South Australia",
                "Western Australia",
                "Tasmania",
                "Northern Territory",
                "ACT"
              ]
            }
          },
          "sources": {
            "title": "Sources",
            "type": "array",
            "description": "Which data to use. `agency` = the state road authorities' and agencies' own layers (attributes are authoritative; QLD, NSW, VIC, WA, TAS, ACT). `osm` = OpenStreetMap from a bundled Australia extract (national, community-reported; the only source in SA and NT and for most non-rest-area layers; `source.vintage` is the extract date). Features found in both within 150 m are merged, agency values first. Default both.",
            "items": {
              "type": "string",
              "enum": [
                "agency",
                "osm"
              ],
              "enumTitles": [
                "State road authorities and agencies (QLD, NSW, VIC, WA, TAS, ACT)",
                "OpenStreetMap (bundled extract)"
              ]
            },
            "default": [
              "agency",
              "osm"
            ]
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many agency sources to query at once (1–8, default 4). Requests per host are capped regardless of this value (2 in flight per agency server). OpenStreetMap is bundled and makes no requests.",
            "default": 4
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}