Skip to main content
The OCSS Trust List has two accreditation tiers, with a distinct intermediate state that is the achievable goal today.
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.
No permanent production verifying-agency exists yet — but production is reachable today. Full, permanent accreditation requires a named independent organization holding role: verifying-agency on the canonical Trust List, and Phosra structurally cannot self-accredit (WebPKI-CA invariant: the accreditor must be a trusted third party, not Phosra). That permanent designation is pending governance. You do not wait for it. Phosra runs an isolated, interim production census (PHOSRA_ENV=production) with a Phosra-designated interim verifying-agency, Touchstone (did:ocss:touchstone), on which your did:ocss:<slug> is admitted and writes signed rules against real platforms now — see Interim production network for the exact coordinates — https://prodapi.phosra.com. The standin exclusion described here is about the accreditation tier your entry carries under an interim VA, not about the host: there is one production census and prodapi.phosra.com is it. Entries carrying standin are re-attested when the permanent VA is designated.
Sandbox: the 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):
The response echoes "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 censusPHOSRA_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/connect200; POST /api/v1/enforcement-endpoints405 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:
Certificate caveat, verified 2026-07-26. Railway’s edge intermittently answers prodapi.phosra.com with its *.up.railway.app wildcard certificate instead of the custom-domain certificate — roughly 1 handshake in 4 across a 60-request sample, surfacing as SSL: no alternative certificate subject name matches target host name. Edge certificate state on a recently-moved domain, not DNS and not the service; retry usually succeeds. If you need determinism today (CI, a first smoke test), configure https://phosra-api-prod-bootstrap-production.up.railway.app — same census, same root, 60/60 clean in the same sample — and switch to prodapi.phosra.com once this note is removed.

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:
  1. Real legal entity — a registered company or incorporated organisation (not an individual developer account).
  2. Passing conformance harness — run @openchildsafety/provider-harness (≥ 0.1.3) against your enclave and obtain a conformance_attestation with 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.
  3. §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.
  4. Child-safety–aligned use case — intended use that aligns with the OCSS mission (protecting children, not general-purpose signal aggregation).
  5. For full production accreditation (not achievable today): the conformance_attestation must be counter-signed by a real governance-designated verifying-agency — an independent organization holding role: verifying-agency on the same Trust List. The census compiler enforces this at compile time: classifier-accredited entries whose attestation is not signed by a co-present verifying-agency are 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’s runattestsign pipeline (the CLI is provider-harness <run|attest|sign|verify> — there is no --sign-attestation flag):
Expected output for a fully-wired enclave today (4 pass / 3 pending / 0 fail). Your live-enclave run grades your implementation — an assertion your enclave does not yet satisfy shows 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:
Exit code 0 on 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 email developers@phosra.com with the same fields):
Response: { "ok": true } — a row is stored in the intake queue and Phosra is notified.
Use the .org name in scripts. openchildsafety.com now 308-redirects to openchildsafety.org. A browser follows the redirect, but curl -X POST without -L does not — the POST silently submits nothing while exiting 0, and you never see the { "ok": true }. If you must target the .com name, add -L.
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.
Required fields:

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 to advisor_agents:
  1. did:ocss:probe-labrole: 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.)
  2. 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-accredited entries are admitted ONLY if their conformance_attestation.sig verifies under an Ed25519 key from a verifying-agency entry 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 with accreditation_tier: standin are excluded when PHOSRA_ENV=production. Your entry appears on sandbox Trust Lists and is absent from production Trust Lists until the stand-in (standin) tier is graduated.
Verify admission on the sandbox Trust List:

6. Confirmation

You receive an email confirmation with your initial phosra_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:
What this means in plain terms:
  • 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 SIMdid:ocss:probe-lab is a sandbox simulator, not a real independent accreditor. The honest label is self-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:
  1. 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.
  2. All 7 assertions passing. A3, A4, and A6 require:
    • A3: two-attestor consent infra (Tier 4.1)
    • A4: a GET /capabilities endpoint declaring monitoring_active
    • A6: the advocate routing lane (Tier 2.5, gated on counsel)
  3. Removing the standin tier. Once a real verifying-agency counter-signs the attestation and all 7 assertions pass, the administrator promotes the entry by clearing accreditation_tier. The entry then passes compiler invariant (b) and appears on the production Trust List.

What changes after promotion


After you are accredited

  1. Set LinkConfig.censusBaseUrl to the production census — https://prodapi.phosra.com (bare origin, no /api/v1). See Production census coordinates.
  2. Set LinkConfig.trustRootXB64Url to the production trust root 824vsCATBxyUiA-znpGx01N48NNs_3gPE3M7f7vIEaI (root key id root-prod-bootstrap-2026-07) — distinct from sandbox, pinned out-of-band (verified against the census, never fetched from it).
  3. Set LinkConfig.developerOrgId to your org_... ID for billing attribution.
  4. Run phosra doctor pointed at the production census (there is no --env flag — set PHOSRA_CENSUS_URL=https://prodapi.phosra.com and PHOSRA_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