Get mempool snapshot
https://api.triport.io/v1/sol/mempool/snapshot?limit=50Returns a point-in-time snapshot of the pending Solana transactions Triport is currently observing pre-confirmation.
Returns the current snapshot of pending transactions, each tagged with the program IDs it touches, how long ago it was first observed, and its fee.
Solana has no classic mempool: there is no shared, queryable pool of unconfirmed transactions the way Ethereum-family chains have. The data returned here is aggregated from pre-confirmation observations collected across Triport's own validator set. Treat it as a best-effort, eventually-stale view of in-flight traffic — useful for fee estimation, congestion monitoring, and spotting program-level activity spikes, but not as a guarantee that any listed transaction will land.
Each call is independent and returns whatever is in-flight at the moment it is
served, alongside the slot and observed_at timestamp that scope the
snapshot. Use GET /v1/sol/mempool/stats for rolling
aggregate metrics (throughput, latency percentiles, counts by program) instead
of the raw transaction list.
Parameters
Query parameters
limitintegeroptional1–1000, default 50.Response
Response fields
| Field | Type | Description |
|---|---|---|
slot | integer (int64) | Slot the snapshot was anchored to when observed. |
observed_at | string (date-time) | RFC 3339 timestamp of when the snapshot was taken. |
pending | array | List of pending transactions (SolPendingTx), up to limit. |
pending[].signature | string | Transaction signature (base58). Always present. |
pending[].program_ids | string[] | Program IDs invoked by the transaction. |
pending[].observed_lat_ms | number (double) | Milliseconds since the transaction was first observed. |
pending[].fee | integer (int64) | Transaction fee in lamports. |
Errors
| Code | Meaning | When it happens |
|---|---|---|
401 | unauthorized / trial_expired / subscription_expired | Missing, invalid, or expired credentials. |
403 | tier_insufficient / method_unknown | Key lacks the sol_read_rpc_heavy scope, or the method is not part of your product. Response carries an X-Required-Tier header. |
429 | rate_limited | Sustained RPS for your tier exceeded. Response carries Retry-After, X-RateLimit-Limit, and X-RateLimit-Remaining headers. |
All errors share the standard envelope — see Errors for the
full shape and the retry_after_sec / limit_rps / current_tier fields on
429.
Examples
JavaScript (fetch)
const res = await fetch(
"https://api.triport.io/v1/sol/mempool/snapshot?limit=50",
{ headers: { Authorization: `Bearer ${process.env.TRIPORT_API_KEY}` } }
);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const { slot, observed_at, pending } = await res.json();
console.log(`slot ${slot} @ ${observed_at}: ${pending.length} pending`);TypeScript SDK (@triport/sdk)
import { Triport } from "@triport/sdk";
const client = new Triport({ apiKey: process.env.TRIPORT_API_KEY! });
const snapshot = await client.sol.mempool.snapshot({ limit: 50 });
for (const tx of snapshot.pending) {
console.log(tx.signature, tx.observed_lat_ms, tx.fee);
}Python (triport-sdk)
import os
from triport import Triport
client = Triport(api_key=os.environ["TRIPORT_API_KEY"])
snapshot = client.sol.mempool.snapshot(limit=50)
for tx in snapshot.pending:
print(tx.signature, tx.observed_lat_ms, tx.fee)Notes
- Not a durable mempool. Two consecutive calls can return disjoint sets;
absence of a signature does not mean it failed, and presence does not
guarantee it lands. Anchor any reasoning to the returned
slot/observed_at. limitcaps the number of returned entries, not the size of the underlying observation set — the snapshot may be truncated. There is no pagination cursor on this endpoint.- For aggregate throughput and latency percentiles, use
GET /v1/sol/mempool/statsrather than computing them from repeated snapshots. - Rate limiting is RPS-per-tier with burst; there is no daily quota.