> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mpcvault.com/llms.txt
> Use this file to discover all available pages before exploring further.

# SigningRequest object

> The fields, payloads and encodings of a signing request.

export const PayloadExplorer = ({mode = "rest"}) => {
  const PAYLOADS = [{
    "group": "Every response",
    "items": [{
      "field": "common",
      "protoField": "common",
      "number": 0,
      "title": "Common fields",
      "message": "SigningRequest",
      "note": "Present in every response, whatever the request is.",
      "rows": [{
        "path": "uuid",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "string<uuid>",
        "required": true,
        "description": "Unique identifier of the signing request. Lowercase hyphenated UUID string (8-4-4-4-12 hex digits).",
        "protoName": "uuid",
        "number": 1,
        "protoType": "string",
        "example": "\"bb6f129f-bbe3-4d95-9f33-c32812e3e1c4\""
      }, {
        "path": "status",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "enum<string>",
        "required": true,
        "description": "Status of the request. Enum name: `STATUS_PENDING`, `STATUS_SUCCEEDED` or `STATUS_FAILED`. `STATUS_SUCCEEDED` means the request completed: a transaction or message request was signed, and a vault creation or settings request reached its approval quorum. It does not mean that anything was broadcast or confirmed on-chain.",
        "protoName": "status",
        "number": 2,
        "protoType": "SigningRequest.Status",
        "enum": ["STATUS_UNSPECIFIED", "STATUS_PENDING", "STATUS_SUCCEEDED", "STATUS_FAILED"]
      }, {
        "path": "failedReason",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "string",
        "required": false,
        "description": "Why the request failed, as free-form English text (for example `Denied the request`); unvalidated and not localized. Set only when `status` is `STATUS_FAILED`; empty string otherwise, including for errors recorded while `status` is `STATUS_PENDING`.",
        "protoName": "failed_reason",
        "number": 3,
        "protoType": "string",
        "example": "\"failed reason\""
      }, {
        "path": "txHash",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Hash of the first signed transaction; empty until signed and for messages, raw messages, wallet creation and governance requests. EVM: `0x` + 64 lowercase hex; Aptos: same, but all zeros for fee-payer and multi-agent transactions; BTC and Stellar: 64 lowercase hex, no `0x`; TRON: 64 hex, no `0x`; TON: 64 lowercase hex hash of the signed external message (not the on-chain hash); Sui: base58 digest; Solana: base58 first signature.",
        "protoName": "tx_hash",
        "number": 4,
        "protoType": "string",
        "example": "\"3Eq21vXNB5s86c62bVuUfTerseghjkuUqRPBmGRJhyTA\""
      }, {
        "path": "creationTimestamp",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": false,
        "description": "Time the request was created, as Unix epoch milliseconds (UTC), not seconds. Returned as a decimal string, for example `\"1759400060000\"`.",
        "protoName": "creation_timestamp",
        "number": 5,
        "protoType": "uint64",
        "example": "\"1744274467154\""
      }, {
        "path": "notes",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "string | null",
        "required": false,
        "description": "Free-text note on the request. UTF-8, returned unchanged. Returned only for send, custom-transaction, raw-message and dApp transaction requests (for a dApp transaction, the note the signer added in the app), and `null` when empty or for any other kind (a `notes` value supplied when creating a message-signing request is ignored).",
        "protoName": "notes",
        "number": 999,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "vaultUuid",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "string<uuid> | null",
        "required": true,
        "description": "UUID of the vault the request was created in. Hyphenated UUID string. `null` when the request has no vault.",
        "protoName": "vault_uuid",
        "number": 1000,
        "protoType": "google.protobuf.StringValue",
        "example": "\"9f5ee5fb-07f5-470c-a2ff-081e2d6d107a\""
      }, {
        "path": "callbackClientSignerPublicKey",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "string | null",
        "required": false,
        "description": "Public key of the API client signer that receives the callback. OpenSSH `authorized_keys` text of an `ssh-ed25519` key, exactly as the API caller sent it (comment and whitespace included). `null` for requests without a callback key, including app-created and dApp requests.",
        "protoName": "callback_client_signer_public_key",
        "number": 1001,
        "protoType": "google.protobuf.StringValue",
        "example": "\"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmdWUo3e3/xUd0kbXCz4omzhqcYaPPYNTZ6ndqZdBAo test\""
      }, {
        "path": "simulation",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "string<byte>",
        "required": false,
        "description": "Simulation result of the transaction, provided for reference only: run your own simulation before you rely on it. `bytes`: base64 (standard, padded) in JSON. The decoded bytes are UTF-8 JSON text in a network-specific form (the provider's response, an MPCVault summary of it, or a synthetic result) that MPCVault does not define or version; see [Simulation](/api-reference/signing-request#simulation). Set only for custom transactions (EVM, Aptos, Sui, Solana, TON) and dApp transactions that are returned with a payload (EVM, Solana, Sui, Aptos, TON, Stellar); `\"\"` otherwise.",
        "protoName": "simulation",
        "number": 1002,
        "protoType": "bytes"
      }, {
        "path": "evmInputDataDecode",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Best-effort decode of the call's `input`, computed by MPCVault from the target contract's explorer-verified ABI by 4-byte selector, not supplied by the dApp or caller and not re-checked against `input`. `null` when unavailable (non-EVM, unverified contract, no calldata, or a dApp request whose decode has not finished).",
        "protoName": "evm_input_data_decode",
        "number": 1003,
        "protoType": "EVMInputDataDecode"
      }, {
        "path": "function",
        "prefix": "signingRequest.evmInputDataDecode.",
        "protoPrefix": "signing_request.evm_input_data_decode.",
        "depth": 1,
        "type": "string",
        "required": true,
        "description": "Method that was decoded, as its full canonical Solidity signature, for example `transfer(address,uint256)` (no spaces or parameter names), not just the function name.",
        "protoName": "function",
        "number": 1,
        "protoType": "string",
        "example": "\"function_name(arg1_type arg1_value, arg2_type arg2_value, ...)\""
      }, {
        "path": "args",
        "prefix": "signingRequest.evmInputDataDecode.",
        "protoPrefix": "signing_request.evm_input_data_decode.",
        "depth": 1,
        "type": "object[]",
        "required": true,
        "description": "Decoded call arguments. A scalar parameter is one entry. A tuple parameter is flattened to one entry per member, named `parameter.field`; an array of tuples is flattened to one entry per element and member, named `index parameter.field` (for example `0 orders.amount`) when the array has more than one element; a nested tuple can remain a single `tuple` entry. The number of entries can therefore differ from the number of ABI parameters. Empty array for a method without parameters.",
        "protoName": "args",
        "number": 2,
        "protoType": "repeated EVMInputDataDecode.Argument"
      }, {
        "path": "name",
        "prefix": "signingRequest.evmInputDataDecode.args.",
        "protoPrefix": "signing_request.evm_input_data_decode.args.",
        "depth": 2,
        "type": "string",
        "required": false,
        "description": "ABI parameter name, empty string for an unnamed parameter; a tuple member is named `parameter.field`.",
        "protoName": "name",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "type",
        "prefix": "signingRequest.evmInputDataDecode.args.",
        "protoPrefix": "signing_request.evm_input_data_decode.args.",
        "depth": 2,
        "type": "string",
        "required": false,
        "description": "ABI type of the argument as a string, for example `address`, `uint256`, `bytes32`, `address[]` or `tuple`.",
        "protoName": "type",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "data",
        "prefix": "signingRequest.evmInputDataDecode.args.",
        "protoPrefix": "signing_request.evm_input_data_decode.args.",
        "depth": 2,
        "type": "string",
        "required": false,
        "description": "Argument value as a string, by type: `address` as an EIP-55 checksummed `0x` address, `uintN` and `intN` as base-10 integers, `bool` as `true` or `false`, `string` as-is, `bytes` and `bytesN` as `0x` lowercase hex. Arrays and tuples are decoder-formatted text without a stable grammar: decode `input` yourself when you need them.",
        "protoName": "data",
        "number": 3,
        "protoType": "string"
      }, {
        "path": "signatures",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Signatures in signing order, once signed; `null` when none exist (for example unsigned, failed or denied requests). ECDSA networks (EVM, TRON, Bitcoin) return `ecdsaSignature` with base-10 `R`, `S`, `V`; EdDSA networks (Aptos, Sui, Solana, TON, Stellar) return `eddsaSignature`, base64 of the raw 64-byte signature.",
        "protoName": "signatures",
        "number": 1004,
        "protoType": "SignatureContainer"
      }, {
        "path": "signatures",
        "prefix": "signingRequest.signatures.",
        "protoPrefix": "signing_request.signatures.",
        "depth": 1,
        "type": "object[]",
        "required": false,
        "description": "Signatures in signing order, one per signed item (Bitcoin: one per input; Solana multi-transaction requests: one per transaction). Each entry holds either `ecdsaSignature` or `eddsaSignature`.",
        "protoName": "signatures",
        "number": 1,
        "protoType": "repeated SignatureContainer.SignResponse"
      }, {
        "path": "ecdsaSignature",
        "prefix": "signingRequest.signatures.signatures.",
        "protoPrefix": "signing_request.signatures.signatures.",
        "depth": 2,
        "type": "object",
        "required": false,
        "description": "ECDSA signature, for EVM, TRON and Bitcoin wallets. `R`, `S` and `V` are base-10 integer strings.",
        "protoName": "ecdsa_signature",
        "number": 1,
        "protoType": "SignatureContainer.ECDSASignature"
      }, {
        "path": "R",
        "prefix": "signingRequest.signatures.signatures.ecdsaSignature.",
        "protoPrefix": "signing_request.signatures.signatures.ecdsa_signature.",
        "depth": 3,
        "type": "string",
        "required": false,
        "description": "The `r` value of the ECDSA signature. Base-10 integer string (not hex), without `0x` or padding, up to 78 digits.",
        "protoName": "R",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "S",
        "prefix": "signingRequest.signatures.signatures.ecdsaSignature.",
        "protoPrefix": "signing_request.signatures.signatures.ecdsa_signature.",
        "depth": 3,
        "type": "string",
        "required": false,
        "description": "The `s` value of the ECDSA signature. Base-10 integer string (not hex), without `0x` or padding, up to 78 digits.",
        "protoName": "S",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "V",
        "prefix": "signingRequest.signatures.signatures.ecdsaSignature.",
        "protoPrefix": "signing_request.signatures.signatures.ecdsa_signature.",
        "depth": 3,
        "type": "string",
        "required": false,
        "description": "Recovery value. Base-10 integer string: `\"0\"` or `\"1\"` (recovery ID), except `\"27\"` or `\"28\"` for EVM message signatures approved in the MPCVault app. Carried but unused for Bitcoin.",
        "protoName": "V",
        "number": 3,
        "protoType": "string"
      }, {
        "path": "eddsaSignature",
        "prefix": "signingRequest.signatures.signatures.",
        "protoPrefix": "signing_request.signatures.signatures.",
        "depth": 2,
        "type": "string<byte>",
        "required": false,
        "description": "Ed25519 signature, for Aptos, Sui, Solana, TON and Stellar wallets: the raw 64-byte signature `R || S`. Bytes, base64 (standard, padded, 88 characters) in JSON.",
        "protoName": "eddsa_signature",
        "number": 2,
        "protoType": "bytes",
        "example": "\"AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+Pw==\""
      }, {
        "path": "source",
        "prefix": "signingRequest.",
        "protoPrefix": "signing_request.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Where an inbound dApp request came from. Set only for WalletConnect, plugin and MMI requests; `null` for requests created through the API or the MPCVault app and for governance requests.",
        "protoName": "source",
        "number": 1005,
        "protoType": "RequestSource"
      }, {
        "path": "type",
        "prefix": "signingRequest.source.",
        "protoPrefix": "signing_request.source.",
        "depth": 1,
        "type": "enum<string>",
        "required": false,
        "description": "Intake channel through which the request arrived. Enum name: `TYPE_WALLET_CONNECT`, `TYPE_PLUGIN` or `TYPE_MMI`. Assigned by MPCVault from how the request was received, so the dApp cannot choose it; it identifies the channel only, not which dApp or person is behind the request, so do not use it to approve a request on its own.",
        "protoName": "type",
        "number": 1,
        "protoType": "RequestSource.Type",
        "enum": ["TYPE_UNSPECIFIED", "TYPE_WALLET_CONNECT", "TYPE_PLUGIN", "TYPE_MMI"]
      }, {
        "path": "website",
        "prefix": "signingRequest.source.",
        "protoPrefix": "signing_request.source.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Website the dApp claimed for itself; unverified, treat it as untrusted input. UTF-8 text passed through as the dApp, plugin or custodian reported it, not validated or normalized, so it may or may not include a scheme such as `https://`. `null` when none was reported.",
        "protoName": "website",
        "number": 2,
        "protoType": "google.protobuf.StringValue",
        "example": "\"app.uniswap.org\""
      }]
    }]
  }, {
    "group": "EVM",
    "items": [{
      "field": "evmMessage",
      "protoField": "evm_message",
      "number": 22,
      "title": "Sign message or typed data",
      "message": "EVMMessage",
      "note": "Only `personal_sign` and typed-data messages carry a payload; `eth_sign` requests are returned without one.",
      "rows": [{
        "path": "chainId",
        "prefix": "signingRequest.evmMessage.",
        "protoPrefix": "signing_request.evm_message.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": true,
        "description": "Chain ID of the EVM network, for example `1` or `137`. Returned as a decimal string. Required on create: it selects the network, and an ID that matches no network is rejected (an omitted value reads as `0`).",
        "protoName": "chain_id",
        "number": 1,
        "protoType": "uint64",
        "example": "\"137\""
      }, {
        "path": "from",
        "prefix": "signingRequest.evmMessage.",
        "protoPrefix": "signing_request.evm_message.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Signer wallet address in the vault. `0x`-prefixed EVM address, returned exactly as supplied by whoever created the request (API caller, dApp or custodian); never checksummed.",
        "protoName": "from",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "type",
        "prefix": "signingRequest.evmMessage.",
        "protoPrefix": "signing_request.evm_message.",
        "depth": 0,
        "type": "enum<string>",
        "required": true,
        "description": "Kind of EVM message. Enum name: `TYPE_PERSONAL_SIGN` (`personal_sign`, EIP-191) or `TYPE_SIGN_TYPED_DATA` (EIP-712). On create `TYPE_UNSPECIFIED` is rejected.",
        "protoName": "type",
        "number": 3,
        "protoType": "EVMMessage.Type",
        "enum": ["TYPE_UNSPECIFIED", "TYPE_PERSONAL_SIGN", "TYPE_SIGN_TYPED_DATA"]
      }, {
        "path": "content",
        "prefix": "signingRequest.evmMessage.",
        "protoPrefix": "signing_request.evm_message.",
        "depth": 0,
        "type": "string<byte>",
        "required": true,
        "description": "Message to sign. Bytes, base64 (standard, padded) in JSON. `TYPE_PERSONAL_SIGN`: the raw message bytes, before the EIP-191 prefix is applied. `TYPE_SIGN_TYPED_DATA`: the UTF-8 text of the EIP-712 typed-data JSON, exactly as supplied. Required on create (empty is rejected). For `TYPE_SIGN_TYPED_DATA` the text must parse as EIP-712 typed-data JSON, otherwise the request is rejected.",
        "protoName": "content",
        "number": 4,
        "protoType": "bytes"
      }]
    }, {
      "field": "evmSendCustom",
      "protoField": "evm_send_custom",
      "number": 8,
      "title": "Custom transaction (contract call)",
      "message": "EVMSendCustom",
      "note": "Also carries dApp transactions; some field encodings differ by origin. A dApp transaction that cannot be mapped is returned without a payload.",
      "rows": [{
        "path": "chainId",
        "prefix": "signingRequest.evmSendCustom.",
        "protoPrefix": "signing_request.evm_send_custom.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": true,
        "description": "Chain ID of the EVM network, for example `1` or `137`. Returned as a decimal string. Required on create: it selects the network, and an ID that matches no supported system network and no custom network of the vault that owns the `from` wallet is rejected (an omitted value reads as `0`).",
        "protoName": "chain_id",
        "number": 1,
        "protoType": "uint64",
        "example": "\"1\""
      }, {
        "path": "from",
        "prefix": "signingRequest.evmSendCustom.",
        "protoPrefix": "signing_request.evm_send_custom.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. `0x`-prefixed 40-hex-digit address. API and app requests return it exactly as supplied when the request was created (not normalized); dApp requests return it EIP-55 checksummed.",
        "protoName": "from",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.evmSendCustom.",
        "protoPrefix": "signing_request.evm_send_custom.",
        "depth": 0,
        "type": "string",
        "required": false,
        "description": "Recipient or contract address; empty string for contract creation. 40 hex digits with an optional `0x` prefix. API and app requests return it exactly as supplied when the request was created (not normalized); dApp requests return it EIP-55 checksummed.",
        "protoName": "to",
        "number": 3,
        "protoType": "string"
      }, {
        "path": "value",
        "prefix": "signingRequest.evmSendCustom.",
        "protoPrefix": "signing_request.evm_send_custom.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of the native coin to send with the call. Decimal string in wei; `\"0\"` when none. Required on create: send `\"0\"` for a call that carries no value; an omitted or empty value is rejected. On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "value",
        "number": 4,
        "protoType": "string",
        "example": "\"1000000000000000\""
      }, {
        "path": "input",
        "prefix": "signingRequest.evmSendCustom.",
        "protoPrefix": "signing_request.evm_send_custom.",
        "depth": 0,
        "type": "string<byte>",
        "required": false,
        "description": "Calldata of the transaction. Bytes, base64 (standard, padded) in JSON, byte-identical to what was submitted (dApp requests: the dApp's `0x` hex data, decoded). Empty string when there is no calldata. On create at most 98,224 bytes (its `0x` hex encoding is limited to 196,450 characters); may be empty.",
        "protoName": "input",
        "number": 5,
        "protoType": "bytes",
        "example": "\"qQWcuwAAAAAAAAAAAAAAAFqutgU/PpTJuaCfM2aUNefvG+rtAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYloA=\""
      }, {
        "path": "gasFee",
        "prefix": "signingRequest.evmSendCustom.",
        "protoPrefix": "signing_request.evm_send_custom.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Gas settings; see `EVMGas` (fees in wei per gas, gas limit in gas units). Creating a request for a custom EVM network requires `maxFee` and `gasLimit`. dApp requests carry the fee a signer set in the MPCVault app plus the gas limit (from the dApp or MPCVault's estimate); the dApp's own fee fields are not returned. `null` when none is set.",
        "protoName": "gas_fee",
        "number": 6,
        "protoType": "EVMGas"
      }, {
        "path": "maxFee",
        "prefix": "signingRequest.evmSendCustom.gasFee.",
        "protoPrefix": "signing_request.evm_send_custom.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum price per gas the sender will pay: the fee cap (`maxFeePerGas`) on EIP-1559 networks, the gas price elsewhere. Decimal string in wei per gas. `null` when not set. On create: a non-negative integer string, digits only. On a network with priority fees, `maxFee` must be greater than the stored `maxPriorityFee` when that is above zero, including the Polygon default (`\"30000000000\"`) when `maxPriorityFee` is omitted.",
        "protoName": "max_fee",
        "number": 1,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "maxPriorityFee",
        "prefix": "signingRequest.evmSendCustom.gasFee.",
        "protoPrefix": "signing_request.evm_send_custom.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum priority fee per gas (the tip) for EIP-1559 transactions. Decimal string in wei per gas. When `maxFee` is supplied without it on an EIP-1559 network, a default is stored and returned (`\"0\"`; `\"30000000000\"` on Polygon). `null` on networks without priority fees. On create: a non-negative integer string, digits only; ignored unless `maxFee` is also supplied, and on networks without priority fees.",
        "protoName": "max_priority_fee",
        "number": 2,
        "protoType": "google.protobuf.StringValue",
        "example": "\"1500000000\""
      }, {
        "path": "gasLimit",
        "prefix": "signingRequest.evmSendCustom.gasFee.",
        "protoPrefix": "signing_request.evm_send_custom.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum gas the transaction may consume. Decimal integer string in gas units. When only `maxFee` is supplied on create, MPCVault's default gas limit is stored and returned. `null` when not set. On create: a positive integer string that fits in 64 bits (`0` is rejected).",
        "protoName": "gas_limit",
        "number": 3,
        "protoType": "google.protobuf.StringValue",
        "example": "\"30000000000\""
      }, {
        "path": "nonce",
        "prefix": "signingRequest.evmSendCustom.",
        "protoPrefix": "signing_request.evm_send_custom.",
        "depth": 0,
        "type": "integer<int64> | string<int64> | null",
        "required": false,
        "description": "Transaction nonce, as a decimal string; the sender's next nonce is used when omitted, except that a request for a custom EVM network that an API client signer signs must supply it. Always `null` for API and app requests; dApp requests return the nonce converted to decimal (or one a signer set), `null` if none or not numeric.",
        "protoName": "nonce",
        "number": 7,
        "protoType": "google.protobuf.Int64Value",
        "example": "\"1\""
      }]
    }, {
      "field": "evmSendErc20",
      "protoField": "evm_send_erc20",
      "number": 7,
      "title": "Send ERC-20 token",
      "message": "EVMSendERC20",
      "note": "",
      "rows": [{
        "path": "chainId",
        "prefix": "signingRequest.evmSendErc20.",
        "protoPrefix": "signing_request.evm_send_erc20.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": true,
        "description": "Chain ID of the EVM network, for example `1` or `137`. Returned as a decimal string. Required on create: it selects the network, and an ID that matches no supported system network and no custom network of the vault that owns the `from` wallet is rejected (an omitted value reads as `0`).",
        "protoName": "chain_id",
        "number": 1,
        "protoType": "uint64",
        "example": "\"137\""
      }, {
        "path": "from",
        "prefix": "signingRequest.evmSendErc20.",
        "protoPrefix": "signing_request.evm_send_erc20.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. `0x`-prefixed 40-hex-digit address, returned exactly as supplied when the request was created (not normalized to EIP-55).",
        "protoName": "from",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.evmSendErc20.",
        "protoPrefix": "signing_request.evm_send_erc20.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. 40 hex digits with an optional `0x` prefix, in any letter case; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "to",
        "number": 3,
        "protoType": "string"
      }, {
        "path": "tokenContractAddress",
        "prefix": "signingRequest.evmSendErc20.",
        "protoPrefix": "signing_request.evm_send_erc20.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "ERC-20 token contract address. 40 hex digits with an optional `0x` prefix, in any letter case; returned exactly as supplied when the request was created (not normalized). On create the contract must resolve to a known token on the network, and the token must not be marked as spam in the vault.",
        "protoName": "token_contract_address",
        "number": 4,
        "protoType": "string"
      }, {
        "path": "amount",
        "prefix": "signingRequest.evmSendErc20.",
        "protoPrefix": "signing_request.evm_send_erc20.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of tokens to send. Decimal string in the token's smallest unit (amount x 10^decimals, using the decimals of the token contract). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "amount",
        "number": 5,
        "protoType": "string",
        "example": "\"1000000000000000\""
      }, {
        "path": "gasFee",
        "prefix": "signingRequest.evmSendErc20.",
        "protoPrefix": "signing_request.evm_send_erc20.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Custom gas settings; see `EVMGas` (fees in wei per gas, gas limit in gas units). Creating a request for a custom EVM network requires `maxFee` and `gasLimit`. `null` when no custom fee was set.",
        "protoName": "gas_fee",
        "number": 6,
        "protoType": "EVMGas"
      }, {
        "path": "maxFee",
        "prefix": "signingRequest.evmSendErc20.gasFee.",
        "protoPrefix": "signing_request.evm_send_erc20.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum price per gas the sender will pay: the fee cap (`maxFeePerGas`) on EIP-1559 networks, the gas price elsewhere. Decimal string in wei per gas. `null` when not set. On create: a non-negative integer string, digits only. On a network with priority fees, `maxFee` must be greater than the stored `maxPriorityFee` when that is above zero, including the Polygon default (`\"30000000000\"`) when `maxPriorityFee` is omitted.",
        "protoName": "max_fee",
        "number": 1,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "maxPriorityFee",
        "prefix": "signingRequest.evmSendErc20.gasFee.",
        "protoPrefix": "signing_request.evm_send_erc20.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum priority fee per gas (the tip) for EIP-1559 transactions. Decimal string in wei per gas. When `maxFee` is supplied without it on an EIP-1559 network, a default is stored and returned (`\"0\"`; `\"30000000000\"` on Polygon). `null` on networks without priority fees. On create: a non-negative integer string, digits only; ignored unless `maxFee` is also supplied, and on networks without priority fees.",
        "protoName": "max_priority_fee",
        "number": 2,
        "protoType": "google.protobuf.StringValue",
        "example": "\"1500000000\""
      }, {
        "path": "gasLimit",
        "prefix": "signingRequest.evmSendErc20.gasFee.",
        "protoPrefix": "signing_request.evm_send_erc20.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum gas the transaction may consume. Decimal integer string in gas units. When only `maxFee` is supplied on create, MPCVault's default gas limit is stored and returned. `null` when not set. On create: a positive integer string that fits in 64 bits (`0` is rejected).",
        "protoName": "gas_limit",
        "number": 3,
        "protoType": "google.protobuf.StringValue",
        "example": "\"30000000000\""
      }, {
        "path": "nonce",
        "prefix": "signingRequest.evmSendErc20.",
        "protoPrefix": "signing_request.evm_send_erc20.",
        "depth": 0,
        "type": "integer<int64> | string<int64> | null",
        "required": false,
        "description": "Transaction nonce; the sender's next nonce is used when omitted, except that a request for a custom EVM network that an API client signer signs must supply it. Decimal string. Always `null` in responses for requests created through the API or the MPCVault app.",
        "protoName": "nonce",
        "number": 7,
        "protoType": "google.protobuf.Int64Value",
        "example": "\"1\""
      }]
    }, {
      "field": "evmSendNative",
      "protoField": "evm_send_native",
      "number": 6,
      "title": "Send native coin",
      "message": "EVMSendNative",
      "note": "",
      "rows": [{
        "path": "chainId",
        "prefix": "signingRequest.evmSendNative.",
        "protoPrefix": "signing_request.evm_send_native.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": true,
        "description": "Chain ID of the EVM network, for example `1` or `137`. Returned as a decimal string. Required on create: it selects the network, and an ID that matches no supported system network and no custom network of the vault that owns the `from` wallet is rejected (an omitted value reads as `0`).",
        "protoName": "chain_id",
        "number": 1,
        "protoType": "uint64",
        "example": "\"137\""
      }, {
        "path": "from",
        "prefix": "signingRequest.evmSendNative.",
        "protoPrefix": "signing_request.evm_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. `0x`-prefixed 40-hex-digit address, returned exactly as supplied when the request was created (not normalized to EIP-55).",
        "protoName": "from",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.evmSendNative.",
        "protoPrefix": "signing_request.evm_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. 40 hex digits with an optional `0x` prefix, in any letter case; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "to",
        "number": 3,
        "protoType": "string"
      }, {
        "path": "value",
        "prefix": "signingRequest.evmSendNative.",
        "protoPrefix": "signing_request.evm_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of the native coin to send. Decimal string in wei (the network's smallest unit, 18 decimals on standard EVM chains). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "value",
        "number": 4,
        "protoType": "string",
        "example": "\"1000000000000000\""
      }, {
        "path": "gasFee",
        "prefix": "signingRequest.evmSendNative.",
        "protoPrefix": "signing_request.evm_send_native.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Custom gas settings; see `EVMGas` (fees in wei per gas, gas limit in gas units). Creating a request for a custom EVM network requires `maxFee` and `gasLimit`. `null` when no custom fee was set.",
        "protoName": "gas_fee",
        "number": 5,
        "protoType": "EVMGas"
      }, {
        "path": "maxFee",
        "prefix": "signingRequest.evmSendNative.gasFee.",
        "protoPrefix": "signing_request.evm_send_native.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum price per gas the sender will pay: the fee cap (`maxFeePerGas`) on EIP-1559 networks, the gas price elsewhere. Decimal string in wei per gas. `null` when not set. On create: a non-negative integer string, digits only. On a network with priority fees, `maxFee` must be greater than the stored `maxPriorityFee` when that is above zero, including the Polygon default (`\"30000000000\"`) when `maxPriorityFee` is omitted.",
        "protoName": "max_fee",
        "number": 1,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "maxPriorityFee",
        "prefix": "signingRequest.evmSendNative.gasFee.",
        "protoPrefix": "signing_request.evm_send_native.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum priority fee per gas (the tip) for EIP-1559 transactions. Decimal string in wei per gas. When `maxFee` is supplied without it on an EIP-1559 network, a default is stored and returned (`\"0\"`; `\"30000000000\"` on Polygon). `null` on networks without priority fees. On create: a non-negative integer string, digits only; ignored unless `maxFee` is also supplied, and on networks without priority fees.",
        "protoName": "max_priority_fee",
        "number": 2,
        "protoType": "google.protobuf.StringValue",
        "example": "\"1500000000\""
      }, {
        "path": "gasLimit",
        "prefix": "signingRequest.evmSendNative.gasFee.",
        "protoPrefix": "signing_request.evm_send_native.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum gas the transaction may consume. Decimal integer string in gas units. When only `maxFee` is supplied on create, MPCVault's default gas limit is stored and returned. `null` when not set. On create: a positive integer string that fits in 64 bits (`0` is rejected).",
        "protoName": "gas_limit",
        "number": 3,
        "protoType": "google.protobuf.StringValue",
        "example": "\"30000000000\""
      }, {
        "path": "nonce",
        "prefix": "signingRequest.evmSendNative.",
        "protoPrefix": "signing_request.evm_send_native.",
        "depth": 0,
        "type": "integer<int64> | string<int64> | null",
        "required": false,
        "description": "Transaction nonce; the sender's next nonce is used when omitted, except that a request for a custom EVM network that an API client signer signs must supply it. Decimal string. Always `null` in responses for requests created through the API or the MPCVault app.",
        "protoName": "nonce",
        "number": 6,
        "protoType": "google.protobuf.Int64Value",
        "example": "\"1\""
      }]
    }]
  }, {
    "group": "TRON",
    "items": [{
      "field": "tronSendNative",
      "protoField": "tron_send_native",
      "number": 10,
      "title": "Send TRX",
      "message": "TronSendNative",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.tronSendNative.",
        "protoPrefix": "signing_request.tron_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Tron address in base58check form, starting with `T`; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.tronSendNative.",
        "protoPrefix": "signing_request.tron_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Tron address in base58check form, starting with `T`; returned exactly as supplied when the request was created (not normalized). On create `from` and `to` must differ (compared case-insensitively).",
        "protoName": "to",
        "number": 2,
        "protoType": "string",
        "example": "\"TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7\""
      }, {
        "path": "value",
        "prefix": "signingRequest.tronSendNative.",
        "protoPrefix": "signing_request.tron_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of TRX to send. Decimal string in sun (10^-6 TRX). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "value",
        "number": 3,
        "protoType": "string",
        "example": "\"1000000000000000\""
      }]
    }, {
      "field": "tronSendTrc10",
      "protoField": "tron_send_trc10",
      "number": 11,
      "title": "Send TRC-10 token",
      "message": "TronSendTRC10",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.tronSendTrc10.",
        "protoPrefix": "signing_request.tron_send_trc10.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Tron address in base58check form, starting with `T`; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.tronSendTrc10.",
        "protoPrefix": "signing_request.tron_send_trc10.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Tron address in base58check form, starting with `T`; returned exactly as supplied when the request was created (not normalized). On create `from` and `to` must differ (compared case-insensitively).",
        "protoName": "to",
        "number": 2,
        "protoType": "string",
        "example": "\"TLa2f6VPqDgRE67v1736s7bJ8Ray5wYjU7\""
      }, {
        "path": "assetName",
        "prefix": "signingRequest.tronSendTrc10.",
        "protoPrefix": "signing_request.tron_send_trc10.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Identifier of the TRC-10 token to send: the numeric asset ID as a digit string (not a ticker or name), returned as supplied.",
        "protoName": "asset_name",
        "number": 3,
        "protoType": "string",
        "example": "\"ETH\""
      }, {
        "path": "amount",
        "prefix": "signingRequest.tronSendTrc10.",
        "protoPrefix": "signing_request.tron_send_trc10.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of tokens to send. Decimal string in the token's smallest unit (amount x 10^decimals, using the decimals of the TRC-10 token). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "amount",
        "number": 4,
        "protoType": "string"
      }]
    }, {
      "field": "tronSendTrc20",
      "protoField": "tron_send_trc20",
      "number": 12,
      "title": "Send TRC-20 token",
      "message": "TronSendTRC20",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.tronSendTrc20.",
        "protoPrefix": "signing_request.tron_send_trc20.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Tron address in base58check form, starting with `T`; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.tronSendTrc20.",
        "protoPrefix": "signing_request.tron_send_trc20.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Tron address in base58check form, starting with `T`; returned exactly as supplied when the request was created (not normalized). On create `from` and `to` must differ (compared case-insensitively).",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "contractAddress",
        "prefix": "signingRequest.tronSendTrc20.",
        "protoPrefix": "signing_request.tron_send_trc20.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "TRC-20 token contract address. Tron address in base58check form, starting with `T`; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "contract_address",
        "number": 3,
        "protoType": "string",
        "example": "\"TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t\""
      }, {
        "path": "amount",
        "prefix": "signingRequest.tronSendTrc20.",
        "protoPrefix": "signing_request.tron_send_trc20.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of tokens to send. Decimal string in the token's smallest unit (amount x 10^decimals, using the decimals of the token). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "amount",
        "number": 4,
        "protoType": "string"
      }, {
        "path": "feeLimit",
        "prefix": "signingRequest.tronSendTrc20.",
        "protoPrefix": "signing_request.tron_send_trc20.",
        "depth": 0,
        "type": "string | null",
        "required": false,
        "description": "Maximum fee the sender is willing to pay. Decimal string in sun. `null` when not set. On create: a positive integer string that fits in 64 bits (`0` is rejected).",
        "protoName": "fee_limit",
        "number": 5,
        "protoType": "google.protobuf.StringValue"
      }]
    }]
  }, {
    "group": "Bitcoin",
    "items": [{
      "field": "btcSendNative",
      "protoField": "btc_send_native",
      "number": 9,
      "title": "Send BTC",
      "message": "BTCSendNative",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.btcSendNative.",
        "protoPrefix": "signing_request.btc_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Bitcoin mainnet address (base58check `1...` or `3...`, or bech32 `bc1...`), returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.btcSendNative.",
        "protoPrefix": "signing_request.btc_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Bitcoin mainnet address (base58check `1...` or `3...`, or bech32 `bc1...`), returned exactly as supplied when the request was created (not normalized).",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "amount",
        "prefix": "signingRequest.btcSendNative.",
        "protoPrefix": "signing_request.btc_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of BTC to send. Decimal string in satoshi (10^-8 BTC). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "amount",
        "number": 3,
        "protoType": "string",
        "example": "\"1000000000000000\""
      }, {
        "path": "networkFee",
        "prefix": "signingRequest.btcSendNative.",
        "protoPrefix": "signing_request.btc_send_native.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": false,
        "description": "Fee rate the sender is willing to pay, as an integer number of satoshi per virtual byte (sat/vB). Returned as a decimal string; `\"0\"` when no rate was set. On create, omit it or send `0` to use MPCVault's default fee rate.",
        "protoName": "network_fee",
        "number": 4,
        "protoType": "uint64",
        "example": "\"1\""
      }]
    }]
  }, {
    "group": "Solana",
    "items": [{
      "field": "solanaMessage",
      "protoField": "solana_message",
      "number": 24,
      "title": "Sign message",
      "message": "SolanaMessage",
      "note": "Created through the API or a plugin; WalletConnect and MMI carry EVM messages only.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.solanaMessage.",
        "protoPrefix": "signing_request.solana_message.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Signer wallet address in the vault. Base58-encoded 32-byte Solana public key; API requests return it as supplied, plugin requests return the wallet's address.",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "type",
        "prefix": "signingRequest.solanaMessage.",
        "protoPrefix": "signing_request.solana_message.",
        "depth": 0,
        "type": "enum<string>",
        "required": true,
        "description": "Kind of message. Enum name; always `TYPE_DEFAULT` in responses.",
        "protoName": "type",
        "number": 2,
        "protoType": "SolanaMessage.Type",
        "enum": ["TYPE_UNSPECIFIED", "TYPE_DEFAULT"]
      }, {
        "path": "content",
        "prefix": "signingRequest.solanaMessage.",
        "protoPrefix": "signing_request.solana_message.",
        "depth": 0,
        "type": "string<byte>",
        "required": true,
        "description": "Message to sign. Bytes, base64 (standard, padded) in JSON, returned exactly as submitted; must be printable ASCII or valid UTF-8.",
        "protoName": "content",
        "number": 3,
        "protoType": "bytes"
      }]
    }, {
      "field": "solanaSendCustom",
      "protoField": "solana_send_custom",
      "number": 31,
      "title": "Custom transaction",
      "message": "SolanaSendCustom",
      "note": "Also carries dApp transactions: one transaction, or one per transaction of a sign-all request.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.solanaSendCustom.",
        "protoPrefix": "signing_request.solana_send_custom.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "txBase64",
        "prefix": "signingRequest.solanaSendCustom.",
        "protoPrefix": "signing_request.solana_send_custom.",
        "depth": 0,
        "type": "string[]",
        "required": true,
        "description": "Serialized Solana transactions to sign (`v0` or unversioned format), each as standard base64 (padded): 1 to 5 for a request created through the API; for a dApp request one transaction, or one element per transaction of a sign-all request. Returned as stored, not re-signed and with the blockhash not refreshed: when MPCVault signs a transaction that carries no signature it replaces the recent blockhash, so the signed transaction can differ from the returned one. Whitespace is trimmed on create. On create the `from` wallet must be a signer of every transaction, and every other signer's signature must already be present (a transaction with an empty signature slot for another signer is rejected).",
        "protoName": "tx_base64",
        "number": 2,
        "protoType": "repeated string"
      }, {
        "path": "chainId",
        "prefix": "signingRequest.solanaSendCustom.",
        "protoPrefix": "signing_request.solana_send_custom.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": false,
        "description": "Ignored on create: the payload field you use (`solanaSend*` or `sonicSvmSend*`) selects the network. Not populated: always `\"0\"` in responses.",
        "protoName": "chain_id",
        "number": 3,
        "protoType": "uint64",
        "example": "\"101\""
      }]
    }, {
      "field": "solanaSendNative",
      "protoField": "solana_send_native",
      "number": 19,
      "title": "Send SOL",
      "message": "SolanaSendNative",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.solanaSendNative.",
        "protoPrefix": "signing_request.solana_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.solanaSendNative.",
        "protoPrefix": "signing_request.solana_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized). On create `to` must not be an SPL token account (use `solanaSendSplToken`).",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "value",
        "prefix": "signingRequest.solanaSendNative.",
        "protoPrefix": "signing_request.solana_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of the native coin to send. Decimal string in lamports (10^-9 SOL). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "value",
        "number": 3,
        "protoType": "string",
        "example": "\"1000000000000000\""
      }, {
        "path": "chainId",
        "prefix": "signingRequest.solanaSendNative.",
        "protoPrefix": "signing_request.solana_send_native.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": false,
        "description": "Ignored on create: the payload field you use (`solanaSend*` or `sonicSvmSend*`) selects the network. Not populated: always `\"0\"` in responses.",
        "protoName": "chain_id",
        "number": 4,
        "protoType": "uint64",
        "example": "\"101\""
      }]
    }, {
      "field": "solanaSendSplToken",
      "protoField": "solana_send_spl_token",
      "number": 20,
      "title": "Send SPL token",
      "message": "SolanaSendSPLToken",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.solanaSendSplToken.",
        "protoPrefix": "signing_request.solana_send_spl_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.solanaSendSplToken.",
        "protoPrefix": "signing_request.solana_send_spl_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized). On create `to` is a wallet address or an existing token account of the same mint; a token account of another mint is rejected.",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "mintAddress",
        "prefix": "signingRequest.solanaSendSplToken.",
        "protoPrefix": "signing_request.solana_send_spl_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "SPL token mint address. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized).",
        "protoName": "mint_address",
        "number": 3,
        "protoType": "string",
        "example": "\"8y5pTbJpGrUZGFN4M6ACvMbfnhXRrohRnrwannj3Noj\""
      }, {
        "path": "amount",
        "prefix": "signingRequest.solanaSendSplToken.",
        "protoPrefix": "signing_request.solana_send_spl_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of tokens to send. Decimal string in the token's smallest unit (amount x 10^decimals, using the decimals of the mint). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "amount",
        "number": 4,
        "protoType": "string",
        "example": "\"1000000000000000\""
      }, {
        "path": "chainId",
        "prefix": "signingRequest.solanaSendSplToken.",
        "protoPrefix": "signing_request.solana_send_spl_token.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": false,
        "description": "Ignored on create: the payload field you use (`solanaSend*` or `sonicSvmSend*`) selects the network. Not populated: always `\"0\"` in responses.",
        "protoName": "chain_id",
        "number": 5,
        "protoType": "uint64",
        "example": "\"101\""
      }, {
        "path": "decimals",
        "prefix": "signingRequest.solanaSendSplToken.",
        "protoPrefix": "signing_request.solana_send_spl_token.",
        "depth": 0,
        "type": "integer<int64> | string<int64> | null",
        "required": false,
        "description": "Number of decimals of the token; when supplied on create it must match the token's actual decimals. Returned as a decimal string, for example `\"6\"`; never `null`.",
        "protoName": "decimals",
        "number": 6,
        "protoType": "google.protobuf.Int64Value",
        "example": "\"6\""
      }]
    }]
  }, {
    "group": "Sonic SVM",
    "items": [{
      "field": "sonicSvmSendCustom",
      "protoField": "sonic_svm_send_custom",
      "number": 34,
      "title": "Custom transaction",
      "message": "SolanaSendCustom",
      "note": "Sonic SVM only; Solana mainnet uses the `solanaSend*` variants. Also carries dApp transactions.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.sonicSvmSendCustom.",
        "protoPrefix": "signing_request.sonic_svm_send_custom.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "txBase64",
        "prefix": "signingRequest.sonicSvmSendCustom.",
        "protoPrefix": "signing_request.sonic_svm_send_custom.",
        "depth": 0,
        "type": "string[]",
        "required": true,
        "description": "Serialized Solana transactions to sign (`v0` or unversioned format), each as standard base64 (padded): 1 to 5 for a request created through the API; for a dApp request one transaction, or one element per transaction of a sign-all request. Returned as stored, not re-signed and with the blockhash not refreshed: when MPCVault signs a transaction that carries no signature it replaces the recent blockhash, so the signed transaction can differ from the returned one. Whitespace is trimmed on create. On create the `from` wallet must be a signer of every transaction, and every other signer's signature must already be present (a transaction with an empty signature slot for another signer is rejected).",
        "protoName": "tx_base64",
        "number": 2,
        "protoType": "repeated string"
      }, {
        "path": "chainId",
        "prefix": "signingRequest.sonicSvmSendCustom.",
        "protoPrefix": "signing_request.sonic_svm_send_custom.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": false,
        "description": "Ignored on create: the payload field you use (`solanaSend*` or `sonicSvmSend*`) selects the network. Not populated: always `\"0\"` in responses.",
        "protoName": "chain_id",
        "number": 3,
        "protoType": "uint64",
        "example": "\"101\""
      }]
    }, {
      "field": "sonicSvmSendNative",
      "protoField": "sonic_svm_send_native",
      "number": 32,
      "title": "Send native coin",
      "message": "SolanaSendNative",
      "note": "Sonic SVM only; Solana mainnet uses the `solanaSend*` variants.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.sonicSvmSendNative.",
        "protoPrefix": "signing_request.sonic_svm_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.sonicSvmSendNative.",
        "protoPrefix": "signing_request.sonic_svm_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized). On create `to` must not be an SPL token account (use `solanaSendSplToken`).",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "value",
        "prefix": "signingRequest.sonicSvmSendNative.",
        "protoPrefix": "signing_request.sonic_svm_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of the native coin to send. Decimal string in lamports (10^-9 SOL). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "value",
        "number": 3,
        "protoType": "string",
        "example": "\"1000000000000000\""
      }, {
        "path": "chainId",
        "prefix": "signingRequest.sonicSvmSendNative.",
        "protoPrefix": "signing_request.sonic_svm_send_native.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": false,
        "description": "Ignored on create: the payload field you use (`solanaSend*` or `sonicSvmSend*`) selects the network. Not populated: always `\"0\"` in responses.",
        "protoName": "chain_id",
        "number": 4,
        "protoType": "uint64",
        "example": "\"101\""
      }]
    }, {
      "field": "sonicSvmSendSplToken",
      "protoField": "sonic_svm_send_spl_token",
      "number": 33,
      "title": "Send SPL token",
      "message": "SolanaSendSPLToken",
      "note": "Sonic SVM only; Solana mainnet uses the `solanaSend*` variants.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.sonicSvmSendSplToken.",
        "protoPrefix": "signing_request.sonic_svm_send_spl_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.sonicSvmSendSplToken.",
        "protoPrefix": "signing_request.sonic_svm_send_spl_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized). On create `to` is a wallet address or an existing token account of the same mint; a token account of another mint is rejected.",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "mintAddress",
        "prefix": "signingRequest.sonicSvmSendSplToken.",
        "protoPrefix": "signing_request.sonic_svm_send_spl_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "SPL token mint address. Base58-encoded 32-byte Solana public key (case-sensitive); returned exactly as supplied when the request was created (not normalized).",
        "protoName": "mint_address",
        "number": 3,
        "protoType": "string",
        "example": "\"8y5pTbJpGrUZGFN4M6ACvMbfnhXRrohRnrwannj3Noj\""
      }, {
        "path": "amount",
        "prefix": "signingRequest.sonicSvmSendSplToken.",
        "protoPrefix": "signing_request.sonic_svm_send_spl_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of tokens to send. Decimal string in the token's smallest unit (amount x 10^decimals, using the decimals of the mint). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "amount",
        "number": 4,
        "protoType": "string",
        "example": "\"1000000000000000\""
      }, {
        "path": "chainId",
        "prefix": "signingRequest.sonicSvmSendSplToken.",
        "protoPrefix": "signing_request.sonic_svm_send_spl_token.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": false,
        "description": "Ignored on create: the payload field you use (`solanaSend*` or `sonicSvmSend*`) selects the network. Not populated: always `\"0\"` in responses.",
        "protoName": "chain_id",
        "number": 5,
        "protoType": "uint64",
        "example": "\"101\""
      }, {
        "path": "decimals",
        "prefix": "signingRequest.sonicSvmSendSplToken.",
        "protoPrefix": "signing_request.sonic_svm_send_spl_token.",
        "depth": 0,
        "type": "integer<int64> | string<int64> | null",
        "required": false,
        "description": "Number of decimals of the token; when supplied on create it must match the token's actual decimals. Returned as a decimal string, for example `\"6\"`; never `null`.",
        "protoName": "decimals",
        "number": 6,
        "protoType": "google.protobuf.Int64Value",
        "example": "\"6\""
      }]
    }]
  }, {
    "group": "Sui",
    "items": [{
      "field": "suiMessage",
      "protoField": "sui_message",
      "number": 26,
      "title": "Sign message",
      "message": "SuiMessage",
      "note": "Created through the API or a plugin; WalletConnect and MMI carry EVM messages only.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.suiMessage.",
        "protoPrefix": "signing_request.sui_message.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Signer wallet address in the vault. Sui address; API requests return it as supplied, plugin requests return the wallet's address (`0x` plus 64 lowercase hex digits).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "type",
        "prefix": "signingRequest.suiMessage.",
        "protoPrefix": "signing_request.sui_message.",
        "depth": 0,
        "type": "enum<string>",
        "required": true,
        "description": "Kind of message. Enum name; always `TYPE_DEFAULT` in responses.",
        "protoName": "type",
        "number": 2,
        "protoType": "SuiMessage.Type",
        "enum": ["TYPE_UNSPECIFIED", "TYPE_DEFAULT"]
      }, {
        "path": "content",
        "prefix": "signingRequest.suiMessage.",
        "protoPrefix": "signing_request.sui_message.",
        "depth": 0,
        "type": "string<byte>",
        "required": true,
        "description": "Message to sign, as UTF-8 text. Bytes, base64 (standard, padded) in JSON.",
        "protoName": "content",
        "number": 3,
        "protoType": "bytes"
      }]
    }, {
      "field": "suiSendCoin",
      "protoField": "sui_send_coin",
      "number": 17,
      "title": "Send coin",
      "message": "SuiSendCoin",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.suiSendCoin.",
        "protoPrefix": "signing_request.sui_send_coin.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Sui address: 64 hex digits with an optional `0x` prefix, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.suiSendCoin.",
        "protoPrefix": "signing_request.sui_send_coin.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Sui address: 64 hex digits with an optional `0x` prefix, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "coinTag",
        "prefix": "signingRequest.suiSendCoin.",
        "protoPrefix": "signing_request.sui_send_coin.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Type of the coin to send, `0xPACKAGE::module::STRUCT`, returned exactly as supplied (not normalized to the canonical zero-padded form). On create the native coin (`0x2::sui::SUI`) is rejected: use `suiSendNative`. The coin must resolve to a known token.",
        "protoName": "coin_tag",
        "number": 3,
        "protoType": "string",
        "example": "\"tx_hash:0a1b2c3d...789e, output_index:0\""
      }, {
        "path": "amount",
        "prefix": "signingRequest.suiSendCoin.",
        "protoPrefix": "signing_request.sui_send_coin.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of coins to send. Decimal string in the coin's smallest unit (amount x 10^decimals, using the decimals of the coin). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "amount",
        "number": 4,
        "protoType": "string"
      }, {
        "path": "gasFee",
        "prefix": "signingRequest.suiSendCoin.",
        "protoPrefix": "signing_request.sui_send_coin.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Custom gas settings (budget and price in MIST, see `SuiGas`). `null` when no custom fee was set.",
        "protoName": "gas_fee",
        "number": 5,
        "protoType": "SuiGas"
      }, {
        "path": "budget",
        "prefix": "signingRequest.suiSendCoin.gasFee.",
        "protoPrefix": "signing_request.sui_send_coin.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum gas budget for the transaction. Decimal string in MIST (10^-9 SUI). `null` when not set. On create: a positive integer string that fits in 64 bits, digits only.",
        "protoName": "budget",
        "number": 1,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "price",
        "prefix": "signingRequest.suiSendCoin.gasFee.",
        "protoPrefix": "signing_request.sui_send_coin.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Gas price the sender is willing to pay. Decimal string in MIST per gas unit. `null` when not set. On create: a positive integer string, digits only.",
        "protoName": "price",
        "number": 2,
        "protoType": "google.protobuf.StringValue"
      }]
    }, {
      "field": "suiSendCustom",
      "protoField": "sui_send_custom",
      "number": 18,
      "title": "Custom transaction",
      "message": "SuiSendCustom",
      "note": "Also carries dApp transactions.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.suiSendCustom.",
        "protoPrefix": "signing_request.sui_send_custom.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Sui address: 64 hex digits with an optional `0x` prefix, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "payload",
        "prefix": "signingRequest.suiSendCustom.",
        "protoPrefix": "signing_request.sui_send_custom.",
        "depth": 0,
        "type": "string<byte>",
        "required": true,
        "description": "Transaction to sign. Bytes, base64 (standard, padded) in JSON: UTF-8 JSON text if it was submitted as JSON, or the BCS-serialized transaction bytes exactly as submitted. MPCVault signs a BCS transaction: the one submitted, or one it builds from the submitted JSON. Fields that are missing (sender, gas payment, gas budget and price, expiration) are filled in at signing time, so the signed transaction can differ from the returned one.",
        "protoName": "payload",
        "number": 2,
        "protoType": "bytes"
      }]
    }, {
      "field": "suiSendNative",
      "protoField": "sui_send_native",
      "number": 16,
      "title": "Send SUI",
      "message": "SuiSendNative",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.suiSendNative.",
        "protoPrefix": "signing_request.sui_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Sui address: 64 hex digits with an optional `0x` prefix, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.suiSendNative.",
        "protoPrefix": "signing_request.sui_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Sui address: 64 hex digits with an optional `0x` prefix, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "value",
        "prefix": "signingRequest.suiSendNative.",
        "protoPrefix": "signing_request.sui_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of SUI to send. Decimal string in MIST (10^-9 SUI). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "value",
        "number": 3,
        "protoType": "string"
      }, {
        "path": "gasFee",
        "prefix": "signingRequest.suiSendNative.",
        "protoPrefix": "signing_request.sui_send_native.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Custom gas settings (budget and price in MIST, see `SuiGas`). `null` when no custom fee was set.",
        "protoName": "gas_fee",
        "number": 4,
        "protoType": "SuiGas"
      }, {
        "path": "budget",
        "prefix": "signingRequest.suiSendNative.gasFee.",
        "protoPrefix": "signing_request.sui_send_native.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum gas budget for the transaction. Decimal string in MIST (10^-9 SUI). `null` when not set. On create: a positive integer string that fits in 64 bits, digits only.",
        "protoName": "budget",
        "number": 1,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "price",
        "prefix": "signingRequest.suiSendNative.gasFee.",
        "protoPrefix": "signing_request.sui_send_native.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Gas price the sender is willing to pay. Decimal string in MIST per gas unit. `null` when not set. On create: a positive integer string, digits only.",
        "protoName": "price",
        "number": 2,
        "protoType": "google.protobuf.StringValue"
      }]
    }]
  }, {
    "group": "Aptos",
    "items": [{
      "field": "aptosMessage",
      "protoField": "aptos_message",
      "number": 23,
      "title": "Sign message",
      "message": "AptosMessage",
      "note": "Created through the API or a plugin; WalletConnect and MMI carry EVM messages only.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.aptosMessage.",
        "protoPrefix": "signing_request.aptos_message.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Signer wallet address in the vault. Aptos address; API requests return it as supplied, plugin requests return the wallet's address (`0x` plus 64 lowercase hex digits).",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "type",
        "prefix": "signingRequest.aptosMessage.",
        "protoPrefix": "signing_request.aptos_message.",
        "depth": 0,
        "type": "enum<string>",
        "required": true,
        "description": "Kind of message. Enum name; always `TYPE_DEFAULT` in responses.",
        "protoName": "type",
        "number": 2,
        "protoType": "AptosMessage.Type",
        "enum": ["TYPE_UNSPECIFIED", "TYPE_DEFAULT"]
      }, {
        "path": "content",
        "prefix": "signingRequest.aptosMessage.",
        "protoPrefix": "signing_request.aptos_message.",
        "depth": 0,
        "type": "object",
        "required": true,
        "description": "Message to sign, with its `message` text and `nonce` and the optional `address`, `application` and `chainId` it carries. Required on create.",
        "protoName": "content",
        "number": 3,
        "protoType": "AptosMessage.Message"
      }, {
        "path": "address",
        "prefix": "signingRequest.aptosMessage.content.",
        "protoPrefix": "signing_request.aptos_message.content.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Address placed inside the message, as supplied (UTF-8 string, not validated against `from`). `null` when empty.",
        "protoName": "address",
        "number": 1,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "application",
        "prefix": "signingRequest.aptosMessage.content.",
        "protoPrefix": "signing_request.aptos_message.content.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Name or domain of the application the message is for, as supplied (UTF-8 string, unvalidated). `null` when empty.",
        "protoName": "application",
        "number": 2,
        "protoType": "google.protobuf.StringValue",
        "example": "\"application\""
      }, {
        "path": "chainId",
        "prefix": "signingRequest.aptosMessage.content.",
        "protoPrefix": "signing_request.aptos_message.content.",
        "depth": 1,
        "type": "integer<int64> | string<int64> | null",
        "required": false,
        "description": "Chain ID placed inside the message, for example `\"1\"`. Returned as a decimal string; `null` when absent or `0`.",
        "protoName": "chain_id",
        "number": 3,
        "protoType": "google.protobuf.Int64Value",
        "example": "\"137\""
      }, {
        "path": "message",
        "prefix": "signingRequest.aptosMessage.content.",
        "protoPrefix": "signing_request.aptos_message.content.",
        "depth": 1,
        "type": "string",
        "required": true,
        "description": "Text of the message to sign. UTF-8 string, as supplied (unvalidated, not normalized); required non-empty on create.",
        "protoName": "message",
        "number": 4,
        "protoType": "string",
        "example": "\"message\""
      }, {
        "path": "nonce",
        "prefix": "signingRequest.aptosMessage.content.",
        "protoPrefix": "signing_request.aptos_message.content.",
        "depth": 1,
        "type": "string",
        "required": true,
        "description": "Nonce of the message. UTF-8 string, as supplied (unvalidated); required non-empty on create.",
        "protoName": "nonce",
        "number": 5,
        "protoType": "string",
        "example": "\"1\""
      }]
    }, {
      "field": "aptosSendCoin",
      "protoField": "aptos_send_coin",
      "number": 14,
      "title": "Send coin",
      "message": "AptosSendCoin",
      "note": "",
      "rows": [{
        "path": "chainId",
        "prefix": "signingRequest.aptosSendCoin.",
        "protoPrefix": "signing_request.aptos_send_coin.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": true,
        "description": "Chain ID of the network: `1` for Aptos mainnet, `126` for Movement mainnet. Returned as a decimal string. Required on create: it selects the network, and an ID that matches no network is rejected (an omitted value reads as `0`).",
        "protoName": "chain_id",
        "number": 1,
        "protoType": "uint64",
        "example": "\"1\""
      }, {
        "path": "from",
        "prefix": "signingRequest.aptosSendCoin.",
        "protoPrefix": "signing_request.aptos_send_coin.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Aptos address: `0x` plus 62 to 64 hex digits, or 64 hex digits without `0x`, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "from",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.aptosSendCoin.",
        "protoPrefix": "signing_request.aptos_send_coin.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Aptos address: `0x` plus 62 to 64 hex digits, or 64 hex digits without `0x`, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "to",
        "number": 3,
        "protoType": "string"
      }, {
        "path": "coinTag",
        "prefix": "signingRequest.aptosSendCoin.",
        "protoPrefix": "signing_request.aptos_send_coin.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Type tag of the coin to send, `ADDRESS::module::Struct`, returned exactly as supplied (not normalized to the canonical padded form). On create the native coin (`0x1::aptos_coin::AptosCoin`) is rejected: use `aptosSendNative`. The coin must resolve to a known token, and the recipient must have registered it.",
        "protoName": "coin_tag",
        "number": 4,
        "protoType": "string",
        "example": "\"tx_hash:0a1b2c3d...789e, output_index:0\""
      }, {
        "path": "amount",
        "prefix": "signingRequest.aptosSendCoin.",
        "protoPrefix": "signing_request.aptos_send_coin.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of coins to send. Decimal string in the coin's smallest unit (amount x 10^decimals, using the decimals of the coin). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "amount",
        "number": 5,
        "protoType": "string"
      }, {
        "path": "gasFee",
        "prefix": "signingRequest.aptosSendCoin.",
        "protoPrefix": "signing_request.aptos_send_coin.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Custom gas settings (gas units and octa per gas unit, see `AptosGas`). `null` when no custom fee was set.",
        "protoName": "gas_fee",
        "number": 6,
        "protoType": "AptosGas"
      }, {
        "path": "maxGasAmount",
        "prefix": "signingRequest.aptosSendCoin.gasFee.",
        "protoPrefix": "signing_request.aptos_send_coin.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum gas units the transaction may use. Decimal integer string in gas units. `null` when not set. On create: a positive integer string that fits in 64 bits, digits only.",
        "protoName": "max_gas_amount",
        "number": 1,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "gasUnitPrice",
        "prefix": "signingRequest.aptosSendCoin.gasFee.",
        "protoPrefix": "signing_request.aptos_send_coin.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Price per gas unit the sender is willing to pay. Decimal integer string in octa (10^-8 APT), rounded to a whole octa as signing rounds it; when it is `\"0\"` the network's estimate is used at signing. `null` when not set. On create: a positive integer string, digits only.",
        "protoName": "gas_unit_price",
        "number": 2,
        "protoType": "google.protobuf.StringValue"
      }]
    }, {
      "field": "aptosSendCustom",
      "protoField": "aptos_send_custom",
      "number": 15,
      "title": "Custom transaction",
      "message": "AptosSendCustom",
      "note": "Also carries dApp transactions that are to be submitted. A dApp request to only sign a transaction is returned without a payload field.",
      "rows": [{
        "path": "chainId",
        "prefix": "signingRequest.aptosSendCustom.",
        "protoPrefix": "signing_request.aptos_send_custom.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": true,
        "description": "Chain ID of the network: `1` for Aptos mainnet, `126` for Movement mainnet. Returned as a decimal string. Required on create: it selects the network, and an ID that matches no network is rejected (an omitted value reads as `0`).",
        "protoName": "chain_id",
        "number": 1,
        "protoType": "uint64",
        "example": "\"1\""
      }, {
        "path": "from",
        "prefix": "signingRequest.aptosSendCustom.",
        "protoPrefix": "signing_request.aptos_send_custom.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Aptos address: `0x` plus 62 to 64 hex digits, or 64 hex digits without `0x`, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "from",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "payload",
        "prefix": "signingRequest.aptosSendCustom.",
        "protoPrefix": "signing_request.aptos_send_custom.",
        "depth": 0,
        "type": "string<byte>",
        "required": true,
        "description": "Transaction to sign. Bytes, base64 (standard, padded) in JSON. A JSON entry-function payload is returned as UTF-8 text re-indented with two spaces (equal in meaning, not byte-identical to what was submitted); a BCS-serialized transaction payload (`TransactionPayload`, not a raw transaction) is returned byte-identical. On create a JSON payload must carry a non-empty `function`, and a `function` spelled `0x1::account::rotate_authentication_key` (compared case-insensitively, as written) is rejected.",
        "protoName": "payload",
        "number": 3,
        "protoType": "bytes"
      }, {
        "path": "gasFee",
        "prefix": "signingRequest.aptosSendCustom.",
        "protoPrefix": "signing_request.aptos_send_custom.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Custom gas settings (gas units and octa per gas unit, see `AptosGas`). For a request created through the API or in the MPCVault app, `null` when no custom fee was set. For a dApp transaction, `maxGasAmount` falls back to the gas limit stored with the request when the signer set none, so the object can be present without a custom fee, and `gasUnitPrice` is only the price the signer set.",
        "protoName": "gas_fee",
        "number": 4,
        "protoType": "AptosGas"
      }, {
        "path": "maxGasAmount",
        "prefix": "signingRequest.aptosSendCustom.gasFee.",
        "protoPrefix": "signing_request.aptos_send_custom.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum gas units the transaction may use. Decimal integer string in gas units. `null` when not set. On create: a positive integer string that fits in 64 bits, digits only.",
        "protoName": "max_gas_amount",
        "number": 1,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "gasUnitPrice",
        "prefix": "signingRequest.aptosSendCustom.gasFee.",
        "protoPrefix": "signing_request.aptos_send_custom.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Price per gas unit the sender is willing to pay. Decimal integer string in octa (10^-8 APT), rounded to a whole octa as signing rounds it; when it is `\"0\"` the network's estimate is used at signing. `null` when not set. On create: a positive integer string, digits only.",
        "protoName": "gas_unit_price",
        "number": 2,
        "protoType": "google.protobuf.StringValue"
      }]
    }, {
      "field": "aptosSendNative",
      "protoField": "aptos_send_native",
      "number": 13,
      "title": "Send APT",
      "message": "AptosSendNative",
      "note": "",
      "rows": [{
        "path": "chainId",
        "prefix": "signingRequest.aptosSendNative.",
        "protoPrefix": "signing_request.aptos_send_native.",
        "depth": 0,
        "type": "integer<int64> | string<int64>",
        "required": true,
        "description": "Chain ID of the network: `1` for Aptos mainnet, `126` for Movement mainnet. Returned as a decimal string. Required on create: it selects the network, and an ID that matches no network is rejected (an omitted value reads as `0`).",
        "protoName": "chain_id",
        "number": 1,
        "protoType": "uint64",
        "example": "\"1\""
      }, {
        "path": "from",
        "prefix": "signingRequest.aptosSendNative.",
        "protoPrefix": "signing_request.aptos_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Aptos address: `0x` plus 62 to 64 hex digits, or 64 hex digits without `0x`, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "from",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.aptosSendNative.",
        "protoPrefix": "signing_request.aptos_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Aptos address: `0x` plus 62 to 64 hex digits, or 64 hex digits without `0x`, in any letter case; returned exactly as supplied when the request was created (not padded or lowercased).",
        "protoName": "to",
        "number": 3,
        "protoType": "string"
      }, {
        "path": "value",
        "prefix": "signingRequest.aptosSendNative.",
        "protoPrefix": "signing_request.aptos_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of APT to send. Decimal string in octa (10^-8 APT). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "value",
        "number": 4,
        "protoType": "string"
      }, {
        "path": "gasFee",
        "prefix": "signingRequest.aptosSendNative.",
        "protoPrefix": "signing_request.aptos_send_native.",
        "depth": 0,
        "type": "object",
        "required": false,
        "description": "Custom gas settings (gas units and octa per gas unit, see `AptosGas`). `null` when no custom fee was set.",
        "protoName": "gas_fee",
        "number": 5,
        "protoType": "AptosGas"
      }, {
        "path": "maxGasAmount",
        "prefix": "signingRequest.aptosSendNative.gasFee.",
        "protoPrefix": "signing_request.aptos_send_native.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Maximum gas units the transaction may use. Decimal integer string in gas units. `null` when not set. On create: a positive integer string that fits in 64 bits, digits only.",
        "protoName": "max_gas_amount",
        "number": 1,
        "protoType": "google.protobuf.StringValue"
      }, {
        "path": "gasUnitPrice",
        "prefix": "signingRequest.aptosSendNative.gasFee.",
        "protoPrefix": "signing_request.aptos_send_native.gas_fee.",
        "depth": 1,
        "type": "string | null",
        "required": false,
        "description": "Price per gas unit the sender is willing to pay. Decimal integer string in octa (10^-8 APT), rounded to a whole octa as signing rounds it; when it is `\"0\"` the network's estimate is used at signing. `null` when not set. On create: a positive integer string, digits only.",
        "protoName": "gas_unit_price",
        "number": 2,
        "protoType": "google.protobuf.StringValue"
      }]
    }, {
      "field": "aptosRegisterCoin",
      "protoField": "aptos_register_coin",
      "number": 44,
      "title": "Register coin",
      "message": "AptosRegisterCoin",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }, {
      "field": "aptosOpenToken",
      "protoField": "aptos_open_token",
      "number": 45,
      "title": "Enable NFT receive",
      "message": "AptosOpenToken",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }]
  }, {
    "group": "TON",
    "items": [{
      "field": "tonMessage",
      "protoField": "ton_message",
      "number": 30,
      "title": "Sign message",
      "message": "TonMessage",
      "note": "Created through the API or a plugin; WalletConnect and MMI carry EVM messages only.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.tonMessage.",
        "protoPrefix": "signing_request.ton_message.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Signer wallet address in the vault. TON address in the non-bounceable user-friendly form (base64url, 48 characters, for example `UQ...`): API addresses are rewritten to it on create, plugin requests use the wallet's address in the same form.",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "type",
        "prefix": "signingRequest.tonMessage.",
        "protoPrefix": "signing_request.ton_message.",
        "depth": 0,
        "type": "enum<string>",
        "required": true,
        "description": "Kind of message. Enum name; always `TYPE_DEFAULT` in responses.",
        "protoName": "type",
        "number": 2,
        "protoType": "TonMessage.Type",
        "enum": ["TYPE_UNSPECIFIED", "TYPE_DEFAULT"]
      }, {
        "path": "content",
        "prefix": "signingRequest.tonMessage.",
        "protoPrefix": "signing_request.ton_message.",
        "depth": 0,
        "type": "string<byte>",
        "required": true,
        "description": "ton-proof (TON Connect `ton_proof`) message to sign, as UTF-8 JSON text. Bytes, base64 (standard, padded) in JSON. API requests return it exactly as submitted; plugin requests return it re-indented with two spaces.",
        "protoName": "content",
        "number": 3,
        "protoType": "bytes"
      }]
    }, {
      "field": "tonSendCustom",
      "protoField": "ton_send_custom",
      "number": 29,
      "title": "Custom transaction",
      "message": "TonSendCustom",
      "note": "Also carries dApp transactions.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.tonSendCustom.",
        "protoPrefix": "signing_request.ton_send_custom.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Mainnet TON address, accepted in user-friendly (base64 or base64url) or raw (`0:` hex) form and rewritten on create to the non-bounceable user-friendly form (base64url, 48 characters, for example `UQ...`), which is what is returned.",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "payload",
        "prefix": "signingRequest.tonSendCustom.",
        "protoPrefix": "signing_request.ton_send_custom.",
        "depth": 0,
        "type": "string<byte>",
        "required": true,
        "description": "Transaction to sign. Bytes, base64 (standard, padded) in JSON, holding UTF-8 JSON text in one of two forms: the ton-connect form (`messages`, each with `address`, `amount`, `payload` and `state_init`; `valid_until`; `from`; `network`) or the single-message form (`dataType`, `from`, `to`, `value`, `data`, `stateInit`). The text is canonicalized when the request is created (two-space indent, decimal-string amounts, integer `valid_until`, standard-base64 payload and state_init): equal in meaning, not byte-identical to what was submitted. On create the ton-connect form must contain at least one message, and each message needs a mainnet TON `address`, and its `amount` in nanoton (a non-negative integer below 2^64) is `0` when omitted.",
        "protoName": "payload",
        "number": 2,
        "protoType": "bytes"
      }]
    }, {
      "field": "tonSendNative",
      "protoField": "ton_send_native",
      "number": 27,
      "title": "Send TON",
      "message": "TonSendNative",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.tonSendNative.",
        "protoPrefix": "signing_request.ton_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Mainnet TON address, accepted in user-friendly (base64 or base64url) or raw (`0:` hex) form and rewritten on create to the non-bounceable user-friendly form (base64url, 48 characters, for example `UQ...`), which is what is returned.",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.tonSendNative.",
        "protoPrefix": "signing_request.ton_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Mainnet TON address, accepted in user-friendly (base64 or base64url) or raw (`0:` hex) form and rewritten on create to the non-bounceable user-friendly form (base64url, 48 characters, for example `UQ...`), which is what is returned.",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "value",
        "prefix": "signingRequest.tonSendNative.",
        "protoPrefix": "signing_request.ton_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of TON to send. Decimal string in nanoton (10^-9 TON). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "value",
        "number": 3,
        "protoType": "string"
      }, {
        "path": "comment",
        "prefix": "signingRequest.tonSendNative.",
        "protoPrefix": "signing_request.ton_send_native.",
        "depth": 0,
        "type": "string",
        "required": false,
        "description": "Text comment attached to the transfer. UTF-8, at most 50 Unicode code points, returned unchanged; empty string when none.",
        "protoName": "comment",
        "number": 4,
        "protoType": "string"
      }]
    }, {
      "field": "tonSendToken",
      "protoField": "ton_send_token",
      "number": 28,
      "title": "Send token (jetton)",
      "message": "TonSendToken",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.tonSendToken.",
        "protoPrefix": "signing_request.ton_send_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Mainnet TON address, accepted in user-friendly (base64 or base64url) or raw (`0:` hex) form and rewritten on create to the non-bounceable user-friendly form (base64url, 48 characters, for example `UQ...`), which is what is returned.",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "to",
        "prefix": "signingRequest.tonSendToken.",
        "protoPrefix": "signing_request.ton_send_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Mainnet TON address, accepted in user-friendly (base64 or base64url) or raw (`0:` hex) form and rewritten on create to the non-bounceable user-friendly form (base64url, 48 characters, for example `UQ...`), which is what is returned.",
        "protoName": "to",
        "number": 2,
        "protoType": "string"
      }, {
        "path": "mintAddress",
        "prefix": "signingRequest.tonSendToken.",
        "protoPrefix": "signing_request.ton_send_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Jetton master contract address. Mainnet TON address, accepted in user-friendly (base64 or base64url) or raw (`0:` hex) form and rewritten on create to the non-bounceable user-friendly form (base64url, 48 characters, for example `UQ...`), which is what is returned.",
        "protoName": "mint_address",
        "number": 3,
        "protoType": "string",
        "example": "\"EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs\""
      }, {
        "path": "amount",
        "prefix": "signingRequest.tonSendToken.",
        "protoPrefix": "signing_request.ton_send_token.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of jettons to send. Decimal string in the jetton's smallest unit (amount x 10^decimals, using the decimals of the jetton). On create: a non-negative integer string, digits only (`0` is accepted; no sign, decimal point, exponent or `0x` prefix).",
        "protoName": "amount",
        "number": 4,
        "protoType": "string"
      }, {
        "path": "comment",
        "prefix": "signingRequest.tonSendToken.",
        "protoPrefix": "signing_request.ton_send_token.",
        "depth": 0,
        "type": "string",
        "required": false,
        "description": "Text comment attached to the transfer. UTF-8, at most 50 Unicode code points, returned unchanged; empty string when none.",
        "protoName": "comment",
        "number": 5,
        "protoType": "string",
        "example": "\"ton send token comment\""
      }, {
        "path": "decimals",
        "prefix": "signingRequest.tonSendToken.",
        "protoPrefix": "signing_request.ton_send_token.",
        "depth": 0,
        "type": "integer<int64> | string<int64> | null",
        "required": false,
        "description": "Number of decimals of the jetton. Returned as a decimal string; never `null`. When supplied on create it must equal the jetton's actual decimals; a mismatch is rejected.",
        "protoName": "decimals",
        "number": 6,
        "protoType": "google.protobuf.Int64Value",
        "example": "\"6\""
      }]
    }]
  }, {
    "group": "Stellar",
    "items": [{
      "field": "stellarChangeTrust",
      "protoField": "stellar_change_trust",
      "number": 38,
      "title": "Change trustline",
      "message": "StellarChangeTrust",
      "note": "",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.stellarChangeTrust.",
        "protoPrefix": "signing_request.stellar_change_trust.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Stellar strkey: a `G...` account ID (56 characters) or a `C...` contract ID. On create the account must exist, and a trustline to the asset must not already exist.",
        "protoName": "from",
        "number": 1,
        "protoType": "string",
        "example": "\"GAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB7JZX\""
      }, {
        "path": "assetCode",
        "prefix": "signingRequest.stellarChangeTrust.",
        "protoPrefix": "signing_request.stellar_change_trust.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Code of the asset to trust. 1 to 12 alphanumeric characters.",
        "protoName": "asset_code",
        "number": 2,
        "protoType": "string",
        "example": "\"USDC\""
      }, {
        "path": "assetIssuer",
        "prefix": "signingRequest.stellarChangeTrust.",
        "protoPrefix": "signing_request.stellar_change_trust.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Issuer account of the asset. Stellar `G...` strkey (56 characters).",
        "protoName": "asset_issuer",
        "number": 3,
        "protoType": "string",
        "example": "\"GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN\""
      }, {
        "path": "memo",
        "prefix": "signingRequest.stellarChangeTrust.",
        "protoPrefix": "signing_request.stellar_change_trust.",
        "depth": 0,
        "type": "string",
        "required": false,
        "description": "Text memo attached to the transaction. UTF-8, at most 28 bytes.",
        "protoName": "memo",
        "number": 4,
        "protoType": "string",
        "example": "\"stellar change trust\""
      }]
    }, {
      "field": "stellarSendAsset",
      "protoField": "stellar_send_asset",
      "number": 36,
      "title": "Send asset",
      "message": "StellarSendAsset",
      "note": "A transfer of a token that is identified by a contract address is returned without a payload field.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.stellarSendAsset.",
        "protoPrefix": "signing_request.stellar_send_asset.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Stellar strkey: a `G...` account ID (56 characters) or a `C...` contract ID; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string",
        "example": "\"GAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB7JZX\""
      }, {
        "path": "to",
        "prefix": "signingRequest.stellarSendAsset.",
        "protoPrefix": "signing_request.stellar_send_asset.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Stellar strkey: a `G...` account ID (56 characters) or a `C...` contract ID; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "to",
        "number": 2,
        "protoType": "string",
        "example": "\"GAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB7JZX\""
      }, {
        "path": "assetCode",
        "prefix": "signingRequest.stellarSendAsset.",
        "protoPrefix": "signing_request.stellar_send_asset.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Code of the asset to send. 1 to 12 alphanumeric characters.",
        "protoName": "asset_code",
        "number": 3,
        "protoType": "string",
        "example": "\"USDC\""
      }, {
        "path": "assetIssuer",
        "prefix": "signingRequest.stellarSendAsset.",
        "protoPrefix": "signing_request.stellar_send_asset.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Issuer account of the asset. Stellar `G...` strkey (56 characters).",
        "protoName": "asset_issuer",
        "number": 4,
        "protoType": "string",
        "example": "\"GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN\""
      }, {
        "path": "amount",
        "prefix": "signingRequest.stellarSendAsset.",
        "protoPrefix": "signing_request.stellar_send_asset.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of the asset to send. Decimal string in whole asset units, for example `\"10.1\"`, returned as stored: a request created through the API has at most 7 fractional digits (the API truncates), a request created in the MPCVault app can have more. Not stroops and not multiplied by 10^decimals, unlike other networks. On create a negative value is rejected. The recipient must be an existing account with a trustline to the asset.",
        "protoName": "amount",
        "number": 5,
        "protoType": "string",
        "example": "\"10.1\""
      }, {
        "path": "memo",
        "prefix": "signingRequest.stellarSendAsset.",
        "protoPrefix": "signing_request.stellar_send_asset.",
        "depth": 0,
        "type": "string",
        "required": false,
        "description": "Text memo attached to the transaction. UTF-8, at most 28 bytes, returned unchanged; empty string when none.",
        "protoName": "memo",
        "number": 6,
        "protoType": "string",
        "example": "\"stellar send asset\""
      }]
    }, {
      "field": "stellarSendCustom",
      "protoField": "stellar_send_custom",
      "number": 37,
      "title": "Custom transaction",
      "message": "StellarSendCustom",
      "note": "Also carries dApp transactions. A SEP-10 challenge transaction is returned without a payload field.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.stellarSendCustom.",
        "protoPrefix": "signing_request.stellar_send_custom.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Stellar strkey: a `G...` account ID (56 characters) or a `C...` contract ID; returned exactly as supplied when the request was created (not normalized). For a dApp transaction it is the account that signs, which can differ from the source account of the envelope.",
        "protoName": "from",
        "number": 1,
        "protoType": "string",
        "example": "\"GAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB7JZX\""
      }, {
        "path": "txBase64",
        "prefix": "signingRequest.stellarSendCustom.",
        "protoPrefix": "signing_request.stellar_send_custom.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Stellar transaction to sign, classic or fee-bump. Standard base64 (padded) of the XDR `TransactionEnvelope`, returned exactly as submitted.",
        "protoName": "tx_base64",
        "number": 2,
        "protoType": "string",
        "example": "\"AQAAAAAAAAAAAAAAAAAAAAAA$999999999999AAAAACAAQABA1kYs4/+LFCaNxckNNsERMcgSwr19dR72mxW6j8qJpGv87LKehWtuOxHGbCNbhMcl4yGWqGCnDXiSuHbqRK1X00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQICAAEMAgAAKCGAQAAAAAAAA==\""
      }]
    }, {
      "field": "stellarSendNative",
      "protoField": "stellar_send_native",
      "number": 35,
      "title": "Send XLM",
      "message": "StellarSendNative",
      "note": "Amounts are whole-unit decimals, not base units.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.stellarSendNative.",
        "protoPrefix": "signing_request.stellar_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Sender wallet address in the vault. Stellar strkey: a `G...` account ID (56 characters) or a `C...` contract ID; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "from",
        "number": 1,
        "protoType": "string",
        "example": "\"GAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB7JZX\""
      }, {
        "path": "to",
        "prefix": "signingRequest.stellarSendNative.",
        "protoPrefix": "signing_request.stellar_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Recipient address. Stellar strkey: a `G...` account ID (56 characters) or a `C...` contract ID; returned exactly as supplied when the request was created (not normalized).",
        "protoName": "to",
        "number": 2,
        "protoType": "string",
        "example": "\"GAAACAQDAQCQMBYIBEFAWDANBYHRAEISCMKBKFQXDAMRUGY4DUPB7JZX\""
      }, {
        "path": "value",
        "prefix": "signingRequest.stellarSendNative.",
        "protoPrefix": "signing_request.stellar_send_native.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Amount of XLM to send. Decimal string in whole XLM, for example `\"10.1\"`, returned as stored: a request created through the API has at most 7 fractional digits (the API truncates), a request created in the MPCVault app can have more. Not stroops and not multiplied by 10^decimals, unlike other networks. On create a negative value is rejected, and if the recipient account does not exist yet the amount (after truncation) must be at least `1`.",
        "protoName": "value",
        "number": 3,
        "protoType": "string",
        "example": "\"10.1\""
      }, {
        "path": "memo",
        "prefix": "signingRequest.stellarSendNative.",
        "protoPrefix": "signing_request.stellar_send_native.",
        "depth": 0,
        "type": "string",
        "required": false,
        "description": "Text memo attached to the transaction. UTF-8, at most 28 bytes, returned unchanged; empty string when none.",
        "protoName": "memo",
        "number": 4,
        "protoType": "string",
        "example": "\"stellar send native\""
      }]
    }]
  }, {
    "group": "Wallets",
    "items": [{
      "field": "createWallet",
      "protoField": "create_wallet",
      "number": 21,
      "title": "Create wallet",
      "message": "CreateWalletRequest",
      "note": "Response-only: wallets are created with CreateWallet, not CreateSigningRequest.",
      "rows": [{
        "path": "vaultUuid",
        "prefix": "signingRequest.createWallet.",
        "protoPrefix": "signing_request.create_wallet.",
        "depth": 0,
        "type": "string<uuid>",
        "required": true,
        "description": "UUID of the vault the wallet is created in (shown on the vault's settings page in the web app). Hyphenated UUID string.",
        "protoName": "vault_uuid",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "callbackClientSignerPublicKey",
        "prefix": "signingRequest.createWallet.",
        "protoPrefix": "signing_request.create_wallet.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Public key of the API client signer that receives the callback. OpenSSH `authorized_keys` text of an `ssh-ed25519` key, returned exactly as sent. Plain string: `\"\"` (not `null`) when the request has no callback key. Required when creating a wallet. It must be the public key of the API client signer configured for the vault `vaultUuid` (any other key is rejected), and the caller's IP address must be in that signer's IP whitelist.",
        "protoName": "callback_client_signer_public_key",
        "number": 2,
        "protoType": "string",
        "example": "\"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDmdWUo3e3/xUd0kbXCz4omzhqcYaPPYNTZ6ndqZdBAo test\""
      }, {
        "path": "networkType",
        "prefix": "signingRequest.createWallet.",
        "protoPrefix": "signing_request.create_wallet.",
        "depth": 0,
        "type": "enum<string>",
        "required": true,
        "description": "Network family of the wallet. Enum name: `NETWORK_TYPE_EVM`, `NETWORK_TYPE_BITCOIN`, `NETWORK_TYPE_TRON`, `NETWORK_TYPE_APTOS`, `NETWORK_TYPE_SUI`, `NETWORK_TYPE_SOLANA`, `NETWORK_TYPE_TON` or `NETWORK_TYPE_STELLAR`; `NETWORK_TYPE_UNKNOWN` for an unmapped network. On create `NETWORK_TYPE_UNKNOWN` is rejected.",
        "protoName": "network_type",
        "number": 3,
        "protoType": "NetworkType",
        "enum": ["NETWORK_TYPE_UNKNOWN", "NETWORK_TYPE_EVM", "NETWORK_TYPE_BITCOIN", "NETWORK_TYPE_TRON", "NETWORK_TYPE_APTOS", "NETWORK_TYPE_SUI", "NETWORK_TYPE_SOLANA", "NETWORK_TYPE_TON", "NETWORK_TYPE_STELLAR"]
      }, {
        "path": "ref",
        "prefix": "signingRequest.createWallet.",
        "protoPrefix": "signing_request.create_wallet.",
        "depth": 0,
        "type": "string",
        "required": false,
        "description": "Customer reference for the wallet, unique per organization when not empty. UTF-8, at most 500 Unicode code points; empty string when none.",
        "protoName": "ref",
        "number": 4,
        "protoType": "string",
        "example": "\"0x4321567890abcdef4321567890abcdef123456\""
      }, {
        "path": "name",
        "prefix": "signingRequest.createWallet.",
        "protoPrefix": "signing_request.create_wallet.",
        "depth": 0,
        "type": "string",
        "required": false,
        "description": "Name of the wallet. UTF-8, at most 85 Unicode code points.",
        "protoName": "name",
        "number": 5,
        "protoType": "string",
        "example": "\"test wallet\""
      }]
    }]
  }, {
    "group": "Messages",
    "items": [{
      "field": "rawMessage",
      "protoField": "raw_message",
      "number": 25,
      "title": "Sign raw message",
      "message": "RawMessage",
      "note": "Not tied to a network: the wallet's key type (secp256k1 or ed25519) decides the signature kind.",
      "rows": [{
        "path": "from",
        "prefix": "signingRequest.rawMessage.",
        "protoPrefix": "signing_request.raw_message.",
        "depth": 0,
        "type": "string",
        "required": true,
        "description": "Address of the vault wallet whose key signs the message, returned exactly as supplied; no address normalization is applied on any network.",
        "protoName": "from",
        "number": 1,
        "protoType": "string"
      }, {
        "path": "content",
        "prefix": "signingRequest.rawMessage.",
        "protoPrefix": "signing_request.raw_message.",
        "depth": 0,
        "type": "string<byte>",
        "required": true,
        "description": "Raw bytes to sign. Bytes, base64 (standard, padded) in JSON, returned exactly as submitted.",
        "protoName": "content",
        "number": 2,
        "protoType": "bytes"
      }, {
        "path": "ecdsaHashFunction",
        "prefix": "signingRequest.rawMessage.",
        "protoPrefix": "signing_request.raw_message.",
        "depth": 0,
        "type": "enum<string>",
        "required": false,
        "description": "Hash function applied before ECDSA signing. For a secp256k1 wallet it is required and must be `ECDSA_HASH_FUNCTION_SHA256` or `ECDSA_HASH_FUNCTION_USE_MESSAGE_DIRECTLY`. For an Ed25519 wallet omit it or send `ECDSA_HASH_FUNCTION_UNSPECIFIED`: any other value is rejected, not ignored.",
        "protoName": "ecdsa_hash_function",
        "number": 3,
        "protoType": "ECDSAHashFunction",
        "enum": ["ECDSA_HASH_FUNCTION_UNSPECIFIED", "ECDSA_HASH_FUNCTION_USE_MESSAGE_DIRECTLY", "ECDSA_HASH_FUNCTION_SHA256"]
      }]
    }]
  }, {
    "group": "Swaps and payments",
    "items": [{
      "field": "swapApproval",
      "protoField": "swap_approval",
      "number": 39,
      "title": "Swap approval",
      "message": "SwapApproval",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }, {
      "field": "swapSend",
      "protoField": "swap_send",
      "number": 40,
      "title": "Swap",
      "message": "SwapSend",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }, {
      "field": "batchPaymentApproval",
      "protoField": "batch_payment_approval",
      "number": 41,
      "title": "Batch payment approval",
      "message": "BatchPaymentApproval",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }, {
      "field": "batchPaymentSend",
      "protoField": "batch_payment_send",
      "number": 42,
      "title": "Batch payment",
      "message": "BatchPaymentSend",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }, {
      "field": "fiatPayment",
      "protoField": "fiat_payment",
      "number": 43,
      "title": "Fiat payment",
      "message": "FiatPayment",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }]
  }, {
    "group": "Vault and keys",
    "items": [{
      "field": "vaultCreation",
      "protoField": "vault_creation",
      "number": 46,
      "title": "Vault creation",
      "message": "VaultCreation",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }, {
      "field": "vaultSettingUpdate",
      "protoField": "vault_setting_update",
      "number": 47,
      "title": "Vault settings update",
      "message": "VaultSettingUpdate",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }, {
      "field": "rootKeyGeneration",
      "protoField": "root_key_generation",
      "number": 48,
      "title": "Root key generation",
      "message": "RootKeyGeneration",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }, {
      "field": "rootKeyBackup",
      "protoField": "root_key_backup",
      "number": 49,
      "title": "Root key backup",
      "message": "RootKeyBackup",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }, {
      "field": "keyAccessGrant",
      "protoField": "key_access_grant",
      "number": 50,
      "title": "Key access grant",
      "message": "KeyAccessGrant",
      "note": "The body has no fields yet. Use the MPCVault app to view the details.",
      "rows": []
    }]
  }];
  const all = PAYLOADS.flatMap(g => g.items.map(i => ({
    ...i,
    group: g.group
  })));
  const [protocol, setProtocol] = useState(mode);
  const [selected, setSelected] = useState(all[0].field);
  const [query, setQuery] = useState("");
  const [narrow, setNarrow] = useState(false);
  const root = useRef(null);
  const grpc = protocol === "grpc";
  useEffect(() => {
    const el = root.current;
    if (!el || typeof ResizeObserver === "undefined") return undefined;
    const observer = new ResizeObserver(entries => setNarrow(entries[0].contentRect.width < 640));
    observer.observe(el);
    return () => observer.disconnect();
  }, []);
  const q = query.trim().toLowerCase();
  const matches = i => !q || (i.field + " " + i.protoField + " " + i.title).toLowerCase().includes(q);
  const current = all.find(i => i.field === selected) || all[0];
  const inline = text => String(text).split(/(`[^`]+`|\[[^\]]+\]\([^)]+\))/g).map((part, n) => {
    if (part.startsWith("`")) return <code key={n}><span>{part.slice(1, -1)}</span></code>;
    const link = part.match(/^\[([^\]]+)\]\(([^)]+)\)$/);
    if (link) return <a key={n} href={link[2]}>{link[1]}</a>;
    return part;
  });
  const prose = "space-y-4 whitespace-normal prose prose-sm prose-gray dark:prose-invert overflow-wrap-anywhere";
  const field = (r, n) => {
    const name = grpc ? r.protoName : r.path;
    const prefix = grpc ? r.protoPrefix : r.prefix;
    const type = grpc ? r.protoType : r.type;
    return <div key={n} className="py-6 border-b border-gray-100 last:border-b-0 dark:border-white/5" style={{
      marginLeft: r.depth * 16
    }}>
        <div className="flex font-mono text-sm param-head break-all relative">
          <div className="flex-1 flex flex-col content-start py-0.5 mr-5">
            <div className="flex items-center flex-wrap gap-2">
              <div className="font-semibold text-primary dark:text-primary-light overflow-wrap-anywhere">
                <span className="text-gray-500 dark:text-gray-400">{prefix}</span>
                {name}
              </div>
              <div className="inline items-center gap-2 text-xs font-medium [&_div]:inline [&_div]:mr-2 [&_div]:leading-5">
                <div className="flex items-center px-2 py-0.5 rounded-md bg-gray-100/50 dark:bg-white/5 text-gray-600 dark:text-gray-200 font-medium break-all">
                  <span>{type}</span>
                </div>
                {grpc && <div className="flex items-center px-2 py-0.5 rounded-md bg-gray-100/50 dark:bg-white/5 text-gray-600 dark:text-gray-200 font-medium break-all">
                    <span>field {r.number}</span>
                  </div>}
                {!grpc && r.required && <div className="px-2 py-0.5 rounded-md bg-red-100/50 dark:bg-red-400/10 text-red-600 dark:text-red-300 font-medium whitespace-nowrap">
                    required
                  </div>}
              </div>
            </div>
          </div>
        </div>
        <div className="mt-4">
          {r.description && <div className={prose}>
              <p className="whitespace-pre-line">{inline(r.description)}</p>
            </div>}
          {r.enum && <div className="flex prose prose-sm prose-gray dark:prose-invert mt-4 gap-1.5 flex-wrap">
              <span>Available options:</span>
              {r.enum.map((v, k) => <span key={v}>
                  <code><span>{v}</span></code>
                  {k < r.enum.length - 1 ? "," : ""}
                </span>)}
            </div>}
          {!grpc && r.example && <div className="flex prose prose-sm prose-gray dark:prose-invert mt-6 gap-1.5">
              <span>Example:</span>
              <div className={prose + " overflow-wrap-anywhere text-[13px] [&_*]:text-[13px]"}>
                <p className="whitespace-pre-line"><code><span>{r.example}</span></code></p>
              </div>
            </div>}
        </div>
      </div>;
  };
  const segment = (id, label) => <button type="button" key={id} aria-pressed={protocol === id} onClick={() => setProtocol(id)} className={"px-3 py-1 text-xs " + (protocol === id ? "bg-primary/10 font-medium text-primary dark:text-primary-light" : "text-gray-600 hover:bg-gray-100 dark:text-gray-400 dark:hover:bg-white/5")}>
      {label}
    </button>;
  const list = <nav aria-label="Payloads" className="payload-list max-h-[40rem] w-60 shrink-0 overflow-y-auto border-r border-gray-200 dark:border-white/10">
      <div className="sticky top-0 z-10 bg-white p-2 dark:bg-gray-950">
        <input type="search" value={query} onChange={e => setQuery(e.target.value)} placeholder="Filter payloads" aria-label="Filter payloads" className="w-full rounded-md border border-gray-200 bg-transparent px-2 py-1 text-gray-900 dark:border-white/10 dark:text-gray-100" />
      </div>
      {PAYLOADS.map(group => {
    const items = group.items.filter(matches);
    if (!items.length) return null;
    return <div key={group.group}>
            <div className="px-3 pb-1 pt-3 text-xs font-semibold uppercase tracking-wide text-gray-500 dark:text-gray-400">{group.group}</div>
            {items.map(i => <button key={i.field} type="button" aria-current={i.field === current.field} onClick={() => setSelected(i.field)} className={"block w-full px-3 py-1.5 text-left " + (i.field === current.field ? "bg-primary/10 font-medium text-primary dark:text-primary-light" : "text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-white/5")}>
                {i.title}
              </button>)}
          </div>;
  })}
      <div className="pointer-events-none sticky bottom-0 h-6 bg-gradient-to-t from-white to-transparent dark:from-gray-950" />
    </nav>;
  const picker = <div className="border-b border-gray-200 p-2 dark:border-white/10">
      <select aria-label="Payload" value={current.field} onChange={e => setSelected(e.target.value)} className="w-full rounded-md border border-gray-200 bg-transparent px-2 py-1.5 text-gray-900 dark:border-white/10 dark:text-gray-100">
        {PAYLOADS.map(group => <optgroup key={group.group} label={group.group}>
            {group.items.map(i => <option key={i.field} value={i.field}>{i.title}</option>)}
          </optgroup>)}
      </select>
    </div>;
  return <div ref={root} className="not-prose my-6 overflow-hidden rounded-xl border border-gray-200 text-sm dark:border-white/10">
      <style>{".payload-list{scrollbar-width:none;-ms-overflow-style:none}.payload-list::-webkit-scrollbar{display:none}"}</style>
      <div className="flex items-center justify-between gap-2 border-b border-gray-200 px-3 py-2 dark:border-white/10">
        <span className="text-xs text-gray-500 dark:text-gray-400">Field names and types over</span>
        <div className="flex overflow-hidden rounded-md border border-gray-200 dark:border-white/10">
          {segment("rest", "REST (JSON)")}
          {segment("grpc", "gRPC (protobuf)")}
        </div>
      </div>
      <div className={narrow ? "flex flex-col" : "flex flex-row"}>
        {narrow ? picker : list}

        <section className="min-w-0 flex-1 px-4 pb-2 pt-4">
          <div className="flex flex-wrap items-baseline gap-x-3 gap-y-1">
            <h4 className="m-0 text-base font-semibold text-gray-900 dark:text-gray-100">{current.title}</h4>
            {current.field !== "common" && <code className="text-xs">{grpc ? current.protoField + " = " + current.number : current.field}</code>}
            <span className="text-xs text-gray-500 dark:text-gray-400">{current.message}</span>
          </div>
          {current.note && <p className="mb-0 mt-2 text-gray-700 dark:text-gray-300">{inline(current.note)}</p>}
          {current.rows.length === 0 && <p className="mb-0 mt-2 text-gray-500 dark:text-gray-400">This payload has no fields.</p>}
          <div className="mt-2">{current.rows.map((r, n) => field(r, n))}</div>
        </section>
      </div>
    </div>;
};

