A free Solana API is an HTTP and WebSocket endpoint that speaks Solana's JSON-RPC dialect, letting you read accounts, submit transactions, and subscribe to logs without operating a validator. It is the fastest way to get a wallet, script, or prototype talking to Solana mainnet. The tradeoff is that free endpoints are shared, rate-limited, and usually not sized for production traffic, archive queries, or high-frequency WebSocket subscriptions.
This page helps you decide whether a free Solana API is enough for your current workload, how to verify it with real JSON-RPC calls, and what to look for when you outgrow it.
Is a free Solana API enough for your workload?
Match the endpoint to the job before you write more code. Free tiers are fine for learning and light reads, but they break down quickly under sustained load, large getProgramAccounts scans, or many concurrent WebSocket clients.
| Workload | Free API fit | What to watch |
|---|---|---|
| Wallet or dApp prototype | Usually fine | Occasional 429s during demos |
| CI tests against devnet | Fine if isolated | Shared rate limits across parallel jobs |
| Read-heavy backend (balances, token accounts) | Marginal | Per-IP and per-method throttling |
Indexer or getProgramAccounts scans |
Poor | Timeouts, truncated responses |
| Trading bot or WebSocket subscriptions | Poor | Dropped sockets, reconnect storms |
| Production user-facing dApp | Not recommended | No SLA, no support path |
If your workload sits in the top two rows, a free Solana API is a reasonable starting point. If it sits in the bottom three, plan a path to a paid shared plan or a dedicated Solana node. OnFinality offers both, and you can compare options on the Solana network page and RPC pricing.
What "free" means for Solana JSON-RPC
Solana nodes expose a JSON-RPC interface over HTTP and, for subscriptions, over WebSocket. A free endpoint typically gives you:
- A public HTTP URL for standard methods like
getBalance,getAccountInfo,getLatestBlockhash, andsendTransaction. - A public WebSocket URL for
logsSubscribe,accountSubscribe, andslotSubscribe. - No API key, or a low-quota key that is easy to obtain.
What it usually does not give you:
- Guaranteed throughput or concurrency.
- Archive or historical state beyond a limited window.
- Priority access during network congestion.
- A support channel when something breaks at 2 a.m.
Free endpoints are shared infrastructure. When one user runs a heavy scan, everyone on that endpoint feels it. That is the core reason free tiers are fine for learning and risky for production.
Testing a free Solana API with real calls
Before you commit code to an endpoint, run a few checks. Start with a basic health probe using curl against the OnFinality public Solana endpoint:
curl -s https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getHealth"}'
A healthy node returns {"jsonrpc":"2.0","result":"ok","id":1}. Next, confirm you can read an account and fetch a recent blockhash, which is what most transaction flows need:
curl -s https://solana.api.onfinality.io/public \
-X POST -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"getLatestBlockhash","params":[{"commitment":"confirmed"}]}'
If you are using JavaScript, the same calls work through @solana/web3.js:
import { Connection, PublicKey } from "@solana/web3.js";
const connection = new Connection("https://solana.api.onfinality.io/public", "confirmed");
const slot = await connection.getSlot();
const balance = await connection.getBalance(new PublicKey("11111111111111111111111111111111"));
console.log({ slot, balance });
For subscriptions, use the WebSocket URL:
const ws = new WebSocket("wss://solana.api.onfinality.io/public-ws");
ws.onopen = () => {
ws.send(JSON.stringify({
jsonrpc: "2.0",
id: 1,
method: "logsSubscribe",
params: [{ mentions: ["11111111111111111111111111111111"] }, { commitment: "confirmed" }]
}));
};
ws.onmessage = (event) => console.log(event.data);
Run these against your candidate endpoint and note response times, error rates, and whether you see 429 responses under parallel load. That data, not marketing copy, tells you whether the free tier fits.
Chain settings at a glance
If you are wiring Solana into a wallet or a config file, keep these values consistent with the network you are targeting. The OnFinality Solana mainnet configuration uses the following:
| Setting | Value |
|---|---|
| Chain name | Solana Mainnet |
| Native currency | SOL (9 decimals) |
| HTTP RPC | https://solana.api.onfinality.io/public |
| WebSocket RPC | wss://solana.api.onfinality.io/public-ws |
| Block explorer | https://explorer.solana.com |
For devnet work, use the Solana Devnet network page to confirm the correct endpoint before you point tests at it. Mixing mainnet and devnet URLs is one of the most common causes of "my transaction disappeared" reports.
Where free Solana APIs break down
Free endpoints fail in predictable ways. Recognizing the failure mode saves hours of debugging.
| Symptom | Likely cause | Next step |
|---|---|---|
| HTTP 429 responses | Shared rate limit hit | Reduce concurrency or move to a paid plan |
getProgramAccounts times out |
Large scan on a shared node | Filter by dataSlice or move to a dedicated node |
| WebSocket disconnects | Idle timeout or node restart | Add reconnect logic, or use a dedicated endpoint |
sendTransaction returns "blockhash not found" |
Stale blockhash from a lagging node | Refresh blockhash and retry |
| Inconsistent slot heights | Node behind the tip | Check getSlot against a second endpoint |
| Missing historical data | No archive access on free tier | Use an archive-capable provider |
If you see two or more of these in the same week, the free tier is no longer the right tool. That is a signal to evaluate a paid shared plan or a dedicated Solana node, not to add more retry logic.
Moving from free to a production Solana API
When you decide to upgrade, treat it as a migration, not a switch. A short checklist keeps you from trading one set of problems for another.
- Inventory your methods. List every JSON-RPC method your app calls, including WebSocket subscriptions. Archive and trace methods often need a different plan than standard reads.
- Measure your peak, not your average. Free tiers often survive average load and fail at peak. Size for peak concurrency and request rate.
- Decide shared vs dedicated. Shared plans suit most dApps and backends. Dedicated Solana nodes suit indexers, trading systems, and teams that need predictable throughput and isolation. See dedicated nodes for the difference.
- Plan failover. Configure at least two endpoints in your client so a single provider issue does not take down your app.
- Add monitoring. Track error rate, p95 latency, and WebSocket reconnect counts. Alert on changes, not absolutes.
- Test before cutover. Run your full method inventory against the new endpoint in staging, then shift production traffic gradually.
OnFinality provides Solana RPC API access and dedicated node infrastructure, so you can start on a shared plan and move to a dedicated node as your workload grows. Review RPC pricing and the supported RPC networks list to confirm current coverage before you commit.
Choosing between shared and dedicated Solana access
The decision usually comes down to how much control you need over throughput and isolation.
- Shared RPC plans are cost-effective for dApps, wallets, and backends with moderate, bursty traffic. You get a managed endpoint with higher limits than a free tier, without operating a node.
- Dedicated Solana nodes give your team a node that is not shared with other customers. They suit indexers, market makers, and teams with strict latency or data-completeness requirements.
- Self-hosted nodes give maximum control but require hardware, monitoring, and upgrade work. Many teams start self-hosted and move to managed infrastructure once operational cost outweighs the savings.
If you are unsure which fits, the RPC provider selection guide walks through the evaluation criteria in more detail.
Key Takeaways
- A free Solana API is a shared JSON-RPC endpoint over HTTP and WebSocket, suitable for prototypes, learning, and light reads.
- Free tiers are rate-limited and usually lack archive access, guaranteed throughput, and support.
- Test any endpoint with
getHealth,getLatestBlockhash, and a WebSocket subscription before you build on it. - Watch for 429s, timeouts on
getProgramAccounts, and WebSocket disconnects as signals to upgrade. - Move to a paid shared plan or a dedicated Solana node when peak load, data completeness, or isolation becomes a requirement.
- Keep mainnet and devnet endpoints separate, and always configure failover.
Frequently Asked Questions
Is a free Solana API safe for production?
For most production apps, no. Free endpoints are shared and rate-limited, with no throughput guarantee or support path. They are best for prototypes, tests, and low-traffic internal tools. Production apps should use a paid shared plan or a dedicated node.
What is the difference between a free Solana API and a paid one?
Paid plans typically add higher rate limits, better isolation, archive or historical data access, priority during congestion, and a support channel. The JSON-RPC methods are the same; the difference is capacity, reliability, and accountability.
Can I use a free Solana API for WebSocket subscriptions?
Yes, but expect disconnects and idle timeouts. Build reconnect logic and avoid relying on a single free WebSocket for anything user-facing. For sustained subscriptions, use a paid or dedicated endpoint.
Does OnFinality offer a free Solana API?
OnFinality provides public Solana RPC endpoints for getting started, plus paid shared plans and dedicated Solana nodes for production workloads. Check the Solana network page and RPC pricing for current options.
Why does getProgramAccounts fail on free endpoints?
It is an expensive call that scans many accounts. Shared free nodes often time out or reject it. Use dataSlice and filters to narrow the query, or move to a dedicated node with archive access.
How do I test a free Solana API before using it?
Send a getHealth request, fetch a recent blockhash, read a known account, and open a short WebSocket subscription. Measure error rate and latency under parallel load, not just single requests.
Related resources
Originally published at OnFinality.
Top comments (0)