OpenSea API endpoint
Returns a cursor-paginated page of the NFTs held by a wallet, with each item's collection, rarity rank, and best standing listing. Accepts a wallet address, ENS name, or OpenSea username; a non-address identifier costs one extra resolution lookup.
/opensea/profile/{identifier}/itemsPath parameters:
identifier (required): a wallet address, an ENS name, or an OpenSea username, e.g. vitalik.ethQuery parameters:
limit (optional): items per page, 1-100, default 20cursor (optional): opaque pagination cursor taken from a previous response's next_page_cursorsort_direction (optional): one of ASC, DESC. Default DESC. Sorts by the date the wallet received the itemReturns a cursor-paginated page of the NFTs held by the wallet, each with its collection, rarity rank, and best standing listing. address echoes the resolved wallet address, and total_items is the wallet's full holdings count across all pages.
A non-address identifier (ENS name or username) is resolved to an address first, which costs one extra upstream lookup; pass a raw 0x address to skip it.
| 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 | 16 | 1 to 8,606, median 5,412 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| identifier (path) | string | Yes | Wallet address, ENS name, or OpenSea username | vitalik.eth | |
| limit | integer | No | Items per page, 1-100 | ||
| cursor | string | No | Opaque pagination cursor from a previous next_page_cursor | ||
| sort_direction | string | No | Sort direction by received date Allowed values: ASC, DESC. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/opensea/profile/vitalik.eth/items?limit=10&sort_direction=ASC" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"address": "0xd8da6bf26964af9d7eed9e03e53415d37aa96045",
"total_items": 3441,
"items": [
{
"token_id": "608",
"name": "Meta Pepe #608",
"image_url": "https://i2c.seadn.io/robinhood/726bd6e5.png",
"contract_address": "0xbda54dfc4a1ab3bc587cebb1a20281bf8a017581",
"chain": "ethereum",
"collection_slug": "meta-pepes",
"collection_name": "Meta Pepes",
"rarity_rank": 4127
}
],
"next_page_cursor": "WyIyMDI2LTA4LTI4VDE0OjIwOjQ2WiJd"
}
}Request schema
No body schema
Response schema
#/definitions/opensea.profileItemsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | opensea.ProfileItemsResponse | No | ||||
| data.address | string | No | 0xd8da6bf26964af9d7eed9e03e53415d37aa96045 | |||
| data.items | array | No | Item record, 39 fields: best_listing, best_offer, chain, collection_name, collection_slug, contract_address, created_at, description, id, image_url, is_fungible, last_sale and 7 more. Described under Get a single OpenSea NFT API. | |||
| data.next_page_cursor | string | No | ||||
| data.total_items | integer | No | 3441 | |||
| 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/items?limit=10&sort_direction=ASC" \
-H "x-api-key: $CRAWLORA_API_KEY"