searchAssets
https://api.triport.io/solFull-text and filter search across the Solana Digital Asset Standard (DAS) asset index.
searchAssets queries Triport's Digital Asset Standard (DAS) index, returning
a paginated list of assets that match a combination of filters — owner,
creator, authority, collection grouping, compression state, royalty
configuration, interface type, and more. Unlike point lookups such as
getAsset (single asset by id) or getAssetsByOwner (assets for one wallet),
searchAssets lets you compose several criteria in one request, making it the
right tool for building marketplace listings, portfolio views, and collection
explorers.
Use it when you need to filter the asset universe by attributes rather than
fetch a known id. Results are returned in pages; iterate with the page
parameter (or cursor parameters) until fewer than limit items are returned.
Because this method requires the basic tier or higher, free-tier API keys
will receive an authorization error. The method shares the sol_das scope with
the other Digital Asset Standard methods.
Parameters
JSON-RPC params is a single named object (not a positional array). All
fields are optional, but at least one filter should be supplied to avoid
scanning the entire index.
ownerAddressstringoptionalcreatorAddressstringoptionalauthorityAddressstringoptionalgrouping[string, string]optional["collection", "<mint>"].compressedbooleanoptionaltrue to return only compressed (cNFT) assets.burntbooleanoptionalfrozenbooleanoptionalinterfacestringoptional"V1_NFT", "ProgrammableNFT".royaltyTargetTypestringoptional"creators", "fanout", or "single".royaltyTargetstringoptionalroyaltyAmountintegeroptionaltokenTypestringoptional"fungible", "nonFungible", "compressedNft", "regularNft", or "all".pageintegeroptional1.limitintegeroptional1000. Defaults to 1000.sortByobjectoptional{ "sortBy": "created" | "updated" | "recentAction" | "id", "sortDirection": "asc" | "desc" }.beforestringoptionalafterstringoptionalResponse
Response fields
| Field | Type | Description |
|---|---|---|
result.total | integer | Number of items in this page. |
result.limit | integer | Page size that was applied. |
result.page | integer | Page number echoed back. |
result.items | array | Matched assets. |
items[].id | string | Asset id (mint / cNFT leaf id). |
items[].interface | string | DAS interface type. |
items[].content | object | Metadata: json_uri, metadata.name, metadata.symbol, files, attributes. |
items[].compression | object | Compression state — compressed, tree, leaf_id. |
items[].grouping | array | Collection grouping entries (group_key/group_value). |
items[].ownership | object | owner, ownership_model, frozen, delegated. |
items[].royalty | object | royalty_model, basis_points, primary_sale_happened. |
items[].burnt | boolean | Whether the asset has been burned. |
The result envelope follows the DAS asset shape and is provisional pending
api.2.2.
Errors
Errors use the standard JSON-RPC error envelope. The cases most relevant to this method:
| Code | Meaning | When it happens |
|---|---|---|
-32002 | tier_insufficient (HTTP 403) | Called with a free-tier key — searchAssets requires basic tier or higher. |
-32003 | rate_limited (HTTP 429) | Sustained RPS for the sol_das category exceeded; honor the Retry-After header. |
-32601 | method_unknown (HTTP 403) | Method name misspelled or not part of the Solana product. |
-32602 | Invalid params | Malformed filter object, bad address, or limit out of range. |
Example tier_insufficient response (a free-tier key calling a DAS method):
{
"jsonrpc": "2.0",
"id": "1",
"error": {
"code": -32002,
"message": "Method 'searchAssets' requires basic tier or higher",
"data": {
"current_tier": "free",
"required_tier": "basic",
"method": "searchAssets",
"category": "sol_das",
"upgrade_url": "https://triport.io/upgrade/basic"
}
}
}See the shared errors reference for the full error envelope and the typed error schemas. Rate limiting is RPS-per-tier with burst — there is no daily quota.
Examples
JavaScript (fetch)
const res = await fetch("https://api.triport.io/sol", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.TRIPORT_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
jsonrpc: "2.0",
id: "1",
method: "searchAssets",
params: {
ownerAddress: "N4f6zftYsuu4yT7icsjLwh4i6pB1zvvKbseHj2NmSQw",
compressed: true,
page: 1,
limit: 100,
},
}),
});
const { result } = await res.json();
console.log(`${result.total} assets on page ${result.page}`);TypeScript SDK (@triport/sdk)
import { Triport } from "@triport/sdk";
const triport = new Triport({ apiKey: process.env.TRIPORT_API_KEY! });
const result = await triport.solana.searchAssets({
ownerAddress: "N4f6zftYsuu4yT7icsjLwh4i6pB1zvvKbseHj2NmSQw",
compressed: true,
page: 1,
limit: 100,
});
for (const asset of result.items) {
console.log(asset.id, asset.content?.metadata?.name);
}Python (triport-sdk)
import os
from triport import Triport
triport = Triport(api_key=os.environ["TRIPORT_API_KEY"])
result = triport.solana.search_assets(
owner_address="N4f6zftYsuu4yT7icsjLwh4i6pB1zvvKbseHj2NmSQw",
compressed=True,
page=1,
limit=100,
)
for asset in result["items"]:
print(asset["id"], asset["content"]["metadata"]["name"])Notes
- Pagination: start at
page: 1and increment until a page returns fewer thanlimititems. For deep result sets, prefer thebefore/aftercursor parameters over page numbers for stable iteration. - Combine filters narrowly. Supplying several criteria (owner + grouping +
tokenType) keeps responses small and fast; an unfiltered search scans a large index and is more likely to hit rate limits. - Related methods:
getAsset(single asset by id),getAssetsByOwner,getAssetsByGroup,getAssetsByCreator, andgetAssetsByAuthority— all in thesol_dasscope, all basic+. - Tier: free-tier keys cannot call any
sol_dasmethod; upgrade to basic or higher. - Stability: finalized parameter and result schemas, plus the published
per-tier RPS limits, arrive with spec version
api.2.2.