---
title: "Unified signing intent (EIP-191, EIP-712, EIP-2718 types 0-4)"
method: POST
path: "/v1/agents/{agent_id}/sign"
tags: ["Signing"]
---

# Unified signing intent (EIP-191, EIP-712, EIP-2718 types 0-4)

`POST /v1/agents/{agent_id}/sign`

## Request

- Base URL: `https://api.1claw.co`
- URL: `https://api.1claw.co/v1/agents/{agent_id}/sign`
- Auth: HTTP bearer

## Path parameters

- `agent_id` string, uuid, required

## Request body

- SignIntentRequest
  - `intent_type` 'personal_sign' | 'typed_data' | 'eip712_digest' | 'transaction', required
  - `chain` string, required
  - `signing_key_path` string: Vault path to signing key. Auto-resolves per-chain signing key if provisioned, otherwise keys/{chain}-signer.
  - `message` string: Hex-encoded message bytes (for personal_sign)
  - `typed_data` object: EIP-712 typed data JSON (for typed_data)
  - `hash` string: Client-computed 32-byte digest (0x-prefixed) for the eip712_digest intent. Signed directly (blind signing); requires the agent's raw_signing_enabled flag. Use for ERC-1271/ERC-7739 nested EIP-712 flows (e.g. Polymarket) where the canonical hash is computed client-side.
  - `tx_type` integer: EIP-2718 type: 0=legacy, 1=2930, 2=1559, 3=4844, 4=7702
  - `to` string
  - `value` string
  - `data` string
  - `nonce` integer
  - `gas_limit` integer
  - `gas_price` string
  - `max_fee_per_gas` string
  - `max_priority_fee_per_gas` string
  - `access_list` object[]
  - `max_fee_per_blob_gas` string
  - `blob_versioned_hashes` string[]
  - `authorization_list` object[]
  - `sign_only` boolean: When true, sign only (do not broadcast). Non-EVM transaction intents only.
  - `destination_tag` integer: Non-EVM (XRP): destination tag for exchange deposits
  - `memo` string: Non-EVM (XRP, Solana): optional memo
  - `fee_rate_sat_per_vbyte` integer: Non-EVM (Bitcoin): override the fetched fee rate (sat/vByte)
  - `fee_limit_sun` integer: Non-EVM (Tron): TRC-20 energy fee limit in sun
  - `token_mint` string: Non-EVM (Solana SPL / Tron TRC-20): token mint or contract address; omit for native transfer
  - `token_decimals` integer: Non-EVM (Solana, Tron): token decimals (default 6)
  - `ttl` integer: Non-EVM (Cardano): transaction time-to-live (absolute slot)
  - `xrpl_tx_json` object: Raw XRPL transaction JSON for full transaction type coverage. When present (and chain is XRP), the handler uses the xrpl-rust binary codec to encode and sign the transaction as-is. Supports all XRPL transaction types: Payment, TrustSet, OfferCreate, OfferCancel, AccountSet, EscrowCreate, NFTokenMint, AMMCreate, and 20+ more. Account, Sequence, Fee, LastLedgerSequence, and SigningPubKey are auto-filled when absent.
  - `approval_id` string, uuid: Optional pending approval ID. When consensus policies match, clients resubmit with this field set to bypass the 202 gate after the approval has been executed.
  - `raw_transaction` string: Pre-built raw transaction as a base64-encoded byte string. When provided, the handler decodes and deep-inspects the transaction for policy evaluation before signing. Supported for non-EVM chains where the client constructs the transaction payload.
  - `tron_transaction` object: Pre-built Tron transaction JSON object. When provided, the handler signs the transaction as-is using the Tron protobuf format. Enables full Tron transaction type coverage beyond simple TRX/TRC-20 transfers.

## Response `200`

Signed result

- SignIntentResponse
  - `intent_type` string
  - `chain` string
  - `from` string
  - `signature` string, nullable
  - `signed_tx` string, nullable
  - `tx_hash` string, nullable
  - `message_hash` string, nullable
  - `typed_data_hash` string, nullable
  - `tx_type` integer, nullable

## Other responses

- `400`: Invalid request
- `403`: Insufficient permissions

---

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