Multisig Wallets

Cancel a treasury transfer

Drop a transfer still collecting signatures and purge the signatures already collected. Once the threshold is reached the relay owns it and cancelling is refused — a complete envelope stays valid on chain until the account nonce moves.

delete/v1/multisig-wallets/{walletId}/intents/{intentId}

Request

  • Base URL: https://api.prod.keyban.io
  • URL: https://api.prod.keyban.io/v1/multisig-wallets/{walletId}/intents/{intentId}
  • Auth: one of:
    • API key in header X-Api-Key
    • bearer (a scheme the document does not define)

Path parameters

walletIdstring uuid required

The unique identifier of the multisig wallet

intentIdstring uuid required

The transfer to cancel

Response

Transfer cancelled

idstring uuid required

Entity UUID

createdAtstring date-time required

Creation date (ISO 8601)

updatedAtstring date-time required

Last update date (ISO 8601)

status'pending' | 'broadcasting' | 'unknown' | 'executed' | 'failed' | 'cancelled' | 'expired' required

Lifecycle: pending (collecting signatures), broadcasting (threshold reached, relay in progress), executed (mined, txHash set), failed (reverted or never broadcast), unknown (outcome undetermined — the transfer may have landed, and no new intent is accepted until it is reconciled), cancelled, expired.

totalAmountstring required

Sum of the leg amounts in USDC sub-units, as a decimal string. Derived, never stored.

relayNoncestring required

Account relay nonce the signatures are bound to, as a decimal string. One nonce covers the whole lot. If the account moves past it, the intent fails without broadcasting.

relayHashstring required

What each signer signs. Single-leg lot: keccak256(abi.encode(chainId, account, nonce, dest, value, keccak256(data))). Two legs or more: keccak256(abi.encode(chainId, account, nonce, keccak256(abi.encode(calls)))) over the ordered (dest, value, data) legs. The app must recompute it locally from the other fields and refuse to sign on a mismatch.

approvalCountinteger required

Signatures collected so far, out of the wallet threshold.

expiresAtstring date-time required

End of the signing window. Past it the intent expires on its next touch and the collected signatures are purged.

txHashstring nullable

Hash of the relayed transaction. Null until executed — and can stay null on an intent reconciled as executed after an ambiguous broadcast, where only the consumed account nonce proves execution.

errorstring nullable

Why the transfer failed, or what made its outcome undetermined. Null while pending or once executed.

Example response

{
  "status": "pending",
  "transfers": [
    {
      "agentWalletId": "550e8400-e29b-41d4-a716-446655440000",
      "targetAddress": "0xcb0c0dca4246bb0f6b3309d64e7e35002cc3af1f",
      "amount": "1500000",
      "destinationLabel": "Prestataire Acme",
      "destinationKind": "contact"
    }
  ],
  "totalAmount": "4000000",
  "fiat": {
    "currency": "EUR",
    "centiPerUsdc": 92
  },
  "relayNonce": "3",
  "relayHash": "0x4d2f8c1e9b7a3d5f0c2e8a6b4d1f9c3e7a5b8d2f4c6e9a1b3d5f7c9e2a4b6d8f",
  "approvalCount": 1,
  "txHash": "0x4d2f8c1e9b7a3d5f0c2e8a6b4d1f9c3e7a5b8d2f4c6e9a1b3d5f7c9e2a4b6d8f"
}

Changes

No recorded changes to this operation across all 1 revision of this API.