HYBRID-CHAINDEVELOPERS
DOCUMENTATIONv2
PATCH

MPC wallet lifecycle

Update wallet policy

/api/v2/wallets/{wallet_uuid}
AUTHENTICATIONBearer token · wallets:writeAUTHORITATIVE OWNERcustody-serviceCONTRACT AUTHORITYCapability registry · plannedSTATUSPlanned · not executable
PLANNING CONTRACT · NOT CALLABLE

This 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

Planned capability: update eligible wallet labels, approved-address policy, or recovery settings through the custody boundary.

WHEN THIS CALL IS USEFUL

Do not call or register this operation as an executable agent tool yet. Use this page to plan the future wallet policy workflow; enable it only after the status becomes implemented-contract and the exact operation appears in deployed OpenAPI.

OUTCOME · Planned · Revise and reconcile

What changes

None today: this route is not executable. Its intended behavior is: no executable public mutation exists. A future success could replace admitted policy fields and append a revision commitment only; it could not rotate keys, change threshold participants, activate or revoke the wallet, alter balances, approve a destination, or authorize a transfer.

WHY IT MATTERS

  • Lets people and agents prepare for wallet policy without falsely presenting roadmap scope as a live capability.
  • Gives people and agents a contract-backed way to advance wallet policy.
  • Makes custody state understandable without exposing seeds, shares, nonces, private keys, or other reusable signing material.

ISOLATION + AUTHORITY

The authenticated owner, workspace, network, and wallet policy remain authoritative. A wallet record, policy result, approval, ceremony, or balance never grants another lifecycle stage and cannot substitute for threshold signing or separately owned funding, settlement, publisher, matching, or trading authority. This planning record grants no runtime authority, and only deployed OpenAPI can define an executable public contract.

BEFORE YOU CALL

  • First confirm that this operation is marked implemented-contract and exists in the currently deployed OpenAPI document; until then, no production request is valid.
  • Its capability-registry profile is provisional integration guidance, not an executable request schema.
  • Authenticate at the documented boundary: bearer+scope.
  • Treat the proposed wallet_uuid (path), expected_version (body), reason (body), step_up_token (body) as planning input only; re-generate the request from deployed OpenAPI before making a call.
  • Use one Idempotency-Key only for retries of the same byte-equivalent logical mutation.
  • Resolve the active workspace, network, wallet lifecycle, and applicable custody policy before relying on this result.

WHAT TO DO NEXT

  • Keep this operation disabled in clients, agents, SDKs, and workflow automation while it remains planned-contract.
  • Use the stated owner, lifecycle, authority boundary, and provisional wallet policy profile to prepare requirements and conformance tests without sending a request.
  • Monitor the capability registry for implemented-contract, then re-fetch deployed OpenAPI and validate its exact security, parameters, schemas, responses, and agent metadata before enabling the integration.

AGENT GUIDANCE

  • Never call this planned contract, include it in an executable tool registry, or infer runtime availability from this readable page.
  • Its capability-registry profile is provisional integration guidance, not an executable request schema.
  • Use wallet policy only for the purpose and lifecycle stage described by this operation; do not treat it as authority for an adjacent action.
  • Treat the proposed wallet_uuid (path), expected_version (body), reason (body), step_up_token (body) as planning input only; re-generate the request from deployed OpenAPI before making a call.
  • Keep enrollment, activation, policy evaluation, approval, ceremony, signing, submission, confirmation, and settlement as distinct states.
  • After a timeout or conflict, read authoritative state before deciding whether an equivalent retry is safe.
  • When implementation lands, discard generated requests based on this planning record and rebuild them from the deployed OpenAPI operation.
MACHINE CONTRACT

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

Readable request and response reference

Examples describe the reviewed planning contract and remain non-executable until promoted into OpenAPI.

PARAMETERS

Headers, path, query, and body

NAMELOCATIONPRESENCETYPE / RULES / PURPOSE
AuthorizationheaderRequired

Bearer tokenCredential containing the wallets:write scope.EXAMPLEBearer hc_live_…

Idempotency-KeyheaderRequired

ASCII string · 1–128Caller-generated key reused for every retry of the same logical mutation.EXAMPLElaunch-treasury-v1-001

Content-TypeheaderRequired

application/jsonSigned mutations accept canonical JSON only.EXAMPLEapplication/json

Content-DigestheaderRequired

RFC 9530 SHA-256 digestDigest of the exact transmitted body bytes.EXAMPLEsha-256=:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=:

Signature-InputheaderRequired

RFC 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"

SignatureheaderRequired