A signing request is the object returned by [GetSigningRequestDetails](/api-reference/rest/get-signing-request-details) and [GetSigningRequestList](/api-reference/rest/get-signing-request-list). It has the common fields, which are always present, and at most one payload field. The name of the payload field says what the request is, and its body holds the details: the transfer, transaction or message the request asks the vault to sign.

Every field is listed below with its type and encoding. The conventions that apply to all of them are in [Data types and encodings](/api-reference/data-types).

## Fields

<PayloadExplorer />

## Payload fields

At most one payload field is set on a request, and its name says what the request is. Names are given as in REST JSON; gRPC uses the snake\_case names (`evmSendNative` is `evm_send_native`).

| Request | Payload field |
| - | - |
| Transfer of a native coin | `evmSendNative`, `btcSendNative`, `tronSendNative`, `solanaSendNative`, `sonicSvmSendNative`, `suiSendNative`, `aptosSendNative`, `tonSendNative`, `stellarSendNative` |
| Transfer of a token | `evmSendErc20`, `tronSendTrc10`, `tronSendTrc20`, `solanaSendSplToken`, `sonicSvmSendSplToken`, `suiSendCoin`, `aptosSendCoin`, `tonSendToken`, `stellarSendAsset` |
| Custom transaction, including a transaction from a dApp | `evmSendCustom`, `solanaSendCustom`, `sonicSvmSendCustom`, `suiSendCustom`, `aptosSendCustom`, `tonSendCustom`, `stellarSendCustom` |
| Message to sign, including a message from a dApp | `evmMessage`, `solanaMessage`, `suiMessage`, `aptosMessage`, `tonMessage` |
| Raw message | `rawMessage` |
| Wallet creation | `createWallet` |
| Stellar trustline | `stellarChangeTrust` |
| Aptos account setup | `aptosRegisterCoin`, `aptosOpenToken` |
| Swap | `swapApproval`, `swapSend` |
| Batch payment | `batchPaymentApproval`, `batchPaymentSend` |
| Fiat payment | `fiatPayment` |
| Vault and keys | `vaultCreation`, `vaultSettingUpdate`, `rootKeyGeneration`, `rootKeyBackup`, `keyAccessGrant` |

