Catalog Feeds
Catalog feeds are bulk downloads of Tradepost's product catalog — one gzip JSON file per asset type, regenerated daily. Use them to sync the catalog into your own systems instead of paginating through the API.
Getting the feed descriptor
Returns the latest feed per asset type with a presigned download URL:
query F($i: GetCatalogFeedsInput!) {
getCatalogFeeds(input: $i) {
feeds {
assetTypeId
assetType
format
schemaVersion
uri
uriExpiresAt
compressedSizeBytes
compressedMd5
recordCount
lastUpdated
}
error { message code }
}
}
| Field | Type | Description |
|---|---|---|
assetTypes | [String!] | Restrict by asset type name (e.g. ["SEALED_TCG"]); omit to list every available feed |
assetTypeId | UUID | Restrict by asset type ID instead of name |
| Response field | Description |
|---|---|
uri | Presigned download link. Expires at uriExpiresAt — request a fresh descriptor rather than storing the URL |
compressedMd5 | MD5 of the gzip file, for integrity checks after download |
compressedSizeBytes / recordCount | Download size and total product configurations in the file |
schemaVersion | Feed file schema version. New fields may be added within a version; breaking changes increment it |
lastUpdated | When the file was generated. Compare against your last sync to skip unchanged feeds |
Then download and decompress:
curl -s "<uri>" | gunzip > catalog.json
Feed file format
Each file is a gzip-compressed JSON document. Products are grouped by asset — for sealed TCG, an asset is the set (a Pokémon expansion) and its configurations are the individual sealed products:
{
"schemaVersion": 1,
"assetType": "SEALED_TCG",
"generatedAt": "2026-07-08T06:00:00Z",
"keys": [
{ "keyId": "4a9a2cca-c05f-5474-9979-428dc6f41107", "keyType": "SEALED_CONDITION", "value": "MINT", "displayName": "Mint", "ancestors": [] }
],
"assets": [
{
"assetId": "3aa2f9e1-6f36-40e5-a4b7-8de55c9ac2f1",
"name": "Scarlet & Violet: Prismatic Evolutions",
"slug": "pokemon-scarlet-and-violet-prismatic-evolutions",
"configurations": [
{
"assetConfigurationId": "72786f31-2001-48a0-9408-6a30c6e14388",
"name": "Greninja ex Ultra-Premium Collection",
"slug": "pokemon-greninja-ex-ultra-premium-collection",
"externalIds": { "TCG_PLAYER_ID": "477236" },
"imageUrl": "https://cdn.tradepost.co/media/asset-configurations/72786f31-2001-48a0-9408-6a30c6e14388/image/1000x1000.webp",
"imageVariants": {
"200x200": "https://cdn.tradepost.co/media/asset-configurations/72786f31-2001-48a0-9408-6a30c6e14388/image/200x200.webp"
},
"data": {
"brand": "Pokemon",
"productType": "BOX",
"format": "Collection",
"language": "English",
"retailPriceUsdCents": 12999,
"releaseDate": "2024-11-08T00:00:00Z"
}
}
]
}
]
}
| Field | Description |
|---|---|
keys | The asset type's shared key set, when one applies to every record. Use these key IDs with Key Fair Values and keyCriteria |
assets[] | One entry per asset, with its products nested |
configurations[].assetConfigurationId | Pass to Key Fair Values and other configuration-scoped queries |
configurations[].externalIds | Source-system identifiers for matching against your own catalog |
configurations[].data | Asset-type-specific fields, fixed per asset type within a schemaVersion |
Identity and media fields (name, slug, externalIds, imageUrl, imageVariants) are the same for every asset type; only data varies. Fields may be null when unknown.
Available feeds
| Asset type | Cadence |
|---|---|
SEALED_TCG | Daily |
More asset types will be added over time — poll the descriptor rather than hardcoding the list.