COMC API endpoint
Returns one card+grade combination's full detail from COMC (comc.com): card identity and every seller's individual for-sale copy (owner, item id, price). handle is the value returned by comc_search's CardSummary.handle field (or the equivalent comc.com card URL path).
/comc/listingQuery parameters:
handle (required) -- the value returned by a comc-search result's own
handle field, e.g.
Cards/Football/2021/Panini_Absolute_-_Base_-_Red/36/Josh_Allen/17779360.
Also accepts a full https://www.comc.com/... card URL.Notable response behavior:
handle that is empty, or does not start with Cards/ (after
stripping a leading slash or a https://www.comc.com prefix), returns
400 before any upstream request is made.set_description, grade_label, year, and card_number come from the listing title, which carries the full card identity (e.g. the title "2021 Panini Absolute - [Base] - Red #36 - Josh Allen" yields year: "2021", set_description: "Panini Absolute - [Base] - Red", card_number: "36", subject: "Josh Allen"). grade_label is only present for graded cards.listings is every individual seller copy of this exact card+grade
combination, each with its own numeric item_id, owner username,
owner_url, and price -- not a single aggregate price the way
comc-search's row-level price is.parallels is every sibling parallel of the same base card (e.g.
"[Base]", "Blue", "Green"), from the card's own "Parallels & Grades"
table, each with COMC's own displayed price, a handle for a follow-up
comc-listing lookup, and for_sale_count. A parallel with no current
listings has sold_out: true and price: 0 (COMC itself displays
$0.00 for that row rather than omitting it).handle COMC no longer serves returns 404.| Field | Filled in, of 1 checked | Values in the sample |
|---|---|---|
| item_id | 1 | |
| owner | 1 | |
| owner_url | 1 | comc.com |
| price | 1 | 3.69 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| handle | string | Yes | Required. The handle from a comc_search result (or the equivalent comc.com card URL path). | Cards/Football/2021/Panini_Absolute_-_Base_-_Red/36/Josh_Allen/17779360 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/comc/listing?handle=Cards%2FFootball%2F2021%2FPanini_Absolute_-_Base_-_Red%2F36%2FJosh_Allen%2F17779360" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"handle": "Cards/Football/2021/Panini_Absolute_-_Base_-_Red/36/Josh_Allen/17779360",
"year": "2021",
"set_description": "Panini Absolute - [Base] - Red",
"card_number": "36",
"subject": "Josh Allen",
"image_url": "https://img.comc.com/i/Football/2021/Panini-Absolute---Base---Red/36/Josh-Allen.jpg",
"total_listings": 2,
"parallels": [
{
"name": "[Base]",
"handle": "Cards/Football/2021/Panini_Absolute_-_Base/36/Josh_Allen/17777799",
"price": 1.29,
"for_sale_count": 34
},
{
"name": "Orange",
"handle": "Cards/Football/2021/Panini_Absolute_-_Base_-_Orange/36/Josh_Allen/17778525",
"sold_out": true
}
],
"listings": [
{
"item_id": 156183522,
"owner": "Severin",
"owner_url": "https://www.comc.com/Users/Severin",
"price": 1.04
},
{
"item_id": 156183600,
"owner": "crossroad",
"owner_url": "https://www.comc.com/Users/crossroad",
"price": 2.15
}
]
}
}Request schema
No body schema
Response schema
#/definitions/comc.listingResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | comc.ListingResponse | No | ||||
| data.card_number | string | No | ||||
| data.grade_label | string | No | ||||
| data.handle | string | No | ||||
| data.image_url | string | No | ||||
| data.listings | array | No | ||||
| data.listings[].item_id | integer | No | ||||
| data.listings[].owner | string | No | ||||
| data.listings[].owner_url | string | No | ||||
| data.listings[].price | number | No | ||||
| data.parallels | array | No | ||||
| data.parallels[].for_sale_count | integer | No | ||||
| data.parallels[].handle | string | No | ||||
| data.parallels[].name | string | No | ||||
| data.parallels[].price | number | No | Price is 0 and SoldOut is true when the parallel has no current listings (COMC displays "$0.00" with a "soldout" marker in that case rather than omitting the row). | |||
| data.parallels[].sold_out | boolean | No | ||||
| data.set_description | string | No | ||||
| data.subject | string | No | ||||
| data.total_listings | integer | No | ||||
| data.year | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/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/comc/listing?handle=Cards%2FFootball%2F2021%2FPanini_Absolute_-_Base_-_Red%2F36%2FJosh_Allen%2F17779360" \
-H "x-api-key: $CRAWLORA_API_KEY"