OUTCOME · Planned custody preparation
What changes
No executable public mutation exists. A future success would create PREPARED commitments only—not a seed, active wallet, distributed share, signature, transaction, or value movement.
v2Workspace Management
/api/v2/workspaces/{id}/custody-ceremoniesThis page describes intended capability and integration boundaries so people and agents can prepare safely. Do not send this request or register it as an executable tool. Wait until the capability registry marks it implemented-contract, then re-fetch the deployed OpenAPI document and build the request from that machine contract.
PURPOSE + BUSINESS CONTEXT
WHEN THIS CALL IS USEFUL
Do not call this planning contract yet. When promoted, it belongs after workspace creation and policy selection but before participant enrollment, wallet activation, or signing authority.
OUTCOME · Planned custody preparation
No executable public mutation exists. A future success would create PREPARED commitments only—not a seed, active wallet, distributed share, signature, transaction, or value movement.
WHY IT MATTERS
ISOLATION + AUTHORITY
The future ceremony is immutably bound to workspace, network, purpose, participant policy, threshold policy, and recovery policy. All key and share material stays outside the public API.
BEFORE YOU CALL
WHAT TO DO NEXT
AGENT GUIDANCE
This operation is a non-executable planning contract. Its capability-registry record defines the intended owner, parameters, responses, and integration boundary until an implemented Rust OpenAPI operation replaces it.
EXTENDED INTEGRATION GUIDANCE
Examples describe the reviewed planning contract and remain non-executable until promoted into OpenAPI.
PARAMETERS
AuthorizationheaderRequiredBearer tokenCredential containing the workspaces:write scope.EXAMPLEBearer hc_live_…
Idempotency-KeyheaderRequiredASCII string · 1–128Caller-generated key reused for every retry of the same logical mutation.EXAMPLElaunch-treasury-v1-001
Content-TypeheaderRequiredapplication/jsonSigned mutations accept canonical JSON only.EXAMPLEapplication/json
Content-DigestheaderRequiredRFC 9530 SHA-256 digestDigest of the exact transmitted body bytes.EXAMPLEsha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:
Signature-InputheaderRequiredRFC 9421 signature parametersCovers @method, @path, content-digest, content-type, and idempotency-key; includes keyid, nonce, created, and expires.EXAMPLEsig1=("@method" "@path" "content-digest" "content-type" "idempotency-key");created=1786582800;expires=1786583100;nonce="01J…";keyid="machine-prod"
SignatureheaderRequiredEd25519 HTTP Message SignatureSignature made by an active public key registered to the authenticated client.EXAMPLEsig1=:base64-signature:
idpathRequiredauthenticated workspace identifierWorkspace receiving the future custody wallet; must match bearer authority.EXAMPLEworkspace-01
network_idbodyRequiredsupported network identifierMust match workspace custody policy.EXAMPLEhybrid-testnet
purposebodyRequiredTREASURY | SETTLEMENT | APPLICATION | RECOVERYSelects server-owned participant, threshold, custody, and recovery policy.EXAMPLETREASURY
wallet_labelbodyRequiredstring · 2–160Presentation-safe wallet label; never an authority identifier.EXAMPLEPrimary treasury
policy_profilebodyRequiredapproved custody-policy codeFresh server-owned policy; callers never select participants or submit public keys.EXAMPLEMPC_STANDARD_3_OF_5
recovery_policybodyRequiredapproved recovery-policy codePre-reviewed recovery posture that cannot bypass participant, delay, approval, or evidence controls.EXAMPLEGOVERNED_RECOVERY_V1
step_up_tokenbodyRequiredpurpose-bound tokenFresh CUSTODY_CEREMONY_CREATION authorization.EXAMPLEhcsu_…
REQUEST
{
"network_id": "hybrid-testnet",
"purpose": "TREASURY",
"wallet_label": "Primary treasury",
"policy_profile": "MPC_STANDARD_3_OF_5",
"recovery_policy": "GOVERNED_RECOVERY_V1",
"step_up_token": "hcsu_…"
}RESPONSES
{
"ceremony_uuid": "ceremony-01",
"state": "PREPARED",
"network_id": "hybrid-testnet",
"purpose": "TREASURY",
"participant_policy_commitment": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"threshold_policy_commitment": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"recovery_policy_commitment": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
"wallet_active": false,
"key_material_disclosed": false
}{
"ceremony_uuid": "ceremony-01",
"state": "PREPARED",
"idempotent": true
}{
"code": "invalid_custody_ceremony",
"message": "A field, signed header, step-up token, or Idempotency-Key is malformed."
}invalid_custody_ceremony{
"code": "invalid_credentials",
"message": "The bearer credential is invalid."
}invalid_credentials{
"code": "custody_ceremony_forbidden",
"message": "The principal lacks workspaces:write, custody administration, or fresh step-up."
}custody_ceremony_forbidden{
"code": "custody_policy_not_found",
"message": "The workspace or policy profile is not owner-visible."
}custody_policy_not_found{
"code": "custody_ceremony_conflict",
"message": "Workspace, network, policy, active-ceremony, or Idempotency-Key state conflicts."
}custody_ceremony_conflict{
"code": "custody_ceremony_rejected",
"message": "Purpose, participant-domain, threshold, recovery, compliance, or network policy rejected preparation."
}custody_ceremony_rejected{
"code": "custody_ceremony_unavailable",
"message": "Workspace, Dark Mesh, participant registry, policy, or evidence ownership is unavailable."
}custody_ceremony_unavailableOPERATIONAL NOTES
UPGRADING FROM V1
If you maintain an older integration, use this map to find the V2 replacement. Do not translate the old request field-for-field: rebuild it from the V2 parameters and schemas above because identity, authorization, replay protection, and response semantics may have changed.
/api/v1/workspaces/secureWORKSPACE: Secure new WorkspaceThis planned contract now defines its public parameters, authorization boundary, replay behavior, responses, and authoritative owner. It remains non-executable until its owner adapter and conformance tests are promoted into the Rust gateway.
Return to the V2 directory ↗