Skip to main content

Festival API — Python Client

PyPI version Python License: MIT

Python client for the Festival API — film festival data for developers: 14,000+ festivals across 190+ countries, with submission deadlines, entry fees, categories, and past winners/screened films.

pip install festivalapi

Quick Start

from festivalapi import FestivalAPI

client = FestivalAPI("fes_your_api_key")

# List festivals by category (supports page/per_page pagination)
festivals = client.festivals.list(category="short_film")
# Pagination: client.festivals.list(category="short_film", page=2, per_page=50)

# Filter by country (full name or code)
us = client.festivals.list(country="United States")

# Keyword search
results = client.festivals.list(q="Cambodia")

# Max entry fee + deadline filters
affordable = client.festivals.list(fee_max=25, deadline_before="2026-12-31")

# Get festival detail
festival = client.festivals.get(1)

# Get festival roster (past winners / screened films)
roster = client.festivals.roster(1)
# Pagination: client.festivals.roster(1, page=2, per_page=50)

# Get scored festivals (ranked 0-100)
scored = client.festivals.scored(min_score=70)
# Pagination: client.festivals.scored(min_score=70, page=2, per_page=50)

# List available category codes (requires auth)
categories = client.categories()
for cat in categories["results"]:
    print(f'{cat["category"]} ({cat["count"]})')

# List available countries with festival counts (requires auth)
countries = client.countries()
for c in countries["results"]:
    print(f'{c["country"]} ({c["festival_count"]})')

# Health check (no auth)
client.health()

Filters

client.festivals.list() supports:

Param Description
category Category code (e.g. short_film, feature, documentary)
country Full country name or code (e.g. United States, US, Australia, AU)
genre Accepted genre (e.g. drama, comedy, horror)
deadline_before Submission deadline before date (YYYY-MM-DD)
fee_max Maximum submission fee in USD
q Full-text search on festival name

All list endpoints support page and per_page (default per_page is 50).

Endpoints & Credit Costs

Festival API uses a pre-paid credit system (free 50-credit trial on signup, then packs from $20). Each call costs credits:

Method Endpoint Cost
client.health() GET /v1/health Free
client.festivals.list() GET /v1/festivals 1 credit
client.festivals.get(id) GET /v1/festivals/{id} 5 credits
client.festivals.roster(id) GET /v1/festivals/{id}/roster 3 credits
client.festivals.scored() GET /v1/festivals/scored 10 credits
client.categories() GET /v1/categories 1 credit
client.countries() GET /v1/countries 1 credit

Categories

Call client.categories() to get all 30 available category codes. Returns:

{
  "count": 30,
  "results": [
    {"category": "short_film", "count": 6308},
    {"category": "documentary", "count": 5344},
    {"category": "feature", "count": 4609},
    {"category": "animation", "count": 3990},
    {"category": "music_video", "count": 3176},
    {"category": "experimental", "count": 2222},
    {"category": "web_series", "count": 2183},
    {"category": "branded_content", "count": 1977},
    ...
  ]
}

Use the category field (lowercase) as the filter value — e.g. client.festivals.list(category="horror").

Countries

Call client.countries() to get all 192 countries with festival counts. Returns:

{
  "count": 192,
  "results": [
    {"country": "United States", "festival_count": 4060},
    ...
  ]
}

Use the country name as the filter value — e.g. client.festivals.list(country="United States").

API Key

Sign up at festivalapi.com to get your free API key (50 free credits, no credit card). Your key starts with fes_. You can also set the FESTIVALAPI_KEY environment variable:

import os
from festivalapi import FestivalAPI

client = FestivalAPI(os.environ["FESTIVALAPI_KEY"])

Error Handling

from festivalapi import (
    FestivalAPI,
    AuthenticationError,
    InsufficientCreditsError,
    NotFoundError,
    RateLimitError,
    ServerError,
)

client = FestivalAPI("fes_your_api_key")

try:
    festival = client.festivals.get(999999)
except NotFoundError:
    print("Festival not found")
except InsufficientCreditsError as e:
    print(f"Need more credits: {e}")

When your credit balance hits zero, API calls return HTTP 402 with your current balance and the required credits. Handle InsufficientCreditsError by alerting the user or pausing calls until credits are purchased.

Full API Reference

Requirements

  • Python 3.9+
  • Zero dependencies (stdlib urllib only)

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

festivalapi-0.2.7.tar.gz (6.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

festivalapi-0.2.7-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file festivalapi-0.2.7.tar.gz.

File metadata

  • Download URL: festivalapi-0.2.7.tar.gz
  • Upload date:
  • Size: 6.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for festivalapi-0.2.7.tar.gz
Algorithm Hash digest
SHA256 58b29852fe62f84289eeb5a968334ba3213e86404b9285a5ca9209b71f66d448
MD5 1c6dafe7157acbfaeef92abeee1d63bc
BLAKE2b-256 43d80070e090eaac9f9d8122e825e618fc4188cb513369a7a34f418dd0d172fe

See more details on using hashes here.

File details

Details for the file festivalapi-0.2.7-py3-none-any.whl.

File metadata

  • Download URL: festivalapi-0.2.7-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for festivalapi-0.2.7-py3-none-any.whl
Algorithm Hash digest
SHA256 ec9e5e9c566980b7cd19ee27389296adb06d1a26b5f9ae7353b8f180681eaefc
MD5 b488e965be3a26e26a098fda31c20e13
BLAKE2b-256 3488f10a71bd427227627bcfe751c70ae6fe6ffcc798d1154775eb93922a1b0b

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.8

2 files

This release

0.2.7 This release

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

1 file

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page