A request from a dApp uses the same payload fields as a request created through the API or in the MPCVault app. `source` tells them apart: it is set only for dApp requests. The payload of a dApp request is the request as the dApp submitted it and MPCVault stored it; MPCVault does not check it again when it returns it.

### Payloads without fields

The payload fields in the last five rows have an empty body, for example `"fiatPayment": {}`. The field name is all the API returns about the request. Use the MPCVault app to view its details.

A kind of request added to MPCVault appears as a payload field of its own. Treat a request whose payload field you do not recognize as a kind you cannot inspect.

### Requests without a payload field

A request is returned without a payload field when the API has no body for it:

* a dApp message other than the ones listed above: an EVM `eth_sign` message, and Stellar messages and authorization entries;
* an Aptos dApp request to sign a transaction without submitting it, and a Stellar SEP-10 challenge transaction;
* a dApp transaction that arrived without a request method, or whose stored data cannot be returned, for example calldata that is not hex;
* a Stellar transfer or trustline whose asset is not an asset code and issuer, for example a token that is identified by a contract address.

Such a request is not fully supported by the API yet. Use the MPCVault app to view its details. `source` is set when the request came from a dApp.

## Source

`source` is set only for requests that arrived from a dApp, and is `null` for every other request.

* `source.type` is the channel through which MPCVault received the request: `TYPE_WALLET_CONNECT`, `TYPE_PLUGIN` or `TYPE_MMI`. MPCVault sets it and the dApp cannot choose it. It does not identify the dApp, plugin or person behind the request: any member of the vault can create a plugin request, for example.
* `source.website` is the website the dApp reports for itself. It is unverified text supplied by the dApp, with no validated format, and is `null` when the dApp reported none.

