YaTracker
Asyncio Yandex Tracker API client
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
pydanticv2 models, withdatetimefields 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
/projectsAPI 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
aiohttpfor any client by subclassingBaseClient.
Attention!
- All
selfproperties are renamed tourl, becauseselfis a reserved name in Python. Aurl=keyword argument is sent to the API asurl; models embedded in a request body keep the API'sselfkey. - All
camelCaseproperties are renamed topythonic_case. - All datetime values are converted to Python
datetime.datetimeobjects. - 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)
| File | Size | Uploaded | |
|---|---|---|---|
| yatracker-2026.9.0.tar.gz | 148.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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