# Trainline Return Fare Calendar API Documentation

<p><strong>Trainline Return Fare Calendar API Documentation</strong> Read the cheapest return leg fare for each pair of an outward day and a return day. <code>inward_price</code> is the price Trainline gives to the return leg inside a return ticket, it is not the total fare of the trip. A pair without a priced return leg is left out of the list, it is not a price of zero. It covers UK routes only: a continental route answers with 422 ROUTE_NOT_SUPPORTED, not billable. One request covers at most 14 outward days and 14 return days.</p>

- **Documentation:** [https://scrappa.co/docs/trainline-api/trainline_calendar_return](https://scrappa.co/docs/trainline-api/trainline_calendar_return)
- **API group:** Trainline API
- **Endpoint:** `GET https://scrappa.co/api/trainline/fares/calendar/return`

## Authentication

Send your Scrappa API key in the `X-API-KEY` request header. Paid endpoints also support accountless x402 payments when called without an API key.

## Parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `origin` | string | Yes | Origin station id from the stations endpoint. Example: urn:trainline:generic:loc:EUS1444gb. |
| `destination` | string | Yes | Destination station id from the stations endpoint. Example: urn:trainline:generic:loc:MAN2968gb. |
| `date_from` | string | Yes | First outward day, YYYY-MM-DD, today or later. |
| `date_to` | string | Yes | Last outward day, YYYY-MM-DD, at most 14 days in total and inside the fare horizon of about 178 days. |
| `return_from` | string | Yes | First return day, YYYY-MM-DD, not before the first outward day. |
| `return_to` | string | Yes | Last return day, YYYY-MM-DD, at most 14 days in total and inside the fare horizon of about 178 days. |
| `currency` | string | No | GBP or EUR. Defaults to GBP. |

## Example response

```json
{
    "data": {
        "pairs": [
            {
                "return_date": "2026-11-08",
                "inward_price": {
                    "amount": 10.5,
                    "currency": "GBP"
                },
                "outward_date": "2026-11-02",
                "inward_departure": "2026-11-08T12:30:00+00:00"
            },
            {
                "return_date": "2026-11-09",
                "inward_price": {
                    "amount": 13.9,
                    "currency": "GBP"
                },
                "outward_date": "2026-11-03",
                "inward_departure": "2026-11-09T14:30:00+00:00"
            }
        ],
        "origin": "urn:trainline:generic:loc:EUS1444gb",
        "date_to": "2026-11-03",
        "currency": "GBP",
        "date_from": "2026-11-02",
        "return_to": "2026-11-10",
        "destination": "urn:trainline:generic:loc:MAN2968gb",
        "return_from": "2026-11-08"
    },
    "meta": {
        "billable": true,
        "endpoint_family": "fares_calendar_return"
    },
    "success": true
}
```

## Errors

| Status | Error | Description |
| --- | --- | --- |
| 422 | Validation Error | A required parameter is missing or invalid. This response is not billable. |
| 422 | Route Not Supported | Trainline has no return fare calendar for this route. Only UK routes have one. This response is not billable. |
| 503 | Upstream Unavailable | Trainline did not answer in time. Scrappa retries on other exits first. This response is not billable. Retry after a few seconds. |

## More Scrappa resources

- [API documentation](https://scrappa.co/docs)
- [Full LLM-readable API reference](https://scrappa.co/llms-full.txt)
- [OpenAPI specification](https://scrappa.co/docs/api.json)
- [Pricing](https://scrappa.co/pricing)
