# multisig-cancel (/docs/tx/multisig-cancel)

Abandons a pending operation before it collects enough approvals: the
stored approvals are discarded and the deposit reserved at opening is
returned. Only the signatory who opened the operation (and paid the
deposit) may cancel it. The threshold, signatory set, call, and opening
`timepoint` must all match the pending operation exactly.

| Signer    | Pallet   | Wraps                      |
| --------- | -------- | -------------------------- |
| `coldkey` | Multisig | `Multisig.cancel_as_multi` |

## Parameters [#parameters]

| Parameter           | Type    | Required | Description                                                                                                                                                                                                                                                                            |
| ------------------- | ------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `threshold`         | integer | yes      | Number of approvals required to execute, counting the signer. Together with the full signatory set it identifies the multisig account, so it must match on every approval.                                                                                                             |
| `other_signatories` | array   | yes      | The other members of the multisig (every signatory except the signer), as a JSON list of addresses. The same set must be given on every approval; order does not matter (sorted automatically).                                                                                        |
| `call`              | object  | yes      | The inner call to dispatch from the multisig account, as a JSON object \{"op": \<intent name>, ...args}. All approvals must describe the identical call — it is matched by hash. Its arguments must be fully explicit, since it runs as the multisig account, not the signer's wallet. |
| `timepoint`         | object  | yes      | Block height and extrinsic index of the approval that opened the operation, as a JSON object \{"height": ..., "index": ...}. Required — it identifies which pending operation to cancel.                                                                                               |

Address parameters (`--hotkey`, `--coldkey`, `--dest`, ...) accept a raw ss58
address, an address-book or proxy-book name, or a local wallet/hotkey name.

## CLI [#cli]

Preview with `--dry-run` (shows fee, effects, and policy result without
submitting), then submit:

```bash
btcli tx multisig-cancel \
  --threshold <int> \
  --other-signatories <a,b,c> \
  --call '<json>' \
  --timepoint '<json>' --dry-run
btcli tx multisig-cancel \
  --threshold <int> \
  --other-signatories <a,b,c> \
  --call '<json>' \
  --timepoint '<json>' -w my_coldkey
```

## Python [#python]

```python
import bittensor as sub
from bittensor.wallet import Wallet

wallet = Wallet(name="my_coldkey", hotkey="my_hotkey")
intent = sub.MultisigCancel(threshold=0, other_signatories=[...], call={...}, timepoint={...})

async with sub.Client("finney") as client:
    plan = await client.plan(intent, wallet)   # fee, effects, policy — no submission
    result = await client.execute(intent, wallet)
    if not result.success:
        print(result.error.code, result.error.remediation)
```

Or build it by op name, as an agent would:

```python
await client.execute_tool("multisig_cancel", {...}, wallet)
```
