📦 pyseventeentrack: A Simple Python API for 17track.net
pyseventeentrack is a simple Python library to track packages in
17track.net accounts.
Since this is uses an unofficial API, there's no guarantee that 17track.net will provide every field for every package, all the time. Additionally, this API may stop working at any moment.
Python Versions
pyseventeentrack is currently supported on:
- Python 3.11
- Python 3.12
Installation
pip install pyseventeentrack
Usage
import asyncio
from aiohttp import ClientSession
from pyseventeentrack import Client
async def main() -> None:
"""Run!"""
client = Client()
# Login to 17track.net:
await client.profile.login('<EMAIL>', '<PASSWORD>')
# Get the account ID:
client.profile.account_id
# >>> 1234567890987654321
# Get a summary of the user's packages:
summary = await client.profile.summary()
# >>> {'In Transit': 3, 'Expired': 3, ... }
# Get all packages associated with a user's account:
packages = await client.profile.packages()
# >>> [pyseventeentrack.package.Package(..), ...]
# Package results are fetched across all available response pages.
# Add new packages by tracking number
await client.profile.add_package('<TRACKING NUMBER>', '<FRIENDLY NAME>')
# Add a new package and specify the carrier code
await client.profile.add_package(
'<TRACKING NUMBER>',
'<FRIENDLY NAME>',
first_carrier=190625,
)
# Set the carrier for an existing package by tracking number
await client.profile.set_carrier_by_tracking_number(
'<TRACKING NUMBER>', first_carrier=190625
)
asyncio.run(main())
By default, the library creates a new connection to 17track with each coroutine. If you
are calling a large number of coroutines (or merely want to squeeze out every second of
runtime savings possible), an
aiohttp ClientSession can be used for connection
pooling:
import asyncio
from aiohttp import ClientSession
from pyseventeentrack import Client
async def main() -> None:
"""Run!"""
async with ClientSession() as session:
client = Client(session=session)
# ...
asyncio.run(main())
Each Package object has the following info:
destination_country: the country the package was shipped tofriendly_name: the human-friendly name of the packagefirst_carrier: the first carrier code selected for the packageinfo: a text description of the latest statuslocation: the current location (if known)timestamp: the timestamp of the latest eventorigin_country: the country the package was shipped frompackage_type: the type of package (if known)second_carrier: the second carrier code selected for the packagestatus: the overall package status ("In Transit", "Delivered", etc.)tracking_info_language: the language of the tracking infotracking_number: the all-important tracking number
Package operations that need 17Track's internal package ID raise
InvalidPackageDataError when the API returns a missing or empty ID.
Looking up an unknown internal package ID raises PackageNotFoundError.
Contributing
- Check for open features/bugs or initiate a discussion on one.
- Fork the repository.
- (optional, but highly recommended) Create a virtual environment:
python3 -m venv .venv - (optional, but highly recommended) Enter the virtual environment:
source ./.venv/bin/activate - Install the dev environment:
script/setup - Code your new feature or bug fix.
- Write tests that cover your new functionality.
- Run tests and ensure 100% code coverage:
script/test - Update
README.mdwith any new documentation. - Add yourself to
AUTHORS.md. - Submit a pull request!
Metadata
Release files for pyseventeentrack 1.2.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 | |
|---|---|---|---|
| pyseventeentrack-1.2.0.tar.gz | 13.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyseventeentrack-1.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 28.4 kB
Release files / pyseventeentrack-1.2.0.tar.gz
| Download URL | pyseventeentrack-1.2.0.tar.gz |
|---|---|
| Size | 13.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
384c0e3f3418631f79548077a87e80c858dbbc2bf27e14d6c924a7a1d0df3a70
|
|
BLAKE2b-256 checksum How to use checksums |
e972078ddd1c1fd0150c00644c4d6bcb304ff1f021d696ebaf493d9df896c790
|
| 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 Oct 9, 2026.
Transparency logRelease files / pyseventeentrack-1.2.0-py3-none-any.whl
| Download URL | pyseventeentrack-1.2.0-py3-none-any.whl |
|---|---|
| Size | 14.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b3e94b06a03ca3c61cd9484182cc3ccc6900c2e9a963ff81c0dcb65c997cb5b7
|
|
BLAKE2b-256 checksum How to use checksums |
a76acd54a5be99fe442ae229152c0a6ad8a7aafc7759e201b3478b908bff840d
|
| 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 Oct 9, 2026.
Transparency log