Thanks for helping improve the client.
python -m venv .venv && . .venv/bin/activate
pip install -e ".[dev]"
pytest -m "not contract" # unit tests, no API key neededThe unit tests use a mocked transport. The contract tests run against the real API and are what prove the models match production:
LIVETENNISAPI_KEY=twjp_… pytest -m contractThey skip automatically without a key, and tolerate an empty slate — there may genuinely be no live matches at 3am.
ruff check src/ tests/ && ruff format --check src/ && pytest -m "not contract"If the API returns something these models don't expect, that's the most
valuable bug report there is. Include the endpoint, the request, and the raw
response (obj.raw). The spec is
the source of truth; if the spec and the API disagree, the spec gets fixed.
Two constraints are not up for negotiation, because the API's contract depends on them:
- Never reject an unknown field. Additive changes ship within
v1. - Never retry a non-429 4xx. A bad key or an unentitled tier cannot start working, and retrying only burns the caller's rate limit.