> For the complete documentation index, see [llms.txt](https://docs.triton.one/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.triton.one/solana/rpc-methods/sending-transactions/sendtx.md).

# sendTx

POST /sendtx submits a serialized Solana transaction over plain HTTP to Triton's Jet sending engine, without JSON-RPC.

`/sendtx` is available on Triton's Solana mainnet endpoints. Devnet and testnet support depends on the pool, so check with Triton before relying on it there.

## Why use it over sendTransaction

A `sendTransaction` call wraps your transaction in a JSON-RPC envelope, which adds overhead at every stage. `/sendtx` strips that away:

* **No JSON parsing.** The server reads your transaction bytes directly, with no JSON deserialisation.
* **Fewer CORS preflights.** A `text/plain` body (base58, or base64 with `encoding=base64`) is a CORS-safelisted request, so browsers skip the preflight `OPTIONS` round-trip. Raw bytes (`application/octet-stream`) and the `Solana-ForwardingPolicies` header each make the browser send a preflight first.
* **Smaller payloads.** Without the `jsonrpc`, `id`, `method`, and `params` wrapper, the request body is smaller on the wire.
* **Simpler clients.** A single HTTP `POST`, with no Solana JSON-RPC client library.

This suits browser apps that are sensitive to preflight latency and high-frequency backends sending large volumes. If you need full `sendTransaction` options such as `skipPreflight`, keep using [sendTransaction](/solana/rpc-methods/sending-transactions/sendtransaction.md).

## Request

| Field  | Value     |
| ------ | --------- |
| Method | `POST`    |
| Path   | `/sendtx` |

Send the serialized transaction as the request body, one of two ways:

* **Raw bytes.** Set `Content-Type: application/octet-stream` and send the transaction as a binary payload.
* **Encoded string.** Set `Content-Type: text/plain` and send the transaction as base58 or base64 text, with the `encoding` parameter set to match. Any `Content-Type` other than `application/octet-stream`, or none, is read as text.

### Query parameters

| Parameter     | Values              | Required    | Description                                                                                                                                                                                |
| ------------- | ------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `encoding`    | `base58`, `base64`  | No          | Encoding of a text-body transaction. Defaults to `base58`. Not allowed with `Content-Type: application/octet-stream`.                                                                      |
| `response`    | `signature`, `none` | Recommended | `signature` returns the transaction signature in the response body on success. `none`, the default, returns an empty body.                                                                 |
| `max_retries` | integer             | No          | Accepted for compatibility, but it has no effect: Triton doesn't retry or rebroadcast on the server. Rebroadcast from your client until the transaction confirms or its blockhash expires. |

### Optional headers

| Header                      | Description                                                                                                                                                                                                                                                                                                  |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `Solana-ForwardingPolicies` | Comma-separated [Yellowstone Shield](/solana/sending-transactions/shield-mev-protection.md) policy addresses (policy PDAs) to apply when forwarding. Entries that aren't valid addresses are ignored. This header is read only on `/sendtx`; with `sendTransaction`, use the `forwardingPolicies` parameter. |

## Examples

{% tabs %}
{% tab title="Raw bytes" %}

```bash
curl -X POST 'https://<your-endpoint>.mainnet.rpcpool.com/<your-token>/sendtx?response=signature' \
  -H 'Content-Type: application/octet-stream' \
  --data-binary @transaction.bin
```

{% endtab %}

{% tab title="Base64" %}

```bash
curl -X POST 'https://<your-endpoint>.mainnet.rpcpool.com/<your-token>/sendtx?encoding=base64&response=signature' \
  -H 'Content-Type: text/plain' \
  -d '<base64-encoded-transaction>'
```

{% endtab %}

{% tab title="Base64 + Shield policy" %}

```bash
curl -X POST 'https://<your-endpoint>.mainnet.rpcpool.com/<your-token>/sendtx?encoding=base64&response=signature' \
  -H 'Content-Type: text/plain' \
  -H 'Solana-ForwardingPolicies: <policy-address>' \
  -d '<base64-encoded-transaction>'
```

{% endtab %}
{% endtabs %}

## Response

On success, the endpoint returns **HTTP 200**. If `response=signature` was set, the body is the transaction signature as plain text. Otherwise the body is empty, and you derive the signature client-side from the signed transaction before submitting, since it is deterministic.

An invalid request returns **HTTP 400** with a plain-text error message: for example, an unsupported `encoding` or `response` value, `encoding` sent with `application/octet-stream`, an empty body, or a body that doesn't decode to a valid transaction. Methods other than `POST` return **HTTP 405**, except the CORS preflight `OPTIONS` request. Rate limiting and server errors return other 4xx or 5xx statuses.

`/sendtx` is submission only: it does not simulate or support other RPC methods. For rebroadcasting, see [Best practices](/solana/sending-transactions/best-practices.md). For competitive priority fees, see [getRecentPrioritizationFees](/solana/rpc-methods/sending-transactions/getrecentprioritizationfees.md).

***

<i class="fa-life-ring">:life-ring:</i> Contact support by clicking the chat icon in your [customer dashboard](https://customers.triton.one)\ <i class="fa-briefcase">:briefcase:</i> Sales questions? [Contact us](https://triton.one/contact)\ <i class="fa-sparkles">:sparkles:</i> AI agent? Read [llms.txt](https://docs.triton.one/llms.txt)\ <i class="fa-rss">:rss:</i> Follow updates: [Blog](https://blog.triton.one) · [X](https://x.com/triton_one) · [YouTube](https://www.youtube.com/@triton_one_ltd) · [Telegram](https://t.me/tritonone) · [GitHub](https://github.com/rpcpool)
