Sandbox only. The reference OAuth provider is hosted on the census host root (not
/api/v1) and gated on PHOSRA_ENV==sandbox — 404 on dev, staging, and production.
The first leg of the sandbox reference OAuth flow, seeded with the test family (Mia / Leo /
Ava). With no decision it renders an HTML consent page. Its machine-usable contract: add
decision=approve and the census issues an authorization code and 302-redirects to
redirect_uri?code=…&state=… — so CI can automate approval with no HTML scraping.
decision=deny redirects with error=access_denied&state=…. Custom mobile schemes (e.g.
propagate://) are allowed as redirect_uri.
The seeded sandbox consent page rendered by GET /oauth/authorize (no decision param).
Worked example
Fully runnable — this leg is unsigned:
bash
# Render the consent page (200, text/html):curl "https://phosra-api-sandbox-production.up.railway.app/oauth/authorize?redirect_uri=https://example.com/cb&state=xyz123"# Machine path — approve and capture the 302 Location header:curl -sD - -o /dev/null \ "https://phosra-api-sandbox-production.up.railway.app/oauth/authorize?redirect_uri=https://example.com/cb&state=xyz123&decision=approve" \ | grep -i '^location:'