Inventory API
Manage your store's inventory programmatically. Sync your entire catalog or make incremental updates as stock levels change.
Overview
The Inventory API provides two main workflows:
- Full Sync - Push your complete inventory in a single request. Ideal for initial setup or periodic reconciliation.
- Incremental Updates - Update individual listings in real-time as they change. Best for maintaining live sync.
Endpoints
Product Matching
When syncing inventory, you can identify products using any of these external IDs:
| Field | Source | Example |
|---|---|---|
tcgplayerId | TCGPlayer | "12345" |
scryfallId | Scryfall (MTG) | "abc-123-def" |
cardmarketId | Cardmarket | "67890" |
cardtraderId | Cardtrader | "11111" |
ctcgxProductId | CTCGX Native ID | "clxxx..." |
You can include multiple external IDs per item. The API will match to the first product found.
Card Variants
The same card (same external ID) can have multiple listings with different variants. Each unique combination of variant fields creates a separate listing.
How Variants Work
A listing is uniquely identified by:
productId + condition + finish + language + edition + grading. Syncing the same card with different variants creates separate listings, not duplicates.// Same card, three separate listings
{
"items": [
{
"tcgplayerId": "12345",
"quantity": 4,
"price": 599,
"condition": "NM",
"finish": "nonfoil"
},
{
"tcgplayerId": "12345",
"quantity": 2,
"price": 1299,
"condition": "NM",
"finish": "foil"
},
{
"tcgplayerId": "12345",
"quantity": 1,
"price": 50000,
"condition": "NM",
"isGraded": true,
"gradingCompany": "PSA",
"grade": "10",
"certNumber": "12345678"
}
]
}Listing Fields
Each inventory item supports the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
quantity | number | Required | Number in stock (0 to remove) |
price | number | Required | Price in cents (CAD) |
| Variant Fields (create separate listings) | |||
condition | string | Optional | NM, LP, MP, HP, DMG |
finish | string | Optional | nonfoil, foil, etched, reverse-holo, etc. |
language | string | Optional | English, Japanese, German, French, etc. |
edition | string | Optional | 1st Edition, Unlimited, Shadowless, etc. |
| Graded Card Fields | |||
isGraded | boolean | Optional | Whether professionally graded |
gradingCompany | string | Optional | PSA, BGS, CGC, SGC, etc. |
grade | string | Optional | 10, 9.5, 9, 8.5, etc. |
certNumber | string | Optional | Grading certificate number |
| Special Card Fields | |||
isSigned | boolean | Optional | Whether the card is signed |
signedBy | string | Optional | Artist name, player name, etc. |
isError | boolean | Optional | Whether it's an error/misprint card |
errorType | string | Optional | Type of error (miscut, misprint, etc.) |