Run the connect ceremony to your own DID (sandbox)
SANDBOX-ONLY reference provider. Mints a §9.3 binding for a seeded test child scoped to your platform_did and delivers the signed §3.6 callback to your webhook, so a cold self-registered platform dev can watch a real signed enforcement profile land with no live counterparty and no OCSS_CONSENT_ATTESTATION_APPS roster edit (it skips §6.2 standing for the seeded fixture child). RFC 9421 signed as the caller. Gated on the Restricted band (PHOSRA_ENV==sandbox) — returns 404 on dev/staging/production.
PHOSRA_ENV==sandbox — returns 404 on dev, staging, and
production.platform_did and delivers the signed §3.6 callback to your webhook_url. The call is
RFC 9421-signed as you.
The binding is minted and profile_url is observable even if the webhook delivery leg
fails — delivered=false with a note explaining why, but you can still poll the profile.
Worked example
200 response (captured — example.com returns 405 to the callback, so
delivered=false; the binding is minted regardless):
profile_url with your platform key (fetch profile)
to see the router-signed profile land, and rotate
with the returned binding_id.Body
SANDBOX-ONLY (POST /api/v1/sandbox/test-connect). Runs the PROVIDER side of the EXT-04 §3.2 connect ceremony against the caller's own platform DID + webhook so a cold self-registered platform dev receives a real signed binding with no live counterparty. RFC 9421 signed as the caller. Source: sandboxTestConnectBody in internal/ocsshttp/handler_sandbox_test_connect.go.
The consuming platform's Trust-List DID (the DID you self-registered and sign with).
"did:ocss:my-gatekeeper"
Your POST /api/ocss/connect receiver BASE (the well-known path is appended). Absolute http/https, no query/fragment/credentials. Plain http admitted (sandbox).
"https://my-gatekeeper.example.com"
The HMAC secret you fed into gk.config({ connectSecret }); the §3.6 callback is signed with it so your receiver verifies X-Phosra-Signature. Supplied because the census stores only its digest.
Optional seeded test child ("child:"); defaults to the seeded Mia child.
"child:a11ce0fa-0000-4000-8000-0000000000a1"
Optional §6.3 rotation window in seconds; defaults to 3600.
Response
Ceremony ran. The binding is minted and profile_url is observable even if the webhook leg failed (delivered=false + note).
Result of the sandbox provider ceremony. The binding is minted and profile_url is observable even when the webhook delivery leg fails (delivered=false + note). Source: sandboxTestConnectResp in handler_sandbox_test_connect.go.
The binding UUID returned once by the mint ceremony; pass it to the rotate endpoint.
Echo of platform_did — the DID the binding resolves to (sign the profile poll with it).
The connect-ceremony binding label (unprefixed 43-char base64url). Poll it at profile_url with your platform key. Never log.
Path to poll the router-signed enforcement profile for this binding.
"/api/v1/enforcement-profiles/…"
The full receiver URL the signed §3.6 callback was POSTed to (webhook_url + /api/ocss/connect).
True when your receiver returned 2xx. False (with note) when the webhook leg failed — the binding is minted regardless.
The HTTP status your receiver returned (0 if unreachable).
Opaque sandbox principal ref delivered alongside the label ("sandbox-test-connect:<binding_id>").
Present only when delivered=false — explains the webhook-leg failure.