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.6.tar.gz (5.6 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.6-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for festivalapi-0.2.6.tar.gz
Algorithm Hash digest
SHA256 a51c50678d2aedf8f4bad75061b1459390f832b5c753d1390eeffc11f6f75165
MD5 99682ba9300dd317f2f3c9341b6bf4c2
BLAKE2b-256 6ecea249456df1e9d1e718040b9ea92546a19c6cfdc8a2f69e1d39db8ac58d8e

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for festivalapi-0.2.6-py3-none-any.whl
Algorithm Hash digest
SHA256 60e1e9bddc39f0d72054acd5c07e7d9edd3a96da7acf0c8717a899d910cf293c
MD5 eaa9fb2fba522b373ceb9d40f89eef52
BLAKE2b-256 4b6713c6d59b31384b7907073926d07dcc9ac7454a2b403935233f767caed907

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.8

2 files

0.2.7

2 files

This release

0.2.6 This release

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