OpenSea API
查詢 NFT 和代幣資料、瀏覽發售、串流事件,並在以太坊、Base、Arbitrum、Optimism、Polygon 等鏈上進行搜尋。
何時使用此技能 (scope_in)
在以下情況使用 opensea-api:
- 收藏詳細資訊、統計、特徵、趨勢與熱門收藏
- NFT 詳細資訊、擁有權、中繼資料更新
- 代幣詳細資訊、熱門代幣、頂級代幣、代幣群組
- 跨收藏、NFT、代幣與帳戶進行搜尋
- 搜尋與探索已註冊的 AI 代理工具 (ERC-8257)
- 讀取市集掛單、報價與訂單(不執行它們)
- 事件與活動監控(包括即時 WebSocket 串流)
- 發售與鑄造資格
- 帳戶查詢與 ENS 解析
- 經驗證的個人檔案、收藏設定、監看清單、發售、訂單取消與錢包連結操作,如
references/authentication.md所述 - 無頭式 SIWE、範圍限制的 PAT 建立、短期 JWT 交換,以及錢包驗證的 REST 或 MCP
何時不應使用此技能 (scope_out, 轉交)
| 需求 | 請改用 |
|---|---|
| 購買/出售 NFT(履行掛單或報價) | opensea-marketplace |
| 建立新的掛單或報價 | opensea-marketplace |
| 跨鏈 NFT 購買 | opensea-marketplace |
| 交換 ERC20 代幣 | opensea-swaps |
| 設定錢包簽署提供者 | opensea-wallet |
| 建構/註冊/控管 AI 代理工具 | opensea-tool-sdk |
快速開始
# 解析 API 金鑰:重複使用你的環境變數 / 快取的即時金鑰,或擷取一個
# 新的即時金鑰(無需註冊)並儲存到磁碟以供重複使用。請參閱
# 下面的「API 金鑰解析」—— 務必儲存並重複使用擷取到的金鑰。
export OPENSEA_API_KEY=$(scripts/auth/opensea-resolve-key.sh)
# 全域安裝 CLI(或使用 npx)
npm install -g @opensea/cli
# 取得收藏資訊
opensea collections get boredapeyachtclub
# 取得地板價與交易量統計
opensea collections stats boredapeyachtclub
# 取得 NFT 詳細資訊
opensea nfts get ethereum 0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d 1234
# 在 OpenSea 上搜尋
opensea search "cool cats"
# 取得熱門代幣
opensea tokens trending --limit 5
API 金鑰解析(在首次請求前閱讀此段)
每個 OpenSea 請求都需要 OPENSEA_API_KEY。如果你還沒有金鑰,
你可以擷取一個即時免費層級金鑰,無需註冊。唯一重要的
規則是:一旦你擷取了一個即時金鑰,請將其儲存到磁碟並重複使用。 請勿
在每次請求時重新擷取。第二次擷取可能會失敗,導致你沒有金鑰。
先前的成功請求
不會為你保留金鑰。
流程(按順序執行這些步驟,每次皆如此)
- 先檢查環境變數。 如果
OPENSEA_API_KEY已設定且 非空,則直接使用它。這是提供自有金鑰的使用者的路徑 —— 絕對不要覆寫或重新擷取它。 - 接著檢查磁碟。 如果沒有環境變數,請在
~/.opensea/api_key尋找快取金鑰(使用$OPENSEA_CONFIG_DIR覆寫目錄)。如果該 檔案存在且非空,則將其載入到OPENSEA_API_KEY中並使用。 - 僅在缺少時才擷取。 如果既沒有環境變數也沒有快取金鑰,
則從
POST /api/v2/auth/keys請求一個新的即時金鑰。 - 擷取後立即儲存。 將擷取到的金鑰寫入
~/.opensea/api_key(權限600)在 進行你的 API 呼叫之前,以便下一步 —— 以及所有未來的請求——重複使用它,而不是重新擷取。
scripts/auth/opensea-resolve-key.sh 輔助工具為你執行所有四個步驟,並
列印解析到的金鑰。相較於裸 curl ... /auth/keys 呼叫,請優先使用它,
後者會擷取但不儲存,而這正是導致金鑰遺失的原因:
# 有環境變數?-> 使用它。有快取金鑰?-> 重複使用。否則擷取 + 儲存到磁碟。
export OPENSEA_API_KEY=$(scripts/auth/opensea-resolve-key.sh)
opensea collections get boredapeyachtclub
如果你無法使用這個輔助工具,請以明確的順序邏輯複製相同的步驟:
KEY_FILE="${OPENSEA_CONFIG_DIR:-$HOME/.opensea}/api_key"
if [ -n "${OPENSEA_API_KEY:-}" ]; then
: # 1. 環境變數優先
elif [ -s "$KEY_FILE" ]; then
export OPENSEA_API_KEY=$(cat "$KEY_FILE") # 2. 重複使用快取金鑰
else
api_key=$(curl -s -X POST https://api.opensea.io/api/v2/auth/keys | jq -r '.api_key') # 3. 擷取
mkdir -p "$(dirname "$KEY_FILE")"
(umask 077; printf '%s\n' "$api_key" > "$KEY_FILE") # 4. 使用前先儲存
export OPENSEA_API_KEY="${api_key}"
fi
邊緣情況
- 金鑰已存在(環境變數或快取檔案): 重複使用它;不要擷取新的。 重新擷取會浪費速率限制額度,並且可能失敗。
- 金鑰無效或過期(即時金鑰在 7 天後過期;請求會回傳
HTTP
401/403):快取金鑰已過時。使用scripts/auth/opensea-resolve-key.sh --force重新擷取並覆寫快取 (或刪除~/.opensea/api_key並重新執行流程)。--force絕不覆寫 透過OPENSEA_API_KEY環境變數提供的金鑰。 - 擷取失敗(HTTP
429速率限制,或網路錯誤):請不要在 緊密迴圈中重試。如果你有快取金鑰,請繼續使用它。否則請稍後再試 ,或在 Settings → Developer 建立完整金鑰。對於 比即時免費層級更高的速率限制,請使用完整金鑰。
你也可以使用 opensea auth request-key 或 scripts/auth/opensea-auth-request-key.sh 擷取原始金鑰(JSON 回應,不持久化)——但如果你
使用這些方法,你必須依照上述步驟 4 自行儲存金鑰。
任務指南
建議: 使用
openseaCLI (@opensea/cli) 作為你的主要工具。使用npm install -g @opensea/cli安裝或使用npx @opensea/cli。scripts/中的 Shell 腳本仍可作為替代方案使用。
讀取 NFT 資料
| 任務 | CLI 指令 | 替代方案 |
|---|---|---|
| 取得收藏詳細資訊 | opensea collections get <slug> | collections/opensea-collection.sh <slug> |
| 取得收藏統計 | opensea collections stats <slug> | collections/opensea-collection-stats.sh <slug> |
| 取得熱門收藏 | opensea collections trending [--timeframe <tf>] [--chains <chains>] | collections/opensea-collections-trending.sh [timeframe] [limit] [chains] [category] |
| 取得頂級收藏 | opensea collections top [--sort-by <field>] [--chains <chains>] | collections/opensea-collections-top.sh [sort_by] [limit] [chains] [category] |
| 列出收藏中的 NFT | opensea nfts list-by-collection <slug> [--limit <n>] [--traits <json>] | collections/opensea-collection-nfts.sh <slug> [limit] [next] |
| 取得單一 NFT | opensea nfts get <chain> <contract> <token_id> | nfts/opensea-nft.sh <chain> <contract> <token_id> |
| 按錢包列出 NFT | opensea nfts list-by-account <chain> <address> [--limit <n>] | accounts/opensea-account-nfts.sh <chain> <address> [limit] |
| 按合約列出 NFT | opensea nfts list-by-contract <chain> <contract> [--limit <n>] | |
| 取得收藏特徵 | opensea collections traits <slug> | |
| 取得合約詳細資訊 | opensea nfts contract <chain> <address> | |
| 更新 NFT 中繼資料 | opensea nfts refresh <chain> <contract> <token_id> |
讀取代幣資料
| 任務 | CLI 指令 | 替代方案 |
|---|---|---|
| 取得熱門代幣 | opensea tokens trending [--chains <chains>] [--limit <n>] | get_trending_tokens (MCP) |
| 按交易量取得頂級代幣 | opensea tokens top [--chains <chains>] [--limit <n>] | get_top_tokens (MCP) |
| 取得代幣詳細資訊 | opensea tokens get <chain> <address> | get_tokens (MCP) |
| 取得代幣交換活動 | opensea tokens activity <chain> <address> [--limit <n>] [--next <cursor>] | tokens/opensea-token-activity.sh |
| 取得帳戶代幣活動 | opensea tokens account-activity <address> [--chains <chains>] [--tokens <tokens>] [--type <types>] [--limit <n>] [--next <cursor>] | |
| 列出代幣群組 | opensea token-groups list [--limit <n>] [--next <cursor>] | tokens/opensea-token-groups.sh [limit] [cursor] |
| 按 slug 取得代幣群組 | opensea token-groups get <slug> | tokens/opensea-token-group.sh <slug> |
| 搜尋代幣 | opensea search <query> --types token | search_tokens (MCP) |
| 檢查代幣餘額 | get_token_balances (MCP) |
錢包驗證的 REST 和 MCP
在作為錢包操作之前,請閱讀 錢包驗證 參考資料。其中包含 CLI 和 SDK 的快樂路徑、REST 和 MCP 標頭、憑證生命週期和復原規則。
市集查詢(唯讀)
| 任務 | CLI 指令 | 替代方案 |
|---|---|---|
| 取得收藏的最佳掛單 | opensea listings best <slug> [--limit <n>] [--traits <json>] | listings/opensea-best-listing.sh <slug> <token_id> |
| 取得特定 NFT 的最佳掛單 | opensea listings best-for-nft <slug> <token_id> | listings/opensea-best-listing.sh <slug> <token_id> |
| 取得 NFT 的最佳報價 | opensea offers best-for-nft <slug> <token_id> | offers/opensea-best-offer.sh <slug> <token_id> |
| 列出所有收藏掛單 | opensea listings all <slug> [--limit <n>] | listings/opensea-listings-collection.sh <slug> [limit] |
| 列出所有收藏報價 | opensea offers all <slug> [--limit <n>] | offers/opensea-offers-collection.sh <slug> [limit] |
| 取得收藏報價 | opensea offers collection <slug> [--limit <n>] | offers/opensea-offers-collection.sh <slug> [limit] |
| 取得特徵報價 | opensea offers traits <slug> --type <type> --value <value> | |
| 按雜湊值取得訂單 | orders/opensea-order.sh <chain> <order_hash> |
伺服器端特徵過濾
三個收藏範圍的端點接受 traits 查詢參數以進行伺服器端過濾:
| 端點 | CLI | SDK |
|---|---|---|
| 列出收藏中的 NFT | opensea nfts list-by-collection <slug> --traits <json> | client.nfts.listByCollection(slug, { traits }) |
| 收藏的最佳掛單 | opensea listings best <slug> --traits <json> | client.listings.best(slug, { traits }) |
| 收藏的事件 | opensea events by-collection <slug> --traits <json> | client.events.byCollection(slug, { traits }) |
--traits 接受一個 JSON 編碼的 { "traitType": string, "value": string } 物件陣列。多個條目以 AND 組合:
opensea nfts list-by-collection doodles-official \
--traits '[{"traitType":"Background","value":"Red"}]'
始終優先使用伺服器端過濾而非客戶端:分頁未過濾的集合會浪費速率限制額度。
搜尋
| 任務 | CLI 指令 |
|---|---|
| 搜尋收藏 | opensea search <query> --types collection |
| 搜尋 NFT | opensea search <query> --types nft |
| 搜尋代幣 | opensea search <query> --types token |
| 搜尋帳戶 | opensea search <query> --types account |
| 搜尋多種類型 | opensea search <query> --types collection,nft,token |
| 在特定鏈上搜尋 | opensea search <query> --chains base,ethereum |
事件與監控
| 任務 | CLI 指令 | 替代方案 |
|---|---|---|
| 列出近期事件 | opensea events list [--event-type <type>] [--limit <n>] | |
| 取得收藏事件 | opensea events by-collection <slug> [--event-type <type>] [--traits <json>] | events/opensea-events-collection.sh <slug> [event_type] [limit] |
| 取得特定 NFT 的事件 | opensea events by-nft <chain> <contract> <token_id> | |
| 取得帳戶事件 | opensea events by-account <address> | |
| 串流即時事件 | stream/opensea-stream-collection.sh <slug> (需 websocat) |
事件類型:sale, transfer, mint, listing, offer, trait_offer, collection_offer
發售與鑄造
| 任務 | CLI 指令 | 替代方案 |
|---|---|---|
| 列出發售(精選/即將到來/近期) | opensea drops list [--type <type>] [--chains <chains>] | drops/opensea-drops.sh [type] [limit] [chains] |
| 取得發售詳細資訊與階段 | opensea drops get <slug> | drops/opensea-drop.sh <slug> |
| 建構鑄造交易 | opensea drops mint <slug> --minter <address> [--quantity <n>] | drops/opensea-drop-mint.sh <slug> <minter> [quantity] |
| 建構跨鏈鑄造交易 | opensea drops cross-chain-mint <slug> --payer <address> --minter <address> --payment-chain <chain> --payment-token <address> [--quantity <n>] | drops/opensea-drop-cross-chain-mint.sh <slug> <payer> <minter> <payment_chain> <payment_token> [quantity] |
建構或發送發布交易(擁有者錢包,write:drops) | opensea drops publish <slug> [--send] [--wallet-provider <provider>] | |
| 建構或發送取消發布交易 | opensea drops unpublish <slug> [--send] [--wallet-provider <provider>] | |
| 將發售媒體與中繼資料上傳到 IPFS | opensea drops upload-metadata-ipfs <slug> [--wait] [--interval <s>] [--wait-timeout <s>] | |
| 檢查 IPFS 上傳進度 | opensea drops metadata-ipfs-status <slug> <workflow-execution-id> | |
| 請求中繼資料清單 CSV 上傳 | opensea drops create-manifest-upload <slug> | |
| 將檔案上傳到上傳上下文 | `opensea drops upload-file --context <path | -> --file [--index ]` |
| 部署新的 SeaDrop 合約 | deploy_seadrop_contract (MCP) | |
| 檢查部署狀態 | get_deploy_receipt (MCP) |
publish --send 使用配置的 EVM 錢包簽署,並且如果簽署者不是交易的 from(合約的鏈上擁有者)則會拒絕,因為來自任何其他地址的交易都會還原。upload-file 接受單一上傳上下文;對於 create-item-media-upload 回傳的陣列,傳遞 --index <n> 或使用 jq '.[0]' 管線傳送一個元素。當上傳失敗、未找到或超過 --wait-timeout 時,upload-metadata-ipfs --wait 以狀態 1 退出。
對於跨鏈鑄造,請依序提交每個回傳的交易。儲存回傳的 receipt_request 物件完全如接收到的狀態,然後輪詢它直到狀態為 SUCCESS。