Skip to main content
POST
Signed curl (wire shape)
Sandbox only. Gated on PHOSRA_ENV==sandbox — returns 404 on dev, staging, and production.
Runs the provider side of the EXT-04 §3.2 connect ceremony against your own platform DID + webhook, so a cold self-registered platform dev receives a real signed binding with no live counterparty and no roster edit. It 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_url. The call is RFC 9421-signed as you. Pick which seeded child with child_ref (optional). Omit it and the binding is minted for Mia; pass a seeded child ref to bind a different one. This is how you exercise the multi-profile model — one call per child yields a distinct endpoint_id_label per child, which is exactly what a service with several kids’ profiles must map and enforce separately (see Bind a connection to the right child): The binding is minted and profile_url is observable even if the webhook delivery leg failsdelivered=false with a note explaining why, but you can still poll the profile.

Worked example

Real 200 response (captured — example.com returns 405 to the callback, so delivered=false; the binding is minted regardless):
Poll profile_url with your platform key (fetch profile) to see the router-signed profile land, and rotate with the returned binding_id.

Body

application/json

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.

platform_did
string
required

The consuming platform's Trust-List DID (the DID you self-registered and sign with).

Example:

"did:ocss:my-gatekeeper"

webhook_url
string
required

Your POST /api/ocss/connect receiver BASE (the well-known path is appended). Absolute http/https, no query/fragment/credentials. Plain http admitted (sandbox).

Example:

"https://my-gatekeeper.example.com"

connect_secret
string
required

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.

child_ref
string

Optional seeded test child ("child:"); defaults to the seeded Mia child.

Example:

"child:a11ce0fa-0000-4000-8000-0000000000a1"

window_seconds
integer<int64>

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.

binding_id
string<uuid>
required

The binding UUID returned once by the mint ceremony; pass it to the rotate endpoint.

resolver_did
string
required

Echo of platform_did — the DID the binding resolves to (sign the profile poll with it).

endpoint_id_label
string
required

The connect-ceremony binding label (unprefixed 43-char base64url). Poll it at profile_url with your platform key. Never log.

profile_url
string
required

Path to poll the router-signed enforcement profile for this binding.

Example:

"/api/v1/enforcement-profiles/…"

connect_receiver
string
required

The full receiver URL the signed §3.6 callback was POSTed to (webhook_url + /api/ocss/connect).

delivered
boolean
required

True when your receiver returned 2xx. False (with note) when the webhook leg failed — the binding is minted regardless.

http_status
integer
required

The HTTP status your receiver returned (0 if unreachable).

state
string
required

Opaque sandbox principal ref delivered alongside the label ("sandbox-test-connect:<binding_id>").

note
string

Present only when delivered=false — explains the webhook-leg failure.