Ed25519 HTTP Message SignatureSignature made by an active public key registered to the authenticated client.EXAMPLEsig1=:base64-signature:

wallet_uuidpathRequired

workspace wallet identifierExact wallet whose admitted policy fields are revised.EXAMPLEwallet-01

expected_versionbodyRequired

integer · ≥1Current wallet-policy version.EXAMPLE4

labelbodyOptional

string · 2–160Optional presentation label.EXAMPLEPrimary treasury

approved_address_policybodyOptional

approved bounded policy objectCannot weaken network, screening, delay, step-up, or evidence requirements.EXAMPLE{ mode: ALLOWLIST_ONLY, approval_quorum: 2 }

recovery_policybodyOptional

approved recovery-policy codeOptional replacement pre-reviewed recovery posture.EXAMPLEGOVERNED_RECOVERY_V1

reasonbodyRequired

string · 8–500Substantive non-secret operator reason.EXAMPLEIncrease destination approval quorum.

step_up_tokenbodyRequired

purpose-bound tokenFresh WALLET_POLICY_UPDATE authorization.EXAMPLEhcsu_…

REQUEST

JSON body example

{
  "expected_version": 4,
  "approved_address_policy": {
    "mode": "ALLOWLIST_ONLY",
    "approval_quorum": 2
  },
  "reason": "Increase destination approval quorum.",
  "step_up_token": "hcsu_…"
}

RESPONSES

Status and payload examples

