Lovable APImoviatravel.lovable.app ↗
Access Movia Travel data via API. Compare train, bus, and flight options with scored results including duration, price, CO2 emissions, and segment breakdowns.
What is the Lovable API?
The Movia Travel API exposes 1 endpoint — compare_travel_options — that returns scored multi-modal transport options from a given origin city to destinations including Milan, Rome, and Barcelona. Each response includes up to a dozen response fields per option, covering price, CO2 emissions, travel duration, comfort scores, and door-to-door segment breakdowns across train, bus, and flight modes.
curl -X GET 'https://api.parse.bot/scraper/cda5bf7f-c9d4-45ad-885d-5404ba6f4599/compare_travel_options?origin=Paris' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace moviatravel-lovable-app-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: MOVIA Travel — compare transport options from an origin city."""
from parse_apis.moviatravel_lovable_app_api import Movia, ParseError
client = Movia()
# Compare travel options from Paris to popular destinations.
try:
comparison = client.comparisons.compare(origin="Paris")
except ParseError as e:
print(f"Upstream extraction failed: {e.code}")
raise
print(f"Origin: {comparison.origin}, destinations: {comparison.total_destinations}")
# Walk each destination and inspect highlighted picks.
for dest in comparison.destinations:
print(f"\n--- {dest.destination} ({dest.analyzed_count} options analyzed) ---")
print(f" Best overall: {dest.best.provider} | {dest.best.type} | €{dest.best.price} | {dest.best.duration_minutes}min | {dest.best.co2_kg}kg CO2")
print(f" Cheapest: {dest.cheapest.provider} | €{dest.cheapest.price}")
print(f" Fastest: {dest.fastest.provider} | {dest.fastest.duration_minutes}min")
# Nullable picks — only available when that transport type exists for the route.
if dest.greenest is not None:
print(f" Greenest: {dest.greenest.provider} | {dest.greenest.co2_kg}kg CO2")
if dest.best_bus is not None:
print(f" Best bus: {dest.best_bus.provider} | €{dest.best_bus.price}")
# Drill into scores and segments for the first destination's best option.
first_dest = comparison.destinations[0]
best = first_dest.best
print(f"\nScores for best option to {first_dest.destination}:")
print(f" overall={best.scores.overall}, comfort={best.scores.comfort}, co2={best.scores.co2}")
for seg in best.segments:
print(f" Segment: {seg.from_location} -> {seg.to_location} ({seg.mode}, {seg.duration_minutes}min)")
print("\nexercised: comparisons.compare / Destination picks / Score / Segment navigation")
Compare travel options from a given origin city to popular destinations (Milan, Rome, Barcelona). Returns multiple transport options (train, bus, flight) scored by price, speed, comfort, and CO2 emissions, with detailed door-to-door segment breakdowns including first/last mile transfers. Each destination includes highlighted picks: best overall, cheapest, fastest, greenest, best by transport type. One upstream round-trip per call; always returns 3 destinations.
| Param | Type | Description |
|---|---|---|
| origin | string | Departure city name (e.g. Paris, Lyon, Secaucus). |
{
"type": "object",
"fields": {
"origin": "string — the origin city used for the search",
"destinations": "array of destination objects, each containing scored travel options",
"total_destinations": "integer — number of destinations returned"
},
"sample": {
"data": {
"origin": "Paris",
"destinations": [
{
"best": {
"type": "bus",
"price": 82,
"co2_kg": 56,
"scores": {
"co2": 81,
"comfort": 40,
"fastest": 12,
"overall": 78,
"cheapest": 94
},
"arrival": "2026-09-11T09:01:00",
"currency": "EUR",
"provider": "Demo Bus (ligne directe)",
"segments": [
{
"to": "Paris — gare routière",
"from": "Paris centre",
"mode": "metro",
"label": "Métro / bus vers la gare",
"price": 4,
"arrival": "2026-09-10T19:50:00",
"departure": "2026-09-10T19:16:00",
"duration_minutes": 34
}
],
"departure": "2026-09-10T19:16:00",
"connections": 0,
"duration_minutes": 825
},
"query": {
"currency": "EUR",
"passengers": 2,
"departure_date": "2026-09-10"
},
"origin": "Paris",
"fastest": {
"type": "flight",
"price": 310,
"co2_kg": 184,
"scores": {
"co2": 5,
"comfort": 60,
"fastest": 100,
"overall": 22,
"cheapest": 0
},
"arrival": "2026-09-10T21:58:00",
"currency": "EUR",
"provider": "Demo Air (réseau)",
"segments": [],
"departure": "2026-09-10T16:13:00",
"connections": 1,
"duration_minutes": 345
},
"best_bus": null,
"cheapest": {
"type": "bus",
"price": 68,
"co2_kg": 62,
"scores": {
"co2": 77,
"comfort": 40,
"fastest": 0,
"overall": 69,
"cheapest": 100
},
"arrival": "2026-09-10T21:43:00",
"currency": "EUR",
"provider": "Demo Bus (correspondance)",
"segments": [],
"departure": "2026-09-10T06:51:00",
"connections": 1,
"duration_minutes": 892
},
"greenest": null,
"best_train": {
"type": "train",
"price": 206,
"co2_kg": 24,
"scores": {
"co2": 100,
"comfort": 90,
"fastest": 77,
"overall": 60,
"cheapest": 43
},
"arrival": "2026-09-11T01:30:00",
"currency": "EUR",
"provider": "Demo Rail (TGV/Frecciarossa)",
"segments": [],
"departure": "2026-09-10T17:39:00",
"connections": 0,
"duration_minutes": 471
},
"all_options": [],
"best_flight": null,
"destination": "Milan",
"analyzed_count": 49
}
],
"total_destinations": 3
},
"status": "success"
}
}About the Lovable API
What the API Returns
The compare_travel_options endpoint accepts an optional origin string (e.g. Paris, Lyon, Secaucus) and returns a structured comparison across three fixed destination cities: Milan, Rome, and Barcelona. The top-level response includes the resolved origin city, a total_destinations integer, and a destinations array where each entry holds multiple transport options scored across price, speed, comfort, and CO2 emissions.
Scored Transport Options
Each transport option in the destinations array carries a composite score alongside individual dimension scores, letting you sort or filter by what matters most — cost efficiency, carbon footprint, or journey time. Options span train, bus, and flight modes, and each includes door-to-door segment breakdowns covering first-mile and last-mile transfers in addition to the main leg. This makes the data suitable for total-journey cost calculations, not just trunk-route prices.
Coverage and Limitations
The endpoint currently targets a fixed set of popular European destinations (Milan, Rome, Barcelona). The origin parameter is optional; omitting it causes the API to fall back to a default departure point. There is no pagination — all destinations and their options are returned in a single response. Real-time availability and booking links are not part of the response shape; the API focuses on comparative pricing and emissions data.
The Lovable API is a managed, monitored endpoint for moviatravel.lovable.app — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when moviatravel.lovable.app changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official moviatravel.lovable.app API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a travel comparison widget showing train vs. bus vs. flight cost and CO2 for a chosen European origin city.
- Power a carbon-footprint calculator that ranks routes by CO2 emissions per destination.
- Generate automated travel briefings that surface the fastest and cheapest options for common city pairs.
- Create a budget-travel dashboard that scores and sorts routes by price across multiple destinations simultaneously.
- Integrate segment-level duration data into a trip-planning app to surface total door-to-door travel times.
- Benchmark eco-friendly routing by comparing CO2 scores across transport modes for the same origin-destination pair.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Movia Travel have an official developer API?+
What destinations does compare_travel_options support?+
total_destinations field in the response reflects how many destinations were matched. You can fork this API on Parse and revise it to add additional destination cities.Does the API return live booking links or seat availability?+
What happens if I omit the origin parameter?+
origin parameter is optional. When omitted, the API falls back to a default departure city. To get results specific to your use case, passing an explicit city name such as Paris or Lyon in the origin field is recommended.