Skip to main content

Python client library for the Liquipedia API (LPDB v3).

Project description

liquipydia — Python client library for Liquipedia API (LPDB v3)

Python 3.12+ uv Ruff License

Status Lint & Test DeepSource DeepSource

About

liquipydia aims to be a modern, typed Python wrapper for the Liquipedia Database (LPDB) REST API v3, covering all 16 data types (matches, tournaments, teams, players, transfers, and more).

Built with httpx and pydantic.

Status: Beta — see the Roadmap for progress.

Project Structure

liquipydia/
├── __init__.py       # Package exports, version
├── _client.py        # Core HTTP client (LiquipediaClient)
├── _models.py        # Pydantic models (one per LPDB data type)
├── _resources.py     # Resource classes (one per LPDB data type)
├── _exceptions.py    # Exception hierarchy
├── _response.py      # API response wrapper
└── py.typed          # PEP 561 type marker

API Access

Using this library requires an API key from Liquipedia. Access is not self-service — you must request it through their contact form.

Free access is available for educational, non-commercial open-source, and community projects. Paid plans (Basic, Premium, Enterprise) are available for commercial use.

Installation

# With uv (recommended)
uv add liquipydia

# With pip
pip install liquipydia

Or install from source:

# With uv
uv add git+https://github.com/Dyl-M/liquipydia.git

# With pip
pip install git+https://github.com/Dyl-M/liquipydia.git

Quick Start

from liquipydia import LiquipediaClient, Player, Match

with LiquipediaClient("my-app", api_key="your-api-key") as client:
    # Query players from a specific wiki
    response = client.players.list("dota2", conditions="[[name::Miracle-]]")
    for record in response.result:
        player = Player.model_validate(record)
        print(player.name, player.nationality, player.birthdate)

    # Automatic pagination across multiple pages
    for record in client.matches.paginate("counterstrike", page_size=100, max_results=500):
        match = Match.model_validate(record)
        print(match.match2id, match.date, match.winner)

    # Keyword filters — no need to write raw LPDB conditions
    response = client.players.list("rocketleague", pagename="Zen")

    # Match-specific parameters (stream data)
    response = client.matches.list("rocketleague", rawstreams=True, streamurls=True)

    # Team template lookup
    response = client.team_templates.get("dota2", "teamliquid")
Miracle- Jordan 1997-06-20
0042_R01-M001 2025-06-15 14:00:00 1
...

Available Resources

All 16 LPDB v3 data types are accessible as client attributes:

Attribute Endpoint Notes
client.broadcasters /broadcasters
client.companies /company
client.datapoints /datapoint
client.external_media_links /externalmedialink
client.matches /match Extra: rawstreams, streamurls
client.placements /placement
client.players /player
client.series /series
client.squad_players /squadplayer
client.standings_entries /standingsentry
client.standings_tables /standingstable
client.teams /team
client.tournaments /tournament
client.transfers /transfer
client.team_templates /teamtemplate Uses get() instead of list()
client.team_template_list /teamtemplatelist Different params (pagination)

The API key can also be set via the LIQUIPEDIA_API_KEY environment variable.

Typed Models

Each data type has a corresponding Pydantic model for typed access and IDE autocompletion:

Broadcaster, Company, Datapoint, ExternalMediaLink, Match, Placement, Player, Series, SquadPlayer, StandingsEntry, StandingsTable, Team, TeamTemplate, TeamTemplateList, Tournament, Transfer

from liquipydia import Player

player = Player.model_validate(record)
print(player.name)  # str | None — with autocompletion
print(player.birthdate)  # date | None — null sentinels auto-converted
print(player.links)  # dict | None — empty API lists auto-converted
Miracle-
1997-06-20
{'twitter': 'https://twitter.com/Aborss', ...}

Models handle LPDB quirks automatically:

  • Null date sentinels ("0000-01-01", "") → None
  • Empty dict placeholders ([]) → None
  • Unknown/future API fields are preserved (extra="allow")

Documentation

Full documentation (getting started, examples, API reference) is available at dyl-m.github.io/liquipydia.

Development

# Clone the repository
git clone https://github.com/Dyl-M/liquipydia.git
cd liquipydia

# Install dependencies (requires uv)
uv sync --group dev

# Run linting
uv run ruff check .
uv run ruff format --check .

# Run type checking
uv run mypy liquipydia

# Run tests
uv run pytest

License

Code is licensed under the MIT License.

Data License

Data returned by the Liquipedia API is subject to CC-BY-SA 3.0 as required by Liquipedia's API Terms of Use. If you redistribute or display data obtained through this library, you must comply with the CC-BY-SA 3.0 attribution requirements.

Contributing

See CONTRIBUTING.md for guidelines.

Security

See SECURITY.md for reporting vulnerabilities.

Project details


Download files

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

Source Distribution

liquipydia-0.1.0.tar.gz (39.2 kB view details)

Uploaded Source

Built Distribution

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

liquipydia-0.1.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file liquipydia-0.1.0.tar.gz.

File metadata

  • Download URL: liquipydia-0.1.0.tar.gz
  • Upload date:
  • Size: 39.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for liquipydia-0.1.0.tar.gz
Algorithm Hash digest
SHA256 da504d579d148e7e431b0f2fa2b25f8009e774a4fbf1792d61c814aad123eb82
MD5 be6374bbbbce2e61f1fa6b2e3b2f8c85
BLAKE2b-256 0002212d2cb3f20782bf189ec9ce18670fccf3bb290369a016c147797ea069f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for liquipydia-0.1.0.tar.gz:

Publisher: publish.yml on Dyl-M/liquipydia

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file liquipydia-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: liquipydia-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for liquipydia-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 94e5995c61c5a264f7410691e7852c31e8436d1a2fdd7226fbb66def670e0e72
MD5 2cb348f375f2d459ed8fcfee18dca9a8
BLAKE2b-256 815f52a7a8428a79d3c73c9c9a2d8357edbf245ff268ef01bf8a9185ae4fcd64

See more details on using hashes here.

Provenance

The following attestation bundles were made for liquipydia-0.1.0-py3-none-any.whl:

Publisher: publish.yml on Dyl-M/liquipydia

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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