COMC API endpoint
Searches or browses COMC's (comc.com) live consignment marketplace for graded and ungraded trading cards. Each result row is a distinct card+grade combination (COMC's own category/search grid aggregates every seller's copy under one row); chain a row's handle into the listing endpoint for the per-seller breakdown. At least one of category or query is typically useful, but both are optional -- omitting both searches all categories.
/comc/searchQuery parameters:
category (optional) -- one of comc-categories' slug values. Omit to
search across every category.query (optional) -- free-text keyword (player, team, set, brand, box).sort (optional) -- allowed values: r (Recently Added, default), c
(Card #), o (Oldest), n (Newest), b (Highest SRP), h (Highest
Price), l (Lowest Price), d (Biggest Discount), p (Highest Percent
Off), q (Print Run), s (Least in Stock), m (Most in Stock), e
(Ending Soonest).attributes (optional, comma-separated) -- allowed values: AUTO
(Autographed), HOF (Hall of Fame), MEM (Memorabilia), PRC
(Pre-Rookie Card), RC (Rookie Card), RR (Rookie Related), RY
(Rookie Year), SN (Serial Numbered).condition (optional) -- allowed values: aUngraded (Ungraded),
aGraded (Graded), aAftermarketAuto (Aftermarket Auto),
aAfterAutoGraded (Aftermarket Auto Graded).page (optional) -- 1-based page, default 1.page_size (optional) -- allowed values: 6, 8, 10, 12, 14,
15, 16, 18, 20, 24, 30, 40, 50, 64, 100. Omit to use
COMC's own default.Notable response behavior:
category must be one of comc-categories' returned slugs; an unknown
value returns 400 before any upstream request is made. Same for
sort, each value in attributes, condition, and page_size.__doPostBack control on comc.com's own site rather than a
plain URL parameter (confirmed live), so a stateless GET request cannot
drive them the way sort/attributes/condition are driven.set_description is COMC's own descriptive text for the set/base/parallel
combination as a single string (e.g. "Topps Chrome - [Base] - Red Wave Refractor") -- deliberately not further split into separate set/base/
parallel fields, since set names themselves routinely contain dashes and
brackets, making that split unreliable to do generically.grade_label and print_run are only present for graded cards (e.g.
"PSA 10 GEM MT" / "#/5"); both are omitted for ungraded cards.price is the price COMC's own search/category grid displays for this
row. Best-effort labeled: COMC's grid shows one price per card+grade row
aggregating potentially several sellers' listings, and this has not been
live-confirmed to always be the lowest current listing -- treat it as
COMC's own representative price for the row, not a guaranteed minimum.200 with an empty cards
array.| Field | Filled in, of 20 checked | Values in the sample |
|---|---|---|
| handle | 20 | |
| url | 20 | comc.com |
| year | 20 | 1,953 to 2,026, median 2,022 |
| set_description | 20 | “Panini Donruss - Signature Series - Red” and 16 other values |
| card_number | 20 | “SS-ZV” and 19 other values |
| subject | 20 | “Zac Veen #/99” and 19 other values |
| image_url | 20 | img.comc.com |
| price | 20 | 0.99 to 35.33, median 7.7 |
| grade_label | 4 | Poor to Fair in all 4 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category | string | No | Optional. One of comc_categories' slug values. Omit to search all categories. | Baseball | |
| query | string | No | Optional free-text search query. | mike trout | |
| sort | string | No | Optional. Allowed values: r (Recently Added, default), c (Card #), o (Oldest), n (Newest), b (Highest SRP), h (Highest Price), l (Lowest Price), d (Biggest Discount), p (Highest Percent Off), q (Print Run), s (Least in Stock), m (Most in Stock), e (Ending Soonest). Allowed values: r, c, o, n, b, h, l, d, p, q, s, m, e. | r | |
| attributes | string | No | Optional, comma-separated. Allowed values: AUTO (Autographed), HOF (Hall of Fame), MEM (Memorabilia), PRC (Pre-Rookie Card), RC (Rookie Card), RR (Rookie Related), RY (Rookie Year), SN (Serial Numbered). | RC,AUTO | |
| condition | string | No | Optional. Allowed values: aUngraded (Ungraded), aGraded (Graded), aAftermarketAuto (Aftermarket Auto), aAfterAutoGraded (Aftermarket Auto Graded). Allowed values: aUngraded, aGraded, aAftermarketAuto, aAfterAutoGraded. | aGraded | |
| page | integer | No | 1-based page, default 1. | 1 | |
| page_size | integer | No | Optional. Allowed values: 6, 8, 10, 12, 14, 15, 16, 18, 20, 24, 30, 40, 50, 64, 100. Omit to use COMC's own default. Allowed values: 6, 8, 10, 12, 14, 15, 16, 18, 20, 24, 30, 40, 50, 64, 100. | 20 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/comc/search?query=coffee&sort=r&condition=aUngraded&page=1&page_size=6" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"category": "Baseball",
"page": 1,
"total_count": 2653613,
"cards": [
{
"handle": "Cards/Baseball/2021/Topps_Chrome_-_Base_-_Red_Wave_Refractor/84/Nolan_Arenado/17500366/Graded/PSA/10",
"url": "https://www.comc.com/Cards/Baseball/2021/Topps_Chrome_-_Base_-_Red_Wave_Refractor/84/Nolan_Arenado/17500366/Graded/PSA/10",
"year": "2021",
"set_description": "Topps Chrome - [Base] - Red Wave Refractor",
"card_number": "84",
"subject": "Nolan Arenado",
"grade_label": "PSA 10 GEM MT",
"print_run": "#/5",
"image_url": "https://img.comc.com/i/Baseball/2021/Topps-Chrome---Base---Red-Wave-Refractor/84/Nolan-Arenado.jpg",
"price": 64930
}
]
}
}Request schema
No body schema
Response schema
#/definitions/comc.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | comc.SearchResponse | No | ||||
| data.cards | array | No | ||||
| data.cards[].card_number | string | No | ||||
| data.cards[].grade_label | string | No | GradeLabel is COMC's own grader+grade+label string when the card is graded, e.g. "PSA 10 GEM MT" -- empty for ungraded cards. | |||
| data.cards[].handle | string | No | Handle is the relative path identifying this card+grade combination, e.g. "Cards/Baseball/2021/Topps_Chrome_-_Base_-_Red_Wave_Refractor/84/Nolan_Arenado/17500366/Graded/PSA/10". Pass verbatim as comc_listing's handle param. | |||
| data.cards[].image_url | string | No | ||||
| data.cards[].price | number | No | Price is the price COMC's own search/category grid displays for this row. Best-effort labeled: COMC's grid shows one price per card+grade row aggregating potentially several sellers' listings (see ListingResponse), and this pass could not live-confirm whether it is always the lowest current listing -- treat it as COMC's own representative price for the row, not a guaranteed minimum. | |||
| data.cards[].print_run | string | No | PrintRun is a serial/print-run suffix when present, e.g. "#/5". | |||
| data.cards[].set_description | string | No | SetDescription is COMC's own descriptive text for the set/base/parallel combination as a single string (e.g. "Topps Chrome - [Base] - Red Wave Refractor") -- deliberately not further split into separate set/base/ parallel fields, since set names themselves routinely contain dashes and brackets, making that split unreliable to do generically. | |||
| data.cards[].subject | string | No | ||||
| data.cards[].url | string | No | ||||
| data.cards[].year | string | No | ||||
| data.category | string | No | ||||
| data.page | integer | No | ||||
| data.page_size | integer | No | ||||
| data.query | string | No | ||||
| data.total_count | integer | 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/search?query=coffee&sort=r&condition=aUngraded&page=1&page_size=6" \
-H "x-api-key: $CRAWLORA_API_KEY"