# Ryanair API

> Ryanair workflow and API: cheapest fares and fare calendar. Returns fares, fare, currency and flight date as JSON.

Ryanair data from ryanair.com: cheapest fares and fare calendar.

- Page: https://fous.com/tools/ryanair
- Handle: `@ryanair`
- Category: [Travel](https://fous.com/tools/category/travel)
- Source website: https://ryanair.com
- Last verified: Sep 29, 2026

## Methods

### Get fare calendar

Operation `get_fare_calendar`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get the lowest one-way fare on each day of a month for a direct Ryanair route. For a city with multiple airports, returns the airport pair with the lowest fare that month; fares can change and some months may have no available flights.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `month` | string | yes | `"2026-11"` | Month of departure, for example 2026-11 (YYYY-MM). |
| `origin` | string | yes | `"London"` | Departure city or airport, for example London Stansted. |
| `destination` | string | yes | `"Barcelona"` | Arrival city or airport, for example Barcelona. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "origin",
    "destination",
    "month"
  ],
  "properties": {
    "month": {
      "type": "string",
      "title": "Month",
      "pattern": "^[0-9]{4}-(0[1-9]|1[0-2])$",
      "description": "Month of departure, for example 2026-11 (YYYY-MM).",
      "examples": [
        "2026-11"
      ]
    },
    "origin": {
      "type": "string",
      "title": "From",
      "minLength": 1,
      "description": "Departure city or airport, for example London Stansted.",
      "examples": [
        "London",
        "London Stansted",
        "Barcelona"
      ]
    },
    "destination": {
      "type": "string",
      "title": "To",
      "minLength": 1,
      "description": "Arrival city or airport, for example Barcelona.",
      "examples": [
        "Barcelona",
        "London Stansted",
        "Aarhus"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "month": "2026-11",
      "origin": "London",
      "destination": "Barcelona"
    },
    {
      "month": "2026-11",
      "origin": "London Stansted",
      "destination": "Barcelona"
    },
    {
      "month": "2026-11",
      "origin": "Barcelona",
      "destination": "London Stansted"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `days` | array |  | Fares in calendar order. |
| `days[].date` | string | `"2026-11-01"` | Departure date. |
| `days[].page_link` | string | `"https://www.ryanair.com/gb/en/trip/flights/select?adults=1&dateOut=2026-11-01&originIata=STN&destinationIata=BCN&isRetu` | Ryanair flight-search page for this date. |
| `days[].cheapest_fare` | number or null | `15.99` | Lowest fare that day, or null if not available. |
| `days[].flights_operate` | string | `"yes"` | Whether the route has flights on this date, including sold-out flights. |
| `cheapest_day` | string or null | `"2026-11-07"` | Date with the lowest available fare, or null. |
| `cheapest_fare` | number or null | `14.99` | Lowest available one-way fare in the shown currency, or null. |
| `currency_code` | string | `"GBP"` | Currency Ryanair uses for the fare. |
| `arrival_airport` | string | `"Barcelona"` | Arrival airport name. |
| `departure_airport` | string | `"London Stansted"` | Departure airport name. |
| `arrival_airport_code` | string | `"BCN"` | Arrival airport IATA code. |
| `departure_airport_code` | string | `"STN"` | Departure airport IATA code. |

**Example input**

```json
{
  "month": "2026-11",
  "origin": "London",
  "destination": "Barcelona"
}
```

**Example output**

```json
{
  "days": [
    {
      "date": "2026-11-01",
      "page_link": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&dateOut=2026-11-01&originIata=STN&destinationIata=BCN&isReturn=false",
      "cheapest_fare": 15.99,
      "flights_operate": "yes"
    },
    {
      "date": "2026-11-02",
      "page_link": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&dateOut=2026-11-02&originIata=STN&destinationIata=BCN&isReturn=false",
      "cheapest_fare": 17.99,
      "flights_operate": "yes"
    },
    {
      "date": "2026-11-03",
      "page_link": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&dateOut=2026-11-03&originIata=STN&destinationIata=BCN&isReturn=false",
      "cheapest_fare": 16.99,
      "flights_operate": "yes"
    }
  ],
  "cheapest_day": "2026-11-07",
  "cheapest_fare": 14.99,
  "currency_code": "GBP",
  "arrival_airport": "Barcelona",
  "departure_airport": "London Stansted",
  "arrival_airport_code": "BCN",
  "departure_airport_code": "STN"
}
```

### List cheapest fares

Operation `list_cheapest_fares`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

List the cheapest one-way Ryanair fare to each destination from a city or airport during a date range, sorted by price. Booking links open flight selection; prices and availability can change.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `origin` | string | yes | `"London Stansted"` | Departure city or airport, for example Dublin or London Stansted. |
| `date_to` | string | no | `"2026-10-29"` | Last departure date, for example 2026-10-29. Defaults to 30 days from today. |
| `date_from` | string | no | `"2026-10-01"` | First departure date, for example 2026-10-01. Defaults to today. |
| `max_price` | number | no | `60` | Maximum one-way fare in the displayed currency, for example 50. No limit by default. |
| `destination` | string | no | `"Spain"` | Destination country, city or airport, for example Spain or Barcelona. Defaults to anywhere. |
| `max_results` | integer | no | `10` | Maximum destinations to return, for example 30. Defaults to 30 (up to 100). |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "origin"
  ],
  "properties": {
    "origin": {
      "type": "string",
      "title": "From",
      "description": "Departure city or airport, for example Dublin or London Stansted.",
      "examples": [
        "London Stansted",
        "Dublin",
        "London"
      ]
    },
    "date_to": {
      "type": "string",
      "format": "date",
      "description": "Last departure date, for example 2026-10-29. Defaults to 30 days from today.",
      "examples": [
        "2026-10-29"
      ]
    },
    "date_from": {
      "type": "string",
      "format": "date",
      "description": "First departure date, for example 2026-10-01. Defaults to today.",
      "examples": [
        "2026-10-01"
      ]
    },
    "max_price": {
      "type": "number",
      "minimum": 0,
      "description": "Maximum one-way fare in the displayed currency, for example 50. No limit by default.",
      "examples": [
        60
      ]
    },
    "destination": {
      "type": "string",
      "title": "To",
      "description": "Destination country, city or airport, for example Spain or Barcelona. Defaults to anywhere.",
      "examples": [
        "Spain",
        "Ireland"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 30,
      "maximum": 100,
      "minimum": 1,
      "description": "Maximum destinations to return, for example 30. Defaults to 30 (up to 100).",
      "x-fous-developer": true,
      "examples": [
        10,
        15
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "origin": "London Stansted",
      "date_to": "2026-10-29",
      "date_from": "2026-10-01",
      "max_price": 60,
      "destination": "Spain",
      "max_results": 10
    },
    {
      "origin": "Dublin",
      "date_to": "2026-10-29",
      "date_from": "2026-10-01"
    },
    {
      "origin": "London",
      "date_to": "2026-10-29",
      "date_from": "2026-10-01",
      "destination": "Ireland",
      "max_results": 15
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `fares` | array |  | Cheapest fares, sorted by price. |
| `fares[].fare` | number | `14.99` | Cheapest one-way fare. |
| `fares[].currency` | string | `"GBP"` | Currency of the fare. |
| `fares[].flight_date` | string | `"2026-10-04"` | Local departure date. |
| `fares[].arrival_time` | string | `"2026-10-04T10:50:00+02:00"` | Local arrival time with UTC offset. |
| `fares[].booking_link` | string | `"https://www.ryanair.com/gb/en/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2026-10-04&isReturn=fal` | Ryanair flight selection link for this route and date. |
| `fares[].flight_number` | string | `"FR8378"` | Flight number. |
| `fares[].departure_time` | string | `"2026-10-04T07:40:00+01:00"` | Local departure time with UTC offset. |
| `fares[].destination_city` | string | `"Santiago"` | Destination city. |
| `fares[].destination_airport` | string | `"Santiago"` | Destination airport name. |
| `fares[].destination_country` | string | `"Spain"` | Destination country. |
| `fares[].origin_airport_code` | string | `"STN"` | Departure airport IATA code. |
| `fares[].destination_airport_code` | string | `"SCQ"` | Arrival airport IATA code. |

**Example input**

```json
{
  "origin": "London Stansted",
  "date_to": "2026-10-29",
  "date_from": "2026-10-01",
  "max_price": 60,
  "destination": "Spain",
  "max_results": 10
}
```

**Example output**

```json
{
  "fares": [
    {
      "fare": 14.99,
      "currency": "GBP",
      "flight_date": "2026-10-04",
      "arrival_time": "2026-10-04T10:50:00+02:00",
      "booking_link": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2026-10-04&isReturn=false&originIata=STN&destinationIata=SCQ",
      "flight_number": "FR8378",
      "departure_time": "2026-10-04T07:40:00+01:00",
      "destination_city": "Santiago",
      "destination_airport": "Santiago",
      "destination_country": "Spain",
      "origin_airport_code": "STN",
      "destination_airport_code": "SCQ"
    },
    {
      "fare": 14.99,
      "currency": "GBP",
      "flight_date": "2026-10-07",
      "arrival_time": "2026-10-07T11:50:00+02:00",
      "booking_link": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2026-10-07&isReturn=false&originIata=STN&destinationIata=MAD",
      "flight_number": "FR347",
      "departure_time": "2026-10-07T08:20:00+01:00",
      "destination_city": "Madrid",
      "destination_airport": "Madrid",
      "destination_country": "Spain",
      "origin_airport_code": "STN",
      "destination_airport_code": "MAD"
    },
    {
      "fare": 14.99,
      "currency": "GBP",
      "flight_date": "2026-10-07",
      "arrival_time": "2026-10-08T01:15:00+02:00",
      "booking_link": "https://www.ryanair.com/gb/en/trip/flights/select?adults=1&teens=0&children=0&infants=0&dateOut=2026-10-07&isReturn=false&originIata=STN&destinationIata=GRO",
      "flight_number": "FR6077",
      "departure_time": "2026-10-07T22:10:00+01:00",
      "destination_city": "Girona",
      "destination_airport": "Barcelona Girona",
      "destination_country": "Spain",
      "origin_airport_code": "STN",
      "destination_airport_code": "GRO"
    }
  ]
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@ryanair",
  "visibility": "public",
  "operation": "get_fare_calendar",
  "version": 1,
  "input": {
    "month": "2026-11",
    "origin": "London",
    "destination": "Barcelona"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@ryanair\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_fare_calendar\",\n  \"version\": 1,\n  \"input\": {\n    \"month\": \"2026-11\",\n    \"origin\": \"London\",\n    \"destination\": \"Barcelona\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@ryanair",
  "visibility": "public",
  "operation": "get_fare_calendar",
  "version": 1,
  "input": {
    "month": "2026-11",
    "origin": "London",
    "destination": "Barcelona"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/ryanair`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_fare_calendar`: Get fare calendar. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `list_cheapest_fares`: List cheapest fares. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-ryanair https://api.fous.com/mcp/tools/ryanair --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this Ryanair tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a Ryanair account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from ryanair.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

## Related

- [Google Flights API](https://fous.com/tools/google-flights.md): Google Flights returns route schedules, public fares, monthly lowest prices, and flight or destination options with times, stops, emissions, and fares that may change.
- [Kayak API](https://fous.com/tools/kayak.md): Kayak compares flight and hotel prices across booking sites and current rental car offers; hotel rates assume two adults per room and cover public location pages, while prices and availability can change at booking.
- [Trip.com API](https://fous.com/tools/trip-com.md): Trip.com offers hotel and flight bookings, with hotel listings limited to initial public results and prices and fares subject to change.
- [Expedia API](https://fous.com/tools/expedia.md): Expedia helps travelers find hotels, vacation stays, and travel deals, with hotel prices and flight options for selected destinations and dates; flight listings may be limited.
- [Rome2rio API](https://fous.com/tools/rome2rio.md): Compare ways to travel between places by train, bus, ferry, plane and car.
- [FlixBus API](https://fous.com/tools/flixbus.md): Find and book bus and train trips on FlixBus.
- [FlightAware API](https://fous.com/tools/flightaware.md): FlightAware provides public flight status and dated flight details, airport arrivals and departures limited to displayed history and 20 flights per direction, plus today’s delays and cancellations when shown.
- [Flightradar24 API](https://fous.com/tools/flightradar24.md): Flightradar24 provides live flight tracking, recent history, flight status and times, plus upcoming airport departures and arrivals; history and schedules are limited to recent and upcoming flights.
- [All Travel tools](https://fous.com/tools/category/travel)
