{"openapi":"3.1.0","info":{"title":"OSWiki Public API","version":"2.0.0","description":"Read OSWiki market data and trade on the OSWiki orderbook programmatically. \n\n**Getting started** - get an instant key with no account: `curl -X POST https:\/\/api.oswiki.xyz\/v1\/auth\/keys`. It answers `data.key` (`oswk_...`); send it in the `X-API-Key` header. An instant key allows 60 requests per minute and expires after 7 days (a 401 then says so; request a new one). Each IP gets 3 instant keys per 24 hours. For a permanent key with a higher limit, sign in and create one at https:\/\/oswiki.xyz\/account?section=developer (Account \u2192 Developer).\n\n**Data** - collections (profile, verification, live stats), tokens (media, traits, rarity, current listing) and recent sales on Ethereum and ApeChain, every payload carrying `urls` that link back to the matching oswiki.xyz page. Collections are addressable by slug OR contract address; pass `chainId` because the same address can exist on more than one chain. \n\n**Trading** - OSWiki listings are Seaport 1.6 orders (OpenSea conduit, no zone) on Ethereum and ApeChain, signed by the seller and checked on-chain by OSWiki. List: build the order from `GET \/v1\/orders\/params`, sign it and `POST \/v1\/orders\/asks`. Buy: `POST \/v1\/listings\/{askId}\/buy-data` returns the `fulfillAdvancedOrder` call, for OSWiki, OpenSea and Gondi listings (`GET \/v1\/listings?marketplace=all` lists them all; `buyableViaApi` marks what the API can fill). Cancel: on-chain with Seaport `cancel()`, then `POST \/v1\/orders\/asks\/{askId}\/sync`. Offers are Seaport orders too: the bidder offers WETH (Ethereum) or WAPE (ApeChain) with an exact approval to Seaport itself (`conduitKey` 0), and the seller nets the offer minus the OSWiki fee and the creator royalty. Make: `GET \/v1\/orders\/params` with `kind` (`offers` block), sign, `POST \/v1\/orders\/bids`. Accept: `POST \/v1\/bids\/{bidId}\/accept-data` or `\/v1\/bids\/best-accept-data`. Cancel: on-chain, then `POST \/v1\/orders\/bids\/{bidId}\/sync`. Payment Processor orders are retired: retired listings report `invalidReason: pp_retired`. \n\n**Authentication** - every endpoint works without a key. Orders are authenticated by the maker's Seaport signature (API orders always carry the standard OSWiki fee, `defaultFeeBps`, whatever the maker's plan), and sync only moves what the chain proves. A key, passed in the `X-API-Key` header, gives you your own rate limit; an invalid, revoked or expired key answers 401. Get an instant key with `POST \/v1\/auth\/keys`, or create permanent keys at https:\/\/oswiki.xyz\/account?section=developer.\n\n**Local signing** - a wallet that trades through the API needs: `POST \/v1\/listings\/requirements` or `POST \/v1\/bids\/requirements` (fee, royalty, approvals), `POST \/v1\/orders\/asks\/bulk` \/ `POST \/v1\/orders\/bids\/bulk` for many orders under one bulk signature, `GET \/v1\/listings?maker=` \/ `GET \/v1\/bids?maker=` for its open orders, and `GET \/v1\/orders\/asks\/{askId}\/components` \/ `GET \/v1\/orders\/bids\/{bidId}\/components` for the exact `OrderComponents` to pass to Seaport `cancel()`.\n\n**Rate limits** - without a key: 30 requests per minute per IP, shared by every keyless \/v1 call from that IP. With an instant key: 60 per minute. With a permanent key: 120 requests per minute per key by default (ask on Discord for more). Every limited response carries `X-RateLimit-Limit` and `X-RateLimit-Remaining`; a 429 adds `Retry-After` (seconds). `GET \/v1\/openapi.json` is not limited."},"servers":[{"url":"https:\/\/api.oswiki.xyz"}],"security":[{},{"ApiKeyAuth":[]}],"tags":[{"name":"Authentication","description":"Instant API keys, no account needed."},{"name":"Collections","description":"Collection discovery, profiles, verification and live market stats."},{"name":"Tokens","description":"Per-token metadata: media, traits, rarity, owner, current listing and last sale."},{"name":"Sales","description":"Recent on-chain sales, chain-wide or per collection \/ token."},{"name":"Prices","description":"ApeCoin and Ethereum USD price history."},{"name":"Names","description":"Live on-chain ENS resolution."},{"name":"Listings","description":"OSWiki listings (Seaport 1.6 orders) and the data to buy them."},{"name":"Bids","description":"OSWiki offers (Seaport 1.6 orders paying WETH \/ WAPE) and the data to accept them."},{"name":"Orders","description":"Listing and offer intake, and syncing on-chain cancels."}],"x-tagGroups":[{"name":"Getting started","tags":["Authentication"]},{"name":"Data","tags":["Collections","Tokens","Sales","Prices","Names"]},{"name":"Trading","tags":["Listings","Bids","Orders"]}],"paths":{"\/v1\/auth\/keys":{"post":{"operationId":"createInstantKey","summary":"Get an instant API key","description":"No account, no body. Returns a key valid for 7 days at 60 requests per minute. Each IP gets 3 instant keys per 24 hours. The key is shown once; only its hash is stored. For a permanent key, sign in at https:\/\/oswiki.xyz\/account?section=developer (Account \u2192 Developer).","tags":["Authentication"],"responses":{"201":{"description":"The new key","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"key":{"type":"string","example":"oswk_...","description":"Send as the `X-API-Key` header"},"type":{"type":"string","enum":["instant"]},"requestsPerMinute":{"type":"integer","example":60},"expiresAt":{"type":"string","format":"date-time"},"docs":{"type":"string","format":"uri"}}}}}}}},"429":{"description":"Instant key limit reached for this IP, or instant keys are temporarily unavailable; see `Retry-After`","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/collections":{"get":{"operationId":"listCollections","summary":"List collections ranked by market activity","description":"Every indexed collection on the chain (all ApeChain collections; the curated set on Ethereum) with a stats block scoped to `period`. Use it for discovery pages and to map slugs <-> contract addresses. `stats.volume\/volumeUsd\/sales` contain only the requested period key here; the single-collection endpoint returns every window. Grouped contracts (Otherdeed + Otherdeed Expanded) are one row under the primary collection, with the same combined stats as `GET \/v1\/collections\/{collection}`: lowest floor, summed volume, sales and listed, family-wide supply and holders. Ranking and `search` use the combined row.","tags":["Collections"],"parameters":[{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}},{"name":"period","in":"query","description":"Stats window. Defaults to 24h.","schema":{"type":"string","enum":["24h","7d","30d"]}},{"name":"sort","in":"query","description":"Defaults to volume.","schema":{"type":"string","enum":["volume","floor","sales","listed","supply","holders","change"]}},{"name":"direction","in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","in":"query","description":"Case-insensitive match on name or address","schema":{"type":"string","maxLength":100}},{"name":"verified","in":"query","description":"Only collections that completed OSWiki verification","schema":{"type":"boolean"}},{"name":"page","in":"query","schema":{"type":"integer","minimum":1}},{"name":"per_page","in":"query","schema":{"type":"integer","maximum":100,"default":50}}],"responses":{"200":{"description":"Paginated collections","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Collection"}},"meta":{"$ref":"#\/components\/schemas\/PageMeta"}}}}}},"429":{"description":"Rate limit exceeded","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/collections\/{collection}":{"get":{"operationId":"getCollection","summary":"Collection profile + live stats","description":"Identity, media, links, verification, royalty and a full stats block (floor, best offer, listed, supply, holders, volume\/sales for 24h\/7d\/30d\/all).","tags":["Collections"],"parameters":[{"name":"collection","in":"path","required":true,"description":"Slug (e.g. otherdeed) or 0x contract address","schema":{"type":"string"}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}}],"responses":{"200":{"description":"Collection with `stats`","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/Collection"}}}}}},"404":{"description":"Unknown collection on this chain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/collections\/{collection}\/tokens":{"get":{"operationId":"listCollectionTokens","summary":"Tokens in a collection (cursor-paged)","description":"Media, traits, rarity, owner and the current cheapest listing for each token. Page with `cursor` from `meta.next_cursor` (null when exhausted) - cursors are only valid for the sort they were issued under. Fetch specific tokens with `token_ids`.","tags":["Tokens"],"parameters":[{"name":"collection","in":"path","required":true,"schema":{"type":"string"}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}},{"name":"sort","in":"query","description":"Defaults to token_id.","schema":{"type":"string","enum":["token_id","price_asc","price_desc","rarity","recently_listed"]}},{"name":"listed","in":"query","description":"true = only tokens with an active listing, false = only unlisted","schema":{"type":"boolean"}},{"name":"token_ids","in":"query","description":"Comma-separated token ids (max 100)","schema":{"type":"string"}},{"name":"owner","in":"query","description":"Only tokens held by this 0x wallet (ERC-721; ERC-1155 balances are not filtered)","schema":{"type":"string"}},{"name":"cursor","in":"query","schema":{"type":"string"}},{"name":"per_page","in":"query","schema":{"type":"integer","maximum":100,"default":50}}],"responses":{"200":{"description":"Tokens + `meta.next_cursor`","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Token"}},"meta":{"type":"object","properties":{"chainId":{"type":"integer"},"total":{"type":"integer"},"per_page":{"type":"integer"},"next_cursor":{"type":["string","null"]}}}}}}}},"404":{"description":"Unknown collection on this chain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Invalid cursor \/ parameters","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/collections\/{collection}\/tokens\/{tokenId}":{"get":{"operationId":"getToken","summary":"One token by collection + token id","description":"Same shape as the list rows. Burned tokens are still returned (with `isBurned: true`) so the URL is a stable permalink. Where grouped contracts share token ids (Otherdeed + Otherdeed Expanded), an address in `{collection}` picks that contract; a slug picks the live token.","tags":["Tokens"],"parameters":[{"name":"collection","in":"path","required":true,"description":"Slug or 0x contract address","schema":{"type":"string"}},{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}}],"responses":{"200":{"description":"Token","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/Token"}}}}}},"404":{"description":"Unknown collection or token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/collections\/{collection}\/traits":{"get":{"operationId":"getCollectionTraits","summary":"Trait values with counts and floors","description":"Every trait type and value of a collection with its token count, listed count and floor (the cheapest active listing, in the chain currency; `usd` at the current coin price). Values are sorted cheapest first, unlisted values last. `count` counts token ids (for ERC-1155: ids, not supply); burned tokens are excluded; numeric-only traits are left out. Otherdeed answers its curated types (Artifact, Artifact Category, Category, Environment, Resource, Sediment); Environment, Resource and Sediment values carry a `tiers` breakdown with the same fields per tier. Cached for 60 seconds.","tags":["Collections"],"parameters":[{"name":"collection","in":"path","required":true,"description":"Slug or 0x contract address","schema":{"type":"string"}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}},{"name":"type","in":"query","description":"Only this trait type (case-insensitive, e.g. `Fur` or `sediment`)","schema":{"type":"string"}}],"responses":{"200":{"description":"Trait types","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"collection":{"$ref":"#\/components\/schemas\/CollectionRef"},"traitTypes":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","example":"Sediment"},"values":{"type":"array","items":{"$ref":"#\/components\/schemas\/TraitValue"}}}}}}}}}}}},"404":{"description":"Unknown collection, or no such trait type","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/collections\/{collection}\/floor-history":{"get":{"operationId":"getCollectionFloorHistory","summary":"Floor price OHLC","description":"Candles from the floor snapshot taken every 5 minutes (30 days kept), in the chain's native currency. Grouped contracts use the lower floor. Buckets are UTC-aligned and the window starts on a bucket boundary; a bucket without a listed floor is left out, never filled. Default interval: `1h` up to 2 days, else `4h`. Cached for 60 seconds.","tags":["Collections"],"parameters":[{"name":"collection","in":"path","required":true,"description":"Slug or 0x contract address","schema":{"type":"string"}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}},{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":30,"default":7}},{"name":"interval","in":"query","schema":{"type":"string","enum":["1h","4h","1d"]}}],"responses":{"200":{"description":"Floor candles","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"collection":{"$ref":"#\/components\/schemas\/CollectionRef"},"currency":{"type":"string","enum":["ETH","APE"]},"interval":{"type":"string"},"days":{"type":"integer"},"candles":{"type":"array","items":{"$ref":"#\/components\/schemas\/Candle"}},"summary":{"oneOf":[{"$ref":"#\/components\/schemas\/CandleSummary"},{"type":"null"}]}}}}}}}},"404":{"description":"Unknown collection","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"days or interval out of range","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/crypto\/history":{"get":{"operationId":"getCryptoHistory","summary":"ApeCoin \/ Ethereum USD price OHLC","description":"Candles in USD from the stored Binance feed (one tick a minute; hourly before the live feed started). Buckets are UTC-aligned; empty buckets are left out. Default: 30 days; interval `1h` up to 2 days, `4h` up to 30 days, else `1d`. Cached for 60 seconds (5 minutes beyond 7 days).","tags":["Prices"],"parameters":[{"name":"type","in":"query","required":true,"schema":{"type":"string","enum":["apecoin","ethereum"]}},{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":365,"default":30}},{"name":"interval","in":"query","schema":{"type":"string","enum":["1h","4h","1d"]}}],"responses":{"200":{"description":"Price candles","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"type":{"type":"string","enum":["apecoin","ethereum"]},"currency":{"type":"string","enum":["APE","ETH"]},"unit":{"type":"string","enum":["USD"]},"interval":{"type":"string"},"days":{"type":"integer"},"candles":{"type":"array","items":{"$ref":"#\/components\/schemas\/Candle"}},"summary":{"oneOf":[{"$ref":"#\/components\/schemas\/CandleSummary"},{"type":"null"}]}}}}}}}},"422":{"description":"Unknown type, or days \/ interval out of range","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/ens\/resolve":{"get":{"operationId":"resolveEns","summary":"Resolve an ENS name on-chain","description":"Reads the ENS registry on Ethereum mainnet live (registry -> resolver -> addr, with the ENSIP-10 wildcard walk to the nearest parent resolver). `address` is the mainnet address (coin type 60), `apechainAddress` the ENSIP-11 address for ApeChain (coin type 2147516787 = 0x80000000 | 33139). `reverseName` is the primary name of `address`, set only when it forward-resolves back to the same address. Offchain (CCIP-read) resolvers are not followed. Names are normalized to lowercase and must be ASCII letters, digits and hyphens in at least two labels (no emoji or other Unicode; no `--` at label positions 3-4). Cached for 60 seconds per name.","tags":["Names"],"parameters":[{"name":"name","in":"query","required":true,"description":"ENS name, e.g. `vitalik.eth`","schema":{"type":"string","maxLength":255}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}}],"responses":{"200":{"description":"Resolved name","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"name":{"type":"string","description":"The normalized name"},"address":{"type":["string","null"],"pattern":"^0x[a-fA-F0-9]{40}$","description":"Ethereum mainnet address, lowercase"},"apechainAddress":{"type":["string","null"],"pattern":"^0x[a-fA-F0-9]{40}$","description":"ApeChain address (ENSIP-11), lowercase"},"reverseName":{"type":["string","null"],"description":"Forward-verified primary name of `address`"}}}}}}}},"404":{"description":"No resolver, or no address for either chain","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["not_found"]}}}}}},"422":{"description":"Unsupported name, or the resolver needs an offchain (CCIP-read) lookup","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["unsupported_name","offchain_resolver"]}}}}}},"503":{"description":"The Ethereum RPC gave no usable answer; retry","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["rpc_unavailable"]}}}}}}}}},"\/v1\/sales":{"get":{"operationId":"listSales","summary":"Recent sales, newest first","description":"On-chain sales across every indexed marketplace. Chain-wide by default; scope with `collection` (slug or address), `token_id` and\/or `traits`. For recently LISTED items use \/v1\/listings with `sort=created_at`.","tags":["Sales"],"parameters":[{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}},{"name":"collection","in":"query","description":"Slug or 0x contract address","schema":{"type":"string"}},{"name":"token_id","in":"query","schema":{"type":"string"}},{"name":"traits","in":"query","style":"deepObject","explode":true,"description":"Exact trait values, all must match, up to 5: `traits[Environment]=Chaos&traits[Northern Resource]=Abyssal Brine`. The trait type is matched case- and spacing-insensitively (`Northern Resource` = `northern_resource`), the value exactly as in the token's `attributes`.","schema":{"type":"object","additionalProperties":{"type":"string"},"maxProperties":5}},{"name":"page","in":"query","description":"Page number. `page x per_page` may not exceed 10000 (a deeper page is a 422 with `code: use_cursor`); page past it with `cursor`.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","description":"`meta.next_cursor` of the previous page: no depth limit and stable while new rows arrive. Not combinable with `page`; only valid with the same `sort` (else 422 `invalid_cursor`).","schema":{"type":"string"}},{"name":"per_page","in":"query","schema":{"type":"integer","maximum":100,"default":50}}],"responses":{"200":{"description":"Sales with the exact `meta.total`; follow `meta.next_cursor` for history beyond 10000 rows","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Sale"}},"meta":{"$ref":"#\/components\/schemas\/PageMeta"}}}}}},"404":{"description":"Unknown collection on this chain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Invalid parameters, a page past the window (`code: use_cursor`) or an invalid cursor (`code: invalid_cursor`)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/listings":{"get":{"operationId":"listListings","summary":"List listings (OSWiki by default, active by default)","description":"Each row carries `askId`, `marketplace` and `buyableViaApi`; `POST \/v1\/listings\/{askId}\/buy-data` returns what it takes to buy a row with `buyableViaApi: true` (OSWiki, OpenSea and Gondi listings). `marketplace=opensea` \/ `gondi` lists that marketplace's listings, `marketplace=all` every marketplace, so `sort=price_asc` finds the cheapest buyable listing. `maker` + `status=inactive` lists a wallet's hidden listings that are still valid on-chain (token or approval away), which only a cancel retires for good.","tags":["Listings"],"parameters":[{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}},{"name":"collection","in":"query","description":"Collection slug (e.g. otherdeed)","schema":{"type":"string"}},{"name":"token_id","in":"query","schema":{"type":"string"}},{"name":"maker","in":"query","description":"Seller wallet","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"status","in":"query","description":"`active` (default) or `inactive`: hidden but still valid on-chain, so still cancellable","schema":{"type":"string","enum":["active","inactive"]}},{"name":"min_price","in":"query","schema":{"type":"number"}},{"name":"max_price","in":"query","schema":{"type":"number"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["price_asc","price_desc","created_at"]}},{"name":"page","in":"query","description":"Page number. `page x per_page` may not exceed 10000 (a deeper page is a 422 with `code: use_cursor`); page past it with `cursor`.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","description":"`meta.next_cursor` of the previous page: no depth limit and stable while new rows arrive. Not combinable with `page`; only valid with the same `sort` (else 422 `invalid_cursor`).","schema":{"type":"string"}},{"name":"per_page","in":"query","schema":{"type":"integer","maximum":100}},{"name":"marketplace","in":"query","description":"`all` (default, every marketplace), `oswiki`, `opensea` or `gondi`","schema":{"type":"string","enum":["oswiki","opensea","gondi","all"]}}],"responses":{"200":{"description":"Listings with the exact `meta.total`. Each row carries `askId`, `marketplace` and `buyableViaApi`.","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"type":"object"}},"meta":{"$ref":"#\/components\/schemas\/PageMeta"}}}}}},"422":{"description":"Invalid parameters, a page past the window (`code: use_cursor`) or an invalid cursor (`code: invalid_cursor`)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/listings\/buy-data-bulk":{"post":{"operationId":"getListingsBuyData","summary":"Seaport fill data for up to 20 listings","description":"The same check and payload as the single endpoint, for sweeps (e.g. `fulfillAvailableAdvancedOrders` over each `orderData`). Listings that are not buyable are left out of `data.listings` and reported in `data.errors` with the same codes. ERC-1155 listings come back for all units left. Pass `buyer` to include OpenSea listings.","tags":["Listings"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["askIds"],"properties":{"chainId":{"type":"integer","enum":[1,33139],"description":"1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1."},"askIds":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string"}},"buyer":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The wallet that sends the transaction; required for OpenSea listings"}}}}}},"responses":{"200":{"description":"Buyable listings in request order, and why each other id is not","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"listings":{"type":"array","items":{"$ref":"#\/components\/schemas\/BuyData"}},"errors":{"type":"array","items":{"type":"object","properties":{"askId":{"type":"string"},"code":{"type":"string","enum":["bad_request","not_found","inactive","unavailable","order_mismatch","price_above_max","buyer_required","bad_amount","unsupported_marketplace","unsupported_order","upstream_error","buying_disabled"]},"error":{"type":"string"}}}}}}}}}}},"422":{"description":"askIds must hold 1 to 20 ids","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/listings\/requirements":{"post":{"operationId":"getListingRequirements","summary":"Fee, royalty and blocks for up to 100 listings, before signing","description":"The same check the website runs before a seller signs: the maker's OSWiki fee, the royalty each item must pay (whole quantity), whether the collection can be listed, and OpenSea's requirements for an optional twin listing (`items[].opensea`, see `POST \/v1\/orders\/asks\/bulk`). Read the counter from `GET \/v1\/orders\/params?maker=` or Seaport `getCounter`.","tags":["Listings"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["chainId","maker","items"],"properties":{"chainId":{"type":"integer","enum":[1,33139],"description":"1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1."},"maker":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"items":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","required":["contract","tokenId","quantity","unitPriceWei"],"properties":{"contract":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"tokenId":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"quantity":{"type":"integer","minimum":1,"description":"1 for ERC-721"},"unitPriceWei":{"description":"Price per unit in wei","type":"string","pattern":"^(0|[1-9][0-9]*)$"}}}}}}}}},"responses":{"200":{"description":"Requirements, one row per item in request order","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"seaport":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395"},"conduitKey":{"type":"string","const":"0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000"},"conduit":{"type":"string","const":"0x1e0049783f008a0085193e00003d00cd54003c71","description":"Approve this operator on each collection"},"feeRecipient":{"type":"string"},"feeBps":{"type":"integer","description":"The standard OSWiki fee (API orders never get plan discounts)"},"items":{"type":"array","items":{"$ref":"#\/components\/schemas\/ListingRequirement"}}}}}}}}},"422":{"description":"`bad_structure`, `unsupported_chain`, or `rpc_unavailable` (retry)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OrderError"}}}}}}},"\/v1\/listings\/{askId}":{"get":{"operationId":"getListing","summary":"Get one listing by id (any status)","description":"Status polling for OSWiki, OpenSea and Gondi listings (`marketplace` says which): returns the row whether active, inactive, filled, expired or cancelled. An inactive listing cannot be filled right now but was not cancelled on-chain; `invalidReason` says why (e.g. `not_owner`, `not_approved`, `superseded`) and OSWiki lists it again once it passes its checks. Retired Payment Processor listings report `invalidReason: pp_retired`.","tags":["Listings"],"parameters":[{"name":"askId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash for OSWiki listings, the bare order hash for OpenSea listings","schema":{"type":"string"}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}}],"responses":{"200":{"description":"Listing with `status`, `price`, `priceWei` (unit price in wei), `quantityRemaining`, `expiresAt` and `invalidReason`"},"404":{"description":"Unknown askId","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/listings\/{askId}\/buy-data":{"post":{"operationId":"getListingBuyData","summary":"Seaport fill data for one OSWiki, OpenSea or Gondi listing","description":"Returns the fill for exactly this listing (never a cheaper or substitute one): send `data` to `to` with exactly `value` wei. `data` is `fulfillAdvancedOrder({parameters, numerator, denominator, signature, extraData}, [], fulfillerConduitKey, recipient)` built from `orderData`, followed by the 4-byte OSWiki tag `0xda32920a` (Seaport ignores trailing calldata); re-encode it from `orderData` to verify it. OSWiki and Gondi listings are checked against the chain first. OpenSea listings need `buyer`: OpenSea's SignedZone authorizes a restricted order for that wallet only and for a short time, so fetch right before sending, from the wallet named in `buyer`. ERC-1155 listings fill partially: pass `amount` units (defaults to all units left). Only fixed-price listings paid in the native currency (ETH \/ APE) are served, plus Gondi listings priced in WETH: those send `value` 0, Seaport pulls `priceWei` of `currency.address` from the buyer, so approve that exact amount to Seaport first (`orderData.payment` reports the live balance and allowance).","tags":["Listings"],"parameters":[{"name":"askId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash for OSWiki listings, the bare order hash for OpenSea listings","schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"chainId":{"type":"integer","enum":[1,33139],"description":"1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1."},"buyer":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The wallet that sends the transaction and receives the item; required for OpenSea listings"},"amount":{"type":"integer","minimum":1,"description":"ERC-1155 units to buy"},"maxPrice":{"type":["number","string"],"description":"Refuse (409 `price_above_max`) when the fill costs more than this, in ETH \/ APE"},"maxPriceWei":{"description":"The same cap in wei; wins over `maxPrice`","type":"string","pattern":"^(0|[1-9][0-9]*)$"}}}}}},"responses":{"200":{"description":"Fill data","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/BuyData"}}}}}},"404":{"description":"`not_found`: no listing with this askId on this chain","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/BuyDataError"}}}},"409":{"description":"`inactive` (gone, expired, filled or cancelled), `unavailable`, `order_mismatch` or `price_above_max`","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/BuyDataError"}}}},"422":{"description":"`bad_request`, `buyer_required`, `bad_amount`, `unsupported_marketplace` or `unsupported_order`","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/BuyDataError"}}}},"502":{"description":"`upstream_error`: OpenSea did not answer; retry","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/BuyDataError"}}}},"503":{"description":"`buying_disabled`","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/BuyDataError"}}}}}}},"\/v1\/bids":{"get":{"operationId":"listBids","summary":"List OSWiki offers (active by default)","description":"`maker` + `status=inactive` lists a bidder's hidden offers (balance or allowance short) that come back once funded.","tags":["Bids"],"parameters":[{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}},{"name":"collection","in":"query","description":"Collection slug or 0x address","schema":{"type":"string"}},{"name":"token_id","in":"query","description":"Item offers on this token only; collection offers have no token, see `GET \/v1\/bids\/best`","schema":{"type":"string"}},{"name":"maker","in":"query","description":"Bidder wallet","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"status","in":"query","description":"`active` (default) or `inactive`: hidden but still valid on-chain, so still cancellable","schema":{"type":"string","enum":["active","inactive"]}},{"name":"kind","in":"query","schema":{"type":"string","enum":["single-token","collection"]}},{"name":"sort","in":"query","description":"Default `price_desc` (highest offer first)","schema":{"type":"string","enum":["price_asc","price_desc","created_at"]}},{"name":"page","in":"query","description":"Page number. `page x per_page` may not exceed 10000 (a deeper page is a 422 with `code: use_cursor`); page past it with `cursor`.","schema":{"type":"integer","minimum":1}},{"name":"cursor","in":"query","description":"`meta.next_cursor` of the previous page: no depth limit and stable while new rows arrive. Not combinable with `page`; only valid with the same `sort` (else 422 `invalid_cursor`).","schema":{"type":"string"}},{"name":"per_page","in":"query","schema":{"type":"integer","maximum":100}}],"responses":{"200":{"description":"Paginated unexpired OSWiki offers in the requested status","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#\/components\/schemas\/Bid"}},"meta":{"$ref":"#\/components\/schemas\/PageMeta"}}}}}},"422":{"description":"Invalid parameters, a page past the window (`code: use_cursor`) or an invalid cursor (`code: invalid_cursor`)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"429":{"description":"Rate limit exceeded","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/bids\/best":{"get":{"operationId":"getBestOffers","summary":"Best offers for a token (item and collection)","description":"The highest active item offer and the highest active collection offer that covers the token, each ranked by `sellerNetWei` (what the seller receives after fee and royalty); `best` is the higher of the two. Read-only, no on-chain check: use `POST \/v1\/bids\/best-accept-data` to accept.","tags":["Bids"],"parameters":[{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}},{"name":"collection","in":"query","required":true,"description":"Collection slug or 0x address","schema":{"type":"string"}},{"name":"tokenId","in":"query","required":true,"schema":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"}}],"responses":{"200":{"description":"Best offers; each is null when there is none","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"chainId":{"type":"integer","enum":[1,33139]},"collection":{"type":"object","properties":{"address":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"}}},"tokenId":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"best":{"oneOf":[{"$ref":"#\/components\/schemas\/Bid"},{"type":"null"}]},"itemOffer":{"oneOf":[{"$ref":"#\/components\/schemas\/Bid"},{"type":"null"}]},"collectionOffer":{"oneOf":[{"$ref":"#\/components\/schemas\/Bid"},{"type":"null"}]}}}}}}}},"404":{"description":"Collection not found","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"collection and tokenId (decimal string) are required","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/bids\/best-accept-data":{"post":{"operationId":"getBestOfferAcceptData","summary":"Accept call for the best offer on a token","description":"Picks the active offer (item or collection) that nets the seller the most, checks it against the chain and the seller's holding, and returns the accept call as in `\/v1\/bids\/{bidId}\/accept-data`.","tags":["Bids"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["contract","tokenId","fulfiller"],"properties":{"chainId":{"type":"integer","enum":[1,33139],"description":"1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1."},"contract":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"tokenId":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"fulfiller":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The seller sending the transaction"}}}}}},"responses":{"200":{"description":"Accept call","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/OfferAcceptData"}}}}}},"404":{"description":"No active offer for this token","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}},"422":{"description":"Rejected - `code` says why","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}}}}},"\/v1\/bids\/requirements":{"post":{"operationId":"getOfferRequirements","summary":"Fee, royalty and approval for up to 50 offers, before signing","description":"The fee and royalty legs each offer must carry (as `offers.royalty` in `GET \/v1\/orders\/params`), the maker's WETH \/ WAPE balance and allowance to Seaport, and `requiredAllowanceWei` = the maker's open offers plus every unblocked item (amount x quantity). Approve exactly that, never an unlimited amount.","tags":["Bids"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["chainId","maker","items"],"properties":{"chainId":{"type":"integer","enum":[1,33139],"description":"1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1."},"maker":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"items":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["kind","contract","amountWei","quantity"],"properties":{"kind":{"type":"string","enum":["item","collection"]},"contract":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"tokenId":{"type":["string","null"],"description":"Decimal token id for `item`; null or absent for `collection`"},"amountWei":{"description":"The offer amount A in wei","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"quantity":{"type":"integer","minimum":1,"description":"How many offers of A (collection offers signed together)"}}}}}}}}},"responses":{"200":{"description":"Requirements, one row per item in request order","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"seaport":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395"},"conduitKey":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000"},"sellerConduitKey":{"type":"string","const":"0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000"},"currency":{"$ref":"#\/components\/schemas\/OfferCurrency"},"feeRecipient":{"type":"string"},"feeBps":{"type":"integer","description":"The standard OSWiki fee (API orders never get plan discounts)"},"balanceWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"allowanceWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"openOffersWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"requiredAllowanceWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"items":{"type":"array","items":{"$ref":"#\/components\/schemas\/OfferRequirement"}}}}}}}}},"422":{"description":"`bad_structure`, `unsupported_chain`, or `rpc_unavailable` (retry)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}}}}},"\/v1\/bids\/{bidId}\/accept-data":{"post":{"operationId":"getOfferAcceptData","summary":"Accept call for one offer","description":"Checks the offer against the chain (status, counter, the bidder's balance and allowance to Seaport) and the seller's holding, then returns the call. Steps for the seller: \n\n1. Once per collection, `setApprovalForAll(approval.operator, true)` on the NFT contract `approval.token` (the OpenSea conduit, the same approval OpenSea listings use). \n2. Send the transaction to `to` (Seaport 1.6) with `value` 0, **from `fulfiller`**. `method` says which call: \n   - `fulfillBasicOrder_efficient_6GL6yc(BasicOrderParameters)` with `basicOrderParameters` (item offers); \n   - `matchAdvancedOrders(AdvancedOrder[],CriteriaResolver[],Fulfillment[],address)` with `orders`, `criteriaResolvers`, `fulfillments` and `recipient` (collection offers). `orders[1]` is an unsigned mirror order whose offerer is `fulfiller` (Seaport skips the signature only because the caller is its offerer) and which is valid for 30 minutes: fetch accept-data again right before sending. \n3. Optionally `POST \/v1\/orders\/bids\/{bidId}\/sync` with the `txHash`. \n\nNo calldata is returned: ABI-encode the arguments with the Seaport 1.6 ABI. Not affected by the offers pause.","tags":["Bids"],"parameters":[{"name":"bidId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["fulfiller"],"properties":{"chainId":{"type":"integer","enum":[1,33139],"description":"1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1."},"fulfiller":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The seller sending the transaction"},"tokenId":{"description":"Required for a collection offer; must be the offer's token for an item offer","type":"string","pattern":"^(0|[1-9][0-9]*)$"}}}}}},"responses":{"200":{"description":"Accept call","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/OfferAcceptData"}}}}}},"404":{"description":"Unknown bidId","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}},"422":{"description":"Rejected - `code` says why","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}}}}},"\/v1\/bids\/{bidId}":{"get":{"operationId":"getBid","summary":"Get one offer by id (any status)","description":"Status polling for bid makers: returns the row whether active, inactive, filled, expired or cancelled. An inactive offer is hidden but not cancelled: `inactiveReason` says why (e.g. `insufficient_balance`, `insufficient_allowance`) and the offer comes back on its own once funded again.","tags":["Bids"],"parameters":[{"name":"bidId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash","schema":{"type":"string"}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}}],"responses":{"200":{"description":"The offer row plus `status` and `inactiveReason`","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/BidWithStatus"}}}}}},"404":{"description":"Unknown bidId","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}}}}},"\/v1\/orders\/params":{"get":{"operationId":"getOrderParams","summary":"Everything needed to build and sign a listing or an offer","description":"The Seaport 1.6 EIP-712 domain and types, the fixed header (zone, zoneHash, conduitKey), the salt prefix, the fee recipient and the bounds OSWiki enforces, for listings at the top level and for offers in `offers`. Pass `maker` for that wallet's Seaport counter (and, for offers, `openOffersWei`). \n\n**Listing royalty**: add `contract`, `tokenId`, `unitPriceWei` (and `quantity` for ERC-1155) for `royalty`. Build the consideration as in `consideration`, approve `conduit` for the collection, sign `OrderComponents` with `eth_signTypedData_v4` and submit it to `POST \/v1\/orders\/asks`. \n\n**Offer royalty**: add `kind` (`item` or `collection`), `contract`, `unitPriceWei` = the offer amount A in wei, and `tokenId` for `kind=item` only. `offers.royalty` then holds the royalty leg exactly as intake checks it: `royaltyWei` to `royaltyRecipient`, priced at A by the listing rule (the creator fee OSWiki syncs from OpenSea, else ERC-2981 `royaltyInfo`, else on Ethereum the configured creator fee). ERC-2981 is read for `tokenId` on an item offer and for the collection's reference token (the server picks it) on a collection offer, so do not substitute another token id. Leave the royalty leg out when `royaltyWei` is 0 (`royaltyRecipient` is then null: no royalty, or a receiver that is the bidder or `feeRecipient`). `offers.requiredAllowanceWei` is the WETH \/ WAPE approval to give Seaport. Build the order as in `offers.consideration` (schema `OfferOrderComponents`) and submit it to `POST \/v1\/orders\/bids`.","tags":["Orders"],"parameters":[{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}},{"name":"maker","in":"query","description":"Seller (listing) or bidder (offer) wallet","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"kind","in":"query","description":"Offer mode: `item` (needs `tokenId`) or `collection` (no `tokenId`). Needs `maker`, `contract` and `unitPriceWei`.","schema":{"type":"string","enum":["item","collection"]}},{"name":"contract","in":"query","description":"Collection contract (with `maker`)","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"tokenId","in":"query","description":"Decimal token id; omit for `kind=collection`","schema":{"type":"string"}},{"name":"quantity","in":"query","description":"Listings only: ERC-1155 units. Defaults to 1.","schema":{"type":"integer","minimum":1}},{"name":"unitPriceWei","in":"query","description":"Listing: price per unit in wei. Offer (`kind`): the offer amount A in wei. Decimal string.","schema":{"type":"string"}}],"responses":{"200":{"description":"Seaport order parameters; `offers` holds the offer variant","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/SeaportParams"}}}}}},"422":{"description":"Invalid parameters (`bad_structure`, `unsupported_chain`), or the counter \/ royalty \/ balances could not be read (`rpc_unavailable`: retry, never sign with a guessed counter)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OrderError"}}}}}}},"\/v1\/orders\/asks":{"post":{"operationId":"createListing","summary":"Submit a signed Seaport listing","description":"One Seaport 1.6 order per request, signed by the offerer over `OrderComponents` (65-byte or 64-byte EIP-2098 signature; bulk-tree signatures go to `POST \/v1\/orders\/asks\/bulk`). OSWiki checks the structure, fee, royalty, timing and signature, then the chain: ownership or balance, the conduit approval, the counter, the order status and transfer restrictions. Resubmitting an active order returns it again. An ERC-721 listing priced above your own live cheaper listing of the token needs that one cancelled on-chain first (409 `raise_requires_cancel`); a cheaper new listing hides your older ones.","tags":["Orders"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["chainId","seaport"],"properties":{"chainId":{"type":"integer","enum":[1,33139]},"seaport":{"$ref":"#\/components\/schemas\/SeaportOrder"}}}}}},"responses":{"201":{"description":"Listed (or already listed)","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"askId":{"type":"string","description":"`oswiki-` + orderHash"},"orderHash":{"type":"string","description":"Seaport order hash (the OrderComponents struct hash)"},"status":{"type":"string","example":"active"}}}}}}}},"401":{"description":"Invalid or revoked API key (the key is optional)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"`raise_requires_cancel`, or a Payment Processor body (no longer accepted)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OrderError"}}}},"422":{"description":"Rejected - `code` says why","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OrderError"}}}},"503":{"description":"Listings are paused (`code` `listings_paused`)","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["listings_paused"]}}}}}}}}},"\/v1\/orders\/asks\/bulk":{"post":{"operationId":"createListings","summary":"Submit up to 100 signed listings (bulk signatures allowed)","description":"The website's bulk listing path: each order is checked like `POST \/v1\/orders\/asks`, but bulk-tree signatures (one `eth_signTypedData_v4` over a `BulkOrder` tree, signature = 65 bytes + 3-byte index + proof) are accepted. Each row may carry `opensea`, the OpenSea twin of that listing signed in the same tree: OSWiki checks it against `items[].opensea` of `POST \/v1\/listings\/requirements` (same offer, counter and window, OpenSea's zone and fees) and posts it to OpenSea for you. A rejected twin never blocks the OSWiki listing. One failing order never blocks the others: read `data.results`.","tags":["Orders"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["chainId","listings"],"properties":{"chainId":{"type":"integer","enum":[1,33139]},"listings":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","required":["seaport"],"properties":{"seaport":{"$ref":"#\/components\/schemas\/SeaportOrder"},"opensea":{"type":"object","description":"Optional OpenSea twin: `{parameters, signature}` with OpenSea's zone, orderType and fees","properties":{"parameters":{"type":"object"},"signature":{"type":"string"}}}}}}}}}}},"responses":{"201":{"description":"Every order listed","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"True when at least one order was stored"},"message":{"type":"string","description":"Counts, plus the most common failure reason"},"error":{"type":"string","description":"Same as `message`, only when nothing was stored"},"data":{"type":"object","properties":{"results":{"type":"array","description":"One row per order, in request order","items":{"type":"object","properties":{"contractAddress":{"type":"string"},"tokenId":{"type":"string","description":"Listings only"},"success":{"type":"boolean"},"message":{"type":"string"},"code":{"type":"string","description":"Set on failure: the same codes as the single endpoint"},"askId":{"type":"string","description":"Set on success: `oswiki-` + orderHash"},"crossListing":{"type":"object","description":"Listings with `opensea` only: `status` queued \/ posted, or rejected with `code` and `message` (the OSWiki listing stands either way)","properties":{"status":{"type":"string"},"orderHash":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}},"created":{"type":"integer"},"failed":{"type":"integer"}}}}}}}},"200":{"description":"Some orders failed: `results[].code` says why","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"True when at least one order was stored"},"message":{"type":"string","description":"Counts, plus the most common failure reason"},"error":{"type":"string","description":"Same as `message`, only when nothing was stored"},"data":{"type":"object","properties":{"results":{"type":"array","description":"One row per order, in request order","items":{"type":"object","properties":{"contractAddress":{"type":"string"},"tokenId":{"type":"string","description":"Listings only"},"success":{"type":"boolean"},"message":{"type":"string"},"code":{"type":"string","description":"Set on failure: the same codes as the single endpoint"},"askId":{"type":"string","description":"Set on success: `oswiki-` + orderHash"},"crossListing":{"type":"object","description":"Listings with `opensea` only: `status` queued \/ posted, or rejected with `code` and `message` (the OSWiki listing stands either way)","properties":{"status":{"type":"string"},"orderHash":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}},"created":{"type":"integer"},"failed":{"type":"integer"}}}}}}}},"401":{"description":"Invalid or revoked API key (the key is optional)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"`listings` is empty or too long (`bad_structure`)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OrderError"}}}},"503":{"description":"Listings are paused (`code` `listings_paused`)","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["listings_paused"]}}}}}}}}},"\/v1\/orders\/asks\/{askId}\/components":{"get":{"operationId":"getListingComponents","summary":"The signed OrderComponents of a listing, for Seaport cancel()","description":"Exactly what the maker signed (counter included), any status, plus the OpenSea twin when the listing was cross-listed: pass both to one `cancel([...])` so neither stays fillable. Public data: the order is public once listed.","tags":["Orders"],"parameters":[{"name":"askId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash for OSWiki listings, the bare order hash for OpenSea listings","schema":{"type":"string"}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}}],"responses":{"200":{"description":"The signed order","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/ListingComponents"}}}}}},"404":{"description":"Unknown askId, or not an OSWiki Seaport listing","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Unsupported chainId","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OrderError"}}}}}}},"\/v1\/orders\/asks\/{askId}\/cancel":{"post":{"operationId":"cancelListing","summary":"Cancel a listing (on-chain only)","description":"Only the chain can cancel a Seaport order: call Seaport `cancel([orderComponents])` from the maker wallet (or `incrementCounter()`, which cancels every Seaport order of the maker on every marketplace), then `POST \/v1\/orders\/asks\/{askId}\/sync`. This endpoint always answers 409 `cancel_on_chain`.","tags":["Orders"],"parameters":[{"name":"askId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash for OSWiki listings, the bare order hash for OpenSea listings","schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid or revoked API key (the key is optional)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Cancel on-chain, then sync","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OrderError"}}}}}}},"\/v1\/orders\/asks\/{askId}\/sync":{"post":{"operationId":"syncListing","summary":"Re-check a listing against the chain","description":"Call after cancelling on-chain, or any time. With `txHash`, a Seaport `OrderCancelled` for this order (or a `CounterIncremented` past its counter) in that receipt confirms the cancel at once; otherwise OSWiki reads `getOrderStatus` and the maker's counter. The listing is then re-checked and its status returned. A cancel the chain does not show yet leaves the status as it was - sync again once the transaction is mined.","tags":["Orders"],"parameters":[{"name":"askId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash for OSWiki listings, the bare order hash for OpenSea listings","schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"chainId":{"type":"integer","enum":[1,33139],"description":"1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1."},"txHash":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$","description":"The cancel transaction, when you have it"}}}}}},"responses":{"200":{"description":"Status after the re-check","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/ListingSync"}}}}}},"401":{"description":"Invalid or revoked API key (the key is optional)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Unknown askId","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Invalid chainId or txHash","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OrderError"}}}}}}},"\/v1\/orders\/bids":{"post":{"operationId":"createBid","summary":"Submit a signed Seaport offer (item or collection)","description":"One Seaport 1.6 order per request (schema `OfferOrder`), signed by the bidder over `OrderComponents` (65-byte or 64-byte signature; bulk-tree signatures go to `POST \/v1\/orders\/bids\/bulk`). \n\n1. `GET \/v1\/orders\/params?chainId&maker&kind&contract[&tokenId]&unitPriceWei=A` for the `offers` block: `counter`, `feeBps`, `feeRecipient`, `currency`, `royalty` and `requiredAllowanceWei`. \n2. Build `OfferOrderComponents`: `offer` is one item `{1, currency.address, 0, A, A}`; `consideration[0]` is the NFT to the bidder (itemType 2 or 3 with the token id for an item offer, 4 with criteria 0 for any token of an ERC-721 collection, amount 1), then `floor(A x feeBps \/ 10000)` to `feeRecipient` when above zero, then `royalty.royaltyWei` to `royalty.royaltyRecipient` when above zero; `conduitKey` 0, `orderType` 0. \n3. Sign `OrderComponents` with `eth_signTypedData_v4` using `offers.eip712Domain` and `offers.types`. \n4. On `currency.address` call `approve(approvalTarget, requiredAllowanceWei)`, where `requiredAllowanceWei` = `openOffersWei` + A and `openOffersWei` is the sum of A over your unexpired OSWiki offers on this chain, active or inactive. ERC-20 `approve` replaces the allowance, it does not add to it; never approve an unlimited amount. Hold at least A of WETH \/ WAPE. \n5. POST here. \n\nOSWiki checks the structure, fee, royalty, timing and signature, then the chain: counter, order status, and that the bidder's balance and allowance to Seaport each cover the offer. `allowanceShortfallWei` above zero means the approval no longer covers all of the bidder's open offers, so some of them go inactive until it does.","tags":["Orders"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["chainId","seaport"],"properties":{"chainId":{"type":"integer","enum":[1,33139]},"seaport":{"$ref":"#\/components\/schemas\/OfferOrder"}}}}}},"responses":{"201":{"description":"Offer stored (or already stored)","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"bidId":{"type":"string","description":"`oswiki-` + orderHash"},"orderHash":{"type":"string"},"status":{"type":"string","example":"active"},"allowanceShortfallWei":{"type":"string","description":"Open offers minus the allowance to Seaport, 0 when covered"}}}}}}}},"401":{"description":"Invalid or revoked API key (the key is optional)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Rejected - `code` says why","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}},"503":{"description":"Offers are paused (`code` `offers_paused`); accepting and cancelling keep working","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["offers_paused"]}}}}}}}}},"\/v1\/orders\/bids\/bulk":{"post":{"operationId":"createBids","summary":"Submit up to 50 signed offers (bulk signatures allowed)","description":"The website's bulk offer path, usually N collection offers of the same amount under one bulk-tree signature. Each order is checked like `POST \/v1\/orders\/bids`; the allowance to Seaport must cover all of them (`requiredAllowanceWei` of `POST \/v1\/bids\/requirements`). One failing order never blocks the others.","tags":["Orders"],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["chainId","offers"],"properties":{"chainId":{"type":"integer","enum":[1,33139]},"offers":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["seaport"],"properties":{"seaport":{"$ref":"#\/components\/schemas\/OfferOrder"}}}}}}}}},"responses":{"201":{"description":"Every offer stored","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"True when at least one order was stored"},"message":{"type":"string","description":"Counts, plus the most common failure reason"},"error":{"type":"string","description":"Same as `message`, only when nothing was stored"},"data":{"type":"object","properties":{"results":{"type":"array","description":"One row per order, in request order","items":{"type":"object","properties":{"contractAddress":{"type":"string"},"tokenId":{"type":"string","description":"Listings only"},"success":{"type":"boolean"},"message":{"type":"string"},"code":{"type":"string","description":"Set on failure: the same codes as the single endpoint"},"bidId":{"type":"string","description":"Set on success: `oswiki-` + orderHash"},"crossListing":{"type":"object","description":"Listings with `opensea` only: `status` queued \/ posted, or rejected with `code` and `message` (the OSWiki listing stands either way)","properties":{"status":{"type":"string"},"orderHash":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}},"created":{"type":"integer"},"failed":{"type":"integer"}}}}}}}},"200":{"description":"Some offers failed: `results[].code` says why","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"True when at least one order was stored"},"message":{"type":"string","description":"Counts, plus the most common failure reason"},"error":{"type":"string","description":"Same as `message`, only when nothing was stored"},"data":{"type":"object","properties":{"results":{"type":"array","description":"One row per order, in request order","items":{"type":"object","properties":{"contractAddress":{"type":"string"},"tokenId":{"type":"string","description":"Listings only"},"success":{"type":"boolean"},"message":{"type":"string"},"code":{"type":"string","description":"Set on failure: the same codes as the single endpoint"},"bidId":{"type":"string","description":"Set on success: `oswiki-` + orderHash"},"crossListing":{"type":"object","description":"Listings with `opensea` only: `status` queued \/ posted, or rejected with `code` and `message` (the OSWiki listing stands either way)","properties":{"status":{"type":"string"},"orderHash":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}}}}}},"created":{"type":"integer"},"failed":{"type":"integer"}}}}}}}},"401":{"description":"Invalid or revoked API key (the key is optional)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"`offers` is empty or too long (`bad_structure`)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}},"503":{"description":"Offers are paused (`code` `offers_paused`)","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["offers_paused"]}}}}}}}}},"\/v1\/orders\/bids\/{bidId}\/components":{"get":{"operationId":"getBidComponents","summary":"The signed OrderComponents of an offer, for Seaport cancel()","description":"Exactly what the bidder signed (counter included), any status. Public data.","tags":["Orders"],"parameters":[{"name":"bidId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash","schema":{"type":"string"}},{"name":"chainId","in":"query","description":"Chain to operate on: 1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1.","schema":{"type":"integer","enum":[1,33139]}}],"responses":{"200":{"description":"The signed order","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"$ref":"#\/components\/schemas\/BidComponents"}}}}}},"404":{"description":"Unknown bidId, or not an OSWiki Seaport offer","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Unsupported chainId","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}}}}},"\/v1\/orders\/bids\/collection":{"post":{"operationId":"createCollectionBid","summary":"Removed: submit collection offers to POST \/v1\/orders\/bids","tags":["Orders"],"responses":{"401":{"description":"Invalid or revoked API key (the key is optional)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"410":{"description":"Always: collection offers go to `POST \/v1\/orders\/bids` with `consideration[0]` itemType 4","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["gone"]}}}}}}}}},"\/v1\/orders\/bids\/{bidId}\/cancel":{"post":{"operationId":"cancelBid","summary":"Cancel an offer (on-chain only)","description":"Only the chain can cancel a Seaport order: call Seaport `cancel([orderComponents])` from the bidder wallet, then `POST \/v1\/orders\/bids\/{bidId}\/sync`. This endpoint always answers 409 `cancel_on_chain`.","tags":["Orders"],"parameters":[{"name":"bidId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash","schema":{"type":"string"}}],"responses":{"401":{"description":"Invalid or revoked API key (the key is optional)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"409":{"description":"Cancel on-chain, then sync","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}}}}},"\/v1\/orders\/bids\/{bidId}\/sync":{"post":{"operationId":"syncBid","summary":"Re-check an offer against the chain","description":"Call after cancelling or accepting on-chain, or after a wrap \/ approve. With `txHash`, a Seaport `OrderCancelled` or `OrderFulfilled` for this order in that receipt confirms it at once; otherwise OSWiki reads `getOrderStatus` and the counter. The offer is then re-checked and its status returned.","tags":["Orders"],"parameters":[{"name":"bidId","in":"path","required":true,"description":"`oswiki-` + the Seaport order hash","schema":{"type":"string"}}],"requestBody":{"content":{"application\/json":{"schema":{"type":"object","properties":{"chainId":{"type":"integer","enum":[1,33139],"description":"1 (Ethereum mainnet) or 33139 (ApeChain). Defaults to 1."},"txHash":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"}}}}}},"responses":{"200":{"description":"Status after the re-check","content":{"application\/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"bidId":{"type":"string"},"status":{"type":"string","enum":["active","inactive","cancelled","filled","expired"]},"inactiveReason":{"type":["string","null"]}}}}}}}},"401":{"description":"Invalid or revoked API key (the key is optional)","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"404":{"description":"Unknown bidId","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Error"}}}},"422":{"description":"Invalid chainId or txHash","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/OfferError"}}}}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"schemas":{"CollectionRef":{"type":"object","properties":{"address":{"type":"string"},"slug":{"type":"string"},"name":{"type":"string"},"chainId":{"type":"integer","enum":[1,33139]}}},"TraitFloor":{"type":["object","null"],"description":"Cheapest active listing; null when nothing is listed","properties":{"price":{"type":"number","description":"In the listing currency"},"currency":{"type":["string","null"],"example":"ETH"},"usd":{"type":["number","null"],"description":"`price` at the current ETH\/APE price"}}},"TraitValue":{"type":"object","properties":{"value":{"type":"string"},"count":{"type":"integer","description":"Tokens with this value"},"floor":{"$ref":"#\/components\/schemas\/TraitFloor"},"listed":{"type":"integer","description":"Tokens with this value and an active listing"},"tiers":{"type":"array","description":"Otherdeed Environment, Resource and Sediment only","items":{"type":"object","properties":{"tier":{"type":"integer"},"count":{"type":"integer"},"floor":{"$ref":"#\/components\/schemas\/TraitFloor"},"listed":{"type":"integer"}}}}}},"Candle":{"type":"object","properties":{"t":{"type":"string","format":"date-time","description":"Bucket start (UTC)"},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"}}},"CandleSummary":{"type":"object","properties":{"start":{"type":"number","description":"Open of the first candle"},"end":{"type":"number","description":"Close of the last candle"},"high":{"type":"number"},"low":{"type":"number"},"changePct":{"type":["number","null"],"description":"(end - start) \/ start in percent"}}},"Error":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error` on the endpoints that have always returned it. Read `error`."}}},"PageMeta":{"type":"object","properties":{"chainId":{"type":"integer"},"period":{"type":"string","description":"Collections list only - the stats window used"},"total":{"type":"integer","description":"Exact number of matching rows"},"page":{"type":["integer","null"],"description":"Null when the request paged by `cursor`"},"per_page":{"type":"integer"},"total_pages":{"type":"integer"},"next_cursor":{"type":["string","null"],"description":"Sales, listings and bids: pass as `cursor` for the next page; null on the last page"}}},"CollectionStats":{"type":"object","description":"Live market stats. Native amounts are in `currency` (ETH on Ethereum, APE on ApeChain).","properties":{"currency":{"type":"string","example":"APE"},"floorPrice":{"type":["number","null"],"description":"Cheapest active listing across indexed marketplaces"},"floorPriceUsd":{"type":["number","null"]},"floorChange24h":{"type":["number","null"],"description":"Percent vs the floor 24h ago"},"bestOffer":{"type":["number","null"],"description":"Highest active collection-wide offer"},"listed":{"type":["integer","null"]},"listedPercentage":{"type":["number","null"]},"supply":{"type":["integer","null"]},"holders":{"type":["integer","null"]},"volume":{"type":"object","description":"Keyed by window: 24h, 7d, 30d, all (list endpoint: requested period only)","additionalProperties":{"type":"number"}},"volumeUsd":{"type":"object","additionalProperties":{"type":"number"}},"sales":{"type":"object","additionalProperties":{"type":"integer"}}}},"Collection":{"type":"object","properties":{"chainId":{"type":"integer","enum":[1,33139]},"chain":{"type":"string","enum":["mainnet","apechain"]},"slug":{"type":"string","description":"Stable URL slug - accepted anywhere a {collection} is expected"},"address":{"type":"string","description":"Lowercased contract address"},"name":{"type":"string"},"description":{"type":["string","null"]},"contractType":{"type":"string","enum":["erc721","erc1155"]},"imageUrl":{"type":["string","null"],"description":"Logo"},"bannerImageUrl":{"type":["string","null"]},"category":{"type":["string","null"]},"verified":{"type":"boolean","description":"Project completed OSWiki verification (claimed by its team)"},"safelistStatus":{"type":["string","null"],"description":"OpenSea safelist status where known (e.g. verified, approved)"},"links":{"type":"object","properties":{"website":{"type":["string","null"]},"discord":{"type":["string","null"]},"telegram":{"type":["string","null"]},"twitter":{"type":["string","null"]},"instagram":{"type":["string","null"]},"opensea":{"type":["string","null"]}}},"royalty":{"type":"object","properties":{"bps":{"type":["integer","null"]},"recipient":{"type":["string","null"]}}},"urls":{"type":"object","description":"oswiki.xyz page to link users to","properties":{"collection":{"type":"string","format":"uri"}}},"stats":{"$ref":"#\/components\/schemas\/CollectionStats"}}},"Token":{"type":"object","properties":{"chainId":{"type":"integer"},"tokenId":{"type":"string"},"contract":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"}}},"collectionSlug":{"type":"string"},"name":{"type":["string","null"],"description":"Per-token metadata name; fall back to the collection name + tokenId"},"description":{"type":["string","null"]},"image":{"type":["string","null"],"description":"CDN-hosted display image (best available size)"},"imageThumbnail":{"type":["string","null"],"description":"CDN-hosted 250px image for lists and grids"},"imageLarge":{"type":["string","null"],"description":"CDN-hosted 1500px image, when the source is larger than 500px"},"imageOriginal":{"type":["string","null"],"description":"Source image URL from metadata (may be ipfs:\/\/)"},"animationUrl":{"type":["string","null"]},"mediaType":{"type":["string","null"],"description":"Set when the media is not a still image, e.g. video"},"owner":{"type":["string","null"],"description":"ERC-721 only (ERC-1155 has many holders)"},"isBurned":{"type":"boolean"},"supply":{"type":["integer","null"],"description":"ERC-1155 total units"},"rarity":{"type":["object","null"],"properties":{"rank":{"type":"integer"},"score":{"type":["number","null"]},"percentile":{"type":["number","null"]}}},"attributes":{"type":"array","items":{"type":"object","properties":{"traitType":{"type":"string"},"value":{"oneOf":[{"type":"string"},{"type":"number"}]},"displayType":{"type":["string","null"]}}}},"lowestAsk":{"type":["object","null"],"description":"Cheapest active listing across indexed marketplaces. `askId` is set only for OSWiki listings.","properties":{"price":{"type":"number"},"priceUsd":{"type":["number","null"],"description":"`price` at the current ETH\/APE price"},"currency":{"type":"string"},"marketplace":{"type":["string","null"],"example":"oswiki"},"askId":{"type":["string","null"]},"maker":{"type":["string","null"]},"expiresAt":{"type":["string","null"],"format":"date-time"}}},"lastSale":{"type":["object","null"],"properties":{"price":{"type":"number"},"priceUsd":{"type":["number","null"]},"currency":{"type":"string"},"marketplace":{"type":["string","null"]},"txHash":{"type":["string","null"]},"timestamp":{"type":["string","null"],"format":"date-time"}}},"fairValue":{"type":["object","null"],"description":"OSWiki's model estimate (Otherdeed and Otherdeed Expanded on Ethereum only, null elsewhere): the current floor times a multiplier fitted on recent sales from the deed's traits. A price reference, not an offer.","properties":{"eth":{"type":"number"},"usd":{"type":["number","null"],"description":"`eth` at the current ETH price"},"confidence":{"type":["string","null"],"enum":["high","medium","low",null],"description":"How many comparable sales back the estimate"}}},"urls":{"type":"object","description":"oswiki.xyz pages to link users to","properties":{"token":{"type":"string","format":"uri"},"collection":{"type":"string","format":"uri"}}}}},"Sale":{"type":"object","properties":{"chainId":{"type":"integer"},"tokenId":{"type":"string"},"contract":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"}}},"collectionSlug":{"type":["string","null"]},"image":{"type":["string","null"]},"price":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string"},"usd":{"type":["number","null"],"description":"USD at sale time"}}},"marketplace":{"type":["string","null"],"example":"opensea"},"from":{"type":["string","null"]},"to":{"type":["string","null"]},"txHash":{"type":["string","null"]},"timestamp":{"type":["string","null"],"format":"date-time","description":"On-chain block time"},"urls":{"type":"object","properties":{"token":{"type":["string","null"],"format":"uri"},"collection":{"type":["string","null"],"format":"uri"}}}}},"OrderError":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["bad_structure","unsupported_chain","unknown_collection","blacklisted","conduit_blocked","not_owner","insufficient_balance","not_approved","counter_mismatch","order_cancelled","order_filled","hash_mismatch","invalid_signature","fee_too_low","royalty_too_low","price_too_low","bad_time","duplicate_terminal","raise_requires_cancel","rpc_unavailable","cancel_on_chain"],"x-enumDescriptions":{"bad_structure":"The payload or order does not match the schema; `error` names the field","unsupported_chain":"Unsupported chain - use chainId 1 (Ethereum) or 33139 (ApeChain)","unknown_collection":"This collection is not listed on OSWiki","blacklisted":"This collection cannot be listed on OSWiki","conduit_blocked":"This collection only trades through OpenSea's zone, so it cannot be listed on OSWiki yet","not_owner":"You do not own this token","insufficient_balance":"The listing quantity is more than you hold","not_approved":"Approve the OpenSea conduit for this collection first","counter_mismatch":"Your Seaport counter changed - sign the listing again","order_cancelled":"This order was cancelled on-chain","order_filled":"This order is already filled","hash_mismatch":"orderHash does not match the signed order","invalid_signature":"The signature does not match the order","fee_too_low":"The OSWiki fee is below the required amount","royalty_too_low":"The creator royalty is below the required amount","price_too_low":"The price is below the minimum for this chain","bad_time":"A listing must start now and run between 1 hour and 365 days","duplicate_terminal":"This order was already cancelled, filled or expired","raise_requires_cancel":"Cancel your cheaper listing on-chain before listing this token higher","rpc_unavailable":"Could not verify the listing on-chain right now - please try again","cancel_on_chain":"Cancel on-chain with Seaport cancel() from the maker wallet, then sync"},"description":"Stable reason code to map to your own copy. `rpc_unavailable` is retryable."}}},"OfferError":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["bad_structure","unsupported_chain","unknown_collection","blacklisted","conduit_blocked","counter_mismatch","order_cancelled","order_filled","hash_mismatch","invalid_signature","fee_too_low","royalty_too_low","price_too_low","bad_time","duplicate_terminal","insufficient_balance","insufficient_allowance","wrong_currency","unsupported_kind","unknown_token","self_offer","bid_not_active","expired","not_owner","rpc_unavailable","offers_paused","cancel_on_chain","gone"],"x-enumDescriptions":{"bad_structure":"The payload or order does not match the schema; `error` names the field","unsupported_chain":"Unsupported chain - use chainId 1 (Ethereum) or 33139 (ApeChain)","unknown_collection":"This collection is not on OSWiki","blacklisted":"Offers are not available for this collection","conduit_blocked":"This collection only trades through OpenSea's zone, so an OSWiki offer could never be accepted","counter_mismatch":"Your Seaport counter changed - sign the offer again","order_cancelled":"This offer was cancelled on-chain","order_filled":"This offer is already filled","hash_mismatch":"orderHash does not match the signed offer","invalid_signature":"The signature does not match the offer","fee_too_low":"The OSWiki fee is below the required amount","royalty_too_low":"The creator royalty is below the required amount","price_too_low":"The offer is below the minimum for this chain","bad_time":"An offer must start now and run between 5 minutes and 365 days","duplicate_terminal":"This offer was already cancelled, filled or expired","insufficient_balance":"Your wrapped balance does not cover this offer","insufficient_allowance":"Your Seaport approval does not cover this offer","wrong_currency":"Offers are paid in WETH on Ethereum and WAPE on ApeChain","unsupported_kind":"Item offers take one token; collection offers are for ERC-721 collections only","unknown_token":"This token is not indexed on OSWiki yet - try again shortly","self_offer":"You cannot make an offer on a token you own","bid_not_active":"This offer is not active","expired":"This offer has expired","not_owner":"You do not hold this token","rpc_unavailable":"Could not verify the offer on-chain right now - please try again","offers_paused":"Offers are paused while OSWiki moves to Seaport","cancel_on_chain":"Cancel on-chain with Seaport cancel() from the maker wallet, then sync","gone":"POST \/v1\/orders\/bids\/collection is removed: post collection offers to POST \/v1\/orders\/bids"},"description":"Stable reason code to map to your own copy; `error` is the server text (listed in `x-enumDescriptions`, sometimes with the exact amount or field). `rpc_unavailable` is retryable. `insufficient_balance` and `insufficient_allowance` are about the bidder's WETH \/ WAPE, `not_owner` about the seller on accept."}}},"Bid":{"type":"object","properties":{"bidId":{"type":"string","description":"`oswiki-` + the Seaport order hash"},"chainId":{"type":"integer","enum":[1,33139]},"kind":{"type":"string","enum":["single-token","collection"],"description":"`single-token` is an item offer"},"tokenId":{"type":["string","null"],"description":"Null for a collection offer"},"contract":{"type":"object","properties":{"address":{"type":"string"},"name":{"type":"string"}}},"maker":{"type":"string","description":"The bidder"},"price":{"type":"number","description":"Gross offer A in WETH \/ WAPE, decimal"},"priceWei":{"description":"Gross offer A in wei","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"sellerNetWei":{"description":"What the seller receives: A minus the fee and the royalty","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"expiresAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"traitCriteria":{"type":["object","null"],"description":"Null for Seaport offers"}}},"BidWithStatus":{"allOf":[{"$ref":"#\/components\/schemas\/Bid"},{"type":"object","properties":{"status":{"type":"string","enum":["active","inactive","cancelled","filled","expired"]},"inactiveReason":{"type":["string","null"],"description":"Why an inactive offer is hidden: an `OfferError` code such as `insufficient_balance` or `insufficient_allowance`"}}}]},"OfferAcceptData":{"type":"object","description":"Send to `to` with `value` 0 from `fulfiller`, after `setApprovalForAll(approval.operator, true)` on `approval.token`. ABI-encode with Seaport 1.6: `fulfillBasicOrder_efficient_6GL6yc(BasicOrderParameters)` with `basicOrderParameters`, or `matchAdvancedOrders(AdvancedOrder[],CriteriaResolver[],Fulfillment[],address)` with `orders`, `criteriaResolvers`, `fulfillments`, `recipient`. No calldata is returned.","properties":{"bidId":{"type":"string"},"kind":{"type":"string","enum":["item","collection"]},"to":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395"},"value":{"type":"string","const":"0"},"method":{"type":"string","enum":["fulfillBasicOrder_efficient_6GL6yc","matchAdvancedOrders"]},"amounts":{"type":"object","description":"The seller receives `sellerNetWei` = `offerWei` - `feeWei` - `royaltyWei`","properties":{"offerWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"feeWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"royaltyWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"sellerNetWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"}}},"currency":{"$ref":"#\/components\/schemas\/OfferCurrency"},"approval":{"type":"object","description":"The seller calls `setApprovalForAll(operator, true)` on `token` before sending","properties":{"token":{"type":"string","description":"The NFT contract"},"operator":{"type":"string","const":"0x1e0049783f008a0085193e00003d00cd54003c71","description":"The OpenSea conduit"}}},"basicOrderParameters":{"type":"object","description":"Item offers: the BasicOrderParameters struct","properties":{"considerationToken":{"type":"string","description":"The NFT contract"},"considerationIdentifier":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"considerationAmount":{"type":"string","const":"1"},"offerer":{"type":"string","description":"The bidder"},"zone":{"type":"string","const":"0x0000000000000000000000000000000000000000"},"offerToken":{"type":"string","description":"WETH \/ WAPE"},"offerIdentifier":{"type":"string","const":"0"},"offerAmount":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"basicOrderType":{"type":"integer","enum":[16,20],"description":"16 for ERC-721, 20 for ERC-1155"},"startTime":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"endTime":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"zoneHash":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000"},"salt":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"offererConduitKey":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000"},"fulfillerConduitKey":{"type":"string","const":"0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000"},"totalOriginalAdditionalRecipients":{"type":"integer"},"additionalRecipients":{"type":"array","description":"The fee and royalty legs, in consideration order","items":{"type":"object","properties":{"amount":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"recipient":{"type":"string"}}}},"signature":{"type":"string"}}},"orders":{"type":"array","minItems":2,"maxItems":2,"description":"Collection offers, as AdvancedOrder: [0] the signed offer, [1] the seller's unsigned mirror order (offerer = `fulfiller`, gives the NFT for `sellerNetWei`, signature `0x`, valid for 30 minutes: fetch again right before sending)","items":{"type":"object","properties":{"parameters":{"type":"object","description":"Seaport OrderParameters: OrderComponents without `counter`, plus totalOriginalConsiderationItems"},"numerator":{"type":"integer","const":1},"denominator":{"type":"integer","const":1},"signature":{"type":"string"},"extraData":{"type":"string","const":"0x"}}}},"criteriaResolvers":{"type":"array","description":"Collection offers: resolves the offer's criteria item (order 0, consideration side, index 0) to the token id","items":{"type":"object","properties":{"orderIndex":{"type":"integer"},"side":{"type":"integer","description":"0 offer, 1 consideration"},"index":{"type":"integer"},"identifier":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"criteriaProof":{"type":"array","items":{"type":"string"},"maxItems":0}}}},"fulfillments":{"type":"array","description":"Collection offers: NFT to the bidder, net to the seller, then the fee and royalty legs","items":{"type":"object","properties":{"offerComponents":{"type":"array","items":{"$ref":"#\/components\/schemas\/FulfillmentComponent"}},"considerationComponents":{"type":"array","items":{"$ref":"#\/components\/schemas\/FulfillmentComponent"}}}}},"recipient":{"type":"string","description":"Collection offers: the seller (`fulfiller`)"}}},"FulfillmentComponent":{"type":"object","properties":{"orderIndex":{"type":"integer"},"itemIndex":{"type":"integer"}}},"OfferCurrency":{"type":"object","properties":{"address":{"type":"string","description":"WETH on Ethereum, WAPE on ApeChain"},"symbol":{"type":"string","enum":["WETH","WAPE"]},"name":{"type":"string","description":"Accept data only"},"decimals":{"type":"integer","const":18}}},"OfferOrder":{"type":"object","required":["parameters","signature"],"additionalProperties":false,"properties":{"parameters":{"$ref":"#\/components\/schemas\/OfferOrderComponents"},"signature":{"type":"string","description":"EIP-712 signature over OrderComponents by the bidder, 0x-hex: 65 bytes (v 27\/28) or 64 bytes (EIP-2098); ERC-1271 for contract wallets"},"orderHash":{"type":"string","description":"Optional OrderComponents struct hash; refused with `hash_mismatch` when it differs from the signed order"}}},"OfferOrderComponents":{"type":"object","description":"Seaport OrderComponents plus totalOriginalConsiderationItems, for an offer. uint256 fields are decimal strings; itemType, orderType and totalOriginalConsiderationItems are JSON integers; addresses and bytes32 are 0x-hex.","required":["offerer","zone","offer","consideration","orderType","startTime","endTime","zoneHash","salt","conduitKey","counter","totalOriginalConsiderationItems"],"additionalProperties":false,"properties":{"offerer":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The bidder"},"zone":{"type":"string","const":"0x0000000000000000000000000000000000000000"},"offer":{"type":"array","minItems":1,"maxItems":1,"items":{"$ref":"#\/components\/schemas\/OfferOfferItem"}},"consideration":{"type":"array","minItems":1,"maxItems":3,"items":{"$ref":"#\/components\/schemas\/OfferConsiderationItem"},"description":"In this order: the NFT to the offerer, the OSWiki fee floor(A x feeBps \/ 10000) to `feeRecipient` (when above zero), the royalty to its receiver (when above zero). Recipients are distinct, and the legs must leave the seller more than zero."},"orderType":{"type":"integer","const":0,"description":"0 (FULL_OPEN)"},"startTime":{"description":"Unix seconds; at most `bounds.maxStartTimeAheadSeconds` ahead","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"endTime":{"description":"Unix seconds; the offer runs between `bounds.minDurationSeconds` and `bounds.maxDurationSeconds`","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"zoneHash":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000"},"salt":{"description":"`saltPrefix` in the top 4 bytes plus 28 random bytes, as a decimal string","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"conduitKey":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000","description":"Zero: the bidder approves Seaport itself"},"counter":{"description":"Seaport getCounter(offerer) - never a guess","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"totalOriginalConsiderationItems":{"type":"integer","description":"The consideration length"}}},"OfferOfferItem":{"type":"object","description":"What the bidder pays: A of WETH \/ WAPE","required":["itemType","token","identifierOrCriteria","startAmount","endAmount"],"properties":{"itemType":{"type":"integer","const":1,"description":"1 (ERC-20)"},"token":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"`offers.currency.address`: WETH on Ethereum, WAPE on ApeChain"},"identifierOrCriteria":{"type":"string","const":"0"},"startAmount":{"description":"A, the offer in wei, at least `bounds.minOfferWei`","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"endAmount":{"description":"Equal to startAmount","type":"string","pattern":"^(0|[1-9][0-9]*)$"}}},"OfferConsiderationItem":{"type":"object","description":"consideration[0] is the NFT leg; the fee and royalty legs after it are ERC-20 in the offer currency","required":["itemType","token","identifierOrCriteria","startAmount","endAmount","recipient"],"oneOf":[{"title":"NFT leg","properties":{"itemType":{"type":"integer","enum":[2,3,4],"description":"2 one ERC-721 token, 3 one ERC-1155 token, 4 any token of an ERC-721 collection"},"token":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The NFT contract"},"identifierOrCriteria":{"description":"The token id for itemType 2 \/ 3, 0 for itemType 4","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"startAmount":{"type":"string","const":"1"},"endAmount":{"type":"string","const":"1"},"recipient":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The offerer"}}},{"title":"Fee or royalty leg","properties":{"itemType":{"type":"integer","const":1},"token":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The offer currency"},"identifierOrCriteria":{"type":"string","const":"0"},"startAmount":{"description":"Above zero","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"endAmount":{"description":"Equal to startAmount","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"recipient":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"`feeRecipient`, or `royalty.royaltyRecipient`"}}}]},"OfferRequirement":{"type":"object","description":"The fee and royalty legs an offer of A must carry, as intake checks them","properties":{"contract":{"type":"string"},"tokenId":{"type":["string","null"],"description":"Null for a collection offer"},"kind":{"type":"string","enum":["item","collection"]},"isErc1155":{"type":"boolean","description":"Use itemType 3 for the NFT leg when true"},"blocked":{"type":"boolean","description":"This offer cannot be made on OSWiki"},"reason":{"type":["string","null"],"enum":["unknown_collection","blacklisted","conduit_blocked","unsupported_kind",null]},"feeWei":{"description":"floor(A x feeBps \/ 10000)","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"royaltyRecipient":{"type":["string","null"],"description":"Null when no royalty leg is due"},"royaltyWei":{"description":"0 means leave the royalty leg out","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"sellerNetWei":{"description":"A minus the fee and the royalty","type":"string","pattern":"^(0|[1-9][0-9]*)$"}}},"OfferParams":{"type":"object","description":"Everything an offer needs. `counter` and `openOffersWei` need `maker`; `royalty`, `requiredAllowanceWei`, `balanceWei` and `allowanceWei` need `kind` (with `maker`, `contract`, `unitPriceWei` and, for `kind=item`, `tokenId`).","properties":{"seaport":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395"},"eip712Domain":{"type":"object","description":"Same domain as the listing one"},"primaryType":{"type":"string","const":"OrderComponents"},"types":{"type":"object","description":"EIP-712 types: OrderComponents, OfferItem, ConsiderationItem"},"zone":{"type":"string","const":"0x0000000000000000000000000000000000000000"},"zoneHash":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000"},"conduitKey":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000","description":"Offers use no conduit"},"approvalTarget":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395","description":"The ERC-20 spender to approve: Seaport itself"},"sellerConduitKey":{"type":"string","const":"0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000","description":"The seller delivers the NFT through the OpenSea conduit when accepting"},"saltPrefix":{"type":"string","const":"0x4f535749"},"orderType":{"type":"integer","const":0},"currency":{"$ref":"#\/components\/schemas\/OfferCurrency"},"feeRecipient":{"type":"string"},"feeBps":{"type":"integer","description":"The standard OSWiki fee (API orders never get plan discounts)"},"counter":{"type":["string","null"],"description":"Seaport getCounter(maker), decimal - sign with exactly this"},"openOffersWei":{"type":["string","null"],"description":"Sum of A over the maker's unexpired OSWiki offers on this chain, active or inactive: what Seaport may still pull"},"requiredAllowanceWei":{"type":["string","null"],"description":"`openOffersWei` + A. Call `approve(approvalTarget, requiredAllowanceWei)` on `currency.address` when `allowanceWei` is lower. ERC-20 approve replaces the allowance, it does not add; never approve an unlimited amount."},"balanceWei":{"type":["string","null"],"description":"The maker's WETH \/ WAPE balance; it must cover A"},"allowanceWei":{"type":["string","null"],"description":"The maker's current allowance to `approvalTarget`"},"royalty":{"oneOf":[{"$ref":"#\/components\/schemas\/OfferRequirement"},{"type":"null"}],"description":"Set when `kind` is passed"},"consideration":{"type":"string","description":"The consideration layout OSWiki accepts (see `OfferOrderComponents`)"},"bounds":{"type":"object","properties":{"minDurationSeconds":{"type":"integer"},"maxDurationSeconds":{"type":"integer"},"maxStartTimeAheadSeconds":{"type":"integer"},"minOfferWei":{"type":"string","description":"Smallest A"}}}}},"SeaportOrder":{"type":"object","required":["parameters","signature"],"additionalProperties":false,"properties":{"parameters":{"$ref":"#\/components\/schemas\/OrderComponents"},"signature":{"type":"string","description":"EIP-712 signature over OrderComponents, 0x-hex: 65 bytes (v 27\/28) or 64 bytes (EIP-2098)"},"orderHash":{"type":"string","description":"Optional OrderComponents struct hash; refused with `hash_mismatch` when it differs from the signed order"}}},"OrderComponents":{"type":"object","description":"Seaport OrderComponents plus totalOriginalConsiderationItems. uint256 fields are decimal strings; itemType, orderType and totalOriginalConsiderationItems are JSON integers; addresses and bytes32 are 0x-hex.","required":["offerer","zone","offer","consideration","orderType","startTime","endTime","zoneHash","salt","conduitKey","counter","totalOriginalConsiderationItems"],"additionalProperties":false,"properties":{"offerer":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"The seller"},"zone":{"type":"string","const":"0x0000000000000000000000000000000000000000"},"offer":{"type":"array","minItems":1,"maxItems":1,"items":{"$ref":"#\/components\/schemas\/OfferItem"}},"consideration":{"type":"array","minItems":1,"maxItems":3,"items":{"$ref":"#\/components\/schemas\/ConsiderationItem"},"description":"In this order: seller proceeds to the offerer, the OSWiki fee to `feeRecipient` (when above zero), the royalty (when above zero)"},"orderType":{"type":"integer","enum":[0,1],"description":"0 (FULL_OPEN) for ERC-721, 1 (PARTIAL_OPEN) for ERC-1155"},"startTime":{"description":"Unix seconds; at most `bounds.maxStartTimeAheadSeconds` ahead","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"endTime":{"description":"Unix seconds; the listing runs between `bounds.minDurationSeconds` and `bounds.maxDurationSeconds`","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"zoneHash":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000"},"salt":{"description":"`saltPrefix` in the top 4 bytes plus 28 random bytes, as a decimal string","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"conduitKey":{"type":"string","const":"0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000"},"counter":{"description":"Seaport getCounter(offerer) - never a guess","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"totalOriginalConsiderationItems":{"type":"integer","description":"The consideration length"}}},"OfferItem":{"type":"object","required":["itemType","token","identifierOrCriteria","startAmount","endAmount"],"properties":{"itemType":{"type":"integer","enum":[2,3],"description":"2 (ERC-721) or 3 (ERC-1155)"},"token":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"identifierOrCriteria":{"description":"Token id","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"startAmount":{"description":"Units: 1 for ERC-721","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"endAmount":{"description":"Equal to startAmount","type":"string","pattern":"^(0|[1-9][0-9]*)$"}}},"ConsiderationItem":{"type":"object","required":["itemType","token","identifierOrCriteria","startAmount","endAmount","recipient"],"properties":{"itemType":{"type":"integer","const":0,"description":"Native currency only"},"token":{"type":"string","const":"0x0000000000000000000000000000000000000000"},"identifierOrCriteria":{"type":"string","const":"0"},"startAmount":{"description":"Wei for the whole quantity, divisible by it","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"endAmount":{"description":"Equal to startAmount","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"recipient":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}},"SeaportParams":{"type":"object","properties":{"seaport":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395"},"chainId":{"type":"integer","enum":[1,33139]},"eip712Domain":{"type":"object","properties":{"name":{"type":"string","const":"Seaport"},"version":{"type":"string","const":"1.6"},"chainId":{"type":"integer"},"verifyingContract":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395"}}},"primaryType":{"type":"string","const":"OrderComponents"},"types":{"type":"object","description":"EIP-712 types: OrderComponents, OfferItem, ConsiderationItem"},"zone":{"type":"string","const":"0x0000000000000000000000000000000000000000"},"zoneHash":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000"},"conduitKey":{"type":"string","const":"0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000"},"conduit":{"type":"string","const":"0x1e0049783f008a0085193e00003d00cd54003c71","description":"Approve this operator (setApprovalForAll) on the collection before listing"},"saltPrefix":{"type":"string","const":"0x4f535749"},"orderType":{"type":"object","properties":{"erc721":{"type":"integer","const":0},"erc1155":{"type":"integer","const":1}}},"feeRecipient":{"type":"string"},"defaultFeeBps":{"type":"integer","description":"The OSWiki fee every API order must carry, whatever the maker's plan"},"consideration":{"type":"string","description":"The consideration layout OSWiki accepts"},"bounds":{"type":"object","properties":{"minDurationSeconds":{"type":"integer"},"maxDurationSeconds":{"type":"integer"},"maxStartTimeAheadSeconds":{"type":"integer"},"minUnitPriceWei":{"type":"string"},"maxQuantity":{"type":"integer"}}},"maker":{"type":["object","null"],"description":"Set when `maker` is passed","properties":{"address":{"type":"string"},"counter":{"type":"string","description":"Seaport getCounter(maker), decimal - sign with exactly this"},"feeBps":{"type":"integer","description":"The OSWiki fee this seller's API orders must carry (always `defaultFeeBps`)"}}},"royalty":{"oneOf":[{"$ref":"#\/components\/schemas\/ListingRequirement"},{"type":"null"}],"description":"Listings: set when `maker`, `contract`, `tokenId` and `unitPriceWei` are passed without `kind`. For offers read `offers.royalty`"},"offers":{"$ref":"#\/components\/schemas\/OfferParams"}}},"ListingRequirement":{"type":"object","properties":{"contract":{"type":"string"},"tokenId":{"type":"string"},"blocked":{"type":"boolean","description":"The collection cannot be listed on OSWiki"},"reason":{"type":["string","null"],"enum":["unknown_collection","blacklisted","conduit_blocked",null]},"royaltyRecipient":{"type":["string","null"]},"royaltyWei":{"type":"string","description":"Royalty for the whole quantity; 0 when none applies"},"opensea":{"type":["object","null"],"description":"OpenSea's own listing requirements for this collection, for a twin listing you post to OpenSea yourself (the OSWiki API does not forward it). Null when OpenSea's requirements are unknown or the collection is blocked.","properties":{"chain":{"type":"string","description":"OpenSea chain name, e.g. ethereum or ape_chain"},"protocolAddress":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395"},"conduitKey":{"type":"string","const":"0x0000007b02230091a7ed01230072f7006a004d60a8d4e71d599b8104250f0000"},"zone":{"type":"string","description":"The zone OpenSea requires"},"orderType":{"type":"integer"},"feeRecipient":{"type":"string","description":"OpenSea's fee recipient"},"feeBps":{"type":"integer","description":"OpenSea's fee"},"creatorFees":{"type":"array","description":"Required creator fees on OpenSea","items":{"type":"object","properties":{"bps":{"type":"integer"},"recipient":{"type":"string"}}}}}}}},"BuyData":{"type":"object","properties":{"askId":{"type":"string"},"marketplace":{"type":"string","enum":["oswiki","opensea","gondi"]},"protocol":{"type":"string","const":"seaport"},"chainId":{"type":"integer"},"to":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395","description":"Seaport 1.6"},"value":{"type":"string","description":"Exact wei to send: the order total x numerator \/ denominator, or 0 for a WETH-priced Gondi listing"},"data":{"type":"string","description":"Full calldata: fulfillAdvancedOrder (selector 0xe7acab24) from `orderData`, then the 4-byte tag 0xda32920a"},"orderData":{"type":"object","description":"The AdvancedOrder for fulfillAdvancedOrder \/ fulfillAvailableAdvancedOrders, plus the other fulfillAdvancedOrder arguments","properties":{"parameters":{"$ref":"#\/components\/schemas\/OrderComponents","description":"Seaport OrderParameters: the signed order without `counter`"},"signature":{"type":"string"},"numerator":{"type":"integer","description":"Units bought (1 for ERC-721)"},"denominator":{"type":"integer","description":"Units signed (1 for ERC-721)"},"extraData":{"type":"string","description":"`0x` for OSWiki and Gondi; OpenSea's SignedZone authorization for restricted OpenSea orders (orderType 2\/3)"},"fulfillerConduitKey":{"type":"string","const":"0x0000000000000000000000000000000000000000000000000000000000000000"},"recipient":{"type":"string","description":"`buyer`, or the zero address (= the sender) when none was given"},"payment":{"type":"object","description":"WETH-priced Gondi listings only: the exact approval to Seaport the fill needs, with the buyer's live balance and allowance (null when unknown)","properties":{"token":{"type":"string"},"symbol":{"type":"string"},"decimals":{"type":"integer"},"amountWei":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"spender":{"type":"string","const":"0x0000000000000068f116a894984e2db1123eb395"},"balanceWei":{"type":["string","null"]},"allowanceWei":{"type":["string","null"]},"balanceSufficient":{"type":["boolean","null"]},"allowanceSufficient":{"type":["boolean","null"]}}}}},"expectedItem":{"type":"object","description":"What the buyer receives; compare with the order's offer item","properties":{"contract":{"type":"string"},"tokenId":{"type":"string","pattern":"^(0|[1-9][0-9]*)$","description":"uint256 as a decimal string"},"amount":{"description":"Units received (offer startAmount x numerator \/ denominator)","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"itemType":{"type":"integer","enum":[2,3],"description":"2 = ERC-721, 3 = ERC-1155"}}},"priceWei":{"description":"The order total x numerator \/ denominator in `currency`; equal to `value` when paid in the native currency","type":"string","pattern":"^(0|[1-9][0-9]*)$"},"currency":{"type":"object","properties":{"symbol":{"type":"string","enum":["ETH","APE","WETH"]},"address":{"type":"string","enum":["0x0000000000000000000000000000000000000000","0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"],"description":"The zero address for the native currency, else WETH (Gondi listings only)"},"decimals":{"type":"integer","const":18}}},"expiresAt":{"type":"string","format":"date-time","description":"The order's endTime"}}},"BuyDataError":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"message":{"type":"string","description":"Same text as `error`"},"code":{"type":"string","enum":["bad_request","not_found","inactive","unavailable","order_mismatch","price_above_max","buyer_required","bad_amount","unsupported_marketplace","unsupported_order","upstream_error","buying_disabled"]}}},"ListingSync":{"type":"object","properties":{"askId":{"type":"string"},"status":{"type":"string","enum":["active","inactive","cancelled","filled","expired"]},"invalidReason":{"type":["string","null"],"description":"Why an inactive listing is hidden"},"quantityRemaining":{"type":["integer","null"]}}},"ListingComponents":{"type":"object","properties":{"askId":{"type":"string"},"chainId":{"type":"integer"},"orderHash":{"type":"string"},"maker":{"type":"string","description":"The offerer: only this wallet can cancel"},"status":{"type":"string","enum":["active","inactive","cancelled","filled","expired"]},"parameters":{"$ref":"#\/components\/schemas\/OrderComponents"},"opensea":{"type":["object","null"],"description":"The OpenSea twin signed with this listing, null when it was not cross-listed","properties":{"orderHash":{"type":"string"},"status":{"type":"string","enum":["queued","posted","failed"],"description":"Posting state on OpenSea"},"parameters":{"type":"object","description":"OrderComponents in the same wire format, with OpenSea's zone, orderType and fees"}}}}},"BidComponents":{"type":"object","properties":{"bidId":{"type":"string"},"chainId":{"type":"integer"},"orderHash":{"type":"string"},"maker":{"type":"string","description":"The bidder: only this wallet can cancel"},"status":{"type":"string","enum":["active","inactive","cancelled","filled","expired"]},"parameters":{"$ref":"#\/components\/schemas\/OfferOrderComponents"}}}}}}