Choose a transport
Choose JSON-RPC, raw HTTP, QUIC or the local SWQoS agent.
Start with JSON-RPC unless your sender needs a binary interface. Every interface requires the same signed transactions and tips. A successful response is acceptance, not confirmation.
| Interface | Send | Reply | Preflight |
|---|---|---|---|
| JSON-RPC | Base58 or base64 transaction strings | Signature or bundle id; structured errors | Optional for one transaction; off by default |
| Binary HTTP | Wire bytes to POST /binary | Plain-text signature or bundle id; JSON errors | No |
| Base64 HTTP | Base64 payload to POST /plaintext | Same as binary HTTP | No |
| QUIC bidirectional stream | Wire bytes | Reply frame with error details | Optional for one transaction, at processed |
| QUIC datagram or unidirectional stream | Wire bytes | None, even on rejection | No |
| Local agent | Local HTTP, QUIC or Linux IPC | Depends on the interface | See agent preflight |
JSON-RPC
Use it with an HTTP client or Solana client library. Set encoding: "base64" if your signing library produces base64. SWQoS defaults to base58, disables preflight by default and ignores maxRetries.
Use the client helper when you need structured rejection fields. Some Solana libraries discard those fields.
Raw HTTP
Use /binary for signed wire bytes, or /plaintext for base64. Both support bundles and declared tips through the payload envelope.
Check the HTTP status before reading a success body as a signature or bundle id.
QUIC
Use a persistent connection for multiple requests. Choose bidirectional streams when you need acceptance, error details or a preflight check. Use a stream rather than a datagram when your payload exceeds the path's datagram size.
Local agent
The agent runs on your Linux host and provides local HTTP, QUIC and IPC. Its local listeners do not authenticate callers. Keep them local or restrict access: anyone who can reach them can send under your key.
Declared tips
Declared tips require setup with support, whichever transport you use.