Prowl
24/100
prowl
Benchmarked Sep 28, 2026

PTV Timetable API - Version 3

The PTV Timetable API provides direct access to Public Transport Victoria’s public transport timetable data. The API returns scheduled timetable, route and stop data for all metropolitan and region

dataapi platform_profile
Benchmark Your API

Score Breakdown

Latency6/10
Consistency3/10
Auth Simplicity3/10
Token Efficiency3/10
Documentation2/10
Error Clarity2/10
First-Try Success2/10
Parseability1/10

Benchmark Analysis Log

Full LLM thinking from the 4-phase benchmark pipeline.

Analyze
{
  "service_type": "platform",
  "base_url": "https://timetableapi.ptv.vic.gov.au",
  "auth_method": "api_key",
  "auth_config": {
    "key_dev_id": "developer id (user ID)",
    "key_api_key": "API key used to sign requests",
    "signature": "HMAC-SHA1 of request path with API key, sent as a signature query param",
    "notes": "Both a devid and a signed request (signature) are required. The signature is computed over the full request URL path/query using the API key as HMAC secret."
  },
  "endpoints": [
    {
      "name": "Route Types",
      "path": "/v3/route_types",
      "method": "GET",
      "description": "List all route types (train, tram, bus, vline, etc.)"
    },
    {
      "name": "Routes",
      "path": "/v3/routes",
      "method": "GET",
      "description": "List routes, filterable by route type, route name, and (with geopath) location"
    },
    {
      "name": "Routes by ID",
      "path": "/v3/routes/{route_id}",
      "method": "GET",
      "description": "Details for a specific route"
    },
    {
      "name": "Stops",
      "path": "/v3/stops",
      "method": "GET",
      "description": "List stops, filterable by route type, route, and location"
    },
    {
      "name": "Stops by ID",
      "path": "/v3/stops/{stop_id}",
      "method": "GET",
      "description": "Details for a specific stop, including location and facilities"
    },
    {
      "name": "Departures",
      "path": "/v3/departures/route_type/{route_type}/stop/{stop_id}",
      "method": "GET",
      "description": "Upcoming scheduled departures from a stop"
    },
    {
      "name": "Departures for Route",
      "path": "/v3/departures/route_type/{route_type}/stop/{stop_id}/route/{route_id}",
      "method": "GET",
      "description": "Upcoming departures for a specific route from a stop"
    },
    {
      "name": "Disruptions",
      "path": "/v3/disruptions",
      "method": "GET",
      "description": "Current and planned disruptions across the network"
    },
    {
      "name": "Disruptions for Route",
      "path": "/v3/disruptions/route/{route_id}",
      "method": "GET",
      "description": "Disruptions affecting a specific route"
    },
    {
      "name": "Disruptions for Stop",
      "path": "/v3/disruptions/stop/{stop_id}",
      "method": "GET",
      "description": "Disruptions affecting a specific stop"
    },
    {
      "name": "Disruptions for Route Type",
      "path": "/v3/disruptions/route_type/{route_type}",
      "method": "GET",
      "description": "Disruptions by mode/route type"
    },
    {
      "name": "Patterns",
      "path": "/v3/pattern/run/{run_ref}/route_type/{route_type}",
      "method": "GET",
      "description": "The stopping pattern for a specific run"
    },
    {
      "name": "Runs",
      "path": "/v3/runs/route/{route_id}",
      "method": "GET",
      "description": "List runs for a route (with optional date/expand)"
    },
    {
      "name": "Runs for Route Type",
      "path": "/v3/runs/route_type/{route_type}",
      "method": "GET",
      "description": "List runs by route type"
    },
    {
      "name": "Run Details",
      "path": "/v3/runs/{run_ref}",
      "method": "GET",
      "description": "Details for a specific run"
    },
    {
      "name": "Direction",
      "path": "/v3/directions/route/{route_id}",
      "method": "GET",
      "description": "Directions (headsigns) for a route"
    },
    {
      "name": "Direction by ID",
      "path": "/v3/directions/{direction_id}",
      "method": "GET",
      "description": "Details for a direction"
    },
    {
      "name": "Search",
      "path": "/v3/search/{search_term}",
      "method": "GET",
      "description": "Search for stops and routes by name"
    },
    {
      "name": "Outlets",
      "path": "/v3/outlets",
      "method": "GET",
      "description": "List of myki retail outlets"
    },
    {
      "name": "Outlets by Location",
      "path": "/v3/outlets/location/{latitude},{longitude}",
      "method": "GET",
      "description": "Find myki retail outlets near a location"
    }
  ],
  "pricing_model": {
    "type": "free",
    "details": {
      "cost": "Free to register and use",
      "registration": "Requires sign-up at https://www.ptv.vic.gov.au/footer/data-and-reporting/datasets/ptv-timetable-api/ to obtain a developer ID and API key",
      "commercial_use": "Check PTV terms of use; generally available for apps and integrations",
      "data_freshness": "Scheduled timetable data (not real-time vehicle positions); includes planned disruptions"
    }
  },
  "rate_limits": {
    "documented": false,
    "notes": "PTV does not publish explicit numeric rate limits in public docs, but the API is intended for reasonable request volumes. Implement caching and avoid high-frequency polling. Fair-use limits may apply; excessive use may lead to throttling."
  },
  "capabilities": [
    "Access scheduled timetable data for all Victorian public transport modes (metro train, tram, bus, reg
Execute

1/3 tests passed

TestEndpointStatusLatency
website_uptimeGET /403565ms
robots_txtGET /robots.txt403522ms
llms_txtGET /llms.txt200431ms
Interpret
{
  "overall": 32,
  "dimensions": {
    "token_efficiency": 3.0,
    "first_try_success": 2.0,
    "response_parseability": 1.0,
    "error_clarity": 2.0,
    "doc_quality": 2.0,
    "auth_simplicity": 3.0,
    "latency": 6.0,
    "consistency": 3.0
  },
  "pricing_normalized": {
    "model": "unknown",
    "notes": "No pricing information discoverable; platform appears to be Transport Victoria (a public transit authority) rather than a developer/agent API product."
  },
  "issues": [
    "Website and robots.txt return 403 with Cloudflare 'Just a moment...' challenge — programmatic access is blocked, making the platform effectively unusable for agents",
    "No API docs, no capabilities detected, no pricing model — nothing for an agent to integrate against",
    "llms_txt check returned HTML for a consumer webpage (Transport Victoria), not a machine-readable llms.txt file — misleading signal",
    "Cloudflare bot protection gates nearly all endpoints, so even discovery/metadata fetches fail",
    "No evident auth or onboarding path for developers/agents"
  ],
  "recommendations": [
    "If this is genuinely a transit data source, expose a proper GTFS/GTFS-RT or REST API with documented endpoints instead of only a consumer website",
    "Serve a real /llms.txt at the root describing available data, endpoints, and terms",
    "Allow non-browser user agents through for read-only docs and machine endpoints (or provide an API-keyed bypass) rather than blanket Cloudflare challenges",
    "Publish clear API docs, rate limits, auth scheme, and a status page so agents can reason about reliability"
  ]
}

Agent Readiness

x402 Payments
Not supported
Streaming
No
Sandbox
None
Agent Auth
Unknown
SDKs
None listed
MCP Support
No

Embed your Prowl badge

Show your live agent-readiness score on your own site. Free, no auth — it updates as your score changes.

Prowl agent-readiness badge
<a href="https://prowl.world/service/ptv-timetable-api-version-3">
  <img src="https://prowl.world/badge/ptv-timetable-api-version-3.svg" height="56" alt="Agent-readiness on Prowl">
</a>

Options: ?style=light|dark · ?size=sm|md · ?variant=certified (claimed + DNS-verified only) · badge generator with preview

Want the full interactive view?

See operational metrics, LLM evaluations, agent readiness, and more.

Open in Dashboard