Skip to main content

LIQUIPYDIA | Python client library for Liquipedia API (LPDB v3)

PyPI 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.
    # Operator prefixes (`!`, `<`, `>`) pass through, so `earnings=">10000"` becomes `[[earnings::>10000]]`.
    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.

Metadata

Release files for liquipydia 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for liquipydia 0.1.2
File Size Uploaded
liquipydia-0.1.2.tar.gz 46.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for liquipydia 0.1.2
File Interpreter ABI Platform
liquipydia-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 62.2 kB

Release files / liquipydia-0.1.2.tar.gz

Download URL liquipydia-0.1.2.tar.gz
Size 46.6 kB
Tags Source
SHA-256 checksum
How to use checksums
213229dfb5ddce01a232b5bf34558d040749f2b54f618cdf8d4684938de64853
BLAKE2b-256 checksum
How to use checksums
24ee1091d9d301194fd57bc5d56ebe5b46747d4e4bf46fdd5fe81aeaa52f2967
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 4, 2026.

Transparency log

Release files / liquipydia-0.1.2-py3-none-any.whl

Download URL liquipydia-0.1.2-py3-none-any.whl
Size 15.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
af8afab1a6661f877952ecd4c4ba3d49186cad42bd3dc7fc2743f76b883810f5
BLAKE2b-256 checksum
How to use checksums
5dcd74418d21785df91096f3951a31fa14f4eb2cb83cf953ff939e650e3500e2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 4, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page