Guides
Resolver integration
Integrate the Resolver correctly: the right host, the right status handling, child identifiers, the publish kit, and the errors that are not verdicts.
Live in production and publicly readable, with no account and no key. Measured read-only on 2026-10-10.
Accountability Chain:Current stateRe-verify
Addresses
| Purpose | Address |
|---|---|
| Machine record (automate against this) | https://api.ecocitizenz.com/api/p/{ecz_id}.json |
| Human record (send people here) | https://resolver.ecocitizenz.org/p/{ecz_id} |
| Child badge (an image, not proof) | https://trustops.ecocitizenz.com/api/passports/child/{ecz_id}/badge.svg |
| Child QR (routes to the live record) | https://trustops.ecocitizenz.com/api/passports/child/{ecz_id}/qr.png |
One route serves the parent and every family. A child identifier contains ::; pass it as it is, URL-encoded where your HTTP client requires. Normalise input by trimming and upper-casing, and nothing else.
Handle statuses as states, not errors
| Response | Meaning | Do |
|---|---|---|
200 application/json | A public record | Read resolver_v2; apply your policy |
| 404 | No public record | Report absence. Never report it as unsafe. |
| 429 · 503 | Unreadable right now | Retry with backoff. Unreadable is not absent. |
| Timeout or network error | Unreadable | Fail closed for high-risk actions; retry otherwise |
Caching
Records are served Cache-Control: no-store, must-revalidate, measured on 2026-10-09. Do not add a cache in front of a reliance decision. If you keep a copy for audit, keep it as an observation with the time you read it, never as current state.
Related
This page is explanation, not authority. Current state is only ever the live Resolver record. Live facts on this page were measured read-only on 2026-10-10.
