---
title: "Co-sign and relay a prepared 2-of-3 Safe transfer"
method: POST
path: "/v1/treasury/multisig-safes/{safe_id}/execute"
tags: ["Key Custody"]
---

# Co-sign and relay a prepared 2-of-3 Safe transfer

`POST /v1/treasury/multisig-safes/{safe_id}/execute`

## Request

- Base URL: `https://api.1claw.co`
- URL: `https://api.1claw.co/v1/treasury/multisig-safes/{safe_id}/execute`
- Auth: HTTP bearer

`safe_tx_hash` must be a transfer this Safe prepared (and not yet
submitted) and `device_signature` D's signature over it. Needs
`X-Passkey-Token` from a passkey assertion bound to action `tss_sign` and
the SafeTx hash (lowercase hex, no 0x). The vault reads the destination,
amount and nonce from the prepared row, recomputes the hash, re-runs the
sanctions screen on the destination, checks D's signature and the
on-chain nonce, records the send in the spend ledger at its value (so it
counts toward daily caps), adds V's signature last, and relays:
the owner's server-custody Ethereum treasury wallet (not an owner) pays
gas, deploying the Safe through the pinned factory first if needed, then
submitting `execTransaction`. 400 when that wallet lacks gas on the
chain; 409 if the nonce moved or the transaction was already submitted.
Audited `multisig_safe.executed`; fires `wallet.transfer.sent`.

## Headers

- `X-Passkey-Token` string, required

## Request body

- object
  - `safe_tx_hash` string, required: Hex SafeTx hash from `prepare`.
  - `device_signature` string, required: Hex 65-byte recoverable ECDSA signature (r ‖ s ‖ v, low-S, v 0/1 or 27/28) by D over the SafeTx hash.

## Response `200`

Relayed

- MultisigSafeExecuteResponse
  - `chain` string, required
  - `safe_address` string, required
  - `to` string, required
  - `value_wei` string, required
  - `safe_tx_hash` string, required
  - `deploy_tx_hash` string, nullable: The factory deployment, when this send deployed the Safe.
  - `tx_hash` string, required: The relayed `execTransaction`.
  - `custody` 'client_multisig', required
  - `relayer` string, required: The gas payer (the owner's Ethereum treasury wallet).

## Other responses

- `400`: Invalid request
- `401`: Authentication required or invalid
- `403`: Insufficient permissions
- `404`: Resource not found
- `409`: Resource already exists or conflict

---

[API](https://skmtc.dev/1claw/apis/1claw-api.md) · [All operations](https://skmtc.dev/1claw/apis/1claw-api/llms.txt) · [OpenAPI document](https://skmtc.dev/1claw/apis/1claw-api/revisions/5fa0918f3b41?raw)
