Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Fantasy Pundit Public Calendar API
version: 0.9.0
description: Retrieve, reserve, or request one canonical written commentary for the current available Fantasy Premier League mini-league Gameweek. No Fantasy Pundit account or OAuth is required.
servers:
- url: https://api.fantasypundit.lol
tags:
- name: Calendar
description: Account-free league calendar subscription.
paths:
/api/leagues/{seasonId}/{leagueId}/calendar.ics:
get:
operationId: getLeagueCalendar
summary: Subscribe to a league calendar
description: 'Account-free iCalendar (RFC 5545) feed for one public classic league in the current season: each upcoming FPL deadline with a 90-minute alarm, the expected time of each upcoming roast, and the headline of every published roast. UIDs are stable, so a refreshed feed replaces an estimate with the published headline. An earlier season''s feed keeps its published headlines only. Subscribe with webcal:// or add the https URL by link. Read-only; it never creates commentary.'
tags:
- Calendar
parameters:
- name: seasonId
in: path
required: true
schema:
type: string
pattern: ^\d{4}-\d{2}$
examples:
- 2026-27
- name: leagueId
in: path
required: true
schema:
type: string
pattern: ^\d{1,20}$
responses:
'200':
description: iCalendar feed. Clients are asked to refresh every six hours.
headers:
Cache-Control:
schema:
type: string
examples:
- public, max-age=3600, stale-while-revalidate=21600
content:
text/calendar:
schema:
type: string
'400':
$ref: '#/components/responses/Error'
'404':
$ref: '#/components/responses/Error'
'503':
$ref: '#/components/responses/Error'
components:
responses:
Error:
description: The request could not be completed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
required:
- error
properties:
code:
type: string
error:
type: string
retryAfterSeconds:
type: integer
minimum: 1
description: Minimum whole seconds to wait before retrying the same write request.
resetAt:
type: string
format: date-time
description: The earliest advertised time to retry the same write request.
additionalProperties: false
externalDocs:
description: Fantasy Pundit integration guide
url: https://fantasypundit.lol/docs/
x-fantasy-pundit-mcp:
url: https://api.fantasypundit.lol/mcp
version: 0.9.0
protocolVersions:
- '2026-07-28'
- '2025-11-25'
- '2025-06-18'
- '2025-03-26'
discoveryMethod: server/discover
authentication: none
documentationResources:
- fantasy-pundit://guide/weekly-commentary
- fantasy-pundit://guide/capabilities
optionalExperiences:
- league_selection_form
- embedded_edition_card
toolSchemas: Read tools/list for the live input and output schemas, nextStep values and polling guidance.
canonicalTools:
- name: get_league_commentary
purpose: Read an existing canonical weekly commentary and league roast without starting generation.
annotations:
readOnlyHint: true
destructiveHint: false
idempotentHint: true
openWorldHint: true
- name: generate_weekly_commentary
purpose: Create or reuse the canonical weekly commentary and league roast after an explicit user request. Optional gameweek guards the expected current week and refuses a stale request.
annotations:
readOnlyHint: false
destructiveHint: false
idempotentHint: true
openWorldHint: true
- name: get_commentary_result
purpose: Check a queued league-roast job and return its exact commentary and links.
annotations:
readOnlyHint: true
destructiveHint: false
idempotentHint: true
openWorldHint: true