OpenSea API endpoint
Runs a keyword search across a wallet's holdings, matching on item and collection name, and returns the hits with rarity rank and best standing listing. Narrower than `/opensea/profile/{identifier}/items`, which lists everything the wallet holds.
/opensea/profile/{identifier}/search-itemsPath parameters:
identifier (required): a wallet address, an ENS name, or an OpenSea username, e.g. vitalik.ethQuery parameters:
query (required): the search keyword, e.g. apelimit (optional): results per page, 1-100, default 20slug in the response echoes the resolved wallet address. A query with no matches returns an empty items list, not a 404.
| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| token_id | 20 | |
| name | 20 | |
| image_url | 20 | i2c.seadn.io |
| contract_address | 20 | |
| chain | 20 | |
| collection_slug | 20 | |
| collection_name | 20 | |
| rarity_rank | 20 | 2,404 to 14,646, median 7,043 |
| best_listing | 5 | |
| marketplace | 5 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| identifier (path) | string | Yes | Wallet address, ENS name, or OpenSea username | vitalik.eth | |
| query | string | Yes | Search keyword | ape | |
| limit | integer | No | Results per page, 1-100 | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/opensea/profile/vitalik.eth/search-items?query=ape&limit=10" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"slug": "0x29469395eaf6f95920e59f858042f0e28d98a20b",
"query": "ape",
"items": [
{
"token_id": "339",
"name": "Azuki #339",
"image_url": "https://i2c.seadn.io/ethereum/45f00c7f.gif",
"contract_address": "0x97de1e72ccd625969f20589503babc4fd8080832",
"chain": "ethereum",
"collection_slug": "azuki",
"collection_name": "Azuki",
"rarity_rank": 2841
}
]
}
}Request schema
No body schema
Response schema
#/definitions/opensea.itemSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | opensea.ItemSearchResponse | No | ||||
| data.items | array | No | ||||
| data.items[].best_listing | opensea.Price | No | ||||
| data.items[].best_listing.amount | number | No | 7.85 | |||
| data.items[].best_listing.chain | string | No | ethereum | |||
| data.items[].best_listing.contract_address | string | No | 0x0000000000000000000000000000000000000000 | |||
| data.items[].best_listing.currency | string | No | ETH | |||
| data.items[].best_listing.usd | number | No | 19295.3 | |||
| data.items[].best_offer | opensea.Price | No | ||||
| data.items[].best_offer.amount | number | No | 7.85 | |||
| data.items[].best_offer.chain | string | No | ethereum | |||
| data.items[].best_offer.contract_address | string | No | 0x0000000000000000000000000000000000000000 | |||
| data.items[].best_offer.currency | string | No | ETH | |||
| data.items[].best_offer.usd | number | No | 19295.3 | |||
| data.items[].chain | string | No | ethereum | |||
| data.items[].collection_name | string | No | Bored Ape Yacht Club | |||
| data.items[].collection_slug | string | No | boredapeyachtclub | |||
| data.items[].contract_address | string | No | ||||
| data.items[].created_at | string | No | ||||
| data.items[].description | string | No | ||||
| data.items[].id | string | No | ||||
| data.items[].image_url | string | No | ||||
| data.items[].is_fungible | boolean | No | ||||
| data.items[].last_sale | opensea.Price | No | ||||
| data.items[].last_sale.amount | number | No | 7.85 | |||
| data.items[].last_sale.chain | string | No | ethereum | |||
| data.items[].last_sale.contract_address | string | No | 0x0000000000000000000000000000000000000000 | |||
| data.items[].last_sale.currency | string | No | ETH | |||
| data.items[].last_sale.usd | number | No | 19295.3 | |||
| data.items[].last_sale_at | string | No | ||||
| data.items[].marketplace | string | No | opensea | |||
| data.items[].name | string | No | #1 | |||
| data.items[].owner | opensea.Account | No | ||||
| data.items[].owner.address | string | No | 0x46efbaedc92067e6d60e84ed6395099723252496 | |||
| data.items[].owner.display_name | string | No | gordongoner | |||
| data.items[].owner.image_url | string | No | ||||
| data.items[].rarity_rank | integer | No | 1204 | |||
| data.items[].token_id | string | No | 1 | |||
| data.items[].traits | array | No | ||||
| data.items[].traits[].trait_type | string | No | Background | |||
| data.items[].traits[].value | string | No | Orange | |||
| data.query | string | No | gold | |||
| data.slug | string | No | boredapeyachtclub | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/opensea/profile/vitalik.eth/search-items?query=ape&limit=10" \
-H "x-api-key: $CRAWLORA_API_KEY"