Sandbox is live and self-serve right now. You do not need this page to start integrating.
Run
phosra register or POST /api/v1/advisors/self-register on the sandbox census and you
have a signed round-trip in minutes. Production accreditation is a separate, later step —
only relevant when you are ready to go live with real users.Sandbox: the The response echoes
verifying-agency role IS self-serve and observable. The §5.4 open-assessor
role can be self-registered on a sandbox census — the field is entry_role (NOT roles):"entry_role":"verifying-agency", and the next compiled Trust List carries
"role":"verifying-agency" on that entry (verify with the jq command in step 5). roles: [...]
is a separate, informational field and does not set the Trust-List role — use entry_role.
self-register is sandbox-only (SANDBOX_MODE=true); production VA designation stays governance-gated.Interim production network
You do not have to wait for the permanent verifying-agency. Phosra operates an isolated, Phosra-assigned interim production census —PHOSRA_ENV=production, its own database, its own
signed Trust List — with a Phosra-designated interim verifying-agency, Touchstone
(did:ocss:touchstone). Accredited parties (e.g. did:ocss:notflix, did:ocss:custo) are
admitted to it today and write signed, consent-backed rules against real platforms on it. It
is a real, live production network — it is simply not yet the canonical, governance-blessed one.
This interim census is how you reach production now, ahead of the permanent VA. It is served
at
https://prodapi.phosra.com — the production census host, not a separate staging rung. When the
permanent verifying-agency is designated your entry is re-attested under it; if the root or host
ever changes, Phosra emails updated coordinates and you re-pin per the
go-live checklist.Production census coordinates
These are the exact values to configure — no per-applicant hand-off required.censusBaseUrl is
the bare origin with no /api/v1 suffix (@phosra/link and @phosra/gatekeeper append
paths themselves).
LinkConfig — interim production
The trust-root X is an out-of-band PIN. It is a PUBLIC key you receive at accreditation and
hard-code. Root verification only works if you never fetch the root from the census you are
about to verify — you verify the census’s signed documents against this pinned X. Confirm the
census signs with the matching root key id (
root-prod-bootstrap-2026-07) before trusting it;
never adopt a root just because a census served it.Look-alike hosts
There is one production census.prodapi.phosra.com and
phosra-api-prod-bootstrap-production.up.railway.app are the same service under two names —
verified 2026-07-26: /health, the Trust List, succession and the environment manifest are
byte-identical on both (sha256 match), and census routes answer live on prodapi
(GET /api/v1/providers/did:ocss:notflix/connect → 200; POST /api/v1/enforcement-endpoints
→ 405 registered-wrong-method, versus plain-text 404 page not found on a bogus control path).
Earlier revisions of this page said prodapi.phosra.com was a control plane that 404s the
census routes and served an empty Trust List. That described an earlier topology and is no
longer true — configure prodapi.phosra.com.
Two hosts still look like the census and are not:
Why the gate exists
The production Trust List is the thing every platform trusts when it verifies a signed enforcement profile. A bad entry on it could misdirect child-safety decisions for every connected child. The gate is not bureaucracy; it is the invariant that keeps the network honest. The criteria below are Phosra’s minimum bar for production accreditation.Eligibility criteria
To be considered for production accreditation, an applicant must meet all of the following:- Real legal entity — a registered company or incorporated organisation (not an individual developer account).
-
Passing conformance harness — run
@openchildsafety/provider-harness(≥ 0.1.3) against your enclave and obtain aconformance_attestationwith all evaluated assertions passing. Today’s first attestation scopes to the 4 currently-passable assertions (A1, A2, A5, A7). The remaining 3 (A3 consent infra, A4 capability endpoint, A6 advocate lane) are PENDING — not failures; the infrastructure they require does not yet exist. See Server-Side Enclave Routing — Conformance Harness for the exact invocation and assertion descriptions. - §5.4 self-declaration — a signed conformance self-declaration filed per the Implementer lane (see OCSS Onboarding). For parties intending the Gated or Restricted bands, the Assessed or Audited lane artifact is also required.
- Child-safety–aligned use case — intended use that aligns with the OCSS mission (protecting children, not general-purpose signal aggregation).
-
For full production accreditation (not achievable today): the
conformance_attestationmust be counter-signed by a real governance-designated verifying-agency — an independent organization holdingrole: verifying-agencyon the same Trust List. The census compiler enforces this at compile time:classifier-accreditedentries whose attestation is not signed by a co-presentverifying-agencyare excluded from the signed document. A production accreditor is pending designation.
Review SLA
Phosra commits to the following review timeline:- Initial acknowledgement: within 2 business days of submission
- Promote / decline decision: within 10 business days of submission
- If more information is needed: Phosra will email the contact address from the application; the clock pauses until a response is received.
Application steps
1. Complete the sandbox round-trip
Verify your enclave is correctly wired before filing. Run the direct-loop demo against the sandbox census (see Server-Side Enclave Routing for the full quickstart):2. Run the conformance harness
Generate a probe-lab signing key, then run the harness’srun → attest → sign
pipeline (the CLI is provider-harness <run|attest|sign|verify> — there is no
--sign-attestation flag):
fail, not pass (e.g. a5 fails if your minimization receipt’s key_id does
not resolve to a signing key the harness can verify). Reconcile any fail before filing:
run means all evaluated assertions passed (pending ≠ fail). The sign
step prints the signed conformance_attestation JSON (signed-attestation.json) — copy
it for step 3.
The full step-by-step walkthrough (register your enclave, interpret the output, understand
the honest tier labels) is public at
Server-Side Enclave Routing — Conformance Harness.
3. Apply via the API
Apply via the API (or emaildevelopers@phosra.com with the same fields):
{ "ok": true } — a row is stored in the intake queue and Phosra is notified.
Two similarly-named endpoints, two different legs — don’t conflate them. The census
also serves
POST /api/v1/accreditation/apply (32 KiB body cap — see Limits),
but it is not a mirror of this form: it is the machine half of the accreditation flow.
Its body is { "provider_did", "attestation" } — an assessor-signed conformance attestation
verified against the live Trust List — and on success it records the attestation on your
provider entry. The openchildsafety.org/api/accreditation-apply form above is the human
intake (name/email/org/intended use) that opens the governance review. Submit the human form
here; the attestation leg is driven by your verifying agency.The openchildsafety intake is behind Cloudflare’s browser-integrity check, which rejects
requests from known automation-library User-Agents (e.g.
Python-urllib) with
error code: 1010 / HTTP 403 — the WAF blocks before the app is reached. Send an
explicit browser User-Agent (the -A "Mozilla/5.0" above) to pass. curl’s default
UA works today, but urllib/scripted clients must set one.4. Phosra reviews and adds the Trust List entries
Phosra reviews your harness output, §5.4 declaration (if applicable), and intended use. On approval, Phosra’s administrator adds two rows toadvisor_agents:
-
did:ocss:probe-lab—role: verifying-agency,tier: accredited, public key = the probe-lab Ed25519 pubkey derived from the key you submitted. (One entry, shared across all sandbox applicants using the same probe-lab key.) -
did:ocss:<your-slug>—role: classifier-accredited,accreditation_tier: standin,tier: accredited, public key = your enclave’s Ed25519 signing key,conformance_attestation= the JSON from step 2.
5. The Trust List compiler admits your entry
At the next compile cycle,enforceAccreditationInvariants in internal/ocss/trustlist/compile.go
runs two checks:
- Invariant (a) — WebPKI-CA admission gate:
classifier-accreditedentries are admitted ONLY if theirconformance_attestation.sigverifies under an Ed25519 key from averifying-agencyentry on the same signed document. Probe-lab is on the document → your attestation must verify under probe-lab’s pubkey. - Invariant (b) — stand-in (
standin) production bar: entries withaccreditation_tier: standinare excluded whenPHOSRA_ENV=production. Your entry appears on sandbox Trust Lists and is absent from production Trust Lists until the stand-in (standin) tier is graduated.
6. Confirmation
You receive an email confirmation with your initialphosra_live_... API key (billing
attribution). Your production census URL and trust-root X are not hand-fed per applicant —
they are the shared interim production coordinates above:
censusBaseUrl = https://prodapi.phosra.com and
trustRootXB64Url = 824vsCATBxyUiA-znpGx01N48NNs_3gPE3M7f7vIEaI (root key id
root-prod-bootstrap-2026-07). Once the permanent verifying-agency promotes your entry onto the
canonical production network, Phosra emails the updated coordinates.
Honest status today (self-tested tier)
After completing steps 1–5, your entry appears on the sandbox Trust List with:- 4/7 assertions passed (A1, A2, A5, A7) — your classifier handles the core content-safety signal flow correctly.
- 3/7 assertions pending (A3, A4, A6) — consent infra, capability endpoint, and advocate routing are not yet provable. Pending is not a failure: the infrastructure they require does not yet exist.
- Standin tier — excluded from production Trust Lists; included in sandbox.
- Verifying-agency is a SIM —
did:ocss:probe-labis a sandbox simulator, not a real independent accreditor. The honest label isself-tested; production accreditor pending.
Path to full production accreditation
Full production accreditation is a governance step, not a code step. None of these are met today:- A real governance-designated verifying-agency. A named independent organization on the Trust List, separate from Phosra. Phosra cannot self-accredit and keep the uniformity claim honest. A production accreditor is pending designation.
-
All 7 assertions passing. A3, A4, and A6 require:
- A3: two-attestor consent infra (Tier 4.1)
- A4: a
GET /capabilitiesendpoint declaringmonitoring_active - A6: the advocate routing lane (Tier 2.5, gated on counsel)
-
Removing the
standintier. Once a real verifying-agency counter-signs the attestation and all 7 assertions pass, the administrator promotes the entry by clearingaccreditation_tier. The entry then passes compiler invariant (b) and appears on the production Trust List.
What changes after promotion
After you are accredited
- Set
LinkConfig.censusBaseUrlto the production census —https://prodapi.phosra.com(bare origin, no/api/v1). See Production census coordinates. - Set
LinkConfig.trustRootXB64Urlto the production trust root824vsCATBxyUiA-znpGx01N48NNs_3gPE3M7f7vIEaI(root key idroot-prod-bootstrap-2026-07) — distinct from sandbox, pinned out-of-band (verified against the census, never fetched from it). - Set
LinkConfig.developerOrgIdto yourorg_...ID for billing attribution. - Run
phosra doctorpointed at the production census (there is no--envflag — setPHOSRA_CENSUS_URL=https://prodapi.phosra.comandPHOSRA_TRUST_ROOT_X=824vsCATBxyUiA-znpGx01N48NNs_3gPE3M7f7vIEaI, as in the go-live checklist) to confirm the production round-trip is green before your first real user connects.
Next
- Getting on the Trust List — sandbox self-registration (no email required)
- Server-Side Enclave Routing — enclave API, conformance harness, sandbox round-trip
- Provider Quickstart —
@phosra/linkintegration - Platform Quickstart —
@phosra/gatekeeperintegration - Billing Model — the FamilyMeter and what is always free