Skip to main content

YaTracker

Asyncio Yandex Tracker API client

Python Code linter: ruff Checked with mypy Linters Tests Coverage

Documentation: https://olegt0rr.github.io/YaTracker/

API docs: https://yandex.cloud/en/docs/tracker/about-api

Features

  • Fully asynchronous, built on aiohttp — no blocking calls, no threads.
  • Responses are parsed into pydantic v2 models, with datetime fields already converted.
  • Typed end to end: @overloads keep your own issue/queue models flowing through the return types.
  • Supports both Yandex 360 (X-Org-ID + OAuth) and Yandex Cloud (X-Cloud-Org-ID + IAM) organizations.
  • Covers issues, queues, components, projects (both the legacy /projects API and the entities API behind projects, portfolios and goals), macros, boards (including columns and sprints), comments, checklists, worklogs, attachments, priorities, bulk changes, external applications and remote links, and import of issues, comments, links and attachments.
  • Local (custom) queue fields are supported via your own model subclasses.
  • Pluggable transport: swap aiohttp for any client by subclassing BaseClient.

Attention!

  • All self properties are renamed to url, because self is a reserved name in Python. A url= keyword argument is sent to the API as url; models embedded in a request body keep the API's self key.
  • All camelCase properties are renamed to pythonic_case.
  • All datetime values are converted to Python datetime.datetime objects.
  • Methods are named by the author, because the Yandex API has no clear method names.

How to install

pip install yatracker

How to use

from yatracker import YaTracker

tracker = YaTracker(org_id=..., token=...)


async def foo():
    # create an issue
    issue = await tracker.create_issue("New Issue", "KEY")

    # get an issue
    issue = await tracker.get_issue("KEY-1")

    # update an issue (just pass kwargs)
    issue = await tracker.edit_issue("KEY-1", description="Hello World")

    # get transitions (a dict keyed by transition id)
    transitions = await issue.get_transitions()

    # execute a transition
    close = transitions.get("close")
    if close is not None:
        await close.execute()
# don't forget to close tracker on app shutdown
async def on_shutdown():
    await tracker.close()

YaTracker is also an async context manager, which closes the session for you:

async with YaTracker(org_id=..., token=...) as tracker:
    issue = await tracker.get_issue("KEY-1")

Organizations and tokens

Pass exactly one organization id and exactly one token.

# Yandex 360 organization (sends `X-Org-ID`) with an OAuth token
tracker = YaTracker(org_id=..., token=...)

# Yandex Cloud organization (sends `X-Cloud-Org-ID`) with an IAM token
tracker = YaTracker(cloud_org_id=..., iam_token=...)

org_id and cloud_org_id are mutually exclusive, so are token and iam_token. API v3 is used by default, v2 is still available via YaTracker(..., api_version="v2").

Error handling

Every response with a status of 300 or above is raised as a YaTrackerError subclass:

from yatracker.exceptions import ObjectNotFoundError, YaTrackerError

try:
    issue = await tracker.get_issue("KEY-1")
except ObjectNotFoundError:
    ...  # 404: wrong id or key
except YaTrackerError as e:
    ...  # anything else the API rejected

NotAuthorizedError (401), SufficientRightsError (403), ObjectNotFoundError (404) and AlreadyExistsError (409) are the specialised cases; any other status raises the base YaTrackerError with the response body as its message.

See the error handling guide for details.

More

Metadata

Release files for yatracker 2026.9.0

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

Source distribution (sdist)

Source distribution for yatracker 2026.9.0
File Size Uploaded
yatracker-2026.9.0.tar.gz 148.6 kB Details

Built distribution (wheel)

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

Total release size: 223.7 kB

Release files / yatracker-2026.9.0.tar.gz

Download URL yatracker-2026.9.0.tar.gz
Size 148.6 kB
Tags Source
SHA-256 checksum
How to use checksums
23bbcebbfad6cebbfe6d675816905333d7ff1b3866f39a3b109e80490675d358
BLAKE2b-256 checksum
How to use checksums
a636ffb4898c3dfc3361f86599ed8f9b04160bd78e8b44772ee057fda752eb61
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 2, 2026.

Transparency log

Release files / yatracker-2026.9.0-py3-none-any.whl

Download URL yatracker-2026.9.0-py3-none-any.whl
Size 75.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
65c1c063cbf9877abbe3eaa16de454fa605605d6370441685c0317127600a4c9
BLAKE2b-256 checksum
How to use checksums
bb1eb291aed00711160a0ac39098581afb4e0c05b78e1249d2b03482c754e358
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Sep 2, 2026.

Transparency log
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