Bind a child enforcement endpoint
Mints a §9.3(b) bound-resolver label and returns the label, binding UUID, and connect_secret (all three returned exactly once). Requires an active consent_attestation for (audience_did, child_ref) as a §4.2.2 precondition. Caller must be an accredited resolver with a valid RFC 9421 signature.
binding_id, and a connect_secret — all three returned exactly once. The caller must
be an accredited resolver with a valid RFC 9421 signature,
and there must be an active consent_attestation for (audience_did, child_ref) — the
§4.2.2 precondition. No consent → 403.
Worked example
In the sandbox you satisfy the consent precondition with a single self-serve call (mint test consent), then bind. This runs end-to-end against the hosted sandbox:sign_request / SignRequest) is defined once in the
request-signing guide — copy it in, or use the
@openchildsafety/ocss SDK’s signRequest. That guide’s Python, Go, and curl+openssl
recipes were each run end-to-end against this sandbox and returned a real 201.201 response (captured from the hosted sandbox):
endpoint_id_label, and rotate using the
binding_id.Body
Binding-leg mint request. Source: endpointMintBody in internal/ocsshttp/handler_endpoints.go. Required: audience_did, child_ref, window_seconds >= 1.
DID of the resolving platform (e.g. "did:ocss:snaptr").
"did:ocss:snaptr"
"child:" — the child the resolver is binding to.
"child:11111111-1111-4111-8111-111111111111"
Profile validity window in seconds. The census mints a window of this duration and increments rotation_epoch accordingly.
x >= 1Optional list of category slugs the deployment declares fail-closed (§9.1 floor 3 / §9.2). fail_mode="closed" appears on those CategoryEntry rows.
Response
Endpoint bound. Store endpoint_id_label and connect_secret immediately.
Binding mint result. Source: EndpointHandlers.Mint response in internal/ocsshttp/handler_endpoints.go. All three fields are returned exactly once; endpoint_id_label and connect_secret are never logged.
High-entropy §9.3(b) bound-resolver label. Presenting it as the {endpoint_id} path segment in GET /enforcement-profiles/{endpoint_id} IS the authentication credential — treat as a secret, never log.
UUID of the persisted binding row (for rotation).
HMAC-SHA256 secret for verifying X-Phosra-Signature on inbound connect-leg deliveries (feed into gk.config({ connectSecret })). Returned ONCE; store it immediately.