---
title: "Prepare a native transfer from a 2-of-3 Safe"
method: POST
path: "/v1/treasury/multisig-safes/{safe_id}/prepare"
tags: ["Key Custody"]
---

# Prepare a native transfer from a 2-of-3 Safe

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

## Request

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

Runs the owner's send gates (wallet access, the sanctions screen on the
destination, spend policies, Cedar/OPA transaction policy and
`treasury_send` M-of-N consensus), then fixes a SafeTx: a native transfer (no calldata,
operation 0, positive value, not to the Safe itself) at the Safe's
current nonce (0 while undeployed). Returns its EIP-712 SafeTx hash (Safe
v1.4.1 domain: chainId and verifyingContract; gas fields zero). The
device recomputes the hash from the fields, confirms it pays exactly what
was asked, signs it with D after a passkey touch bound to it, and calls
`execute`. ERC-20 and contract calls are refused on this path.

## Request body

- object
  - `to` string, required: 0x EVM address.
  - `value_wei` string, required: Amount in wei, as a decimal string.
  - `approval_id` string, uuid: An approved `treasury_send` M-of-N consensus approval for this exact send (the `pending_approval_id` of an earlier 202).

## Response `200`

The prepared SafeTx

- MultisigSafePrepared
  - `id` string, uuid, required
  - `chain_id` integer, required
  - `safe_address` string, required
  - `to` string, required: Lowercase 0x destination.
  - `value_wei` string, required
  - `nonce` integer, required: The Safe nonce the SafeTx uses (0 while undeployed).
  - `safe_tx_hash` string, required: Hex EIP-712 SafeTx hash; what D signs and the passkey token binds.
  - `deployed` boolean, required

## Other responses

- `202`: The org's `treasury_send` consensus policy holds this send for M-of-N approval. Nothing is built. Once approved, call prepare again with the same transfer and `approval_id` set to `pending_approval_id`.
- `400`: Invalid request
- `401`: Authentication required or invalid
- `403`: Insufficient permissions
- `404`: Resource not found

## Changes

- **2026-10-20** `5fa0918f3b41`: 2 info
  - added the new optional request property `approval_id`
  - added the success response with the status `202`

[Operation history](https://skmtc.dev/1claw/apis/1claw-api/changes/v1/treasury/multisig-safes/:safe_id/prepare/post.md)

---

[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)
