> For the complete documentation index, see [llms.txt](https://docs.triton.one/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.triton.one/solana/reading-account-state/metaplex-das-api.md).

# Metaplex DAS API

Metaplex DAS API overview on Solana: NFTs, compressed NFTs, fungible and Token-2022 tokens, getAsset and searchAssets, pagination, and billing.

Decompression and data caching are done server-side. DAS is available on most Triton Solana endpoints, shared and dedicated, and is not offered on testnet. If your endpoint does not serve DAS, contact support.

Triton's open-source DAS work includes ingestion re-architected onto Yellowstone gRPC, new parsers for fungible tokens and Token-2022, and a query rework that brings `getAsset` to \~50 ms at P90.

## Features and benefits

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><i class="fa-clock-rotate-left">:clock-rotate-left:</i> <strong>Asset transaction history</strong></td><td>The transaction signatures for any compressed asset.</td><td></td></tr><tr><td><i class="fa-wallet">:wallet:</i> <strong>Easy token data</strong></td><td>Current holders and balances for any token.</td><td></td></tr><tr><td><i class="fa-filter">:filter:</i> <strong>Search and filter</strong></td><td>Find assets by owner, creator, authority, or collection.</td><td></td></tr><tr><td><i class="fa-shapes">:shapes:</i> <strong>Every asset type</strong></td><td>One interface across regular and programmable NFTs, compressed NFTs, MPL Core, fungible tokens, and Metaplex agent tokens.</td><td></td></tr><tr><td><i class="fa-box-open">:box-open:</i> <strong>Server-side decompression</strong></td><td>Merkle proofs and decompressed metadata for compressed assets, served by the API.</td><td></td></tr></tbody></table>

## Supported methods

The API follows JSON-RPC 2.0. Every method's parameters and example request and response are in the [DAS API reference](/solana/rpc-methods/readme/das-api.md).

| Method                                                        | Returns                                                                                                                             |
| ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `getAsset`                                                    | A single asset by ID: metadata, ownership, royalty, and collection                                                                  |
| `getAssets` (also `getAssetBatch`)                            | Up to 1000 assets by ID in one call                                                                                                 |
| `getAssetProof`, `getAssetProofs` (also `getAssetProofBatch`) | Merkle proofs for compressed assets. `getAssetProofs` takes up to 1000 IDs                                                          |
| `getAssetsByOwner`                                            | Assets owned by an address                                                                                                          |
| `getAssetsByAuthority`                                        | Assets controlled by an authority                                                                                                   |
| `getAssetsByCreator`                                          | Assets created by a creator address                                                                                                 |
| `getAssetsByGroup`                                            | Assets in a group, for example a collection                                                                                         |
| `searchAssets`                                                | Assets matching your search criteria                                                                                                |
| `getTokenAccounts`                                            | Token accounts by owner or mint. Needs `ownerAddress` or `mintAddress`. Hides zero-balance accounts unless `showZeroBalance` is set |
| `getTokenLargestAccounts`                                     | The 20 largest token accounts for a mint                                                                                            |
| `getNftEditions`                                              | Edition NFTs printed from a master edition                                                                                          |
| `getSignaturesForAsset` (also `getAssetSignatures`)           | Transaction signatures for a compressed asset. Pass `id`, or `tree` and `leafIndex`, not both                                       |

## Get started

DAS is enabled by default on most Triton endpoints. Point DAS calls at your endpoint:

* **Backend:** `https://<your-endpoint>.<network>.rpcpool.com/<your-token>`, or pass your token as an `x-token` header.
* **Frontend:** `https://<your-endpoint>.<network>.rpcpool.com/`, with your domain set as an allowed origin in your [customer dashboard](https://customers.triton.one).

Your [rate and connection limits](/using-your-endpoint/rate-and-connection-limits.md) apply to DAS calls.

### Fetch an asset

`getAsset` returns one asset by ID. The example uses a Mad Lads NFT, so the response carries the asset's metadata, owner, royalty, and collection:

```bash
curl https://<your-endpoint>.mainnet.rpcpool.com/<your-token> \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "getAsset",
    "params": { "id": "F9Lw3ki3hJ7PF9HQXsBzoY8GyE6sPoEZZdXJBsTTD2rk" }
  }'
```

Metaplex publishes a JavaScript DAS client with examples: [digital-asset-standard-api](https://github.com/metaplex-foundation/digital-asset-standard-api/tree/main/clients/js#examples). For the protocol and asset model, see the [Metaplex DAS API documentation](https://www.metaplex.com/docs/dev-tools/das-api).

## Pagination and sorting

Methods that return a list of assets page through results:

| Parameter         | Rule                                                                                                |
| ----------------- | --------------------------------------------------------------------------------------------------- |
| `limit`           | Default `1000`, maximum `1000`.                                                                     |
| `page`            | Starts at `1`. `page: 0` returns an error. Can't be combined with `before`, `after` or `cursor`.    |
| `before`, `after` | Asset IDs to page from. Can't be combined with `cursor`. Work only with `sortBy` `id`, the default. |
| `cursor`          | The cursor from the previous response. Works only with `sortBy` `id`, the default.                  |

`sortBy` is an object: `{ "sortBy": "<field>", "sortDirection": "asc" }`. The field is `id`, `created`, `updated`, `recent_action` or `none`. `sortDirection` is `asc` (default) or `desc`. Any `sortBy` other than `id` needs `page`; without it the call returns a pagination error.

`displayOptions` takes these flags, all `false` by default: `showUnverifiedCollections`, `showCollectionMetadata`, `showZeroBalance`, `showInscription` and `showFungible`.

DAS methods with named parameters reject unknown fields, so a misspelled or misplaced parameter returns an error.

## Fungible tokens and Token-2022

The DAS API indexes all mints and token accounts for the Solana Token Program and the Token Extensions (Token-2022) Program, so you can query token balances, metadata, and program details alongside NFTs.

Balances can be queried across:

* SPL tokens
* Token-2022 tokens
* NFTs, both regular and compressed

These methods cover fungible tokens:

* `getAsset` — details of a specific token mint.
* `getAssetsByOwner` — the tokens held by an account. It returns fungible tokens only when you set `"displayOptions": { "showFungible": true }`.
* `searchAssets` — search with filters, including `tokenType` (`fungible`, `nonFungible`, `regularNFT`, `compressedNFT` or `all`). `tokenType` needs `ownerAddress` and can't be combined with `ownerType` or `interface`.

### Query every token an address holds

```json
{
    "jsonrpc": "2.0",
    "id": "string",
    "method": "searchAssets",
    "params": {
        "ownerAddress": "5aZZ4duJUKiMsJN9vRsoAn4SDX7agvKu7Q3QdFWRfWze",
        "tokenType": "all"
    }
}
```

Each fungible token in the response carries a `token_info` object at the top level of the asset, outside `content`, with its supply, decimals, token program, mint and freeze authorities, balance, and associated token address:

```json
{
    "id": "TokenMintAddress",
    "token_info": {
        "supply": 500000000000,
        "decimals": 9,
        "token_program": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
        "mint_authority": "MintAuthorityPublicKey",
        "freeze_authority": "FreezeAuthorityPublicKey",
        "balance": 1000000000,
        "associated_token_address": "H7iLu4DPFpzEx1AGN8BCN7Qg966YFndt781p6ukhgki9"
    },
    "content": {
        "metadata": {
            "name": "Jito Staked SOL",
            "symbol": "JitoSOL",
            "token_standard": "Fungible"
        }
    }
}
```

### Token-2022 extensions

For Token-2022 mints, the response includes a `mint_extensions` field when applicable. For example, a mint with a transfer fee:

```json
{
    "mint_extensions": {
        "transfer_fee_config": {
            "withheld_amount": 0,
            "older_transfer_fee": {
                "epoch": 450,
                "maximum_fee": 1000000000,
                "transfer_fee_basis_points": 250
            },
            "newer_transfer_fee": {
                "epoch": 500,
                "maximum_fee": 1000000000,
                "transfer_fee_basis_points": 500
            },
            "withdraw_withheld_authority": "AuthorityPublicKey",
            "transfer_fee_config_authority": "AuthorityPublicKey"
        }
    }
}
```

## Pricing

* DAS is billed on requests and bandwidth. For rates, see [pricing](https://triton.one/pricing).
* On shared infrastructure, `getTokenLargestAccounts` is billed as a standard RPC call.
* Your usage per product is in the [customer dashboard](https://customers.triton.one) under **Billing** → **Usage charts**. For how each product is billed, see [How usage is billed](/account-and-billing/plans-and-billing.md#how-usage-is-billed).

## What's next

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>DAS API reference</strong></td><td>Parameters and example request and response for every DAS method.</td><td><a href="/solana/rpc-methods/readme/das-api.md">Metaplex DAS API methods</a></td></tr><tr><td><i class="fa-list-check">:list-check:</i> <strong>Best practices</strong></td><td>Batch, trim, filter and stream account state reads, and handle 429s.</td><td><a href="/solana/reading-account-state/best-practices.md">Reading account state best practices</a></td></tr></tbody></table>

***

<i class="fa-life-ring">:life-ring:</i> Contact support by clicking the chat icon in your [customer dashboard](https://customers.triton.one)\ <i class="fa-briefcase">:briefcase:</i> Sales questions? [Contact us](https://triton.one/contact)\ <i class="fa-sparkles">:sparkles:</i> AI agent? Read [llms.txt](https://docs.triton.one/llms.txt)\ <i class="fa-rss">:rss:</i> Follow updates: [Blog](https://blog.triton.one) · [X](https://x.com/triton_one) · [YouTube](https://www.youtube.com/@triton_one_ltd) · [Telegram](https://t.me/tritonone) · [GitHub](https://github.com/rpcpool)
