OpenSea API endpoint
Returns every indexed sale of one NFT with its timestamp and price, in both the settlement token and USD — the price history behind the chart on an item page. An item that has never sold returns an empty `points` list. For collection-level sale history use `/opensea/collection/{slug}/activity?event_types=SALE`.
/opensea/item/{chain}/{contract_address}/{token_id}/chartPath parameters:
chain (required): a chain identifier, e.g. ethereum. Call /api/v1/opensea/chains for the full accepted listcontract_address (required): the NFT contract addresstoken_id (required): the token id within that contractReturns every indexed sale of the NFT with its timestamp and realized price, in both the settlement token (value + currency) and USD — the price history behind the chart on an item page. metric is always sale_price.
| Field | Filled in, of 2 checked | Values in the sample |
|---|---|---|
| time | 2 | 2021-06-16 to 2021-09-30 |
| value | 2 | 42 to 769, median 42 |
| usd | 2 | 107,569.91 to 2,195,965.42, median 107,569.91 |
| currency | 2 | “ETH” |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| chain (path) | string | Yes | Chain identifier from /opensea/chains | ethereum | |
| contract_address (path) | string | Yes | NFT contract address | 0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d | |
| token_id (path) | string | Yes | Token id within the contract | 2087 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/opensea/item/ethereum/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d/2087/chart" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"metric": "sale_price",
"points": [
{
"time": "2021-06-16T19:51:39.000Z",
"value": 42,
"usd": 107569.91,
"currency": "ETH"
},
{
"time": "2022-02-03T11:04:12.000Z",
"value": 98.5,
"usd": 268412.4,
"currency": "ETH"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/opensea.chartResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | opensea.ChartResponse | No | ||||
| data.metric | string | No | floor_price | |||
| data.points | array | No | ||||
| data.points[].currency | string | No | ETH | |||
| data.points[].time | string | No | 2026-08-23T13:11:15.715Z | |||
| data.points[].usd | number | No | 19182.64 | |||
| data.points[].value | number | No | 7.899 | |||
| data.slug | string | No | boredapeyachtclub | |||
| data.timeframe | string | No | SEVEN_DAYS | |||
| 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/item/ethereum/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d/2087/chart" \
-H "x-api-key: $CRAWLORA_API_KEY"