# Falcon (/falcon)

> Solana transaction submission from nine metros over HTTP, QUIC and native UDP, landing through SWQoS backed by 1M+ SOL and the Jito and Harmonic bundle engines.



Falcon lands Solana transactions for people who care how fast they land. You hand it one **already-signed** transaction that pays a tip; we submit it over stake-weighted QoS backed by more than **1,000,000 SOL** of stake and, in parallel, through the Jito and Harmonic bundle engines.

**Not sure Falcon is for you?** If you're submitting at volume and latency isn't the game, `sendTransaction` on [Solana RPC](/solana-rpc/transactions) is cheaper and has no tip. If you're competing to land first, you're in the right place.

The JSON-RPC surface is `sendTransaction` and `getVersion` and nothing else, so keep a normal Solana RPC beside it for blockhashes, simulation, reads and confirmation. The whole path (check the API key with `getVersion`, build the tip, submit, confirm the signature) is the [Falcon quick start](/falcon/quickstart).

<Callout type="warn" title="Acceptance is not confirmation">
  A signature back tells you Falcon took your bytes and forwarded them, never that the transaction landed. Confirm the signature on a normal Solana RPC.
</Callout>

## Transports

The same UUID gets you onto all five. Your submission allowance belongs to that key rather than to an RPC plan, and the [dashboard](https://dashboard.corvus-labs.io) shows it.

| Transport         | Endpoint                               | API key travels in                           | Success looks like                   | Failure surface                                           |
| ----------------- | -------------------------------------- | -------------------------------------------- | ------------------------------------ | --------------------------------------------------------- |
| JSON-RPC          | `http://<region>.falcon.wtf`           | `?api-key=` query parameter                  | JSON `result` = base58 signature     | JSON-RPC error object                                     |
| HTTP `/binary`    | `http://<region>.falcon.wtf/binary`    | `?api-key=` query parameter                  | `200`, `text/plain` base58 signature | HTTP status + short plain-text message                    |
| HTTP `/plaintext` | `http://<region>.falcon.wtf/plaintext` | `?api-key=` query parameter                  | `200`, `text/plain` base58 signature | HTTP status + short plain-text message                    |
| QUIC              | `<region>.falcon.wtf:5000`             | Client certificate the SDK builds at connect | `Ok(())` from `falcon-client`        | `SubmitError`, or a connection close with a reason string |
| Native UDP        | `<region>.falcon.wtf:9000`             | First 16 bytes of every datagram             | Nothing is returned, ever            | Nothing is returned, ever                                 |

## Transaction requirements

It has to serialize to at most **1,232 bytes**, its signature count has to match the message header, and it has to pay a tip: one top-level System Program transfer to a `Fa1con1…` tip account, of at least 1,000,000 lamports (0.001 SOL). The tip accounts, and the several ways a tip quietly fails to count, are on [Falcon tips & transaction requirements](/falcon/tips); per-route body limits are on [Submission methods](/falcon/submission).

Falcon runs in nine metros; Solana JSON-RPC, WebSocket and Yellowstone gRPC run in five of them. [Falcon regions & endpoints](/falcon/regions) has the list.

<Cards>
  <Card title="Quick start" href="/falcon/quickstart" description="Submit and confirm your first transaction" />

  <Card title="Submission methods" href="/falcon/submission" description="JSON-RPC, /binary, /plaintext and the QUIC SDK" />

  <Card title="Native UDP" href="/falcon/udp" description="The exact datagram frame and every silent drop reason" />

  <Card title="Errors and retries" href="/falcon/errors" description="Exact codes, statuses and SubmitError variants per transport" />

  <Card title="FAQ" href="/falcon/faq" description="Tips, retries, UDP silence and size limits, answered short" />
</Cards>

API keys come from onboarding, and we're on [Discord](https://discord.gg/corvus-labs) when you need a human. To separate acceptance from landing in your own metrics, see [telemetry](/falcon/telemetry).
