Skip to main content

edutap.esc_router_api

Async Python client for the ESC Router, the registry behind the European Student Card. It is where a higher education institution registers its students and the cards it issues them, and where anybody scanning a card's QR code is sent to ask whether that card is still valid.

Complete coverage of the router's V2 API: persons, cards, card pictures, the public status endpoint, offline and server-side card number minting, and the bulk import dry run.

Install

pip install edutap.esc_router_api

Python 3.13 or newer.

Use

from edutap.esc_router_api import ESCRouterClient

async with ESCRouterClient.from_settings() as client:
    status = await client.get_card_status("25539be8-6423-103e-add8-988999978433")
    print(status.status)  # ACTIVE

Configuration comes from the environment, prefixed ESC_, or from a .env file:

ESC_API_KEY=your-key
# ESC_ENVIRONMENT=production   # omit and you talk to the sandbox

The default is the sandbox, not production. A deployment that forgets the variable writes to a test register rather than to a live one.

In a service that already keeps an httpx2.AsyncClient, hand it in and it will be borrowed rather than duplicated -- and not closed:

client = ESCRouterClient.from_settings(client=my_shared_httpx_client)

There is a module-level function per operation as well, for scripts and notebooks:

from edutap.esc_router_api.api import get_person

person = await get_person("urn:schac:personalUniqueCode:int:esi:lmu.de:12345")

Documentation

https://docs.edutap.eu/packages/edutap_esc_router_api/index.html

Start with the tutorial if the router is new to you, the operation table if it is not, and migrating to 0.1.0 if you are coming from an earlier release -- fullName moved, failures raise instead of returning None, and three picture operations that never worked now do.

Develop

make venv             # .venv with the package and its dev dependencies
make lint             # ruff check, ruff format --check, ty check
make test-local       # the unit suite -- no network, well under a second
make docs             # sphinx-build -W
make help             # everything else

The unit suite never opens a socket: it drives the real client over an httpx2.MockTransport. The tests that talk to a real router are held behind a marker -- see Run the integration tests.

Contributing

See CONTRIBUTING.md. Releases are described in RELEASING.md.

Licence

EUPL 1.2. See LICENSE.

Release files for edutap.esc-router-api 0.1.1

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

Source distribution (sdist)

Source distribution for edutap.esc-router-api 0.1.1
File Size Uploaded
edutap_esc_router_api-0.1.1.tar.gz 82.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for edutap.esc-router-api 0.1.1
File Interpreter ABI Platform
edutap_esc_router_api-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 111.3 kB

Release files / edutap_esc_router_api-0.1.1.tar.gz

Download URL edutap_esc_router_api-0.1.1.tar.gz
Size 82.0 kB
Tags Source
SHA-256 checksum
How to use checksums
e552eec34fc4c4bd4ce49ab54b5c685785cf974f870f01b34fb08581b0fe4219
BLAKE2b-256 checksum
How to use checksums
39cf3c3ef4991cdc7ea3fd19259b907ff3fa28b3b30df12e63301dc5c49e4502
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 Aug 28, 2026.

Transparency log

Release files / edutap_esc_router_api-0.1.1-py3-none-any.whl

Download URL edutap_esc_router_api-0.1.1-py3-none-any.whl
Size 29.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ebaf0d4e2c6e8a9bcd64af71554e0fe8e5145df8b85851b91626f54b7a57db23
BLAKE2b-256 checksum
How to use checksums
84e3fac395061c4d44f77e47f74d2b2c2a80bb43b4f4a9555220b749ec7a885d
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 Aug 28, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.1 This release

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