# Transitous European Public Transit Route Finder

> Transitous European Public Transit Route Finder is a paid API for AI agents from transit.withzero.ai, paid per call via MPP, $0.005/call, status unknown (last checked 2026-09-15).

Finds public transit routes between two coordinates in Europe using the open-source Transitous API (OpenTripPlanner), returning step-by-step legs with walking, bus, rail, subway, tram, and ferry segments.

## Facts

- Endpoint: POST https://transit.withzero.ai/run
- Price: $0.005/call
- Payment: MPP
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Provider: transit.withzero.ai
- Website: https://transit.withzero.ai
- Canonical page: https://www.zero.xyz/c/transit-withzero-ai-transitous-european-public-transit-route-finder-65c5bf6b
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_euUoDGCPdXJ-49xGfWhZE

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability transit-withzero-ai-transitous-european-public-transit-route-finder-65c5bf6b -d '<json body>'
```

Example prompt: Can you find me public transit routes from the Eiffel Tower (48.8584, 2.2945) to the Louvre (48.8606, 2.3376) in Paris for tomorrow at 9:00 AM, departing at that time?

## When to prefer this

Choose this endpoint when you need step-by-step public transit routing in Europe with real agency and line-level detail, especially when you want multimodal routes combining walking with rail, bus, tram, subway, or ferry. Prefer this over generic mapping APIs when open-source GTFS-based routing in Europe is sufficient and cost-per-call matters.

## Known failure modes

- No routes returned if origin or destination coordinates are outside Transitous GTFS coverage area
- No routes returned for US cities not covered by Transitous data
- Empty routes array if no transit service exists between the two points at the requested time
- Invalid coordinate values (out of range) cause request validation failure
- Incorrect date or time format returns a schema validation error

## How this service works

Find public transit routes between two European locations using the Transitous API (open-source, based on OpenTripPlanner). Returns routes with step-by-step legs including walking, bus, rail, subway, tram, and ferry segments. Best coverage in Europe. Limited US coverage (only cities with GTFS data in Transitous). If the origin or destination is not covered, the API will return no routes.

## Output

Returns an array of route options, each with total duration, number of transfers, departure and arrival times, and a sequence of legs — each leg showing the transport mode (WALK, BUS, RAIL, SUBWAY, TRAM, FERRY), route name, agency, origin/destination stop names, times, and distance. Also returns the count of routes found.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "fromLat",
  "fromLng",
  "toLat",
  "toLng"
 ],
 "properties": {
  "date": {
   "type": "string",
   "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
   "description": "Travel date in YYYY-MM-DD format (defaults to today)"
  },
  "time": {
   "type": "string",
   "pattern": "^\\d{2}:\\d{2}$",
   "description": "Travel time in HH:MM format (defaults to now)"
  },
  "toLat": {
   "type": "number",
   "maximum": 90,
   "minimum": -90,
   "description": "Destination latitude"
  },
  "toLng": {
   "type": "number",
   "maximum": 180,
   "minimum": -180,
   "description": "Destination longitude"
  },
  "fromLat": {
   "type": "number",
   "maximum": 90,
   "minimum": -90,
   "description": "Origin latitude"
  },
  "fromLng": {
   "type": "number",
   "maximum": 180,
   "minimum": -180,
   "description": "Origin longitude"
  },
  "arriveBy": {
   "type": "boolean",
   "default": false,
   "description": "If true, the given time is the desired arrival time (default: false, meaning departure time)"
  }
 },
 "additionalProperties": false
}
```

## Response schema (JSON Schema)

```json
{
 "type": "object",
 "required": [
  "origin",
  "destination",
  "resultCount",
  "routes"
 ],
 "properties": {
  "origin": {
   "type": "string",
   "description": "Origin coordinates as \"lat,lng\""
  },
  "routes": {
   "type": "array",
   "items": {
    "type": "object",
    "required": [
     "duration",
     "departureTime",
     "arrivalTime",
     "transfers",
     "legs"
    ],
    "properties": {
     "legs": {
      "type": "array",
      "items": {
       "type": "object",
       "required": [
        "mode",
        "routeName",
        "agencyName",
        "from",
        "to",
        "departureTime",
        "arrivalTime",
        "duration",
        "distance"
       ],
       "properties": {
        "to": {
         "type": "string",
         "description": "Arrival stop/place name"
        },
        "from": {
         "type": "string",
         "description": "Departure stop/place name"
        },
        "mode": {
         "enum": [
          "WALK",
          "BUS",
          "RAIL",
          "SUBWAY",
          "TRAM",
          "FERRY"
         ],
         "type": "string",
         "description": "Transport mode"
        },
        "distance": {
         "type": "number",
         "nullable": true,
         "description": "Distance in meters (for walk legs, null otherwise)"
        },
        "duration": {
         "type": "string",
         "description": "Leg duration (e.g. \"5 min\")"
        },
        "routeName": {
         "type": "string",
         "nullable": true,
         "description": "Line number or name (null for walking)"
        },
        "agencyName": {
         "type": "string",
         "nullable": true,
         "description": "Transit agency name (null for walking)"
        },
        "arrivalTime": {
         "type": "string",
         "description": "Leg arrival time (ISO 8601)"
        },
        "departureTime": {
         "type": "string",
         "description": "Leg departure time (ISO 8601)"
        }
       },
       "additionalProperties": false
      }
     },
     "duration": {
      "type": "string",
      "description": "Total trip duration (e.g. \"42 min\")"
     },
     "transfers": {
      "type": "number",
      "description": "Number of transfers (transit legs minus one)"
     },
     "arrivalTime": {
      "type": "string",
      "description": "Arrival time (ISO 8601)"
     },
     "departureTime": {
      "type": "string",
      "description": "Departure time (ISO 8601)"
     }
    }
… (truncated)
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/transit-withzero-ai-transitous-european-public-transit-route-finder-65c5bf6b/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from transit.withzero.ai](https://www.zero.xyz/host/transit.withzero.ai/llms.txt)