Do not use either field to decide whether to trust a request.

### By connection type

What a dApp request can carry depends on the channel it arrived through.

| `source.type` | Networks | A transaction is returned as | A message is returned as | Returned without a payload field |
| - | - | - | - | - |
| `TYPE_WALLET_CONNECT` | EVM | `evmSendCustom` | `evmMessage` (`personal_sign` or typed data) | `eth_sign` messages |
| `TYPE_MMI` | EVM | `evmSendCustom` | `evmMessage` (`personal_sign` or typed data) | None |
| `TYPE_PLUGIN` | EVM, Solana, Sui, Aptos, TON and Stellar networks | `evmSendCustom`, `solanaSendCustom`, `sonicSvmSendCustom`, `suiSendCustom`, `aptosSendCustom`, `tonSendCustom` or `stellarSendCustom`, by network | `evmMessage`, `solanaMessage`, `suiMessage`, `aptosMessage` or `tonMessage`, by network | `eth_sign` messages; Aptos requests to sign without submitting; Stellar messages, authorization entries and SEP-10 challenges |

On every channel, a transaction whose stored data cannot be returned has no payload field either.

The other fields of a dApp request:

| Field | dApp transaction | dApp message |
| - | - | - |
| `source` | Set | Set |
| `notes` | The note a signer added in the MPCVault app; `null` when none | `null` |
| `simulation` | The stored simulation, when there is one | `""` |
| `evmInputDataDecode` | EVM only, when the call could be decoded | `null` |
| `callbackClientSignerPublicKey` | `null` | `null` |

