All notable changes to postio are documented here. Format follows
Keep a Changelog, versioning
follows SemVer.
0.1.0 — 2026-05-02
Initial release. First Postio SDK published to PyPI.
PostioClient— synchronous client.AsyncPostioClient— async client (httpx-based).- Address endpoints:
address.search,address.postcode,address.udprn. - Email endpoint:
email.validate. - Phone endpoint:
phone.validate. - Health probe:
connect(). - Typed Pydantic v2 models for every response, generated from the public
OpenAPI spec at
https://postio.co.uk/openapi.json. - Typed exception hierarchy:
PostioError,PostioInvalidKey,PostioOutOfCredit,PostioForbidden,PostioNotFound,PostioValidationError,PostioRateLimit,PostioServerError,PostioTimeout,PostioConnectionError. Every error carriesstatus,code,details,request_id, andenvelope. - Configurable retries (default 2 on 408/409/429/5xx + network) with
exponential backoff and full jitter, mirroring
@postio/node. POSTIO_API_KEYenv var picked up automatically when noapi_key=is passed to the constructor.- PEP 561 typed marker (
postio/py.typed) so type checkers see the SDK as fully annotated. - Codegen script at
scripts/codegen.pyto refresh_models.pyfrom the live spec.
- The current spec (
@postio/openapi@1.0.2) marks every optional field onPhoneResultasrequired, even though the live API drops them on invalid input. The SDK applies a manual patch inpostio/_models.pyto default those fields toNoneso customer code doesn't get a parse error on real responses. Will revisit when postio-api aligns the spec with runtime.