Get wallet transaction history
https://api.triport.io/v1/sol/wallet/history/So11111111111111111111111111111111111111112?limit=2Return a paginated, time-ordered page of confirmed transactions for a Solana address, back to ~3.5 years of archive depth.
Returns a page of transaction summaries for a single Solana account, newest first.
Each item is a lightweight SolTransactionSummary — signature, slot, block time,
error status, fee, and compute units consumed — rather than a full parsed
transaction. Use it to render an activity feed, reconcile fees, or detect failed
transactions for an address without fetching every transaction body.
History is served from an internal index of signatures and transactions, so a
single call covers data that would otherwise require paging through
getSignaturesForAddress and bulk transaction lookups yourself. The archive
reaches back roughly 3.5 years.
This is a heavy read category (sol_read_rpc_heavy). It is available on the
free tier, but it is rate-limited more tightly than the latency-critical
balance endpoint — keep page sizes reasonable and use cursor pagination for
deep scans (see Notes).
Parameters
Path parameters
addressstringrequired^[1-9A-HJ-NP-Za-km-z]+$, length 32–44.Query parametersobjectlimitintegeroptional1–1000, default 50.offsetintegeroptional≥ 0, default 0.beforestringoptionaloffset for deep pagination.Response
Response fields
| Field | Type | Description |
|---|---|---|
address | string | The queried account, echoed back. |
items | array | Array of transaction summaries, newest first. |
items[].signature | string | Base58 transaction signature. |
items[].slot | integer (int64) | Slot in which the transaction was confirmed. |
items[].block_time | integer (int64) | Block time in UNIX seconds. |
items[].err | object | null | null on success; otherwise the Solana transaction error object. |
items[].fee | integer (int64) | Fee paid, in lamports. |
items[].compute_units_consumed | integer | Compute units consumed by the transaction. |
pagination.limit | integer | Page size applied (1–1000). |
pagination.offset | integer | Offset applied. |
pagination.total | integer | Total rows available; omitted when too expensive to compute. |
Errors
| Code | Meaning | When it happens |
|---|---|---|
401 | unauthorized / trial_expired / subscription_expired | Missing/invalid key, or the trial/subscription has ended. |
403 | tier_insufficient / method_unknown | Key lacks the sol_read_rpc_heavy scope, or the method is not part of the product. |
429 | rate_limited | Sustained RPS for the tier+category exceeded. Honor the Retry-After header. |
All errors share the standard envelope (error, message, request_id). See the
shared errors reference for the full schema and per-code fields.
Examples
JavaScript (fetch)
const address = "So11111111111111111111111111111111111111112";
const url = new URL(`https://api.triport.io/v1/sol/wallet/history/${address}`);
url.searchParams.set("limit", "50");
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.TRIPORT_API_KEY}` },
});
if (!res.ok) throw new Error(`history failed: ${res.status}`);
const { items, pagination } = await res.json();
console.log(`${items.length} of ${pagination.total ?? "?"} transactions`);TypeScript SDK (@triport/sdk)
import { TriportClient } from "@triport/sdk";
const client = new TriportClient({ apiKey: process.env.TRIPORT_API_KEY! });
const page = await client.sol.wallet.history(
"So11111111111111111111111111111111111111112",
{ limit: 50 },
);
for (const tx of page.items) {
const status = tx.err ? "failed" : "ok";
console.log(tx.signature, tx.slot, status, tx.fee);
}Python (triport-sdk)
import os
from triport import TriportClient
client = TriportClient(api_key=os.environ["TRIPORT_API_KEY"])
page = client.sol.wallet.history(
"So11111111111111111111111111111111111111112",
limit=50,
)
for tx in page.items:
status = "failed" if tx.err else "ok"
print(tx.signature, tx.slot, status, tx.fee)Notes
- Cursor vs. offset pagination. For deep scans, prefer the
beforesignature cursor over growingoffsetvalues: pass thesignatureof the last item from the previous page asbeforeon the next request. This is stable as new transactions arrive and avoids the cost of large offsets. totalmay be absent.pagination.totalis omitted when computing it would be expensive, so treat it as optional and page untilitemsis shorter thanlimit.- Time unit.
block_timeis UNIX seconds, not milliseconds — multiply by 1000 before constructing a JavaScriptDate. - Failed transactions. A non-
nullerrstill appears in history and still charged afee; filter onerr === nullif you only want successful activity. - Related endpoints: wallet balance, wallet tokens, and wallet NFTs.