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 29 available category codes. Returns:

{
  "count": 29,
  "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.5.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.5-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: festivalapi-0.2.5.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.5.tar.gz
Algorithm Hash digest
SHA256 33f91609f482a9eeff2fa94147b2ba0c88ce00872715d89d813d887327ab26f2
MD5 2b9b58e89bc5276b315065f53fa307fc
BLAKE2b-256 240d75400b2344333c5a2273394fe1ea9efc8517b6c45436f6592e6094c8be60

See more details on using hashes here.

File details

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

File metadata

  • Download URL: festivalapi-0.2.5-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.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ea05ece342214d06eb9593d8c13ec5860921cd0be2f5a72e272fdcbd6bfe3593
MD5 7ceb38f6c19eec0377f9095fd65885b7
BLAKE2b-256 46de899b69a1cc11cd29b625ecf9245128101cb70ef7eec1056d3e080578e4a8

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

This release

0.2.5 This release

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