- Add the
opensea toolscommand for searching, listing, and inspecting registered AI agent tools (ERC-8257). Newsearch,get, andlistsubcommands wrap the[Beta]tool registry API, with matchingOpenSeaCLISDK methods andRegisteredToolResponse/ToolSearchPaginatedResponse/ToolListPaginatedResponsetype re-exports sourced from@opensea/api-types.
- Updated dependencies
- @opensea/api-types@0.4.4
-
8fa9fb5: Expose the new
token/{chain}/{address}/holdersandtoken/{chain}/{address}/liquidity-poolsendpoints across SDK, CLI, and skill.OpenSeaAPI.getTokenHolders(chain, address, args?)→TokenHoldersResponse— paginated holders (limit,cursor,sortBy: "QUANTITY",sortDirection) plus aggregate distribution health (STRONG | HEALTHY | CONCERNING | BAD).OpenSeaAPI.getTokenLiquidityPools(chain, address, args?)→TokenLiquidityPoolsResponse— pools with pool type, USD reserves, bonding-curve progress, graduation flag.- New type exports:
TokenHoldersResponse,TokenHoldersArgs,TokenLiquidityPoolsResponse,TokenLiquidityPoolsArgs. - New path helpers in
apiPaths.ts:getTokenHoldersPath,getTokenLiquidityPoolsPath.
opensea tokens holders <chain> <address> [--limit] [--next] [--sort-by] [--sort-direction]opensea tokens liquidity-pools <chain> <address> [--limit]- SDK class additions:
OpenSeaCLI.tokens.holders(...),OpenSeaCLI.tokens.liquidityPools(...). - New type re-exports:
TokenHoldersResponse,TokenLiquidityPoolsResponse.
tokens/opensea-token-holders.sh <chain> <address> [limit] [cursor] [sort_by] [sort_direction]tokens/opensea-token-liquidity-pools.sh <chain> <address> [limit]- Documentation: added rows to
SKILL.md(Investigation Scripts) andreferences/rest-api.md(Tokens).
Bumps consume
@opensea/api-types0.4.3 (released alongside, see the spec-sync PR for full schema details).
- Updated dependencies [96928f4]
- Updated dependencies [90702a7]
- @opensea/api-types@0.4.3
-
0bc1053: Source
EventAsset,AssetEvent,Token,TokenDetails,TokenStats, andTokenSocialsfrom@opensea/api-typesinstead of hand-rolling them.EventAssetis now an alias for the api-typesNftschema. It gainsdisplay_image_url,display_animation_url,original_image_url,original_animation_url, andtraitsfields, and relaxesname,description,image_url, andmetadata_urlfrom required to optional (matching the OpenAPI spec — these are still present in every live response we probed).AssetEventis nowAssetEventsResponse["asset_events"][number], i.e. theOrderEvent | SaleEvent | TransferEventunion from the spec. Consumers can now narrow onevent_typeto access variant-specific fields (seller,buyer,nfton sales;transfer_type,from_address,to_addresson transfers;order_type,asset,maker,takeron orders). The previous[key: string]: unknownindex signature is gone; code that read arbitrary fields off anAssetEventwill need to narrow first or cast.Token,TokenDetails,TokenStats,TokenSocialsare now aliases forTokenResponse,TokenDetailedResponse,TokenStatsResponse,TokenSocialsResponse. Field shapes are identical exceptTokenDetailsgains an optionalstatusfield ("OK" | "WARNING" | "SPAM" | "LOW_LIQUIDITY") that the live API has been returning.ChainInfo/ChainListResponseare now aliases for the api-typesChainResponse/ChainListResponse. Identical shape.TokenBalance/TokenBalancePaginatedResponseare now aliases for the api-typesTokenBalanceResponse/TokenBalancePaginatedResponse.TokenBalancegains optionalstatus,base_token_liquidity_usd, andquote_token_liquidity_usdfields that the live API returns.SearchResultCollection/SearchResultToken/SearchResultNFT/SearchResultAccount/SearchResult/SearchResponseare now aliases for api-typesCollectionSearchResponse/TokenSearchResponse/NftSearchResponse/AccountSearchResponse/SearchResultResponse/SearchResponse. Field shapes match.SwapQuote/SwapTransaction/SwapQuoteResponseare now aliases for api-typesSwapQuoteDetails/SwapTransactionResponse/SwapQuoteResponse.SwapQuotegains optionalprice_impact,swap_provider, and requiredcosts/route_errorsfields.
Most consumers won't need any changes — the same snake_case fields are still there. Code that did
event.someArbitraryFieldwill need to narrow onevent_typefirst:// Before const seller = event.seller as string; // After if (event.event_type === "sale") { const seller = event.seller; // typed as string }
-
a10c5c0: Switch
--format toonto server-side TOON encoding viaAccept: text/markdowncontent negotiation. The client-side encoder (src/toon.tsandformatToon) is gone now that os2-core supports TOON encoding server-side.--format toonstill works — it just triggers agetAsMarkdowncall instead of running a 338-line encoder client-side.Note:
formatToonis no longer exported from@opensea/cli. The CLI doesn't depend on@opensea/sdkdirectly (responses pass throughoutputGet's generic JSON formatter), so the SDK 11.0 shape changes don't affect CLI output.
- Updated dependencies [fb03c09]
- @opensea/api-types@0.4.2
-
051b558: Surface 22 new endpoints added in
@opensea/api-types0.4.0 as SDK methods and CLI commands.@opensea/sdk— new methods onOpenSeaAPI(and the underlying domain clients):getTokensBatch,getNFTsBatch,getCollectionsBatch— batch lookupscreateListingActions— ordered approval + Seaport-sign actions for new listingsdeployDropContract,getDeployContractReceipt— drop contract deploymenttransferAssets— build transactions to transfer NFTs or tokensgetCollectionOfferAggregates,getCollectionHolders,getCollectionFloorPrices— collection analyticsgetTokenPriceHistory,getTokenOhlcv,getTokenActivity— token analyticsgetNFTOwners,getNFTAnalytics— NFT analyticsgetPortfolioStats,getPortfolioHistory,getProfileOffers,getProfileOffersReceived,getProfileListings,getProfileFavorites,getProfileCollections— account profile
New internal
AssetsAPIclient; new request/response types re-exported through@opensea/sdk(from@opensea/api-types).@opensea/cli— new commands on the existingaccounts,collections,nfts,tokens,listings,dropssubcommands, plus a newassets transfersubcommand. SDK class methods mirroring the same surface added toOpenSeaCLI.No removed endpoints; pure additive release.
-
94dbf08: Sync downstream packages to the API surface introduced in
@opensea/api-types0.3.0 (os2-core#40171 + #40190): drop methods backed by removed endpoints, fix POST shapes, and surface the four new endpoints (/listings/sweep,/offers/collection/{slug}/nfts/{identifier},/swap/execute,/transactions/receipt).Removed methods (the underlying GET endpoints were deleted; they would return 404 against the new API):
OpenSeaAPI.getOrder/OrdersAPI.getOrder— was already@deprecated. UsegetBestOffer/getBestListingfor "best" orgetAllOffers/getAllListingsfor collection-wide results.OpenSeaAPI.getOrders/OrdersAPI.getOrders— was already@deprecated. UsegetAllOffers/getAllListings.OpenSeaAPI.postOrder/OrdersAPI.postOrder— was already@deprecated. UsepostListing/postOffer.OpenSeaAPI.getNFTOffers/OffersAPI.getNFTOffers— replaced bygetOffersByNFT(slug, tokenId)(new endpoint takes a collection slug, not contract address).OpenSeaAPI.getNFTListings/ListingsAPI.getNFTListings— no per-NFT all-listings endpoint exists. UsegetBestListing(slug, tokenId)for the best, orgetAllListings(slug)and filter client-side.- Helpers
getOrdersAPIPath,serializeOrdersQueryOptions,deserializeOrder— orphaned with the methods above. - Types
OrderAPIOptions,OrdersQueryOptions,OrdersQueryResponse,OrdersPostQueryResponse,ListingPostQueryResponse,OfferPostQueryResponse,SerializedOrderV2,GetOrdersResponse— unused after the deletions. - Stats fields
IntervalStat.{volume_diff, volume_change, sales_diff, average_price}andStats.{market_cap, average_price}— server stopped returning them (always0previously).
Behavior changes:
OrdersAPI.postListingandOrdersAPI.postOffernow read the bareListing/Offerresponse (the upstream API dropped the legacyorderwrapper field).OpenSeaSDK.createOfferreturnsPromise<Offer>(wasPromise<OrderV2>).OpenSeaSDK.createListingreturnsPromise<Listing>(wasPromise<OrderV2>).OpenSeaSDK.createBulkListingsreturnsPromise<BulkOrderResult<Listing>>;createBulkOffersreturnsPromise<BulkOrderResult<Offer>>.BulkOrderResultis now generic in the success type.
New methods:
OpenSeaAPI.getOffersByNFT(slug, identifier, limit?, next?)— all offers for one NFT.OpenSeaAPI.sweepCollection(request)— bulk-buy items from a collection, any payment token (incl. cross-chain).OpenSeaAPI.executeSwap(request)— multi-asset swap; companion togetSwapQuote.OpenSeaAPI.getTransactionReceipt(request)— fetch transaction status (sweep, swap, fulfillment).- New
TransactionsAPIsub-client.
OrdersResponse,SimpleAccountre-exports removed fromsrc/types/api.ts(schemas no longer exist).offers allandlistings allnow accept--maker <address>to filter by order maker.- New commands:
listings sweep— bulk-buy items from a collection with any payment token.offers by-nft <collection> <token-id>— all offers for a specific NFT.transactions receipt --request <file>— fetch transaction receipt/status (request body via JSON file).
- New SDK helpers:
OpenSeaCLI.transactions.receipt,SwapsAPI.executeMulti(POST/swap/execute).
opensea-api/references/rest-api.md— endpoint tables refreshed: removed deleted GET rows, added?maker=annotations, addedlistings/sweep, per-NFT offers,swap/execute, andtransactions/receiptrows.opensea-marketplace/references/marketplace-api.md— replaced "Get listings/offers for specific NFT" sections (which curled the removed endpoints) with the slug-based replacements.
- Updated dependencies [7a51fd0]
- @opensea/api-types@0.3.0
-
9ecf704: Provider-aware wallet hardening across Privy, Turnkey, Fireblocks, and Bankr.
@opensea/wallet-adapters- New
WalletInfodiscriminated union exported. - New optional
getWalletInfo()method onWalletAdapter(implemented by all four managed providers). - Privy adapter: optional
PRIVY_AUTH_SIGNING_KEYenv var enablesprivy-authorization-signatureheader on/rpcrequests via@privy-io/node(added as optional peer dependency), supporting theowner_id+additional_signerhardening pattern. - Privy adapter:
personal_signnow sendsparams.encoding("utf-8" / "hex") to satisfy Privy's RPC schema (was previously omitting this and getting 400s on owner-gated wallets). - Privy adapter: 401 errors with
Invalid app ID or app secretbody now include aprintf %shint for theechovsecho -ndebugging dead-end. - Top-of-file security-model docstrings on all four adapters declaring signing-only intent and forbidding mutation surfaces.
@opensea/cli- New
opensea walletcommand group with three subcommands:wallet info— provider-aware posture readout, hardening warnings to stderr, structured info to stdout.wallet create— Privy-only,POST /v1/wallets. Optional--owner-public-keyregisters anowner_idat create time. Narrow mutation surface: creates new resources only.wallet generate-auth-key— pure-local P-256 keypair generation, no API calls.
- New
- Updated dependencies [9ecf704]
- @opensea/wallet-adapters@0.3.0
- 16f4b7e: Re-export
BankrAdapterandBankrConfigfrom@opensea/wallet-adapters. Theswaps executecommand description now lists Bankr alongside Privy, Turnkey, and Fireblocks.createWalletFromEnv()already auto-detects Bankr whenBANKR_API_KEYis set; this just makes the named adapter directly importable from@opensea/cli. - Updated dependencies [a81071b]
- @opensea/wallet-adapters@0.2.0
-
961f2c5: fix(api): consume cross-chain fulfillment types from
@opensea/api-typesThe cross-chain fulfillment types added in the previous release were hand-rolled in
packages/sdk/src/api/types.tsandpackages/cli/src/types/api.tsrather than generated from the OpenAPI spec. This release pulls them from@opensea/api-types(the source of truth) so future spec changes flow through automatically.@opensea/api-types: Adds named exports forCrossChainFulfillmentRequest,CrossChainFulfillmentResponse,CrossChainPaymentToken,FulfillerObject, andListingObjectschemas (regenerated from the production OpenAPI spec).@opensea/sdk(type rename — minimal-impact since the prior release shipped <1 day ago):CrossChainListing→ListingObjectCrossChainFulfillmentDataRequest→CrossChainFulfillmentRequestCrossChainFulfillmentDataResponse→CrossChainFulfillmentResponseCrossChainTransaction→SwapTransactionResponse
The runtime call signature on
BaseOpenSeaSDK.getCrossChainFulfillmentData()is unchanged.@opensea/cli(type rename — same minimal impact):CrossChainFulfillmentTransaction→SwapTransactionResponseCrossChainFulfillmentDataResponse→CrossChainFulfillmentResponse
Adds a new blocking CI check (
pnpm check-api-paths) that fails when an/api/v2/...URL referenced in SDK or CLI source is not present inpackages/api-types/opensea-api.json. AGENTS docs updated to make the api-types-first flow explicit for new endpoints. -
Updated dependencies [961f2c5]
- @opensea/api-types@0.2.3
-
fc44d9f: feat: add cross-chain fulfillment support
Add support for the new
POST /api/v2/listings/cross_chain_fulfillment_dataendpoint across SDK, CLI, and skill packages.SDK: New
getCrossChainFulfillmentData()method on both the API client and the base SDK class. Accepts listings, fulfiller, payment token (chain + address), and optional recipient. Returns ordered transactions to sign and submit.CLI: New
listings cross-chain-fulfillsubcommand with--hashes,--listing-chain,--protocol-address,--fulfiller,--payment-chain,--payment-token, and optional--recipientflags. Supports sweeping multiple listings via comma-separated hashes.Skill: New
opensea-cross-chain-fulfill.shscript and updated SKILL.md with cross-chain buying workflow documentation.
- d247639: Replace duplicated wallet adapter implementations with
@opensea/wallet-adapterspackage. All adapter code (Privy, Turnkey, Fireblocks, PrivateKey) now comes from the shared package, reducing ~1200 lines of duplicated code. The CLI re-exports all wallet types and adapters from@opensea/wallet-adaptersalongside the CLI-specific chain resolution utilities (CHAIN_IDS,resolveChainId).
- 4a76bc1: Add
--traits <json>flag tonfts list-by-collection,listings best, andevents by-collectionfor server-side trait filtering. Accepts a JSON-encoded array of{ traitType, value }filters; multiple entries are AND-combined. Programmatic SDK methods (client.nfts.listByCollection,client.listings.best,client.events.byCollection) accept a structuredTraitFilter[]array.
-
bc9c6ce: Add token-groups and instant API key endpoints.
SDK:
sdk.api.getTokenGroups({ limit?, cursor? })andsdk.api.getTokenGroup(slug)for the new/api/v2/token-groupsendpoints.OpenSeaSDK.requestInstantApiKey()andOpenSeaAPI.requestInstantApiKey()— static methods that callPOST /api/v2/auth/keyswithout authentication and return a free-tier key you can pass into the SDK constructor. Rate limited to 3 keys/hour per IP; keys expire after 30 days.OpenSeaAPIclass is now exported from the package root (@opensea/sdkand@opensea/sdk/viem).
CLI:
- New
opensea token-groups listandopensea token-groups get <slug>commands. - New
opensea auth request-keycommand — works without--api-key/OPENSEA_API_KEYsince the endpoint is unauthenticated.
- Updated dependencies [5b6ba13]
- @opensea/api-types@0.2.1
- 497b636: Add missing API wrapper methods for full OpenAPI spec coverage:
getNFTCollection()— get the collection an NFT belongs togetNFTMetadata()— get raw NFT metadata (name, description, image, traits)- Expose
fulfillPrivateOrder()as a public method onOpenSeaSDK
- 6bb30d7: Fix
--versionto report correct version; auto-convert decimal quantities in swap commands
-
b3a5e84: Add drops endpoints, trending/top collections, and account resolve
- api-types: Sync OpenAPI spec with 6 new endpoints and 8 new schemas (drops, trending/top collections, account resolve)
- SDK: New DropsAPI class, extended CollectionsAPI and AccountsAPI with new methods
- CLI: New
dropscommand,collections trending/topsubcommands,accounts resolvesubcommand
-
f82c035: Replace hardcoded chain ID maps with codegen from OpenSea REST API
- SDK: Fix Blast chain ID from 238 (testnet) to 81457 (mainnet)
- CLI: Add chains previously only in SDK (b3, flow, ronin, etc.)
- CLI: Remove
bsc,sepolia,base_sepolia,monad_testnetfromCHAIN_IDS— these are not in the OpenSea API - Add
pnpm sync-chainscodegen script (fetches GET /api/v2/chains as source of truth)
-
Updated dependencies [b3a5e84]
- @opensea/api-types@0.2.0