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

# tron_sendTransaction

> Sign and broadcast a Tron transaction in one call

Sign a Tron transaction and broadcast it to the network. Privy automatically fetches block reference fields (`ref_block_bytes`, `ref_block_hash`, `expiration`) if you omit them.

<Info>
  To sign without broadcasting — for example when using a custom RPC or gas sponsor — use
  [`tron_signTransaction`](/api-reference/wallets/tron/tron-sign-transaction) instead.
</Info>

<Warning>
  The wallet RPC endpoint is a synchronous endpoint, and a successful response indicates that the
  transaction has been broadcasted to the network. Transactions may get broadcasted but still fail
  to be confirmed by the network. The endpoint does not wait for confirmation or retry if the
  transaction fails to be confirmed. To handle these scenarios, see our guide on [speeding up
  transactions](/recipes/speeding-up-transactions).
</Warning>

### SDK methods

Learn more about sending Tron transactions using our SDKs [here](/wallets/using-wallets/tron/send-a-transaction).

***

<Warning>
  **Idempotency on errors:** On 4xx or 5xx, Privy caches the response and replays it for the same
  key. Generate a new key to retry after a server error. Policy violations are an exception and
  allow same-key retries.
</Warning>

<RequestExample>
  ```sh TRX transfer theme={"system"} theme={"system"}
  curl --request POST \
    --url https://api.privy.io/v1/wallets/{wallet_id}/rpc \
    --header 'Authorization: Basic <encoded-value>' \
    --header 'Content-Type: application/json' \
    --header 'privy-app-id: <privy-app-id>' \
    --data '{
    "method": "tron_sendTransaction",
    "caip2": "tron:mainnet",
    "params": {
      "raw_data": {
        "contract": [
          {
            "type": "TransferContract",
            "owner_address": "41a614f803b6fd780986a42c78ec9c7f77e6ded13c",
            "to_address": "41e552f6487585c2b58bc2c9bb4492bc1f17132cd0",
            "amount": 1000000
          }
        ]
      }
    }
  }'
  ```

  ```sh TRC-20 transfer theme={"system"} theme={"system"}
  curl --request POST \
    --url https://api.privy.io/v1/wallets/{wallet_id}/rpc \
    --header 'Authorization: Basic <encoded-value>' \
    --header 'Content-Type: application/json' \
    --header 'privy-app-id: <privy-app-id>' \
    --data '{
    "method": "tron_sendTransaction",
    "caip2": "tron:mainnet",
    "params": {
      "raw_data": {
        "contract": [
          {
            "type": "TriggerSmartContract",
            "owner_address": "41a614f803b6fd780986a42c78ec9c7f77e6ded13c",
            "contract_address": "41a614f803b6fd780986a42c78ec9c7f77e6ded13c",
            "data": "a9059cbb000000000000000041e552f6487585c2b58bc2c9bb4492bc1f17132cd000000000000000000000000000000000000000000000000000000000000f4240",
            "call_value": 0
          }
        ],
        "fee_limit": 100000000
      },
      "reference_id": "my-idempotency-key-123"
    }
  }'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={"system"} theme={"system"}
  {
    "method": "tron_sendTransaction",
    "data": {
      "hash": "8a3f2b1c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1",
      "caip2": "tron:mainnet",
      "transaction_id": "8a3f2b1c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1"
    }
  }
  ```
</ResponseExample>

### Headers

<ParamField header="privy-app-id" type="string" required>
  ID of your Privy app.
</ParamField>

<ParamField header="privy-authorization-signature" type="string">
  Request authorization signature. If multiple signatures are required, they should be comma
  separated.
</ParamField>

### Path Parameters

<ParamField path="wallet_id" type="string" required>
  ID of the Tron wallet to sign and send with.
</ParamField>

### Body

<ParamField body="method" type="string" required>
  Must be `"tron_sendTransaction"`.
</ParamField>

<ParamField body="caip2" type="string">
  Tron CAIP-2 chain. Defaults to `tron:mainnet`. Use `tron:nile` for the Nile testnet.
</ParamField>

<ParamField body="params" type="object" required>
  <Expandable title="properties" defaultOpen>
    <ParamField body="params.raw_data" type="object" required>
      <Expandable title="properties" defaultOpen>
        <ParamField body="params.raw_data.contract" type="array" required>
          Array of exactly one contract object. Use `TransferContract` for native TRX transfers; use `TriggerSmartContract` for TRC-20 transfers and other smart contract calls. All addresses must be 41-prefixed hex (use `TronWeb.address.toHex()` to convert from base58check).

          **TransferContract:**

          * `type`: `"TransferContract"`
          * `owner_address`: sender, 41-prefixed hex
          * `to_address`: recipient, 41-prefixed hex
          * `amount`: sun (1 TRX = 1,000,000 sun)

          **TriggerSmartContract:**

          * `type`: `"TriggerSmartContract"`
          * `owner_address`: caller, 41-prefixed hex
          * `contract_address`: contract, 41-prefixed hex
          * `data` (optional): ABI-encoded calldata, hex string
          * `call_value` (optional): TRX value in sun sent with the call
          * `call_token_value` (optional): TRC-10 token value
          * `token_id` (optional): TRC-10 token ID
        </ParamField>

        <ParamField body="params.raw_data.fee_limit" type="number">
          Maximum energy fee in sun. Required for `TriggerSmartContract`. `100_000_000` (100 TRX) is a safe default for standard TRC-20 transfers.
        </ParamField>

        <ParamField body="params.raw_data.ref_block_bytes" type="string">
          Block reference bytes — 4 hex characters. Optional — Privy fetches fresh values if omitted.
        </ParamField>

        <ParamField body="params.raw_data.ref_block_hash" type="string">
          Block reference hash — 16 hex characters. Optional — Privy fetches fresh values if omitted.
        </ParamField>

        <ParamField body="params.raw_data.expiration" type="number">
          Expiration in Unix milliseconds. Optional — Privy sets `now + 60s` if omitted.
        </ParamField>

        <ParamField body="params.raw_data.timestamp" type="number">
          Creation timestamp in Unix milliseconds. Defaults to `Date.now()` if omitted.
        </ParamField>

        <ParamField body="params.raw_data.data" type="string">
          Transaction memo, hex-encoded. Distinct from `TriggerSmartContract.data` (calldata).
        </ParamField>
      </Expandable>
    </ParamField>

    <ParamField body="params.reference_id" type="string">
      Optional idempotency key (max 64 characters). Re-submitting the same `reference_id` returns the cached response.
    </ParamField>
  </Expandable>
</ParamField>

### Returns

<ResponseField name="method" type="string">
  Always `"tron_sendTransaction"`.
</ResponseField>

<ResponseField name="data.hash" type="string">
  Tron transaction ID — SHA-256 of the raw transaction bytes, lowercase hex, no `0x` prefix.
</ResponseField>

<ResponseField name="data.caip2" type="string">
  The CAIP-2 chain the transaction was broadcast on.
</ResponseField>

<ResponseField name="data.transaction_id" type="string">
  Privy internal transaction ID.
</ResponseField>

<ResponseField name="data.reference_id" type="string">
  Echoed back if provided in the request.
</ResponseField>
