TriportRPC

Get wallet transaction history

GEThttps://api.triport.io/v1/sol/wallet/history/So11111111111111111111111111111111111111112?limit=2

Return a paginated, time-ordered page of confirmed transactions for a Solana address, back to ~3.5 years of archive depth.

Solanasol_read_rpc_heavyfree — RPS-per-tier with 2× burst (see [rate limits](../../rate-limits.md))

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
Solana base58 pubkey (32 bytes). Must match ^[1-9A-HJ-NP-Za-km-z]+$, length 32–44.
Query parametersobject
limitintegeroptional
Page size. 11000, default 50.
offsetintegeroptional
Rows to skip from the start of the result set. ≥ 0, default 0.
beforestringoptional
Signature cursor — return only transactions older than this signature. Preferred over offset for deep pagination.

Response

Response fields

FieldTypeDescription
addressstringThe queried account, echoed back.
itemsarrayArray of transaction summaries, newest first.
items[].signaturestringBase58 transaction signature.
items[].slotinteger (int64)Slot in which the transaction was confirmed.
items[].block_timeinteger (int64)Block time in UNIX seconds.
items[].errobject | nullnull on success; otherwise the Solana transaction error object.
items[].feeinteger (int64)Fee paid, in lamports.
items[].compute_units_consumedintegerCompute units consumed by the transaction.
pagination.limitintegerPage size applied (1–1000).
pagination.offsetintegerOffset applied.
pagination.totalintegerTotal rows available; omitted when too expensive to compute.

Errors

CodeMeaningWhen it happens
401unauthorized / trial_expired / subscription_expiredMissing/invalid key, or the trial/subscription has ended.
403tier_insufficient / method_unknownKey lacks the sol_read_rpc_heavy scope, or the method is not part of the product.
429rate_limitedSustained 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 before signature cursor over growing offset values: pass the signature of the last item from the previous page as before on the next request. This is stable as new transactions arrive and avoids the cost of large offsets.
  • total may be absent. pagination.total is omitted when computing it would be expensive, so treat it as optional and page until items is shorter than limit.
  • Time unit. block_time is UNIX seconds, not milliseconds — multiply by 1000 before constructing a JavaScript Date.
  • Failed transactions. A non-null err still appears in history and still charged a fee; filter on err === null if you only want successful activity.
  • Related endpoints: wallet balance, wallet tokens, and wallet NFTs.