200Eligible policy fields revised with new version and commitment; keys, balance, activation, and transfers are unchanged.Not executable · JSON RESPONSE+
{
  "wallet_uuid": "wallet-01",
  "version": 5,
  "label": "Primary treasury",
  "approved_address_policy": {
    "mode": "ALLOWLIST_ONLY",
    "approval_quorum": 2
  },
  "policy_commitment": "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd",
  "key_material_changed": false,
  "balance_changed": false
}
INTEGRATION DECISION
CALLER ACTION
Do not send this request or register it as an executable agent tool. Use the implemented alternatives linked by the module guide.
RETRY SAFETY
Do not retry on a timer. Re-fetch production OpenAPI and proceed only after this exact operation appears there.
STATE RECONCILIATION
No runtime state exists to reconcile for this planning contract. Continue from owner-scoped wallet inventory, custody policy, balances, intents, reservations, transactions, and receipts through an implemented operation.
ESCALATE WHEN
Escalate when funds, reservations, transaction digests, or MPC state remain ambiguous after authoritative wallet and network reconciliation.
400Version, change set, reason, signature, step-up, or Idempotency-Key is malformed.Not executable · JSON RESPONSE+
{
  "code": "invalid_wallet_policy",
  "message": "Version, change set, reason, signature, step-up, or Idempotency-Key is malformed."
}
INTEGRATION DECISIONinvalid_wallet_policy
CALLER ACTION
Do not send this request or register it as an executable agent tool. Use the implemented alternatives linked by the module guide.
RETRY SAFETY
Do not retry on a timer. Re-fetch production OpenAPI and proceed only after this exact operation appears there.
STATE RECONCILIATION
No runtime state exists to reconcile for this planning contract. Continue from owner-scoped wallet inventory, custody policy, balances, intents, reservations, transactions, and receipts through an implemented operation.
ESCALATE WHEN
Escalate when funds, reservations, transaction digests, or MPC state remain ambiguous after authoritative wallet and network reconciliation.
401The bearer credential is invalid.Not executable · JSON RESPONSE+
{
  "code": "invalid_credentials",
  "message": "The bearer credential is invalid."
}
INTEGRATION DECISIONinvalid_credentials
CALLER ACTION
Do not send this request or register it as an executable agent tool. Use the implemented alternatives linked by the module guide.
RETRY SAFETY
Do not retry on a timer. Re-fetch production OpenAPI and proceed only after this exact operation appears there.
STATE RECONCILIATION
No runtime state exists to reconcile for this planning contract. Continue from owner-scoped wallet inventory, custody policy, balances, intents, reservations, transactions, and receipts through an implemented operation.
ESCALATE WHEN
Escalate when funds, reservations, transaction digests, or MPC state remain ambiguous after authoritative wallet and network reconciliation.
403The principal lacks wallets:write, policy authority, or fresh step-up.Not executable · JSON RESPONSE+
{
  "code": "wallet_policy_forbidden",
  "message": "The principal lacks wallets:write, policy authority, or fresh step-up."
}
INTEGRATION DECISIONwallet_policy_forbidden
CALLER ACTION
Do not send this request or register it as an executable agent tool. Use the implemented alternatives linked by the module guide.
RETRY SAFETY
Do not retry on a timer. Re-fetch production OpenAPI and proceed only after this exact operation appears there.
STATE RECONCILIATION
No runtime state exists to reconcile for this planning contract. Continue from owner-scoped wallet inventory, custody policy, balances, intents, reservations, transactions, and receipts through an implemented operation.
ESCALATE WHEN
Escalate when funds, reservations, transaction digests, or MPC state remain ambiguous after authoritative wallet and network reconciliation.
404The wallet is not owner-visible.Not executable · JSON RESPONSE+
{
  "code": "wallet_not_found",
  "message": "The wallet is not owner-visible."
}
INTEGRATION DECISIONwallet_not_found
CALLER ACTION
Do not send this request or register it as an executable agent tool. Use the implemented alternatives linked by the module guide.
RETRY SAFETY
Do not retry on a timer. Re-fetch production OpenAPI and proceed only after this exact operation appears there.
STATE RECONCILIATION
No runtime state exists to reconcile for this planning contract. Continue from owner-scoped wallet inventory, custody policy, balances, intents, reservations, transactions, and receipts through an implemented operation.
ESCALATE WHEN
Escalate when funds, reservations, transaction digests, or MPC state remain ambiguous after authoritative wallet and network reconciliation.
409Version is stale or a ceremony, destination, recovery, or transfer conflicts.Not executable · JSON RESPONSE+
{
  "code": "wallet_policy_conflict",
  "message": "Version is stale or a ceremony, destination, recovery, or transfer conflicts."
}
INTEGRATION DECISIONwallet_policy_conflict
CALLER ACTION
Do not send this request or register it as an executable agent tool. Use the implemented alternatives linked by the module guide.
RETRY SAFETY
Do not retry on a timer. Re-fetch production OpenAPI and proceed only after this exact operation appears there.
STATE RECONCILIATION
No runtime state exists to reconcile for this planning contract. Continue from owner-scoped wallet inventory, custody policy, balances, intents, reservations, transactions, and receipts through an implemented operation.
ESCALATE WHEN
Escalate when funds, reservations, transaction digests, or MPC state remain ambiguous after authoritative wallet and network reconciliation.
422Label, destination, recovery, threshold, compliance, lifecycle, or network policy rejected the change.Not executable · JSON RESPONSE+
{
  "code": "wallet_policy_rejected",
  "message": "Label, destination, recovery, threshold, compliance, lifecycle, or network policy rejected the change."
}
INTEGRATION DECISIONwallet_policy_rejected
CALLER ACTION
Do not send this request or register it as an executable agent tool. Use the implemented alternatives linked by the module guide.
RETRY SAFETY
Do not retry on a timer. Re-fetch production OpenAPI and proceed only after this exact operation appears there.
STATE RECONCILIATION
No runtime state exists to reconcile for this planning contract. Continue from owner-scoped wallet inventory, custody policy, balances, intents, reservations, transactions, and receipts through an implemented operation.
ESCALATE WHEN
Escalate when funds, reservations, transaction digests, or MPC state remain ambiguous after authoritative wallet and network reconciliation.
503Custody, Dark Mesh, screening, policy, or evidence ownership is unavailable.Not executable · JSON RESPONSE+
{
  "code": "wallet_policy_unavailable",
  "message": "Custody, Dark Mesh, screening, policy, or evidence ownership is unavailable."
}
INTEGRATION DECISIONwallet_policy_unavailable
CALLER ACTION
Do not send this request or register it as an executable agent tool. Use the implemented alternatives linked by the module guide.
RETRY SAFETY
Do not retry on a timer. Re-fetch production OpenAPI and proceed only after this exact operation appears there.
STATE RECONCILIATION
No runtime state exists to reconcile for this planning contract. Continue from owner-scoped wallet inventory, custody policy, balances, intents, reservations, transactions, and receipts through an implemented operation.
ESCALATE WHEN
Escalate when funds, reservations, transaction digests, or MPC state remain ambiguous after authoritative wallet and network reconciliation.

OPERATIONAL NOTES

Security and lifecycle guarantees

  • Reviewed planning contract: do not call until present in live production OpenAPI.
  • Send at least one admitted change. Unknown fields, null-as-delete tricks, owner selectors, and attempts to change network, key material, participants, threshold, activation, balance, or transfer state fail closed.
  • Never send seeds, private keys, MPC shares, signing nonces, passwords, encrypted password blobs, or recovery secrets.
  • HTTP 409 requires a fresh wallet read and a new policy decision, not an overwrite.
DOCUMENTATION STATUS

This 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