---
title: "Relay a passkey-signed Safe transaction"
method: POST
path: "/v1/treasury/passkey-safes/{id}/execute"
tags: ["Key Custody"]
---

# Relay a passkey-signed Safe transaction

`POST /v1/treasury/passkey-safes/{id}/execute`

## Request

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

Recomputes the SafeTx hash, verifies the WebAuthn assertion locally
(this passkey, this hash, a dashboard origin, UV flag set), wraps it in
Safe's contract-signature format and relays `execTransaction` — deploying
the Safe first if needed — from your Ethereum treasury wallet, which pays
gas and is not an owner. Audited as `passkey_safe.executed`.

## Request body

- object
  - `to` string, required
  - `value_wei` string, required
  - `data` string
  - `nonce` integer, required
  - `operation` integer: 0 = call. 1 = delegatecall, accepted only with a `grant_id` whose prepared setup calldata this is, and only to the pinned MultiSendCallOnly — the API cannot delegatecall arbitrary code.
  - `grant_id` string, uuid: Pass back from a grant or revoke prepare; activates / revokes the grant on success.
  - `authenticator_data` string, required: Base64url.
  - `client_data_json` string, required: Base64url.
  - `signature` string, required: Base64url DER ECDSA signature.

## Response `200`

Relayed

- object
  - `safe_id` string, uuid
  - `safe_address` string
  - `chain` string
  - `safe_tx_hash` string
  - `deploy_tx_hash` string, nullable
  - `tx_hash` string
  - `status` string

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