tcgpriser 0.4.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -32,11 +32,16 @@ interface components {
32
32
  AlternativeName: {
33
33
  name: string;
34
34
  shortName: string | undefined;
35
+ /**
36
+ * @description ISO 639-1 language code the alias is written in (e.g. "sv"), possibly combined ("sv/da/no"). Null means unspecified.
37
+ * @example sv
38
+ */
39
+ language: string | undefined;
35
40
  };
36
41
  ApiError: {
37
42
  error: {
38
43
  /** @enum {string} */
39
- code: "validationFailed" | "unauthorized" | "forbidden" | "notFound" | "conflict" | "readOnlyField" | "rateLimited" | "premiumRequired" | "internalError";
44
+ code: "validationFailed" | "unauthorized" | "forbidden" | "notFound" | "conflict" | "readOnlyField" | "rateLimited" | "premiumRequired" | "businessRequired" | "internalError";
40
45
  message: string;
41
46
  details: unknown;
42
47
  };
@@ -71,6 +76,10 @@ interface components {
71
76
  kind: "sealed" | "card";
72
77
  name: string;
73
78
  technicalName: string;
79
+ /**
80
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
81
+ * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
82
+ */
74
83
  imageUrl: string | undefined;
75
84
  };
76
85
  bargain: {
@@ -127,29 +136,11 @@ interface components {
127
136
  alternativeNames: components["schemas"]["AlternativeName"][];
128
137
  supportsMultipackPricing: boolean;
129
138
  /**
130
- * @description Absolute asset URL, or null when absent
139
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
131
140
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
132
141
  */
133
142
  imageUrl: string | undefined;
134
- /**
135
- * @description Cheapest current shop price, in SEK
136
- * @example 149.5
137
- */
138
- retailPrice: number | undefined;
139
- /**
140
- * @description Estimated market value, in SEK
141
- * @example 149.5
142
- */
143
- estimatedValue: number | undefined;
144
- /** @description Active shops currently tracking this item */
145
- shopCount: number;
146
- /** @description Observations the estimate rests on */
147
- pricingDataPoints: number;
148
- /**
149
- * Format: date-time
150
- * @example 2026-07-15T12:03:29.322Z
151
- */
152
- pricingUpdatedAt: string | undefined;
143
+ lockedFields: string[];
153
144
  /**
154
145
  * Format: date-time
155
146
  * @example 2026-07-15T12:03:29.322Z
@@ -179,33 +170,13 @@ interface components {
179
170
  firstEdition: boolean;
180
171
  wPromo: boolean;
181
172
  };
182
- CardWithPricing: {
173
+ CatalogItem: components["schemas"]["Card"] | components["schemas"]["Product"];
174
+ CatalogItemPricing: {
183
175
  /**
184
176
  * @description Resource identifier
185
177
  * @example 6a577711abc1ce71383d3e10
186
178
  */
187
179
  id: string;
188
- name: string;
189
- shortName: string | undefined;
190
- technicalName: string;
191
- brand: components["schemas"]["Brand"];
192
- manufacturer: string;
193
- modelNumber: string | undefined;
194
- category: components["schemas"]["CategoryRef"] | undefined;
195
- expansion: components["schemas"]["ExpansionRef"] | undefined;
196
- /**
197
- * @description Printing language of the item
198
- * @example JPN
199
- * @enum {string|null}
200
- */
201
- language: "ENG" | "JPN" | "CHI" | undefined;
202
- alternativeNames: components["schemas"]["AlternativeName"][];
203
- supportsMultipackPricing: boolean;
204
- /**
205
- * @description Absolute asset URL, or null when absent
206
- * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
207
- */
208
- imageUrl: string | undefined;
209
180
  /**
210
181
  * @description Cheapest current shop price, in SEK
211
182
  * @example 149.5
@@ -225,33 +196,11 @@ interface components {
225
196
  * @example 2026-07-15T12:03:29.322Z
226
197
  */
227
198
  pricingUpdatedAt: string | undefined;
228
- /**
229
- * Format: date-time
230
- * @example 2026-07-15T12:03:29.322Z
231
- */
232
- createdAt: string;
233
- /**
234
- * Format: date-time
235
- * @example 2026-07-15T12:03:29.322Z
236
- */
237
- updatedAt: string;
238
- /** @enum {string} */
239
- kind: "card";
240
- /** @example 4/102 */
241
- cardNumber: string;
242
- /** @example Rare Holo */
243
- rarity: string | undefined;
244
- artist: string | undefined;
245
- cardmarketId: string | undefined;
246
- tcgplayerId: string | undefined;
247
- variants: components["schemas"]["CardVariants"] | undefined;
248
- prisjaktId: string | undefined;
249
199
  lowestShopOffer: components["schemas"]["LowestShopOffer"] | undefined;
250
200
  referencePriceSnapshotsByProvider: {
251
201
  [key: string]: components["schemas"]["ReferencePriceSummary"];
252
202
  };
253
203
  };
254
- CatalogItem: components["schemas"]["Card"] | components["schemas"]["Product"];
255
204
  CatalogItemRef: {
256
205
  /**
257
206
  * @description Resource identifier
@@ -260,6 +209,14 @@ interface components {
260
209
  id: string;
261
210
  name: string;
262
211
  };
212
+ CatalogSlug: {
213
+ technicalName: string;
214
+ /**
215
+ * Format: date-time
216
+ * @example 2026-07-15T12:03:29.322Z
217
+ */
218
+ updatedAt: string;
219
+ };
263
220
  CategoryRef: {
264
221
  /**
265
222
  * @description Resource identifier
@@ -320,17 +277,17 @@ interface components {
320
277
  */
321
278
  releaseDate: string | undefined;
322
279
  /**
323
- * @description Absolute asset URL, or null when absent
280
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
324
281
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
325
282
  */
326
283
  logoUrl: string | undefined;
327
284
  /**
328
- * @description Absolute asset URL, or null when absent
285
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
329
286
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
330
287
  */
331
288
  symbolUrl: string | undefined;
332
289
  /**
333
- * @description Absolute asset URL, or null when absent
290
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
334
291
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
335
292
  */
336
293
  imageUrl: string | undefined;
@@ -358,11 +315,11 @@ interface components {
358
315
  expansion: components["schemas"]["ExpansionRef"];
359
316
  cards: {
360
317
  count: number;
361
- items: components["schemas"]["CardWithPricing"][];
318
+ items: components["schemas"]["Card"][];
362
319
  };
363
320
  sealed: {
364
321
  count: number;
365
- items: components["schemas"]["ProductWithPricing"][];
322
+ items: components["schemas"]["Product"][];
366
323
  };
367
324
  };
368
325
  ExpansionLivePricing: {
@@ -401,17 +358,17 @@ interface components {
401
358
  */
402
359
  releaseDate: string | undefined;
403
360
  /**
404
- * @description Absolute asset URL, or null when absent
361
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
405
362
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
406
363
  */
407
364
  logoUrl: string | undefined;
408
365
  /**
409
- * @description Absolute asset URL, or null when absent
366
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
410
367
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
411
368
  */
412
369
  symbolUrl: string | undefined;
413
370
  /**
414
- * @description Absolute asset URL, or null when absent
371
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
415
372
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
416
373
  */
417
374
  imageUrl: string | undefined;
@@ -563,6 +520,10 @@ interface components {
563
520
  shortName: string | undefined;
564
521
  technicalName: string;
565
522
  cardNumber: string | undefined;
523
+ /**
524
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
525
+ * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
526
+ */
566
527
  imageUrl: string | undefined;
567
528
  language: string | undefined;
568
529
  priceChartingId: string | undefined;
@@ -575,6 +536,36 @@ interface components {
575
536
  id: string;
576
537
  expansion: components["schemas"]["ExpansionRef"];
577
538
  buckets: components["schemas"]["PackRateBucket"][];
539
+ /**
540
+ * @example [
541
+ * "code",
542
+ * "common",
543
+ * "common",
544
+ * "common",
545
+ * "uncommon",
546
+ * "uncommon",
547
+ * "uncommon",
548
+ * "reverse",
549
+ * "common",
550
+ * "hit",
551
+ * "energy"
552
+ * ]
553
+ */
554
+ slotOrder: ("common" | "uncommon" | "reverse" | "hit" | "energy" | "code")[] | undefined;
555
+ source: {
556
+ /** @example pullrates.gg */
557
+ name: string;
558
+ /**
559
+ * Format: uri
560
+ * @description The specific page these rates were read from, if any
561
+ */
562
+ url: string | undefined;
563
+ /**
564
+ * Format: date-time
565
+ * @example 2026-07-15T12:03:29.322Z
566
+ */
567
+ fetchedAt: string | undefined;
568
+ } | undefined;
578
569
  /**
579
570
  * Format: date-time
580
571
  * @example 2026-07-15T12:03:29.322Z
@@ -632,29 +623,11 @@ interface components {
632
623
  alternativeNames: components["schemas"]["AlternativeName"][];
633
624
  supportsMultipackPricing: boolean;
634
625
  /**
635
- * @description Absolute asset URL, or null when absent
626
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
636
627
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
637
628
  */
638
629
  imageUrl: string | undefined;
639
- /**
640
- * @description Cheapest current shop price, in SEK
641
- * @example 149.5
642
- */
643
- retailPrice: number | undefined;
644
- /**
645
- * @description Estimated market value, in SEK
646
- * @example 149.5
647
- */
648
- estimatedValue: number | undefined;
649
- /** @description Active shops currently tracking this item */
650
- shopCount: number;
651
- /** @description Observations the estimate rests on */
652
- pricingDataPoints: number;
653
- /**
654
- * Format: date-time
655
- * @example 2026-07-15T12:03:29.322Z
656
- */
657
- pricingUpdatedAt: string | undefined;
630
+ lockedFields: string[];
658
631
  /**
659
632
  * Format: date-time
660
633
  * @example 2026-07-15T12:03:29.322Z
@@ -673,77 +646,9 @@ interface components {
673
646
  priceChartingId: string | undefined;
674
647
  prisjaktId: string | undefined;
675
648
  };
676
- ProductWithPricing: {
677
- /**
678
- * @description Resource identifier
679
- * @example 6a577711abc1ce71383d3e10
680
- */
681
- id: string;
682
- name: string;
683
- shortName: string | undefined;
684
- technicalName: string;
685
- brand: components["schemas"]["Brand"];
686
- manufacturer: string;
687
- modelNumber: string | undefined;
688
- category: components["schemas"]["CategoryRef"] | undefined;
689
- expansion: components["schemas"]["ExpansionRef"] | undefined;
690
- /**
691
- * @description Printing language of the item
692
- * @example JPN
693
- * @enum {string|null}
694
- */
695
- language: "ENG" | "JPN" | "CHI" | undefined;
696
- alternativeNames: components["schemas"]["AlternativeName"][];
697
- supportsMultipackPricing: boolean;
698
- /**
699
- * @description Absolute asset URL, or null when absent
700
- * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
701
- */
702
- imageUrl: string | undefined;
703
- /**
704
- * @description Cheapest current shop price, in SEK
705
- * @example 149.5
706
- */
707
- retailPrice: number | undefined;
708
- /**
709
- * @description Estimated market value, in SEK
710
- * @example 149.5
711
- */
712
- estimatedValue: number | undefined;
713
- /** @description Active shops currently tracking this item */
714
- shopCount: number;
715
- /** @description Observations the estimate rests on */
716
- pricingDataPoints: number;
717
- /**
718
- * Format: date-time
719
- * @example 2026-07-15T12:03:29.322Z
720
- */
721
- pricingUpdatedAt: string | undefined;
722
- /**
723
- * Format: date-time
724
- * @example 2026-07-15T12:03:29.322Z
725
- */
726
- createdAt: string;
727
- /**
728
- * Format: date-time
729
- * @example 2026-07-15T12:03:29.322Z
730
- */
731
- updatedAt: string;
732
- /** @enum {string} */
733
- kind: "sealed";
734
- upc: string | undefined;
735
- asin: string | undefined;
736
- epid: string | undefined;
737
- priceChartingId: string | undefined;
738
- prisjaktId: string | undefined;
739
- lowestShopOffer: components["schemas"]["LowestShopOffer"] | undefined;
740
- referencePriceSnapshotsByProvider: {
741
- [key: string]: components["schemas"]["ReferencePriceSummary"];
742
- };
743
- };
744
649
  ReferencePriceSeries: {
745
650
  /** @enum {string} */
746
- source: "tcgdex" | "cmapi" | "tradera";
651
+ source: "tcgdex" | "cmapi" | "tradera" | "pokemonpricetracker";
747
652
  /** @enum {string} */
748
653
  provider: "cardmarket" | "tcgplayer" | "ebay" | "tradera";
749
654
  /** @enum {string|null} */
@@ -798,7 +703,7 @@ interface components {
798
703
  technicalName: string;
799
704
  websiteUrl: string | undefined;
800
705
  /**
801
- * @description Absolute asset URL, or null when absent
706
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
802
707
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
803
708
  */
804
709
  logoUrl: string | undefined;
@@ -1050,6 +955,10 @@ interface components {
1050
955
  ShopSummary: {
1051
956
  technicalName: string;
1052
957
  name: string;
958
+ /**
959
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
960
+ * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
961
+ */
1053
962
  logoUrl: string | undefined;
1054
963
  websiteUrl: string | undefined;
1055
964
  description: string | undefined;
@@ -1193,9 +1102,9 @@ interface components {
1193
1102
  * not silent drift.
1194
1103
  *
1195
1104
  * The API registers `Brand`, `CategoryRef`, `ExpansionRef`, `ShopRef` etc. as their own named
1196
- * components and `$ref`s them wherever they're embedded (in `CardWithPricing`, `ProductWithPricing`,
1197
- * `PackRate`, the shop-match schemas, ...), so those are pulled by name directly. `CardWithPricing`
1198
- * is still the extraction source for the handful of shapes that aren't independently registered
1105
+ * components and `$ref`s them wherever they're embedded (in `Card`, `Product`, `PackRate`, the
1106
+ * shop-match schemas, ...), so those are pulled by name directly. `CardSchema` is still the
1107
+ * extraction source for the handful of shapes that aren't independently registered
1199
1108
  * (`lowestShopOffer`'s `bargain`, the reference-price snapshot map).
1200
1109
  */
1201
1110
  type CardSchema = {
@@ -1207,43 +1116,25 @@ type CardSchema = {
1207
1116
  name: string;
1208
1117
  shortName: string | undefined;
1209
1118
  technicalName: string;
1210
- brand: components["schemas"]["Brand"];
1119
+ brand: BrandRef;
1211
1120
  manufacturer: string;
1212
1121
  modelNumber: string | undefined;
1213
- category: components["schemas"]["CategoryRef"] | undefined;
1214
- expansion: components["schemas"]["ExpansionRef"] | undefined;
1122
+ category: CategoryRef | undefined;
1123
+ expansion: ExpansionRef | undefined;
1215
1124
  /**
1216
1125
  * @description Printing language of the item
1217
1126
  * @example JPN
1218
1127
  * @enum {string|null}
1219
1128
  */
1220
1129
  language: "ENG" | "JPN" | "CHI" | undefined;
1221
- alternativeNames: components["schemas"]["AlternativeName"][];
1130
+ alternativeNames: AlternativeName[];
1222
1131
  supportsMultipackPricing: boolean;
1223
1132
  /**
1224
- * @description Absolute asset URL, or null when absent
1133
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1225
1134
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1226
1135
  */
1227
1136
  imageUrl: string | undefined;
1228
- /**
1229
- * @description Cheapest current shop price, in SEK
1230
- * @example 149.5
1231
- */
1232
- retailPrice: number | undefined;
1233
- /**
1234
- * @description Estimated market value, in SEK
1235
- * @example 149.5
1236
- */
1237
- estimatedValue: number | undefined;
1238
- /** @description Active shops currently tracking this item */
1239
- shopCount: number;
1240
- /** @description Observations the estimate rests on */
1241
- pricingDataPoints: number;
1242
- /**
1243
- * Format: date-time
1244
- * @example 2026-07-15T12:03:29.322Z
1245
- */
1246
- pricingUpdatedAt: string | undefined;
1137
+ lockedFields: string[];
1247
1138
  /**
1248
1139
  * Format: date-time
1249
1140
  * @example 2026-07-15T12:03:29.322Z
@@ -1263,15 +1154,11 @@ type CardSchema = {
1263
1154
  artist: string | undefined;
1264
1155
  cardmarketId: string | undefined;
1265
1156
  tcgplayerId: string | undefined;
1266
- variants: components["schemas"]["CardVariants"] | undefined;
1157
+ variants: CardVariants | undefined;
1267
1158
  prisjaktId: string | undefined;
1268
- lowestShopOffer: components["schemas"]["LowestShopOffer"] | undefined;
1269
- referencePriceSnapshotsByProvider: {
1270
- [key: string]: components["schemas"]["ReferencePriceSummary"];
1271
- };
1272
1159
  };
1273
1160
  type LowestShopOfferSchema = {
1274
- shop: components["schemas"]["ShopRef"];
1161
+ shop: ShopRef;
1275
1162
  url: string;
1276
1163
  /** @example 149.5 */
1277
1164
  price: number;
@@ -1330,6 +1217,11 @@ interface PaginationParams {
1330
1217
  type AlternativeName = {
1331
1218
  name: string;
1332
1219
  shortName: string | undefined;
1220
+ /**
1221
+ * @description ISO 639-1 language code the alias is written in (e.g. "sv"), possibly combined ("sv/da/no"). Null means unspecified.
1222
+ * @example sv
1223
+ */
1224
+ language: string | undefined;
1333
1225
  };
1334
1226
  type BrandRef = {
1335
1227
  /**
@@ -1395,17 +1287,17 @@ type ExpansionRef = {
1395
1287
  */
1396
1288
  releaseDate: string | undefined;
1397
1289
  /**
1398
- * @description Absolute asset URL, or null when absent
1290
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1399
1291
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1400
1292
  */
1401
1293
  logoUrl: string | undefined;
1402
1294
  /**
1403
- * @description Absolute asset URL, or null when absent
1295
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1404
1296
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1405
1297
  */
1406
1298
  symbolUrl: string | undefined;
1407
1299
  /**
1408
- * @description Absolute asset URL, or null when absent
1300
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1409
1301
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1410
1302
  */
1411
1303
  imageUrl: string | undefined;
@@ -1426,7 +1318,6 @@ type BargainInfo = {
1426
1318
  };
1427
1319
  /** The cheapest current shop offer for a card or product. */
1428
1320
  type LowestShopOffer = LowestShopOfferSchema;
1429
- type ReferencePriceProvider = "tradera" | "cardmarket" | "tcgplayer" | "ebay";
1430
1321
  type ReferencePriceSnapshot = {
1431
1322
  /** @enum {string} */
1432
1323
  provider: "cardmarket" | "tcgplayer" | "ebay" | "tradera";
@@ -1448,11 +1339,13 @@ type ReferencePriceSnapshot = {
1448
1339
  */
1449
1340
  snapshotDate: string;
1450
1341
  };
1342
+ type ReferencePriceProvider = "tradera" | "cardmarket" | "tcgplayer" | "ebay";
1451
1343
  /** Keyed by provider, at most one snapshot per provider. */
1452
1344
  type ReferencePriceSnapshotsByProvider = Partial<Record<ReferencePriceProvider, ReferencePriceSnapshot>>;
1453
1345
  /** A card, as returned by `client.cards.get()` / `client.cards.list()`, and as embedded in
1454
1346
  * `client.expansions.products()`. `kind: 'card'` is a literal on the generated type, which is what
1455
- * makes `CatalogItem` (below) discriminate cleanly. */
1347
+ * makes `CatalogItem` (below) discriminate cleanly. Content only — no pricing fields; fetch those
1348
+ * separately via `client.cards.pricing()` / `.pricingBatch()`. */
1456
1349
  type Card = {
1457
1350
  /**
1458
1351
  * @description Resource identifier
@@ -1462,43 +1355,25 @@ type Card = {
1462
1355
  name: string;
1463
1356
  shortName: string | undefined;
1464
1357
  technicalName: string;
1465
- brand: components["schemas"]["Brand"];
1358
+ brand: BrandRef;
1466
1359
  manufacturer: string;
1467
1360
  modelNumber: string | undefined;
1468
- category: components["schemas"]["CategoryRef"] | undefined;
1469
- expansion: components["schemas"]["ExpansionRef"] | undefined;
1361
+ category: CategoryRef | undefined;
1362
+ expansion: ExpansionRef | undefined;
1470
1363
  /**
1471
1364
  * @description Printing language of the item
1472
1365
  * @example JPN
1473
1366
  * @enum {string|null}
1474
1367
  */
1475
1368
  language: "ENG" | "JPN" | "CHI" | undefined;
1476
- alternativeNames: components["schemas"]["AlternativeName"][];
1369
+ alternativeNames: AlternativeName[];
1477
1370
  supportsMultipackPricing: boolean;
1478
1371
  /**
1479
- * @description Absolute asset URL, or null when absent
1372
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1480
1373
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1481
1374
  */
1482
1375
  imageUrl: string | undefined;
1483
- /**
1484
- * @description Cheapest current shop price, in SEK
1485
- * @example 149.5
1486
- */
1487
- retailPrice: number | undefined;
1488
- /**
1489
- * @description Estimated market value, in SEK
1490
- * @example 149.5
1491
- */
1492
- estimatedValue: number | undefined;
1493
- /** @description Active shops currently tracking this item */
1494
- shopCount: number;
1495
- /** @description Observations the estimate rests on */
1496
- pricingDataPoints: number;
1497
- /**
1498
- * Format: date-time
1499
- * @example 2026-07-15T12:03:29.322Z
1500
- */
1501
- pricingUpdatedAt: string | undefined;
1376
+ lockedFields: string[];
1502
1377
  /**
1503
1378
  * Format: date-time
1504
1379
  * @example 2026-07-15T12:03:29.322Z
@@ -1518,15 +1393,12 @@ type Card = {
1518
1393
  artist: string | undefined;
1519
1394
  cardmarketId: string | undefined;
1520
1395
  tcgplayerId: string | undefined;
1521
- variants: components["schemas"]["CardVariants"] | undefined;
1396
+ variants: CardVariants | undefined;
1522
1397
  prisjaktId: string | undefined;
1523
- lowestShopOffer: components["schemas"]["LowestShopOffer"] | undefined;
1524
- referencePriceSnapshotsByProvider: {
1525
- [key: string]: components["schemas"]["ReferencePriceSummary"];
1526
- };
1527
1398
  };
1528
1399
  /** A sealed product (booster box, ETB, tin, ...), as returned by `client.products.get()` /
1529
- * `client.products.list()`. `kind: 'sealed'` is a literal on the generated type. */
1400
+ * `client.products.list()`. `kind: 'sealed'` is a literal on the generated type. Content only — no
1401
+ * pricing fields; fetch those separately via `client.products.pricing()` / `.pricingBatch()`. */
1530
1402
  type SealedProduct = {
1531
1403
  /**
1532
1404
  * @description Resource identifier
@@ -1536,24 +1408,55 @@ type SealedProduct = {
1536
1408
  name: string;
1537
1409
  shortName: string | undefined;
1538
1410
  technicalName: string;
1539
- brand: components["schemas"]["Brand"];
1411
+ brand: BrandRef;
1540
1412
  manufacturer: string;
1541
1413
  modelNumber: string | undefined;
1542
- category: components["schemas"]["CategoryRef"] | undefined;
1543
- expansion: components["schemas"]["ExpansionRef"] | undefined;
1414
+ category: CategoryRef | undefined;
1415
+ expansion: ExpansionRef | undefined;
1544
1416
  /**
1545
1417
  * @description Printing language of the item
1546
1418
  * @example JPN
1547
1419
  * @enum {string|null}
1548
1420
  */
1549
1421
  language: "ENG" | "JPN" | "CHI" | undefined;
1550
- alternativeNames: components["schemas"]["AlternativeName"][];
1422
+ alternativeNames: AlternativeName[];
1551
1423
  supportsMultipackPricing: boolean;
1552
1424
  /**
1553
- * @description Absolute asset URL, or null when absent
1425
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1554
1426
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1555
1427
  */
1556
1428
  imageUrl: string | undefined;
1429
+ lockedFields: string[];
1430
+ /**
1431
+ * Format: date-time
1432
+ * @example 2026-07-15T12:03:29.322Z
1433
+ */
1434
+ createdAt: string;
1435
+ /**
1436
+ * Format: date-time
1437
+ * @example 2026-07-15T12:03:29.322Z
1438
+ */
1439
+ updatedAt: string;
1440
+ /** @enum {string} */
1441
+ kind: "sealed";
1442
+ upc: string | undefined;
1443
+ asin: string | undefined;
1444
+ epid: string | undefined;
1445
+ priceChartingId: string | undefined;
1446
+ prisjaktId: string | undefined;
1447
+ };
1448
+ /** A card or sealed product, discriminated on `kind`. */
1449
+ type CatalogItem = Card | SealedProduct;
1450
+ /** Pricing for one catalog item (card or sealed product) — `retailPrice`, `estimatedValue`,
1451
+ * `lowestShopOffer`, `referencePriceSnapshotsByProvider` — refreshed once a day by the nightly
1452
+ * pricing/scraper jobs, not embedded in `Card`/`SealedProduct` above. Returned by
1453
+ * `client.cards.pricing()` / `.pricingBatch()` and their `client.products` equivalents. */
1454
+ type CatalogItemPricing = {
1455
+ /**
1456
+ * @description Resource identifier
1457
+ * @example 6a577711abc1ce71383d3e10
1458
+ */
1459
+ id: string;
1557
1460
  /**
1558
1461
  * @description Cheapest current shop price, in SEK
1559
1462
  * @example 149.5
@@ -1573,30 +1476,11 @@ type SealedProduct = {
1573
1476
  * @example 2026-07-15T12:03:29.322Z
1574
1477
  */
1575
1478
  pricingUpdatedAt: string | undefined;
1576
- /**
1577
- * Format: date-time
1578
- * @example 2026-07-15T12:03:29.322Z
1579
- */
1580
- createdAt: string;
1581
- /**
1582
- * Format: date-time
1583
- * @example 2026-07-15T12:03:29.322Z
1584
- */
1585
- updatedAt: string;
1586
- /** @enum {string} */
1587
- kind: "sealed";
1588
- upc: string | undefined;
1589
- asin: string | undefined;
1590
- epid: string | undefined;
1591
- priceChartingId: string | undefined;
1592
- prisjaktId: string | undefined;
1593
- lowestShopOffer: components["schemas"]["LowestShopOffer"] | undefined;
1479
+ lowestShopOffer: LowestShopOfferSchema | undefined;
1594
1480
  referencePriceSnapshotsByProvider: {
1595
- [key: string]: components["schemas"]["ReferencePriceSummary"];
1481
+ [key: string]: ReferencePriceSnapshot;
1596
1482
  };
1597
1483
  };
1598
- /** A card or sealed product, discriminated on `kind`. */
1599
- type CatalogItem = Card | SealedProduct;
1600
1484
  type CardVariants = {
1601
1485
  normal: boolean;
1602
1486
  holo: boolean;
@@ -1618,6 +1502,10 @@ type MatchedItemRef = {
1618
1502
  shortName: string | undefined;
1619
1503
  technicalName: string;
1620
1504
  cardNumber: string | undefined;
1505
+ /**
1506
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1507
+ * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1508
+ */
1621
1509
  imageUrl: string | undefined;
1622
1510
  language: string | undefined;
1623
1511
  priceChartingId: string | undefined;
@@ -1633,7 +1521,7 @@ type Bargain = {
1633
1521
  * @example SEK
1634
1522
  */
1635
1523
  currency: string | undefined;
1636
- shop: components["schemas"]["ShopRef"];
1524
+ shop: ShopRef;
1637
1525
  inStock: boolean;
1638
1526
  /**
1639
1527
  * Format: date-time
@@ -1650,6 +1538,10 @@ type Bargain = {
1650
1538
  kind: "sealed" | "card";
1651
1539
  name: string;
1652
1540
  technicalName: string;
1541
+ /**
1542
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1543
+ * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1544
+ */
1653
1545
  imageUrl: string | undefined;
1654
1546
  };
1655
1547
  bargain: {
@@ -1668,6 +1560,10 @@ type BargainProductRef = {
1668
1560
  kind: "sealed" | "card";
1669
1561
  name: string;
1670
1562
  technicalName: string;
1563
+ /**
1564
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1565
+ * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1566
+ */
1671
1567
  imageUrl: string | undefined;
1672
1568
  };
1673
1569
  /** A set/expansion, as returned by `client.expansions.list()`. This is the full record. The
@@ -1703,23 +1599,23 @@ type Expansion = {
1703
1599
  */
1704
1600
  releaseDate: string | undefined;
1705
1601
  /**
1706
- * @description Absolute asset URL, or null when absent
1602
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1707
1603
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1708
1604
  */
1709
1605
  logoUrl: string | undefined;
1710
1606
  /**
1711
- * @description Absolute asset URL, or null when absent
1607
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1712
1608
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1713
1609
  */
1714
1610
  symbolUrl: string | undefined;
1715
1611
  /**
1716
- * @description Absolute asset URL, or null when absent
1612
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1717
1613
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1718
1614
  */
1719
1615
  imageUrl: string | undefined;
1720
1616
  year: number | undefined;
1721
- brand: components["schemas"]["Brand"];
1722
- alternativeNames: components["schemas"]["AlternativeName"][];
1617
+ brand: BrandRef;
1618
+ alternativeNames: AlternativeName[];
1723
1619
  /** @description Sealed products in this expansion */
1724
1620
  sealedCount: number;
1725
1621
  /** @description Cards in this expansion */
@@ -1740,14 +1636,14 @@ type Expansion = {
1740
1636
  /** Response of `client.expansions.products()`: everything in one expansion, cards and sealed
1741
1637
  * products kept as separate `cards`/`sealed` groups rather than merged into one mixed list. */
1742
1638
  type ExpansionContents = {
1743
- expansion: components["schemas"]["ExpansionRef"];
1639
+ expansion: ExpansionRef;
1744
1640
  cards: {
1745
1641
  count: number;
1746
- items: components["schemas"]["CardWithPricing"][];
1642
+ items: CardSchema[];
1747
1643
  };
1748
1644
  sealed: {
1749
1645
  count: number;
1750
- items: components["schemas"]["ProductWithPricing"][];
1646
+ items: SealedProduct[];
1751
1647
  };
1752
1648
  };
1753
1649
  /** One card as embedded in `client.expansions.products()`'s `cards` group. `$ref`s `CardWithPricing`
@@ -1763,7 +1659,7 @@ type ShopMatchWithItemSchema = {
1763
1659
  * @example 6a577711abc1ce71383d3e10
1764
1660
  */
1765
1661
  id: string;
1766
- shop: components["schemas"]["ShopRef"];
1662
+ shop: ShopRef;
1767
1663
  url: string;
1768
1664
  /**
1769
1665
  * @description Resource identifier
@@ -1792,9 +1688,9 @@ type ShopMatchWithItemSchema = {
1792
1688
  /** @enum {string|null} */
1793
1689
  gradingCompany: "PSA" | "BGS" | "CGC" | "SGC" | "ACE" | "RAUKCARD" | "TAG" | "GMA" | undefined;
1794
1690
  grade: number | undefined;
1795
- item: components["schemas"]["MatchedItemRef"] | undefined;
1796
- expansion: components["schemas"]["ExpansionRef"] | undefined;
1797
- category: components["schemas"]["CategoryRef"] | undefined;
1691
+ item: MatchedItemRef | undefined;
1692
+ expansion: ExpansionRef | undefined;
1693
+ category: CategoryRef | undefined;
1798
1694
  /**
1799
1695
  * Format: date-time
1800
1696
  * @example 2026-07-15T12:03:29.322Z
@@ -1817,7 +1713,7 @@ type ItemShopMatchSchema = {
1817
1713
  * @example 6a577711abc1ce71383d3e10
1818
1714
  */
1819
1715
  id: string;
1820
- shop: components["schemas"]["MatchShop"];
1716
+ shop: MatchShop;
1821
1717
  url: string;
1822
1718
  /**
1823
1719
  * @description Resource identifier
@@ -1877,7 +1773,7 @@ type Shop = {
1877
1773
  technicalName: string;
1878
1774
  websiteUrl: string | undefined;
1879
1775
  /**
1880
- * @description Absolute asset URL, or null when absent
1776
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1881
1777
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1882
1778
  */
1883
1779
  logoUrl: string | undefined;
@@ -1926,6 +1822,10 @@ type Shop = {
1926
1822
  type ShopSummary = {
1927
1823
  technicalName: string;
1928
1824
  name: string;
1825
+ /**
1826
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
1827
+ * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
1828
+ */
1929
1829
  logoUrl: string | undefined;
1930
1830
  websiteUrl: string | undefined;
1931
1831
  description: string | undefined;
@@ -1951,25 +1851,34 @@ type ShopMatchDelivery = {
1951
1851
  supportsLocalPickup: boolean | undefined;
1952
1852
  note: string | undefined;
1953
1853
  };
1854
+ /** The shop identity embedded on an item-scoped match (`ItemShopMatch.shop`): like `ShopRef`, plus
1855
+ * delivery terms -- this is the one place a match row prices in shipping. */
1856
+ type MatchShop = {
1857
+ /** @example cardlevels */
1858
+ technicalName: string;
1859
+ /** @example Cardlevels */
1860
+ name: string;
1861
+ delivery: ShopMatchDelivery;
1862
+ };
1954
1863
  /** A shop-match row scoped to one already-known item. `client.cards.matches()` and
1955
1864
  * `client.products.matches()` drop `item`/`expansion`/`category` since the caller already has
1956
1865
  * them, but add delivery terms since you're looking at one listing's total cost here. */
1957
1866
  type ItemShopMatch = ItemShopMatchSchema;
1958
1867
  /** Response of `client.cards.matches()` / `client.products.matches()`. */
1959
1868
  type ItemShopMatches = {
1960
- item: components["schemas"]["CatalogItemRef"];
1961
- data: components["schemas"]["ShopProductMatch"][];
1962
- pagination: components["schemas"]["PageMeta"];
1869
+ item: ItemRef;
1870
+ data: ItemShopMatchSchema[];
1871
+ pagination: PageMeta;
1963
1872
  };
1964
1873
  /** Response of `client.shopMatches.forShop()`: every match, of any item, currently live at one shop. */
1965
1874
  type ShopMatchesForShop = {
1966
- shop: components["schemas"]["ShopSummary"] | undefined;
1967
- data: components["schemas"]["ShopMatchWithItem"][];
1968
- pagination: components["schemas"]["PageMeta"];
1875
+ shop: ShopSummary | undefined;
1876
+ data: ShopMatchWithItemSchema[];
1877
+ pagination: PageMeta;
1969
1878
  };
1970
1879
  /** One row of `client.shopMatches.shopStats()`: match counts per shop, not the matches themselves. */
1971
1880
  type ShopMatchStats = {
1972
- shop: components["schemas"]["ShopSummary"];
1881
+ shop: ShopSummary;
1973
1882
  matchCount: number;
1974
1883
  /** @description Matches resolved to a catalog item */
1975
1884
  linkedMatchCount: number;
@@ -2005,8 +1914,8 @@ type DailyPricePoint = {
2005
1914
  };
2006
1915
  /** Response row of `client.priceStats.daily()`. */
2007
1916
  type ItemDailyStats = {
2008
- item: components["schemas"]["CatalogItemRef"];
2009
- dailyStats: components["schemas"]["DailyPricePoint"][];
1917
+ item: ItemRef;
1918
+ dailyStats: DailyPricePoint[];
2010
1919
  };
2011
1920
  type EstimatedValue = {
2012
1921
  /** @example 149.5 */
@@ -2020,8 +1929,8 @@ type EstimatedValue = {
2020
1929
  };
2021
1930
  /** Response row of `client.priceStats.estimatedValues()`. */
2022
1931
  type ItemEstimatedValue = {
2023
- item: components["schemas"]["CatalogItemRef"];
2024
- estimate: components["schemas"]["EstimatedValue"];
1932
+ item: ItemRef;
1933
+ estimate: EstimatedValue;
2025
1934
  };
2026
1935
  /** Response row of `client.priceStats.topProducts()`: items ranked by shop availability, not price. */
2027
1936
  type TopItem = {
@@ -2052,8 +1961,38 @@ type PackRate = {
2052
1961
  * @example 6a577711abc1ce71383d3e10
2053
1962
  */
2054
1963
  id: string;
2055
- expansion: components["schemas"]["ExpansionRef"];
2056
- buckets: components["schemas"]["PackRateBucket"][];
1964
+ expansion: ExpansionRef;
1965
+ buckets: PackRateBucket[];
1966
+ /**
1967
+ * @example [
1968
+ * "code",
1969
+ * "common",
1970
+ * "common",
1971
+ * "common",
1972
+ * "uncommon",
1973
+ * "uncommon",
1974
+ * "uncommon",
1975
+ * "reverse",
1976
+ * "common",
1977
+ * "hit",
1978
+ * "energy"
1979
+ * ]
1980
+ */
1981
+ slotOrder: ("common" | "uncommon" | "reverse" | "hit" | "energy" | "code")[] | undefined;
1982
+ source: {
1983
+ /** @example pullrates.gg */
1984
+ name: string;
1985
+ /**
1986
+ * Format: uri
1987
+ * @description The specific page these rates were read from, if any
1988
+ */
1989
+ url: string | undefined;
1990
+ /**
1991
+ * Format: date-time
1992
+ * @example 2026-07-15T12:03:29.322Z
1993
+ */
1994
+ fetchedAt: string | undefined;
1995
+ } | undefined;
2057
1996
  /**
2058
1997
  * Format: date-time
2059
1998
  * @example 2026-07-15T12:03:29.322Z
@@ -2065,6 +2004,8 @@ type PackRate = {
2065
2004
  */
2066
2005
  updatedAt: string;
2067
2006
  };
2007
+ /** One of the 9 fixed slots in a simulated pack (4 common, 3 uncommon, 1 reverse, 1 hit). */
2008
+ type PackSlot = "common" | "uncommon" | "reverse" | "hit" | "energy" | "code";
2068
2009
  /** Platform-wide overview counts, returned by `client.stats.platform()`. */
2069
2010
  type PlatformStats = {
2070
2011
  shopCount: number;
@@ -2074,7 +2015,7 @@ type PlatformStats = {
2074
2015
  priceCount: number;
2075
2016
  };
2076
2017
  /**
2077
- * Types for the premium tier: endpoints that need a signed-in subscriber's JWT (see
2018
+ * Types for the premium tier: endpoints that need a subscriber's API token (see
2078
2019
  * `TcgPriserOptions.authToken`, or the `authToken` field on each premium method's params). Split
2079
2020
  * out from the public-tier types because none of these mean anything without a token: without one,
2080
2021
  * the API just answers `403 premiumRequired`.
@@ -2083,7 +2024,7 @@ type PlatformStats = {
2083
2024
  */
2084
2025
  type ReferencePriceSeries = {
2085
2026
  /** @enum {string} */
2086
- source: "tcgdex" | "cmapi" | "tradera";
2027
+ source: "tcgdex" | "cmapi" | "tradera" | "pokemonpricetracker";
2087
2028
  /** @enum {string} */
2088
2029
  provider: "cardmarket" | "tcgplayer" | "ebay" | "tradera";
2089
2030
  /** @enum {string|null} */
@@ -2095,7 +2036,7 @@ type ReferencePriceSeries = {
2095
2036
  grade: number | undefined;
2096
2037
  currency: string;
2097
2038
  sampleSize: number | undefined;
2098
- points: components["schemas"]["ReferencePriceSeriesPoint"][];
2039
+ points: ReferencePriceSeriesPoint[];
2099
2040
  };
2100
2041
  type ReferencePriceSeriesPoint = {
2101
2042
  /**
@@ -2105,8 +2046,8 @@ type ReferencePriceSeriesPoint = {
2105
2046
  snapshotDate: string;
2106
2047
  price: number;
2107
2048
  };
2108
- type ReferencePriceSource = "tradera" | "tcgdex" | "cmapi";
2109
- type ReferencePriceCardVariant = "normal" | "holo" | "reverse";
2049
+ type ReferencePriceSource = "tradera" | "tcgdex" | "cmapi" | "pokemonpricetracker";
2050
+ type ReferencePriceCardVariant = "reverse" | "normal" | "holo";
2110
2051
  type ReferencePriceMetric = "price" | "low" | "mid" | "high" | "avg" | "avg1" | "avg7" | "avg30" | "directLow";
2111
2052
  type ReferencePriceCurrencyMode = "native" | "sek";
2112
2053
  /** Response of `client.cards.referencePrices()` / `client.products.referencePrices()`.
@@ -2117,7 +2058,7 @@ type ReferencePriceCurrencyMode = "native" | "sek";
2117
2058
  * keeps its own `currency`; in `sek` mode everything is `SEK`, converted at the rate stored on
2118
2059
  * each point. */
2119
2060
  type ItemReferencePrices = {
2120
- item: components["schemas"]["CatalogItemRef"];
2061
+ item: ItemRef;
2121
2062
  /**
2122
2063
  * Format: date-time
2123
2064
  * @example 2026-07-15T12:03:29.322Z
@@ -2132,7 +2073,7 @@ type ItemReferencePrices = {
2132
2073
  metric: "price" | "low" | "mid" | "high" | "avg" | "avg1" | "avg7" | "avg30" | "directLow";
2133
2074
  /** @enum {string} */
2134
2075
  currencyMode: "native" | "sek";
2135
- series: components["schemas"]["ReferencePriceSeries"][];
2076
+ series: ReferencePriceSeries[];
2136
2077
  };
2137
2078
  type SoldPrice = {
2138
2079
  /**
@@ -2161,9 +2102,9 @@ type SoldPrice = {
2161
2102
  * `true` here. That field only exists because this envelope shape is shared with a free preview
2162
2103
  * elsewhere in the API; this response is never the preview. */
2163
2104
  type ItemSoldPrices = {
2164
- item: components["schemas"]["CatalogItemRef"];
2165
- data: components["schemas"]["SoldPrice"][];
2166
- pagination: components["schemas"]["PageMeta"];
2105
+ item: ItemRef;
2106
+ data: SoldPrice[];
2107
+ pagination: PageMeta;
2167
2108
  /** @enum {boolean} */
2168
2109
  premiumRequired: true;
2169
2110
  };
@@ -2189,14 +2130,14 @@ type LivePricingForItem = {
2189
2130
  id: string;
2190
2131
  name: string;
2191
2132
  technicalName: string;
2192
- pricing: components["schemas"]["LivePricing"];
2133
+ pricing: LivePricingDetail;
2193
2134
  };
2194
2135
  /** Response of `client.expansions.livePricing()`: live pricing for every item in one expansion. */
2195
2136
  type ExpansionLivePricing = {
2196
2137
  expansion: {
2197
2138
  technicalName: string;
2198
2139
  };
2199
- items: components["schemas"]["LivePricingForItem"][];
2140
+ items: LivePricingForItem[];
2200
2141
  };
2201
2142
  /** The catalog item as embedded in stats responses: a `Card`/`SealedProduct` minus
2202
2143
  * `lowestShopOffer` and `referencePriceSnapshotsByProvider`, which these endpoints already answer
@@ -2210,43 +2151,25 @@ type StatsItemRef = {
2210
2151
  name: string;
2211
2152
  shortName: string | undefined;
2212
2153
  technicalName: string;
2213
- brand: components["schemas"]["Brand"];
2154
+ brand: BrandRef;
2214
2155
  manufacturer: string;
2215
2156
  modelNumber: string | undefined;
2216
- category: components["schemas"]["CategoryRef"] | undefined;
2217
- expansion: components["schemas"]["ExpansionRef"] | undefined;
2157
+ category: CategoryRef | undefined;
2158
+ expansion: ExpansionRef | undefined;
2218
2159
  /**
2219
2160
  * @description Printing language of the item
2220
2161
  * @example JPN
2221
2162
  * @enum {string|null}
2222
2163
  */
2223
2164
  language: "ENG" | "JPN" | "CHI" | undefined;
2224
- alternativeNames: components["schemas"]["AlternativeName"][];
2165
+ alternativeNames: AlternativeName[];
2225
2166
  supportsMultipackPricing: boolean;
2226
2167
  /**
2227
- * @description Absolute asset URL, or null when absent
2168
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
2228
2169
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
2229
2170
  */
2230
2171
  imageUrl: string | undefined;
2231
- /**
2232
- * @description Cheapest current shop price, in SEK
2233
- * @example 149.5
2234
- */
2235
- retailPrice: number | undefined;
2236
- /**
2237
- * @description Estimated market value, in SEK
2238
- * @example 149.5
2239
- */
2240
- estimatedValue: number | undefined;
2241
- /** @description Active shops currently tracking this item */
2242
- shopCount: number;
2243
- /** @description Observations the estimate rests on */
2244
- pricingDataPoints: number;
2245
- /**
2246
- * Format: date-time
2247
- * @example 2026-07-15T12:03:29.322Z
2248
- */
2249
- pricingUpdatedAt: string | undefined;
2172
+ lockedFields: string[];
2250
2173
  /**
2251
2174
  * Format: date-time
2252
2175
  * @example 2026-07-15T12:03:29.322Z
@@ -2266,7 +2189,7 @@ type StatsItemRef = {
2266
2189
  artist: string | undefined;
2267
2190
  cardmarketId: string | undefined;
2268
2191
  tcgplayerId: string | undefined;
2269
- variants: components["schemas"]["CardVariants"] | undefined;
2192
+ variants: CardVariants | undefined;
2270
2193
  prisjaktId: string | undefined;
2271
2194
  } | {
2272
2195
  /**
@@ -2277,43 +2200,25 @@ type StatsItemRef = {
2277
2200
  name: string;
2278
2201
  shortName: string | undefined;
2279
2202
  technicalName: string;
2280
- brand: components["schemas"]["Brand"];
2203
+ brand: BrandRef;
2281
2204
  manufacturer: string;
2282
2205
  modelNumber: string | undefined;
2283
- category: components["schemas"]["CategoryRef"] | undefined;
2284
- expansion: components["schemas"]["ExpansionRef"] | undefined;
2206
+ category: CategoryRef | undefined;
2207
+ expansion: ExpansionRef | undefined;
2285
2208
  /**
2286
2209
  * @description Printing language of the item
2287
2210
  * @example JPN
2288
2211
  * @enum {string|null}
2289
2212
  */
2290
2213
  language: "ENG" | "JPN" | "CHI" | undefined;
2291
- alternativeNames: components["schemas"]["AlternativeName"][];
2214
+ alternativeNames: AlternativeName[];
2292
2215
  supportsMultipackPricing: boolean;
2293
2216
  /**
2294
- * @description Absolute asset URL, or null when absent
2217
+ * @description Absolute asset URL, or null when absent. For best performance, please rehost this image on your own storage/CDN and cache it there rather than hotlinking it — see the API description's "Image hosting" section.
2295
2218
  * @example https://ik.imagekit.io/xgtytqdnv/expansions/example-image.webp
2296
2219
  */
2297
2220
  imageUrl: string | undefined;
2298
- /**
2299
- * @description Cheapest current shop price, in SEK
2300
- * @example 149.5
2301
- */
2302
- retailPrice: number | undefined;
2303
- /**
2304
- * @description Estimated market value, in SEK
2305
- * @example 149.5
2306
- */
2307
- estimatedValue: number | undefined;
2308
- /** @description Active shops currently tracking this item */
2309
- shopCount: number;
2310
- /** @description Observations the estimate rests on */
2311
- pricingDataPoints: number;
2312
- /**
2313
- * Format: date-time
2314
- * @example 2026-07-15T12:03:29.322Z
2315
- */
2316
- pricingUpdatedAt: string | undefined;
2221
+ lockedFields: string[];
2317
2222
  /**
2318
2223
  * Format: date-time
2319
2224
  * @example 2026-07-15T12:03:29.322Z
@@ -2340,23 +2245,23 @@ type VariantStatsSummary = {
2340
2245
  };
2341
2246
  /** Response of `client.priceStats.product()`. */
2342
2247
  type ItemStats = {
2343
- item: components["schemas"]["CatalogItem"];
2344
- dailyStats: components["schemas"]["DailyPricePoint"][];
2345
- estimate: components["schemas"]["EstimatedValue"];
2346
- variantStats: components["schemas"]["VariantStatsSummary"];
2248
+ item: StatsItemRef;
2249
+ dailyStats: DailyPricePoint[];
2250
+ estimate: EstimatedValue;
2251
+ variantStats: VariantStatsSummary;
2347
2252
  };
2348
2253
  /** Response of `client.priceStats.productFull()`: everything `product()` has, plus the item's
2349
2254
  * current shop matches. */
2350
2255
  type ItemFullStats = {
2351
- item: components["schemas"]["CatalogItem"];
2256
+ item: StatsItemRef;
2352
2257
  stats: {
2353
- dailyStats: components["schemas"]["DailyPricePoint"][];
2354
- variantStats: components["schemas"]["VariantStatsSummary"];
2258
+ dailyStats: DailyPricePoint[];
2259
+ variantStats: VariantStatsSummary;
2355
2260
  };
2356
- estimate: components["schemas"]["EstimatedValue"];
2261
+ estimate: EstimatedValue;
2357
2262
  shopMatches: {
2358
- data: components["schemas"]["ShopProductMatch"][];
2359
- pagination: components["schemas"]["PageMeta"];
2263
+ data: ItemShopMatchSchema[];
2264
+ pagination: PageMeta;
2360
2265
  };
2361
2266
  };
2362
2267
  type VariantPriceStat = {
@@ -2399,9 +2304,9 @@ type VariantSelector = {
2399
2304
  };
2400
2305
  /** Response of `client.priceStats.productDailyByVariant()`. */
2401
2306
  type ItemVariantDailyStats = {
2402
- item: components["schemas"]["CatalogItemRef"];
2403
- variant: components["schemas"]["VariantSelector"];
2404
- dailyStats: components["schemas"]["DailyPricePoint"][];
2307
+ item: ItemRef;
2308
+ variant: VariantSelector;
2309
+ dailyStats: DailyPricePoint[];
2405
2310
  };
2406
2311
  type ShopPricePoint = {
2407
2312
  /**
@@ -2419,18 +2324,36 @@ type ShopPricePoint = {
2419
2324
  inStock: boolean;
2420
2325
  url: string;
2421
2326
  };
2327
+ /** One shop's history for the item `ItemShopPriceHistory` is scoped to. */
2328
+ type ShopPriceHistory = {
2329
+ /** @description The shop's technicalName */
2330
+ shop: string;
2331
+ history: ShopPricePoint[];
2332
+ };
2422
2333
  /** Response of `client.shopMatchStats.forProduct()`: one product's price history, broken out per
2423
2334
  * shop. */
2424
2335
  type ItemShopPriceHistory = {
2425
- item: components["schemas"]["CatalogItemRef"];
2426
- shops: components["schemas"]["ShopPriceHistory"][];
2336
+ item: ItemRef;
2337
+ shops: ShopPriceHistory[];
2427
2338
  recordCount: number;
2428
2339
  };
2340
+ /** One product's history for the shop `ShopPriceHistoryList` is scoped to. */
2341
+ type ShopItemPriceHistory = {
2342
+ item: ItemRef;
2343
+ history: ShopPricePoint[];
2344
+ /** @example 149.5 */
2345
+ latestPrice: number | undefined;
2346
+ /**
2347
+ * Format: date-time
2348
+ * @example 2026-07-15T12:03:29.322Z
2349
+ */
2350
+ latestDate: string | undefined;
2351
+ };
2429
2352
  /** Response of `client.shopMatchStats.forShop()`: one shop's price history, broken out per
2430
2353
  * product. */
2431
2354
  type ShopPriceHistoryList = {
2432
2355
  shop: string;
2433
- items: components["schemas"]["ShopItemPriceHistory"][];
2356
+ items: ShopItemPriceHistory[];
2434
2357
  itemCount: number;
2435
2358
  };
2436
2359
  type ShopPriceComparisonRow = {
@@ -2462,9 +2385,9 @@ type ShopPriceComparisonStats = {
2462
2385
  /** Response of `client.shopMatchStats.compare()`: one product's price at every shop that carries
2463
2386
  * it, as of one date. `stats` is `undefined` when no shop had a price on that date. */
2464
2387
  type ItemPriceComparison = {
2465
- item: components["schemas"]["CatalogItemRef"];
2466
- items: components["schemas"]["ShopPriceComparisonRow"][];
2467
- stats: components["schemas"]["ShopPriceComparisonStats"] | undefined;
2388
+ item: ItemRef;
2389
+ items: ShopPriceComparisonRow[];
2390
+ stats: ShopPriceComparisonStats | undefined;
2468
2391
  };
2469
2392
  type ShopUrlStatus = "pending" | "active" | "invalid" | "rejected" | "sanityRejected";
2470
2393
  type ShopUrlDiscoveredBy = "scraper" | "user";
@@ -2477,7 +2400,7 @@ type ShopUrl = {
2477
2400
  id: string;
2478
2401
  url: string;
2479
2402
  shop: string | undefined;
2480
- status: components["schemas"]["ShopUrlStatus"];
2403
+ status: ShopUrlStatus;
2481
2404
  /** @enum {string} */
2482
2405
  discoveredBy: "scraper" | "user";
2483
2406
  /**
@@ -2521,7 +2444,7 @@ type ShopUrl = {
2521
2444
  /** Response of `client.shopUrls.submit()` / `client.shopUrls.assignProduct()`. */
2522
2445
  type ShopUrlMutationResult = {
2523
2446
  message: string;
2524
- shopUrl: components["schemas"]["ShopUrl"];
2447
+ shopUrl: ShopUrl;
2525
2448
  };
2526
2449
  interface ListBargainsParams {
2527
2450
  type?: 'sealed' | 'card' | 'all';
@@ -2595,6 +2518,17 @@ declare class CardsResource {
2595
2518
  /** `GET /cards/{id}/pricing/live`: computed fresh for this request, not read from the last
2596
2519
  * stats job. Premium. */
2597
2520
  livePricing(idOrTechnicalName: string, options?: PremiumOptions): Promise<LivePricingForItem>;
2521
+ /** `GET /cards/{id}/pricing`: this card's current pricing snapshot — `retailPrice`,
2522
+ * `estimatedValue`, `lowestShopOffer`, `referencePriceSnapshotsByProvider` — refreshed once a day
2523
+ * by the nightly pricing/scraper jobs. `get()` returns content only; this is the separate,
2524
+ * shorter-cached call for the part of a card that actually changes day to day. */
2525
+ pricing(idOrTechnicalName: string): Promise<CatalogItemPricing>;
2526
+ /** `GET /cards/pricing`: pricing for up to 200 cards in one request, keyed by `id` — the batch
2527
+ * counterpart to `pricing()`, for a page of results (a search page, an expansion's contents) that
2528
+ * needs pricing for many items at once. Unlike `get()`/`pricing()`, this only accepts `id`s, not
2529
+ * technicalNames — pass the `id`s already on the cards you fetched. Ids with no match are
2530
+ * silently omitted from the result rather than causing an error. */
2531
+ pricingBatch(ids: string[]): Promise<ListResponse<CatalogItemPricing>>;
2598
2532
  }
2599
2533
  declare class ExpansionsResource {
2600
2534
  private readonly http;
@@ -2602,7 +2536,10 @@ declare class ExpansionsResource {
2602
2536
  /** `GET /expansions`: every expansion. Unwrapped to a plain array, nothing to paginate here. */
2603
2537
  list(): Promise<Expansion[]>;
2604
2538
  /** `GET /expansions/{technicalName}/products`: every card and sealed product in one
2605
- * expansion, kept as separate `cards`/`sealed` groups. */
2539
+ * expansion, kept as separate `cards`/`sealed` groups. Content only, no pricing fields — pass the
2540
+ * `id`s from the result to `client.cards.pricingBatch()` / `client.products.pricingBatch()` if you
2541
+ * need pricing too. This mirrors the API 1:1 rather than fetching pricing for you, since pricing
2542
+ * for every item in an expansion is a second, separately-cached call the caller may not want. */
2606
2543
  products(technicalName: string): Promise<ExpansionContents>;
2607
2544
  /** `GET /expansions/{technicalName}/products/live-pricing`: computed fresh for every item in
2608
2545
  * this expansion, not read from the last stats job. Premium. */
@@ -2744,6 +2681,17 @@ declare class ProductsResource {
2744
2681
  /** `GET /product/{id}/pricing/live`: computed fresh for this request, not read from the last
2745
2682
  * stats job. Premium. */
2746
2683
  livePricing(idOrTechnicalName: string, options?: PremiumOptions): Promise<LivePricingForItem>;
2684
+ /** `GET /product/{id}/pricing`: this product's current pricing snapshot — `retailPrice`,
2685
+ * `estimatedValue`, `lowestShopOffer`, `referencePriceSnapshotsByProvider` — refreshed once a day
2686
+ * by the nightly pricing/scraper jobs. `get()` returns content only; this is the separate,
2687
+ * shorter-cached call for the part of a product that actually changes day to day. */
2688
+ pricing(idOrTechnicalName: string): Promise<CatalogItemPricing>;
2689
+ /** `GET /product/pricing`: pricing for up to 200 sealed products in one request, keyed by `id` —
2690
+ * the batch counterpart to `pricing()`, for a page of results (a search page, an expansion's
2691
+ * contents) that needs pricing for many items at once. Unlike `get()`/`pricing()`, this only
2692
+ * accepts `id`s, not technicalNames — pass the `id`s already on the products you fetched. Ids with
2693
+ * no match are silently omitted from the result rather than causing an error. */
2694
+ pricingBatch(ids: string[]): Promise<ListResponse<CatalogItemPricing>>;
2747
2695
  }
2748
2696
  interface ShopMatchStatsForProductParams {
2749
2697
  authToken?: string;
@@ -2855,9 +2803,11 @@ interface TcgPriserAdvancedOptions {
2855
2803
  }
2856
2804
  interface TcgPriserOptions {
2857
2805
  /**
2858
- * A signed-in subscriber's JWT. Only needed for premium methods (`cards.prices()`,
2859
- * `priceStats.product()`, `bargains.search()` etc.); public methods work fine without it.
2860
- * This client has no login flow of its own, so bring your own token.
2806
+ * A per-account API token, generated from your account page at tcgpriser.se/account/api-token.
2807
+ * Only needed for premium methods (`cards.prices()`, `priceStats.product()`,
2808
+ * `bargains.search()` etc.); public methods work fine without it. This client has no login flow
2809
+ * of its own, and doesn't need one: the API token is a long-lived, revocable secret made for
2810
+ * exactly this, so there's no OAuth dance to drive.
2861
2811
  *
2862
2812
  * Every premium method also accepts its own `authToken` to override this per call. Useful when
2863
2813
  * one server-side client is shared across requests for several different signed-in users.
@@ -2880,10 +2830,11 @@ interface TcgPriserOptions {
2880
2830
  *
2881
2831
  * That example needs no token. Most of the API is public (https://api.tcgpriser.se/docs). A
2882
2832
  * smaller set of premium methods (live pricing, per-condition history, shop comparison, bargain
2883
- * search, shop-URL submission) need a subscriber's JWT (https://api.tcgpriser.se/premium-docs):
2833
+ * search, shop-URL submission) need a Premium subscriber's API token
2834
+ * (https://api.tcgpriser.se/premium-docs), generated from tcgpriser.se/account/api-token:
2884
2835
  *
2885
2836
  * ```ts
2886
- * const tcgpriser = new TcgPriser(myJwt); // shorthand for { authToken: myJwt }
2837
+ * const tcgpriser = new TcgPriser(myApiToken); // shorthand for { authToken: myApiToken }
2887
2838
  * await tcgpriser.cards.livePricing('fezandipiti-ex');
2888
2839
  * ```
2889
2840
  */
@@ -2900,7 +2851,7 @@ declare class TcgPriser {
2900
2851
  readonly packRates: PackRatesResource;
2901
2852
  readonly stats: StatsResource;
2902
2853
  /**
2903
- * @param optionsOrAuthToken A subscriber JWT (`new TcgPriser(myJwt)`), a full
2854
+ * @param optionsOrAuthToken A subscriber's API token (`new TcgPriser(myApiToken)`), a full
2904
2855
  * `TcgPriserOptions` object, or omit it entirely for an anonymous, public-only client.
2905
2856
  */
2906
2857
  constructor(optionsOrAuthToken?: string | TcgPriserOptions);
@@ -2930,4 +2881,4 @@ declare class TcgPriserError extends Error {
2930
2881
  body: string;
2931
2882
  });
2932
2883
  }
2933
- export { type AlternativeName, type AssignShopUrlProductParams, type Bargain, type BargainInfo, type BargainProductRef, type BargainReferenceSource, type BrandRef, type Card, type CardMatchesParams, type CardPricesParams, type CardReferencePricesParams, type CardType, type CardVariants, type CatalogItem, type CategoryRef, type CompareShopPricesParams, type CurrencyCode, DEFAULT_BASE_URL, type DailyPricePoint, type DailyPriceStatsParams, type EstimatedValue, type EstimatedValuesParams, type Expansion, type ExpansionCard, type ExpansionContents, type ExpansionLivePricing, type ExpansionRef, type ExpansionSealedProduct, type GradingCompany, type ItemCondition, type ItemDailyStats, type ItemEstimatedValue, type ItemFullStats, type ItemPriceComparison, type ItemRef, type ItemReferencePrices, type ItemShopMatch, type ItemShopMatches, type ItemShopPriceHistory, type ItemSoldPrices, type ItemStats, type ItemVariantDailyStats, type ItemVariantStats, type ListBargainsParams, type ListCardsParams, type ListProductsParams, type ListResponse, type ListShopMatchesParams, type ListShopsParams, type LivePricingDetail, type LivePricingForItem, type LowestShopOffer, type MatchedItemRef, type PackRate, type PackRateBucket, type PageMeta, type PaginationParams, type PlatformStats, type PremiumOptions, type PrintingLanguage, type ProductByVariantParams, type ProductDailyByVariantParams, type ProductDailyStatsParams, type ProductFilterParams, type ProductMatchesParams, type ProductPricesParams, type ProductReferencePricesParams, type ReferencePriceCardVariant, type ReferencePriceCurrencyMode, type ReferencePriceMetric, type ReferencePriceProvider, type ReferencePriceSeries, type ReferencePriceSeriesPoint, type ReferencePriceSnapshot, type ReferencePriceSnapshotsByProvider, type ReferencePriceSource, type ResourceId, type SealedProduct, type SearchBargainsParams, type Shop, type ShopMatch, type ShopMatchDelivery, type ShopMatchStats, type ShopMatchStatsForProductParams, type ShopMatchStatsForShopParams, type ShopMatchesForShop, type ShopMatchesForShopParams, type ShopPriceComparisonRow, type ShopPriceComparisonStats, type ShopPriceHistoryList, type ShopPricePoint, type ShopRef, type ShopSummary, type ShopUrl, type ShopUrlDiscoveredBy, type ShopUrlMutationResult, type ShopUrlStatus, type SoldPrice, type StatsItemRef, type SubmitShopUrlParams, TcgPriser, TcgPriserError, type TcgPriserErrorCode, type TcgPriserOptions, type Timestamp, type TopItem, type TopProductsParams, type VariantPriceStat, type VariantSelector, type VariantStatsSummary, type components };
2884
+ export { type AlternativeName, type AssignShopUrlProductParams, type Bargain, type BargainInfo, type BargainProductRef, type BargainReferenceSource, type BrandRef, type Card, type CardMatchesParams, type CardPricesParams, type CardReferencePricesParams, type CardType, type CardVariants, type CatalogItem, type CatalogItemPricing, type CategoryRef, type CompareShopPricesParams, type CurrencyCode, DEFAULT_BASE_URL, type DailyPricePoint, type DailyPriceStatsParams, type EstimatedValue, type EstimatedValuesParams, type Expansion, type ExpansionCard, type ExpansionContents, type ExpansionLivePricing, type ExpansionRef, type ExpansionSealedProduct, type GradingCompany, type ItemCondition, type ItemDailyStats, type ItemEstimatedValue, type ItemFullStats, type ItemPriceComparison, type ItemRef, type ItemReferencePrices, type ItemShopMatch, type ItemShopMatches, type ItemShopPriceHistory, type ItemSoldPrices, type ItemStats, type ItemVariantDailyStats, type ItemVariantStats, type ListBargainsParams, type ListCardsParams, type ListProductsParams, type ListResponse, type ListShopMatchesParams, type ListShopsParams, type LivePricingDetail, type LivePricingForItem, type LowestShopOffer, type MatchShop, type MatchedItemRef, type PackRate, type PackRateBucket, type PackSlot, type PageMeta, type PaginationParams, type PlatformStats, type PremiumOptions, type PrintingLanguage, type ProductByVariantParams, type ProductDailyByVariantParams, type ProductDailyStatsParams, type ProductFilterParams, type ProductMatchesParams, type ProductPricesParams, type ProductReferencePricesParams, type ReferencePriceCardVariant, type ReferencePriceCurrencyMode, type ReferencePriceMetric, type ReferencePriceProvider, type ReferencePriceSeries, type ReferencePriceSeriesPoint, type ReferencePriceSnapshot, type ReferencePriceSnapshotsByProvider, type ReferencePriceSource, type ResourceId, type SealedProduct, type SearchBargainsParams, type Shop, type ShopItemPriceHistory, type ShopMatch, type ShopMatchDelivery, type ShopMatchStats, type ShopMatchStatsForProductParams, type ShopMatchStatsForShopParams, type ShopMatchesForShop, type ShopMatchesForShopParams, type ShopPriceComparisonRow, type ShopPriceComparisonStats, type ShopPriceHistory, type ShopPriceHistoryList, type ShopPricePoint, type ShopRef, type ShopSummary, type ShopUrl, type ShopUrlDiscoveredBy, type ShopUrlMutationResult, type ShopUrlStatus, type SoldPrice, type StatsItemRef, type SubmitShopUrlParams, TcgPriser, TcgPriserError, type TcgPriserErrorCode, type TcgPriserOptions, type Timestamp, type TopItem, type TopProductsParams, type VariantPriceStat, type VariantSelector, type VariantStatsSummary, type components };