All notable changes to postio/postio are documented here. Format follows
Keep a Changelog, versioning
follows SemVer.
0.1.2 — 2026-05-02
PhoneResult::$isReachabletyped?bool(wasbool|string|null). postio-api 1.0.3 aligned the spec with the runtime — HLR returns boolean.PhoneResultnullable fields drop their= nulldefaults. The runtime now always emits explicit nulls for every field; the hand-applied SPEC DRIFT block in the constructor is gone.
0.1.1 — 2026-05-02
Bookkeeping release — version bump + CLAUDE.md cleanup but the PhoneResult constructor changes intended for this release didn't make it into the tagged commit. Use 0.1.2 instead.
0.1.0 — 2026-05-02
Initial release. First Postio PHP SDK on Packagist.
Postio\PostioClientwith sync API (PHP's async story is too fragmented to ship two surfaces).- Address:
$client->address->search/postcode/udprn. - Email:
$client->email->validate. - Phone:
$client->phone->validate. - Health probe:
$client->connect(). - Hand-written
readonlyvalue objects for every response shape. - Typed exception hierarchy:
PostioExceptionbase +PostioInvalidKeyException,PostioOutOfCreditException,PostioForbiddenException,PostioNotFoundException,PostioValidationException,PostioRateLimitException,PostioServerException,PostioTimeoutException,PostioConnectionException. Each carriesstatus,errorCode,details,requestId,envelope. - Default retry policy (2 retries, exp backoff + full jitter on
408/409/429/5xx + network/timeout). Mirrors
@postio/node. - Guzzle 7 as the HTTP transport — inject your own
ClientInterfacevia the$httpconstructor arg for proxies, mocks, custom middleware. POSTIO_API_KEYenv var fallback when noapiKeyargument is passed.
PhoneResult.isReachableis typedbool|string|nullbecause the live API returns booleans there even though the spec says string-only. Aligned once postio-api ships a spec/runtime fix.- Property
errorCode(notcode) — PHP'sException::$codeis a built-in non-readonly int and can't be shadowed by a readonly string.