In `evmSendCustom`, a dApp transaction differs from one created through the API in three fields, on all three channels: `from` and `to` are EIP-55 checksummed, `nonce` is returned (from the dApp, or the one a signer set), and `gasFee` holds the fee a signer set in the app plus the gas limit. The fee the dApp proposed is not returned.

## Simulation

`simulation` is the result of simulating the transaction, returned for reference only. MPCVault stores it in a network-specific form (the provider's response, an MPCVault summary of it, or a synthetic result; see the table below) and does not vouch for it. Run your own simulation before you rely on the outcome.

**Encoding.** `simulation` is `bytes`: base64 (standard alphabet, padded) in REST JSON, raw bytes over gRPC. The bytes are UTF-8 JSON text. The JSON schema depends on the network (table below); MPCVault does not define or version it. The text is the JSON as stored, which can be re-serialized (key order, whitespace) compared with the provider's response.

```bash theme={null}
curl -s -X POST https://api.mpcvault.com/v1/getSigningRequestDetails \
  -H 'x-mtoken: <api-key>' -H 'Content-Type: application/json' \
  -d '{"uuid": "<uuid>"}' \
  | jq -r '.signingRequest.simulation' | base64 -d | jq .
```

**When it is set.** For custom transactions on EVM, Aptos, Sui, Solana and TON networks, and for dApp transactions that are returned with a payload (EVM, Solana, Sonic SVM, Sui, Aptos, TON and Stellar), once a simulation is stored. It is `""` for every other request, including plain transfers, messages, Bitcoin and TRON requests, and requests for which no simulation is stored (provider failure or timeout, quota exceeded, custom EVM networks). A Stellar simulation that failed is stored as a result with `success` false, not as an empty value. Resimulation ([REST](/api-reference/rest/resimulation), [gRPC](/api-reference/grpc/resimulation)) attempts to replace the stored value; see there for what a provider failure returns.

| Network | JSON content |
| - | - |
| EVM networks | The Tenderly Simulate API response without its `contracts` array. Top-level keys: `transaction`, `error`, `simulation`, `generated_access_list`. |
| HyperEVM | An envelope `{"result": […], "gas_price": "0x…", "nonce": "0x…", "from": "0x…"}`; `result` is the Alchemy `eth_simulateV1` result. |
| Aptos, Movement | MPCVault's summary of the transaction simulated through the node's `/transactions/simulate`, with snake\_case keys: `hash`, `sender`, `sequence_number`, `max_gas_amount`, `gas_unit_price`, `gas_currency_code`, `expiration_timestamp_secs`, `payload`, `signature`, `events`, `version`, `state_root_hash`, `event_root_hash`, `gas_used`, `accumulator_root_hash`, `changes`, `timestamp`, `status`, `error_message`; empty values are omitted. `payload`, `signature`, `changes` and each `events[].data` are themselves JSON-encoded strings, `status` is a number (`1` pending, `2` success, `3` fail) and `error_message` holds the VM status of a failed simulation. |
| Sui | The `sui_dryRunTransactionBlock` result. `transaction`, `effects`, `events`, `object_changes` and `balance_changes` are themselves JSON-encoded strings, and `status` is a number. |
| Solana, Sonic SVM | MPCVault's own summary of the `simulateTransaction` result, not the provider's response. Keys are snake\_case: `success`, `error`, `block_number`, `nonce`, `network_fee`, `change`, `approval`, `balance_change`, `contract_calls`, `events`, … |
| TON | A TonAPI account event from message emulation: `event_id`, `account`, `actions`, `lt`, … When the wallet balance does not cover the outgoing amounts, `event_id` is `"insufficient-funds"`. |
| Stellar | dApp transactions only: `{"success": …, "kind": "classic_preflight" or "soroban", "error": "…", "result": …}`, where `result` is the Soroban simulation result. |
| Bitcoin, TRON | Never set. |

## Verify independently

MPCVault returns a request as it holds it, together with its own view of it (`evmInputDataDecode`, `simulation`, `source`, `notes`). This is reference information, not a verification. To verify a request, run your own independent checks: decode the calldata yourself, simulate the transaction with your own provider, and compare addresses and amounts with your own records. Do not rely on these fields as your only check.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.