From 97c177bbbd8b1c5fdf7f196f36b34b326742292f Mon Sep 17 00:00:00 2001 From: docs-agent Date: Thu, 7 May 2026 21:02:42 +0000 Subject: [PATCH 1/7] [docs-agent] Fix Solana DAS Try It defaults for getTokenAccounts and searchAssets Both methods rendered Try It forms whose defaulted values were rejected by the Alchemy DAS proxy: - getTokenAccounts spec listed phantom params (programId, commitment, minContextSlot, dataSlice, encoding) that the server returns 'unknown field' for. ownerAddress was required: false so the example value did not auto-fill, then the server rejected with 'Either ownerAddress or mintAddress must be provided'. - searchAssets spec marked ownerAddress optional (server enforces it on every call), used delegateAddress instead of the server's delegate, included a non-existent mutable field, and shipped a single-string grouping schema while the server requires a 2-tuple [groupKey, groupValue]. Changes: - getTokenAccounts: ownerAddress is now required: true, phantom params removed, missing supported params added (page, before, after, displayOptions, options.showZeroBalance). - searchAssets: ownerAddress is now required: true, delegateAddress renamed to delegate, mutable removed, grouping fixed to a 2-tuple shape, missing accepted params added (tokenType, compressed, compressible, supplyMint, royaltyTargetType, royaltyTarget, royaltyAmount, name, displayOptions, options.*). Verified the new defaults end-to-end against solana-mainnet.g.alchemy.com/v2/docs-demo for both methods. Refs DOCS-73 Requested-by: @dexterliu --- .../alchemy/solana-das/solana-das.yaml | 217 ++++++++++++++---- 1 file changed, 171 insertions(+), 46 deletions(-) diff --git a/src/openrpc/alchemy/solana-das/solana-das.yaml b/src/openrpc/alchemy/solana-das/solana-das.yaml index 5fc13b583..bc1071660 100644 --- a/src/openrpc/alchemy/solana-das/solana-das.yaml +++ b/src/openrpc/alchemy/solana-das/solana-das.yaml @@ -416,9 +416,25 @@ methods: $ref: ../../chains/_components/solana/asset.yaml#/components/schemas/AssetList - name: searchAssets - description: Search for assets using a complex set of filter criteria. + description: Search for assets using a complex set of filter criteria. `ownerAddress` is required. paramStructure: by-name params: + - name: ownerAddress + required: true + description: The owner address to filter by. Required by the Alchemy DAS proxy on every call, including when other filters are also provided. + schema: + $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey + - name: tokenType + required: false + description: Filter by token type. Accepted values are `fungible`, `nonFungible`, `regularNft`, `compressedNft`, and `all`. + schema: + type: string + enum: + - fungible + - nonFungible + - regularNft + - compressedNft + - all - name: sortBy required: false description: Sorting criteria for assets. @@ -444,13 +460,15 @@ methods: description: The maximum number of assets to retrieve. schema: type: integer + minimum: 1 maximum: 1000 default: 100 - name: page required: false - description: The index of the "page" to retrieve. + description: The index of the page to retrieve (1-indexed). schema: type: integer + minimum: 1 default: 1 - name: before required: false @@ -462,6 +480,11 @@ methods: description: Retrieve assets after this cursor. schema: type: string + - name: cursor + required: false + description: Cursor for pagination. Returned in the previous response. + schema: + type: string - name: negate required: false description: Invert the search filter. @@ -470,7 +493,7 @@ methods: default: false - name: conditionType required: false - description: Condition type for multiple filters. + description: How multiple filters are combined. `all` requires every filter to match; `any` matches if at least one filter matches. schema: type: string enum: @@ -482,11 +505,6 @@ methods: description: The interface of the asset. schema: $ref: ../../chains/_components/solana/asset.yaml#/components/schemas/AssetInterface - - name: ownerAddress - required: false - description: The owner address to filter by. - schema: - $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - name: ownerType required: false description: The ownership model. @@ -512,12 +530,20 @@ methods: $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - name: grouping required: false - description: Grouping criteria for assets. + description: > + Collection grouping filter. Must be a 2-element tuple of `[groupKey, groupValue]`, + for example `["collection", ""]`. schema: type: array + minItems: 2 + maxItems: 2 items: - type: string - - name: delegateAddress + - type: string + description: The grouping key (e.g., `collection`). + - type: string + description: The grouping value (e.g., the collection address). + additionalItems: false + - name: delegate required: false description: The delegate address to filter by. schema: @@ -527,6 +553,21 @@ methods: description: Filter by frozen status. schema: type: boolean + - name: burnt + required: false + description: Filter by burnt status. + schema: + type: boolean + - name: compressed + required: false + description: Filter for compressed NFTs (cNFTs) that use state compression. + schema: + type: boolean + - name: compressible + required: false + description: Filter for assets that are eligible for compression but have not yet been compressed. + schema: + type: boolean - name: supply required: false description: Supply filter criteria. @@ -539,26 +580,95 @@ methods: printCurrentSupply: type: integer description: Current print supply filter. - - name: mutable + - name: supplyMint required: false - description: Filter by mutable status. + description: Filter assets whose supply is tied to a specific mint. schema: - type: boolean - - name: burnt + $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey + - name: royaltyTargetType required: false - description: Filter by burnt status. + description: Royalty target type criteria. schema: - type: boolean + type: string + - name: royaltyTarget + required: false + description: Royalty target criteria. + schema: + type: string + - name: royaltyAmount + required: false + description: Royalty amount criteria. + schema: + type: integer - name: jsonUri required: false description: Filter by JSON URI. schema: type: string + - name: name + required: false + description: Filter assets by name (substring match). + schema: + type: string + - name: options + required: false + description: Optional response shaping flags. + schema: + type: object + properties: + showUnverifiedCollections: + type: boolean + default: false + description: Show unverified collections instead of skipping them. + showCollectionMetadata: + type: boolean + default: false + description: Show metadata for the collection. + showZeroBalance: + type: boolean + default: false + description: Display assets with zero balance. + showInscription: + type: boolean + default: false + description: Display inscription details. + showFungible: + type: boolean + default: false + description: Include fungible assets in the result. + - name: displayOptions + required: false + description: Alias for `options`. Prefer `options` in new integrations. + schema: + type: object + properties: + showUnverifiedCollections: + type: boolean + default: false + description: Show unverified collections instead of skipping them. + showCollectionMetadata: + type: boolean + default: false + description: Show metadata for the collection. + showZeroBalance: + type: boolean + default: false + description: Display assets with zero balance. + showInscription: + type: boolean + default: false + description: Display inscription details. + showFungible: + type: boolean + default: false + description: Include fungible assets in the result. examples: - name: searchAssets example params: - name: ownerAddress value: "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY" + - name: tokenType + value: "all" - name: sortBy value: sortBy: "created" @@ -665,61 +775,76 @@ methods: $ref: ../../chains/_components/solana/asset.yaml#/components/schemas/NftEditionList - name: getTokenAccounts - description: Returns token accounts based on the specified filters. + description: Returns token accounts based on the specified filters. At least one of `ownerAddress` or `mintAddress` is required. paramStructure: by-name params: - - name: mintAddress - required: false - description: The mint address to filter token accounts by. - schema: - $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - name: ownerAddress - required: false - description: The owner address to filter token accounts by. + required: true + description: The owner address to filter token accounts by. Either `ownerAddress` or `mintAddress` must be provided; `ownerAddress` is the most common. schema: $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - - name: programId + - name: mintAddress required: false - description: The program ID to filter accounts by. + description: The mint address to filter token accounts by. Can be used in place of `ownerAddress` to query all token accounts for a given mint. schema: $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - - name: commitment - required: false - description: The level of commitment desired for the query. - schema: - $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Commitment - - name: minContextSlot - required: false - description: The minimum slot that the request can be evaluated at. - schema: - $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/MinContextSlot - - name: dataSlice - required: false - description: Limit the returned account data. - schema: - $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/DataSlice - - name: encoding + - name: page required: false - description: Encoding format for account data. + description: The page of results to return (1-indexed). Use either page-based pagination (`page`) or cursor-based pagination (`cursor`/`before`/`after`), not both. schema: - $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Encoding + type: integer + minimum: 1 + default: 1 - name: limit required: false description: The maximum number of token accounts to retrieve. schema: type: integer + minimum: 1 maximum: 1000 default: 100 - name: cursor required: false - description: Cursor for pagination. + description: Cursor for pagination. Returned in the previous response. + schema: + type: string + - name: before + required: false + description: Returns results before the specified cursor. + schema: + type: string + - name: after + required: false + description: Returns results after the specified cursor. schema: type: string + - name: options + required: false + description: Optional response shaping flags. Currently supports `showZeroBalance`. + schema: + type: object + properties: + showZeroBalance: + type: boolean + default: false + description: If true, include token accounts with a zero token balance. + - name: displayOptions + required: false + description: Alias for `options`. Prefer `options` in new integrations. + schema: + type: object + properties: + showZeroBalance: + type: boolean + default: false + description: If true, include token accounts with a zero token balance. examples: - name: getTokenAccounts example params: - name: ownerAddress value: "86xCnPeV69n6t3DnyGvkKobf9FdN2H9oiVDdaMpo2MMY" + - name: limit + value: 100 result: name: Token accounts description: Returns token accounts matching the specified criteria. From 54adb9de4867220670466466be270e628802d667 Mon Sep 17 00:00:00 2001 From: docs-agent Date: Thu, 7 May 2026 21:46:57 +0000 Subject: [PATCH 2/7] [docs-agent] Solana DAS: fix supply type, sortBy enum, drop alias/conflict params MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After live-probing the Alchemy DAS proxy more carefully, several additional issues that the first commit did not address: - supply: server expects u64, our spec had it as object {printMaxSupply, printCurrentSupply}. Server returns 'invalid type: map, expected u64' on every call that includes supply. Fixed to integer. - sortBy.sortBy enum: server uses snake_case 'recent_action', our spec used camelCase 'recentAction' across all 5 DAS methods that have a sortBy block (getAssetsByAuthority, getAssetsByOwner, getAssetsByGroup, getAssetsByCreator, searchAssets). Picking 'recentAction' from the form would error with 'unknown variant'. Fixed across all 5. - options vs displayOptions: server treats them as the same field and rejects 'duplicate field options' if both are present. Removed displayOptions from both getTokenAccounts and searchAssets, kept options as the canonical name, documented the alias in the description. - ownerType vs tokenType: server treats them as mutually exclusive ('ownerType is not supported when using tokenType field'). Removed ownerType from searchAssets — tokenType is the modern, upstream-recommended way. - royaltyTargetType: was untyped string, server enforces enum [creators, fanout, single]. - royaltyTarget: was string, server expects a Pubkey (validates it). - royaltyAmount: documented basis-points range [0, 10000]. - supply: minimum 0 added. Verified end-to-end against solana-mainnet.g.alchemy.com/v2/docs-demo with the realistic Try It payload (example values + form defaults) for both methods. Refs DOCS-73 Requested-by: @dexterliu --- .../alchemy/solana-das/solana-das.yaml | 86 +++++-------------- 1 file changed, 21 insertions(+), 65 deletions(-) diff --git a/src/openrpc/alchemy/solana-das/solana-das.yaml b/src/openrpc/alchemy/solana-das/solana-das.yaml index bc1071660..031b9dc3a 100644 --- a/src/openrpc/alchemy/solana-das/solana-das.yaml +++ b/src/openrpc/alchemy/solana-das/solana-das.yaml @@ -129,7 +129,7 @@ methods: enum: - created - updated - - recentAction + - recent_action - none description: The field to sort by. sortDirection: @@ -199,11 +199,11 @@ methods: - id - created - updated - - recentAction + - recent_action - none description: > The field to sort by. Note: Only `id` is supported for cursor-based pagination - (using `before`/`after`). Sorting by `created`, `updated`, `recentAction`, or `none` + (using `before`/`after`). Sorting by `created`, `updated`, `recent_action`, or `none` requires page-based pagination (using `page`). sortDirection: type: string @@ -289,7 +289,7 @@ methods: enum: - created - updated - - recentAction + - recent_action - none description: The field to sort by. sortDirection: @@ -366,7 +366,7 @@ methods: enum: - created - updated - - recentAction + - recent_action - none description: The field to sort by. sortDirection: @@ -446,7 +446,7 @@ methods: enum: - created - updated - - recentAction + - recent_action - none description: The field to sort by. sortDirection: @@ -505,14 +505,6 @@ methods: description: The interface of the asset. schema: $ref: ../../chains/_components/solana/asset.yaml#/components/schemas/AssetInterface - - name: ownerType - required: false - description: The ownership model. - schema: - type: string - enum: - - single - - token - name: creatorAddress required: false description: The creator address to filter by. @@ -570,16 +562,10 @@ methods: type: boolean - name: supply required: false - description: Supply filter criteria. + description: Supply filter. Match assets whose supply equals this value. schema: - type: object - properties: - printMaxSupply: - type: integer - description: Maximum print supply filter. - printCurrentSupply: - type: integer - description: Current print supply filter. + type: integer + minimum: 0 - name: supplyMint required: false description: Filter assets whose supply is tied to a specific mint. @@ -587,19 +573,25 @@ methods: $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - name: royaltyTargetType required: false - description: Royalty target type criteria. + description: Royalty target type to filter by. schema: type: string + enum: + - creators + - fanout + - single - name: royaltyTarget required: false - description: Royalty target criteria. + description: The royalty target address (Pubkey) to filter by. schema: - type: string + $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - name: royaltyAmount required: false - description: Royalty amount criteria. + description: The royalty amount (in basis points) to filter by. schema: type: integer + minimum: 0 + maximum: 10000 - name: jsonUri required: false description: Filter by JSON URI. @@ -612,33 +604,7 @@ methods: type: string - name: options required: false - description: Optional response shaping flags. - schema: - type: object - properties: - showUnverifiedCollections: - type: boolean - default: false - description: Show unverified collections instead of skipping them. - showCollectionMetadata: - type: boolean - default: false - description: Show metadata for the collection. - showZeroBalance: - type: boolean - default: false - description: Display assets with zero balance. - showInscription: - type: boolean - default: false - description: Display inscription details. - showFungible: - type: boolean - default: false - description: Include fungible assets in the result. - - name: displayOptions - required: false - description: Alias for `options`. Prefer `options` in new integrations. + description: Optional response shaping flags. The server also accepts `displayOptions` as an alias of this field, but only one of `options` or `displayOptions` may be present per request. schema: type: object properties: @@ -820,17 +786,7 @@ methods: type: string - name: options required: false - description: Optional response shaping flags. Currently supports `showZeroBalance`. - schema: - type: object - properties: - showZeroBalance: - type: boolean - default: false - description: If true, include token accounts with a zero token balance. - - name: displayOptions - required: false - description: Alias for `options`. Prefer `options` in new integrations. + description: Optional response shaping flags. The server also accepts `displayOptions` as an alias of this field, but only one of `options` or `displayOptions` may be present per request. schema: type: object properties: From 1697161668b886a53f7f81bf7851e664931187a4 Mon Sep 17 00:00:00 2001 From: docs-agent Date: Thu, 7 May 2026 21:55:06 +0000 Subject: [PATCH 3/7] [docs-agent] searchAssets: drop interface filter (server rejects with tokenType) Fern's Try It auto-populates enum-typed optional fields with their first enum value when no example value is provided. With both 'interface' and 'tokenType' listed, the form sends 'interface': 'V1_NFT' alongside 'tokenType': 'all', and the server rejects with 'interface is not supported when using tokenType field'. Confirmed via live probing that 'interface' is the ONLY top-level optional that mutually excludes with 'tokenType' on the Alchemy DAS proxy. All other optionals (creatorVerified, compressed, compressible, frozen, burnt, negate, name, jsonUri, creatorAddress, authorityAddress, delegate, supplyMint, royaltyTarget, royaltyAmount, supply, royaltyTargetType) pair fine. Dropping 'interface' from the spec since 'tokenType' is the modern, upstream-recommended path and covers the common cases. Documented the exclusion in the tokenType description so callers using the raw API know the legacy interface filter still exists server-side. Verified the realistic Try It payload returns 200 OK with 50 items. Refs DOCS-73 Requested-by: @dexterliu --- src/openrpc/alchemy/solana-das/solana-das.yaml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/openrpc/alchemy/solana-das/solana-das.yaml b/src/openrpc/alchemy/solana-das/solana-das.yaml index 031b9dc3a..74b9a2a53 100644 --- a/src/openrpc/alchemy/solana-das/solana-das.yaml +++ b/src/openrpc/alchemy/solana-das/solana-das.yaml @@ -426,7 +426,10 @@ methods: $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - name: tokenType required: false - description: Filter by token type. Accepted values are `fungible`, `nonFungible`, `regularNft`, `compressedNft`, and `all`. + description: > + Filter by token type. Accepted values are `fungible`, `nonFungible`, `regularNft`, + `compressedNft`, and `all`. The Alchemy DAS proxy treats `tokenType` and the legacy + `interface` filter as mutually exclusive — prefer `tokenType` for new integrations. schema: type: string enum: @@ -500,11 +503,6 @@ methods: - all - any default: all - - name: interface - required: false - description: The interface of the asset. - schema: - $ref: ../../chains/_components/solana/asset.yaml#/components/schemas/AssetInterface - name: creatorAddress required: false description: The creator address to filter by. From d9303f2ff2c9669eaa099d5a49e0ab94ee63b021 Mon Sep 17 00:00:00 2001 From: docs-agent Date: Thu, 7 May 2026 22:32:05 +0000 Subject: [PATCH 4/7] [docs-agent] getTokenAccounts: clarify ownerAddress vs mintAddress field semantics MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported on Slack: a user pasted a wallet pubkey into the Try It form and got 0 results. The descriptions on ownerAddress ("The owner address to filter token accounts by") and mintAddress ("The mint address to filter token accounts by. Can be used in place of ownerAddress") are too terse to make the field choice obvious — a user can read mintAddress's description as 'put any address here' and end up filtering owner=86xCn AND mint=HDKX, which intersects to zero. Tightened both descriptions: - ownerAddress now explicitly says 'wallet address whose token accounts you want to list' and frames it as the common case. - mintAddress now leads with 'INSTEAD OF ownerAddress' so it is clear this is a mint, not a wallet, and tells the user to leave it empty when they only want owner-scoped results. Verified live: HDKXtYrMrSxZ9rXrSYnVX52AWVvtsojNauCfxcooMdJb passed solely as ownerAddress returns 100 token accounts; with the same value also pasted into mintAddress, the result correctly drops to 0. Refs DOCS-73 Requested-by: @dexterliu --- src/openrpc/alchemy/solana-das/solana-das.yaml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/openrpc/alchemy/solana-das/solana-das.yaml b/src/openrpc/alchemy/solana-das/solana-das.yaml index 74b9a2a53..b6277f12e 100644 --- a/src/openrpc/alchemy/solana-das/solana-das.yaml +++ b/src/openrpc/alchemy/solana-das/solana-das.yaml @@ -744,12 +744,19 @@ methods: params: - name: ownerAddress required: true - description: The owner address to filter token accounts by. Either `ownerAddress` or `mintAddress` must be provided; `ownerAddress` is the most common. + description: > + The owner (wallet) address whose token accounts you want to list. + Either `ownerAddress` or `mintAddress` must be provided; `ownerAddress` + is the common case (passing a wallet pubkey, getting back its token holdings). schema: $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - name: mintAddress required: false - description: The mint address to filter token accounts by. Can be used in place of `ownerAddress` to query all token accounts for a given mint. + description: > + The mint address to filter token accounts by. Pass this INSTEAD OF `ownerAddress` + when you want to list every token account for a given mint, or alongside + `ownerAddress` to narrow a wallet's holdings to a specific mint. + Leave empty if you only want results scoped by owner. schema: $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - name: page From b0247aa34524e968dc073fa0ac4f429150933c8e Mon Sep 17 00:00:00 2001 From: docs-agent Date: Thu, 7 May 2026 22:40:39 +0000 Subject: [PATCH 5/7] [docs-agent] searchAssets: fix tokenType enum casing (NFT, not Nft) Server's tokenType enum is case-sensitive: it accepts 'fungible', 'nonFungible', 'regularNFT', 'compressedNFT', 'all' (NFT in uppercase). Our spec had 'regularNft' / 'compressedNft' (lowercase nft) which Helius's upstream docs also use, but the Alchemy DAS proxy returns: unknown variant 'regularNft', expected one of 'fungible', 'nonFungible', 'regularNFT', 'compressedNFT', 'all' Picking either lowercase variant from the Try It enum dropdown would yield zero results / an error. Fixed the enum to match the server. The example value remains 'all' so the default Try It payload is unaffected. Refs DOCS-73 Requested-by: @dexterliu --- src/openrpc/alchemy/solana-das/solana-das.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/openrpc/alchemy/solana-das/solana-das.yaml b/src/openrpc/alchemy/solana-das/solana-das.yaml index b6277f12e..c6cd12322 100644 --- a/src/openrpc/alchemy/solana-das/solana-das.yaml +++ b/src/openrpc/alchemy/solana-das/solana-das.yaml @@ -427,16 +427,16 @@ methods: - name: tokenType required: false description: > - Filter by token type. Accepted values are `fungible`, `nonFungible`, `regularNft`, - `compressedNft`, and `all`. The Alchemy DAS proxy treats `tokenType` and the legacy + Filter by token type. Accepted values are `fungible`, `nonFungible`, `regularNFT`, + `compressedNFT`, and `all`. The Alchemy DAS proxy treats `tokenType` and the legacy `interface` filter as mutually exclusive — prefer `tokenType` for new integrations. schema: type: string enum: - fungible - nonFungible - - regularNft - - compressedNft + - regularNFT + - compressedNFT - all - name: sortBy required: false From 0a1e57b94c68f4f4eea2f365e420eb32344ba58a Mon Sep 17 00:00:00 2001 From: docs-agent Date: Fri, 8 May 2026 18:38:01 +0000 Subject: [PATCH 6/7] [docs-agent] searchAssets: drop grouping param (Fern Try It auto-fills as []) Fern's Try It auto-populates array-typed optional fields with an empty array. The Alchemy DAS server requires grouping to be a strict 2-element tuple ['', ''], so any auto-filled empty array yields: invalid length 0, expected a tuple of size 2 There is no way to express 'auto-fill with a 2-tuple matching the server' in OpenRPC's draft-07 schema in a way that produces sensible default Try It values: dropping minItems/maxItems makes Fern fill ['string'] (length 1, still rejected), adding an example forces every Try It run to filter by that specific collection, and a default-tuple value would require choosing a real collection address to put in the spec. Removing 'grouping' from the params list so the Try It form no longer auto-fills it. The collection-grouping filter is still supported by the underlying API; documented this in the searchAssets method description so power users know to pass it directly when calling the API from their own client. Verified the realistic Try It payload (example values + all schema defaults + first-enum-of-unmapped-enums + all booleans=false) now returns 33-50 items end-to-end against solana-mainnet.g.alchemy.com/v2/docs-demo. Refs DOCS-73 Requested-by: @dexterliu --- .../alchemy/solana-das/solana-das.yaml | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/openrpc/alchemy/solana-das/solana-das.yaml b/src/openrpc/alchemy/solana-das/solana-das.yaml index c6cd12322..561b05d43 100644 --- a/src/openrpc/alchemy/solana-das/solana-das.yaml +++ b/src/openrpc/alchemy/solana-das/solana-das.yaml @@ -416,7 +416,12 @@ methods: $ref: ../../chains/_components/solana/asset.yaml#/components/schemas/AssetList - name: searchAssets - description: Search for assets using a complex set of filter criteria. `ownerAddress` is required. + description: > + Search for assets using a complex set of filter criteria. `ownerAddress` is required. + Collection-grouping filters (`grouping: ["collection", "
"]`) are also supported + by the underlying API but are not exposed in this Try It form because the server + requires an exact 2-element tuple — pass `grouping` directly when calling the API + from your own client. paramStructure: by-name params: - name: ownerAddress @@ -518,21 +523,6 @@ methods: description: The authority address to filter by. schema: $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - - name: grouping - required: false - description: > - Collection grouping filter. Must be a 2-element tuple of `[groupKey, groupValue]`, - for example `["collection", ""]`. - schema: - type: array - minItems: 2 - maxItems: 2 - items: - - type: string - description: The grouping key (e.g., `collection`). - - type: string - description: The grouping value (e.g., the collection address). - additionalItems: false - name: delegate required: false description: The delegate address to filter by. From 7a4a4c47d63c70adbd9073f3dc3eb3c6750d0e8c Mon Sep 17 00:00:00 2001 From: docs-agent Date: Fri, 8 May 2026 19:34:21 +0000 Subject: [PATCH 7/7] [docs-agent] searchAssets: drop inline scalar optionals that silently zero results MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Andrei reported the example response is empty (no error, but no items). Live-reproduced the cause: Fern's Try It auto-populates inline scalar optionals (type: string and type: integer with no default and not in the example) with type-based placeholders ("string" and 1 respectively). For Pubkey-typed fields that go through a $ref, this does not happen, which is why getTokenAccounts works even with mintAddress/cursor/before/after listed. For searchAssets, four inline-scalar filters silently filter the result to zero when auto-filled: name='string' → 0 results (name substring match) jsonUri='string' → 0 results (URI exact match) royaltyAmount=1 → 0 results (basis-points exact match) supply=1 → 3 results (still narrows aggressively) Confirmed end-to-end: with all four sent, total=0 with no error — exactly Andrei's symptom. The Pubkey-typed fields (creatorAddress, authorityAddress, delegate, supplyMint, royaltyTarget) are NOT auto-filled because they go through a $ref to base-types/Pubkey, so they do not contribute. royaltyTargetType (enum) auto-fills with 'creators' and that alone returns 3 items, so it stays. Removed name, jsonUri, royaltyAmount, supply from the params list. Documented in the searchAssets method description that these (plus grouping from the previous commit) are still supported when called from a user's own client. Verified the realistic Try It payload now returns 50 items end-to-end for both the example owner and Andrei's test address. Refs DOCS-73 Requested-by: @dexterliu --- .../alchemy/solana-das/solana-das.yaml | 34 ++++--------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/src/openrpc/alchemy/solana-das/solana-das.yaml b/src/openrpc/alchemy/solana-das/solana-das.yaml index 561b05d43..22eb63fbe 100644 --- a/src/openrpc/alchemy/solana-das/solana-das.yaml +++ b/src/openrpc/alchemy/solana-das/solana-das.yaml @@ -418,10 +418,13 @@ methods: - name: searchAssets description: > Search for assets using a complex set of filter criteria. `ownerAddress` is required. - Collection-grouping filters (`grouping: ["collection", "
"]`) are also supported - by the underlying API but are not exposed in this Try It form because the server - requires an exact 2-element tuple — pass `grouping` directly when calling the API - from your own client. + + A few less common filters are accepted by the underlying API but are not exposed + in the Try It form because their values cannot be defaulted to a useful placeholder + without zeroing the result set: `name` (substring match), `jsonUri` (exact match), + `royaltyAmount` (basis-points integer match), `supply` (exact integer match), and + `grouping` (strict 2-tuple of `[groupKey, groupValue]`, e.g. `["collection", "
"]`). + Pass these directly when calling the API from your own client. paramStructure: by-name params: - name: ownerAddress @@ -548,12 +551,6 @@ methods: description: Filter for assets that are eligible for compression but have not yet been compressed. schema: type: boolean - - name: supply - required: false - description: Supply filter. Match assets whose supply equals this value. - schema: - type: integer - minimum: 0 - name: supplyMint required: false description: Filter assets whose supply is tied to a specific mint. @@ -573,23 +570,6 @@ methods: description: The royalty target address (Pubkey) to filter by. schema: $ref: ../../chains/_components/solana/base-types.yaml#/components/schemas/Pubkey - - name: royaltyAmount - required: false - description: The royalty amount (in basis points) to filter by. - schema: - type: integer - minimum: 0 - maximum: 10000 - - name: jsonUri - required: false - description: Filter by JSON URI. - schema: - type: string - - name: name - required: false - description: Filter assets by name (substring match). - schema: - type: string - name: options required: false description: Optional response shaping flags. The server also accepts `displayOptions` as an alias of this field, but only one of `options` or `displayOptions` may be present per request.