[{"data":1,"prerenderedAt":3289},["ShallowReactive",2],{"blog-riftbound-api-card-prices-tcgplayer-cardmarket":3},{"id":4,"title":5,"author":6,"body":7,"category":3271,"date":3272,"description":3273,"extension":3274,"image":3275,"imageAlt":3276,"imageCredit":6,"meta":3277,"navigation":2191,"path":3278,"readTime":3279,"seo":3280,"stem":3281,"tags":3282,"__hash__":3288},"content\u002Fblog\u002Friftbound\u002F2026\u002F10\u002Friftbound-api-card-prices-tcgplayer-cardmarket.md","Riftbound API: Real-Time Card Prices from TCGplayer & CardMarket (2026)","PokéWallet Team",{"type":8,"value":9,"toc":3241},"minimark",[10,14,29,79,82,85,94,99,227,230,269,271,276,294,297,380,398,421,527,552,556,567,602,605,1342,1345,1422,1426,1433,1512,1566,1590,1610,1614,1630,1637,1670,1676,1679,1747,1754,1760,1763,1809,1812,1881,1896,1907,1913,1916,1954,1961,2005,2025,2031,2038,2101,2115,2134,2138,2141,2145,2799,2809,2813,2975,2991,2995,2998,3001,3021,3024,3035,3037,3041,3045,3053,3057,3060,3064,3067,3071,3096,3100,3106,3110,3126,3130,3133,3137,3140,3142,3152,3154,3158,3161,3201,3206,3229,3231,3237],[11,12,5],"h1",{"id":13},"riftbound-api-real-time-card-prices-from-tcgplayer-cardmarket-2026",[15,16,18,19],"div",{"style":17},"background: rgba(14, 165, 233, 0.15); border-left: 4px solid #0ea5e9; padding: 1rem 1.5rem; margin: 1.5rem 0; border-radius: 4px;","\n  ",[20,21,23,24,28],"p",{"style":22},"margin: 0; font-size: 0.9rem; color: #e0e0e0;","\n    ",[25,26,27],"strong",{},"🔵 IN THIS GUIDE:"," How to pull Riftbound card data and TCGplayer + CardMarket prices from the PokéWallet API, using real responses captured on October 13, 2026. The catalog is free on every plan. Prices and analytics need Ultra or the 7-day trial, and Pro does not cover them.\n  ",[30,31,32],"blockquote",{},[20,33,34,37,38,42,43,46,47,50,51,54,55,58,59,62,63,66,67,70,71,74,75,78],{},[25,35,36],{},"Quick Answer:"," The PokéWallet API serves Riftbound under ",[39,40,41],"code",{},"https:\u002F\u002Fapi.pokewallet.io\u002Frft\u002F…",", covering ",[25,44,45],{},"15 sets",". Sets, cards, search and images are ",[25,48,49],{},"free",", including on the free tier (",[25,52,53],{},"100 requests\u002Fhour, 1,000\u002Fday",", no credit card). Prices and analytics (bulk set prices, set statistics, completion value, trending sets, top cards) require the ",[25,56,57],{},"Ultra plan at €29\u002Fmonth"," or the ",[25,60,61],{},"7-day trial",". ",[25,64,65],{},"Pro is not enough."," Prices come from ",[25,68,69],{},"TCGplayer (USD)"," and ",[25,72,73],{},"CardMarket (EUR)"," and refresh ",[25,76,77],{},"once a day",". The same API key also covers 11 other card games.",[20,80,81],{},"Riftbound is new, and its developer tooling is still catching up. Anyone building a deck tracker, a collection app or a price bot for the League of Legends TCG hits the same problem quickly. Card text is easy to find. Clean, structured market prices from both major marketplaces are not. That gap is the reason this API exists.",[20,83,84],{},"This guide shows the Riftbound endpoints exactly as they respond today. Every JSON sample comes from a live call made on October 13, 2026, and so does every field name and number. We start with the free catalog and then move to the Ultra price and analytics endpoints. Next come JavaScript and Python code you can paste in, and the edge cases that tend to break a first integration: negative set IDs, numbers sent as strings, HTML inside card text, and two different products that share one name.",[20,86,87,88,93],{},"If you've used our One Piece endpoints, this will look familiar. The shape matches the ",[89,90,92],"a",{"href":91},"\u002Fblog\u002Fone-piece-card-game-api-guide-real-time-prices","One Piece Card Game API guide"," with a different path prefix.",[95,96,98],"h3",{"id":97},"key-takeaways","Key Takeaways",[100,101,102,127,137,147,162,177,210,220],"ul",{},[103,104,105,106,109,110,113,114,113,117,113,120,70,123,126],"li",{},"🆓 ",[25,107,108],{},"The catalog is free."," ",[39,111,112],{},"\u002Frft\u002Fsets",", ",[39,115,116],{},"\u002Frft\u002Fsets\u002F:set",[39,118,119],{},"\u002Frft\u002Fcards\u002F:id",[39,121,122],{},"\u002Frft\u002Fsearch",[39,124,125],{},"\u002Frft\u002Fimages\u002F:id"," work on every plan, including the free tier.",[103,128,129,130,109,133,136],{},"💰 ",[25,131,132],{},"Prices and analytics need Ultra.",[39,134,135],{},"\u002Frft\u002Fprices\u002F:set",", statistics, completion value, trending and top cards are Ultra-only (€29\u002Fmonth) or available on the 7-day trial. Pro unlocks only Pokémon and One Piece.",[103,138,139,140,109,143,146],{},"🔁 ",[25,141,142],{},"Prices refresh daily, not by the second.",[39,144,145],{},"updated_at"," is the time of the last price change, so a cheap common can show a timestamp that is weeks old and still be current.",[103,148,149,150,153,154,157,158,161],{},"🧮 ",[25,151,152],{},"Showcase cards are nearly all of Vendetta's cost."," Of the ",[25,155,156],{},"$14,436.01"," TCGplayer market estimate for a complete set, ",[25,159,160],{},"$14,335.93"," comes from the 68 Showcase cards.",[103,163,164,165,176],{},"🆔 ",[25,166,167,168,171,172,175],{},"Key on ",[39,169,170],{},"id",", never on ",[39,173,174],{},"name","."," \"Teemo - Scout\" shows up in two different promo sets with opposite price moves in the same week.",[103,178,179,180,109,183,70,186,189,190,193,194,113,197,193,200,203,204,193,207,175],{},"🔤 ",[25,181,182],{},"Expect strings and nulls.",[39,184,185],{},"might",[39,187,188],{},"energy_cost"," arrive as strings, ",[39,191,192],{},"domain"," can be ",[39,195,196],{},"\"Mind;Chaos\"",[39,198,199],{},"set_id",[39,201,202],{},"\"-1\"",", and ",[39,205,206],{},"release_date",[39,208,209],{},"null",[103,211,212,213,216,217,175],{},"📉 ",[25,214,215],{},"No price history for Riftbound."," History is Pokémon-only. The trending endpoint gives you a 7-day CardMarket change, and its TCGplayer side currently reports ",[39,218,219],{},"work_in_progress",[103,221,222,223,226],{},"🔑 ",[25,224,225],{},"One key, 12 games."," The key you create for Riftbound also reads Pokémon, One Piece, Magic, Yu-Gi-Oh!, Lorcana and six more games.",[228,229],"hr",{},[15,231,18,233,18,237],{"style":232},"background: linear-gradient(135deg, rgba(107, 76, 154, 0.1), rgba(107, 76, 154, 0.05)); border: 1px solid rgba(107, 76, 154, 0.3); border-radius: 8px; padding: 1.5rem; margin: 2rem 0; text-align: center;",[20,234,236],{"style":235},"margin: 0 0 1rem 0; font-weight: 600; font-size: 1.1rem; color: #e0e0e0;","⚡ Quick Navigation",[15,238,23,240,23,245,23,249,23,253,23,257,23,261,23,265,18],{"style":239},"display: flex; flex-wrap: wrap; gap: 0.75rem; justify-content: center;",[89,241,244],{"href":242,"style":243},"#what-the-api-covers","background: rgba(107, 76, 154, 0.2); color: #B794F6; padding: 0.5rem 1rem; border-radius: 6px; text-decoration: none; font-size: 0.9rem; border: 1px solid rgba(107, 76, 154, 0.4);","📦 Coverage",[89,246,248],{"href":247,"style":243},"#your-first-request","📡 First Request",[89,250,252],{"href":251,"style":243},"#free-endpoints","🆓 Free",[89,254,256],{"href":255,"style":243},"#ultra-endpoints-prices-analytics","💰 Ultra",[89,258,260],{"href":259,"style":243},"#code-examples-javascript-python","🛠 Code",[89,262,264],{"href":263,"style":243},"#how-it-compares-to-the-alternatives","⚖️ Alternatives",[89,266,268],{"href":267,"style":243},"#frequently-asked-questions","❓ FAQ",[228,270],{},[272,273,275],"h2",{"id":274},"what-the-api-covers","What the API Covers",[20,277,278,279,282,283,286,287,289,290,293],{},"Riftbound uses the game code ",[39,280,281],{},"rft",". Every Riftbound endpoint sits under ",[39,284,285],{},"https:\u002F\u002Fapi.pokewallet.io\u002Frft\u002F",". The sets endpoint reported ",[25,288,45],{}," on October 13, 2026 (",[39,291,292],{},"\"total\": 15",").",[20,295,296],{},"Those 15 entries include more than the main expansions. Promotional sets, Organized Play prize cards and upcoming products are all in there. Two entries from the live response show how wide the range is:",[298,299,300,328],"table",{},[301,302,303],"thead",{},[304,305,306,310,315,319,322,325],"tr",{},[307,308,309],"th",{},"Set",[307,311,312],{},[39,313,314],{},"set_code",[307,316,317],{},[39,318,199],{},[307,320,321],{},"Cards",[307,323,324],{},"Sealed",[307,326,327],{},"Release date",[329,330,331,356],"tbody",{},[304,332,333,337,342,347,350,353],{},[334,335,336],"td",{},"Legacy",[334,338,339],{},[39,340,341],{},"LGC",[334,343,344],{},[39,345,346],{},"24832",[334,348,349],{},"0",[334,351,352],{},"7",[334,354,355],{},"2027-01-29",[304,357,358,361,366,371,374,376],{},[334,359,360],{},"Nexus Night Promos",[334,362,363],{},[39,364,365],{},"nnp",[334,367,368],{},[39,369,370],{},"-2",[334,372,373],{},"1",[334,375,349],{},[334,377,378],{},[39,379,209],{},[20,381,382,383,386,387,390,391,393,394,193,396,175],{},"Legacy is listed three months before its release with ",[25,384,385],{},"7 sealed products and zero cards",". Sealed SKUs appear in the catalog first, and the card list follows later. If you're building a release tracker, watch ",[39,388,389],{},"card_count"," move off zero. Nexus Night Promos shows two more things your code has to accept: ",[39,392,199],{}," can be negative, and ",[39,395,206],{},[39,397,209],{},[20,399,400,401,113,403,113,405,113,408,113,411,113,414,113,417,420],{},"For every card you get the usual catalog fields (",[39,402,174],{},[39,404,314],{},[39,406,407],{},"card_number",[39,409,410],{},"rarity",[39,412,413],{},"card_type",[39,415,416],{},"variants",[39,418,419],{},"card_text",") plus a set of Riftbound-specific fields:",[298,422,423,436],{},[301,424,425],{},[304,426,427,430,433],{},[307,428,429],{},"Field",[307,431,432],{},"Example value",[307,434,435],{},"Notes",[329,437,438,454,468,481,496,514],{},[304,439,440,444,451],{},[334,441,442],{},[39,443,192],{},[334,445,446,113,449],{},[39,447,448],{},"\"Fury\"",[39,450,196],{},[334,452,453],{},"Multi-domain cards are semicolon-separated",[304,455,456,460,465],{},[334,457,458],{},[39,459,185],{},[334,461,462],{},[39,463,464],{},"\"6\"",[334,466,467],{},"String, not integer",[304,469,470,474,478],{},[334,471,472],{},[39,473,188],{},[334,475,476],{},[39,477,464],{},[334,479,480],{},"String",[304,482,483,488,493],{},[334,484,485],{},[39,486,487],{},"power_cost",[334,489,490],{},[39,491,492],{},"\"0\"",[334,494,495],{},"String; not present on every card",[304,497,498,503,511],{},[334,499,500],{},[39,501,502],{},"tag",[334,504,505,113,508],{},[39,506,507],{},"\"Shurima\"",[39,509,510],{},"\"Teemo\"",[334,512,513],{},"Region or champion tag",[304,515,516,521,524],{},[334,517,518],{},[39,519,520],{},"flavor_text",[334,522,523],{},"—",[334,525,526],{},"Listed among the game's fields; not in today's samples",[20,528,529,530,70,533,536,537,539,540,113,543,546,547,551],{},"Prices come from two sources: ",[25,531,532],{},"TCGplayer in USD",[25,534,535],{},"CardMarket in EUR",", refreshed ",[25,538,77],{},". CardMarket prices are split by finish (",[39,541,542],{},"normal",[39,544,545],{},"foil","). There's no eBay data and no grading data (PSA, CGC). For how the two marketplaces differ for buyers and sellers, our ",[89,548,550],{"href":549},"\u002Fblog\u002Fone-piece-tcg-where-to-buy-sell-tcgplayer-cardmarket-ebay-2026","TCGplayer vs CardMarket vs eBay comparison"," covers it from the One Piece side, and the same logic applies here.",[272,553,555],{"id":554},"your-first-request","Your First Request",[20,557,558,559,562,563,566],{},"Create a free account at ",[89,560,561],{"href":561},"\u002Fauth\u002Flogin"," and copy your key from the dashboard. Every request sends it in the ",[39,564,565],{},"X-API-Key"," header:",[568,569,574],"pre",{"className":570,"code":571,"language":572,"meta":573,"style":573},"language-bash shiki shiki-themes github-light github-dark","curl -H \"X-API-Key: YOUR_API_KEY\" \\\n  \"https:\u002F\u002Fapi.pokewallet.io\u002Frft\u002Fsearch?q=Sandspinner\"\n","bash","",[39,575,576,596],{"__ignoreMap":573},[577,578,581,585,589,593],"span",{"class":579,"line":580},"line",1,[577,582,584],{"class":583},"sScJk","curl",[577,586,588],{"class":587},"sj4cs"," -H",[577,590,592],{"class":591},"sZZnC"," \"X-API-Key: YOUR_API_KEY\"",[577,594,595],{"class":587}," \\\n",[577,597,599],{"class":579,"line":598},2,[577,600,601],{"class":591},"  \"https:\u002F\u002Fapi.pokewallet.io\u002Frft\u002Fsearch?q=Sandspinner\"\n",[20,603,604],{},"This is the response we got (card text trimmed for space):",[568,606,610],{"className":607,"code":608,"language":609,"meta":573,"style":573},"language-json shiki shiki-themes github-light github-dark","{\n  \"query\": \"Sandspinner\",\n  \"results\": [\n    {\n      \"id\": \"rft_bf4eaca8debd7fa56f0cf4cf7ee347989cdeaf71595032dfa475d03388a39904bd977d9707ddc662c47db3b6c36f\",\n      \"card_info\": {\n        \"name\": \"Baccai Sandspinner\",\n        \"set_name\": \"Vendetta\",\n        \"set_code\": \"VEN\",\n        \"set_id\": \"24698\",\n        \"card_number\": \"001\u002F166\",\n        \"rarity\": \"Common\",\n        \"card_type\": \"Unit\",\n        \"variants\": [\"Normal\", \"Foil\"],\n        \"tag\": \"Shurima\",\n        \"might\": \"6\",\n        \"domain\": \"Fury\",\n        \"energy_cost\": \"6\"\n      },\n      \"tcgplayer\": {\n        \"prices\": [\n          { \"sub_type_name\": \"Normal\", \"market_price\": 0.05, \"low_price\": 0.01,\n            \"mid_price\": 0.15, \"high_price\": 2.47, \"direct_low_price\": null,\n            \"updated_at\": \"2026-09-20T12:34:15.413415+00:00\" },\n          { \"sub_type_name\": \"Foil\", \"market_price\": 0.13, \"low_price\": 0.03,\n            \"mid_price\": 0.24, \"high_price\": 4.99, \"direct_low_price\": null,\n            \"updated_at\": \"2026-09-30T20:41:23.09906+00:00\" }\n        ],\n        \"url\": \"https:\u002F\u002Fwww.tcgplayer.com\u002Fproduct\u002F707613\u002Friftbound-league-of-legends-trading-card-game-vendetta-baccai-sandspinner\"\n      },\n      \"cardmarket\": {\n        \"product_name\": \"Baccai Sandspinner\",\n        \"prices\": [\n          { \"variant_type\": \"normal\", \"avg\": 0.08, \"low\": 0.02, \"trend\": 0.05,\n            \"avg1\": 0.17, \"avg7\": 0.06, \"avg30\": 0.04,\n            \"updated_at\": \"2026-09-30T14:50:06.98989+00:00\" },\n          { \"variant_type\": \"foil\", \"avg\": 0.08, \"low\": 0.02, \"trend\": 0.12,\n            \"avg1\": 0.05, \"avg7\": 0.1, \"avg30\": 0.14,\n            \"updated_at\": \"2026-09-30T14:50:06.98989+00:00\" }\n        ],\n        \"product_url\": \"https:\u002F\u002Fwww.cardmarket.com\u002Fen\u002FRiftbound\u002FProducts\u002FSingles\u002FVendetta\u002FBaccai-Sandspinner\"\n      }\n    }\n  ],\n  \"metadata\": {\n    \"total_count\": 1, \"tcg\": 1, \"cardmarket\": 1,\n    \"tcg_only\": 0, \"cardmarket_only\": 0, \"both_sources\": 1, \"truncated\": false\n  }\n}\n","json",[39,611,612,618,632,641,647,660,669,682,695,708,721,734,747,760,780,792,804,816,827,833,841,849,884,916,930,961,990,1003,1009,1020,1025,1033,1045,1052,1096,1129,1141,1180,1209,1220,1225,1236,1242,1248,1254,1262,1292,1330,1336],{"__ignoreMap":573},[577,613,614],{"class":579,"line":580},[577,615,617],{"class":616},"sVt8B","{\n",[577,619,620,623,626,629],{"class":579,"line":598},[577,621,622],{"class":587},"  \"query\"",[577,624,625],{"class":616},": ",[577,627,628],{"class":591},"\"Sandspinner\"",[577,630,631],{"class":616},",\n",[577,633,635,638],{"class":579,"line":634},3,[577,636,637],{"class":587},"  \"results\"",[577,639,640],{"class":616},": [\n",[577,642,644],{"class":579,"line":643},4,[577,645,646],{"class":616},"    {\n",[577,648,650,653,655,658],{"class":579,"line":649},5,[577,651,652],{"class":587},"      \"id\"",[577,654,625],{"class":616},[577,656,657],{"class":591},"\"rft_bf4eaca8debd7fa56f0cf4cf7ee347989cdeaf71595032dfa475d03388a39904bd977d9707ddc662c47db3b6c36f\"",[577,659,631],{"class":616},[577,661,663,666],{"class":579,"line":662},6,[577,664,665],{"class":587},"      \"card_info\"",[577,667,668],{"class":616},": {\n",[577,670,672,675,677,680],{"class":579,"line":671},7,[577,673,674],{"class":587},"        \"name\"",[577,676,625],{"class":616},[577,678,679],{"class":591},"\"Baccai Sandspinner\"",[577,681,631],{"class":616},[577,683,685,688,690,693],{"class":579,"line":684},8,[577,686,687],{"class":587},"        \"set_name\"",[577,689,625],{"class":616},[577,691,692],{"class":591},"\"Vendetta\"",[577,694,631],{"class":616},[577,696,698,701,703,706],{"class":579,"line":697},9,[577,699,700],{"class":587},"        \"set_code\"",[577,702,625],{"class":616},[577,704,705],{"class":591},"\"VEN\"",[577,707,631],{"class":616},[577,709,711,714,716,719],{"class":579,"line":710},10,[577,712,713],{"class":587},"        \"set_id\"",[577,715,625],{"class":616},[577,717,718],{"class":591},"\"24698\"",[577,720,631],{"class":616},[577,722,724,727,729,732],{"class":579,"line":723},11,[577,725,726],{"class":587},"        \"card_number\"",[577,728,625],{"class":616},[577,730,731],{"class":591},"\"001\u002F166\"",[577,733,631],{"class":616},[577,735,737,740,742,745],{"class":579,"line":736},12,[577,738,739],{"class":587},"        \"rarity\"",[577,741,625],{"class":616},[577,743,744],{"class":591},"\"Common\"",[577,746,631],{"class":616},[577,748,750,753,755,758],{"class":579,"line":749},13,[577,751,752],{"class":587},"        \"card_type\"",[577,754,625],{"class":616},[577,756,757],{"class":591},"\"Unit\"",[577,759,631],{"class":616},[577,761,763,766,769,772,774,777],{"class":579,"line":762},14,[577,764,765],{"class":587},"        \"variants\"",[577,767,768],{"class":616},": [",[577,770,771],{"class":591},"\"Normal\"",[577,773,113],{"class":616},[577,775,776],{"class":591},"\"Foil\"",[577,778,779],{"class":616},"],\n",[577,781,783,786,788,790],{"class":579,"line":782},15,[577,784,785],{"class":587},"        \"tag\"",[577,787,625],{"class":616},[577,789,507],{"class":591},[577,791,631],{"class":616},[577,793,795,798,800,802],{"class":579,"line":794},16,[577,796,797],{"class":587},"        \"might\"",[577,799,625],{"class":616},[577,801,464],{"class":591},[577,803,631],{"class":616},[577,805,807,810,812,814],{"class":579,"line":806},17,[577,808,809],{"class":587},"        \"domain\"",[577,811,625],{"class":616},[577,813,448],{"class":591},[577,815,631],{"class":616},[577,817,819,822,824],{"class":579,"line":818},18,[577,820,821],{"class":587},"        \"energy_cost\"",[577,823,625],{"class":616},[577,825,826],{"class":591},"\"6\"\n",[577,828,830],{"class":579,"line":829},19,[577,831,832],{"class":616},"      },\n",[577,834,836,839],{"class":579,"line":835},20,[577,837,838],{"class":587},"      \"tcgplayer\"",[577,840,668],{"class":616},[577,842,844,847],{"class":579,"line":843},21,[577,845,846],{"class":587},"        \"prices\"",[577,848,640],{"class":616},[577,850,852,855,858,860,862,864,867,869,872,874,877,879,882],{"class":579,"line":851},22,[577,853,854],{"class":616},"          { ",[577,856,857],{"class":587},"\"sub_type_name\"",[577,859,625],{"class":616},[577,861,771],{"class":591},[577,863,113],{"class":616},[577,865,866],{"class":587},"\"market_price\"",[577,868,625],{"class":616},[577,870,871],{"class":587},"0.05",[577,873,113],{"class":616},[577,875,876],{"class":587},"\"low_price\"",[577,878,625],{"class":616},[577,880,881],{"class":587},"0.01",[577,883,631],{"class":616},[577,885,887,890,892,895,897,900,902,905,907,910,912,914],{"class":579,"line":886},23,[577,888,889],{"class":587},"            \"mid_price\"",[577,891,625],{"class":616},[577,893,894],{"class":587},"0.15",[577,896,113],{"class":616},[577,898,899],{"class":587},"\"high_price\"",[577,901,625],{"class":616},[577,903,904],{"class":587},"2.47",[577,906,113],{"class":616},[577,908,909],{"class":587},"\"direct_low_price\"",[577,911,625],{"class":616},[577,913,209],{"class":587},[577,915,631],{"class":616},[577,917,919,922,924,927],{"class":579,"line":918},24,[577,920,921],{"class":587},"            \"updated_at\"",[577,923,625],{"class":616},[577,925,926],{"class":591},"\"2026-09-20T12:34:15.413415+00:00\"",[577,928,929],{"class":616}," },\n",[577,931,933,935,937,939,941,943,945,947,950,952,954,956,959],{"class":579,"line":932},25,[577,934,854],{"class":616},[577,936,857],{"class":587},[577,938,625],{"class":616},[577,940,776],{"class":591},[577,942,113],{"class":616},[577,944,866],{"class":587},[577,946,625],{"class":616},[577,948,949],{"class":587},"0.13",[577,951,113],{"class":616},[577,953,876],{"class":587},[577,955,625],{"class":616},[577,957,958],{"class":587},"0.03",[577,960,631],{"class":616},[577,962,964,966,968,971,973,975,977,980,982,984,986,988],{"class":579,"line":963},26,[577,965,889],{"class":587},[577,967,625],{"class":616},[577,969,970],{"class":587},"0.24",[577,972,113],{"class":616},[577,974,899],{"class":587},[577,976,625],{"class":616},[577,978,979],{"class":587},"4.99",[577,981,113],{"class":616},[577,983,909],{"class":587},[577,985,625],{"class":616},[577,987,209],{"class":587},[577,989,631],{"class":616},[577,991,993,995,997,1000],{"class":579,"line":992},27,[577,994,921],{"class":587},[577,996,625],{"class":616},[577,998,999],{"class":591},"\"2026-09-30T20:41:23.09906+00:00\"",[577,1001,1002],{"class":616}," }\n",[577,1004,1006],{"class":579,"line":1005},28,[577,1007,1008],{"class":616},"        ],\n",[577,1010,1012,1015,1017],{"class":579,"line":1011},29,[577,1013,1014],{"class":587},"        \"url\"",[577,1016,625],{"class":616},[577,1018,1019],{"class":591},"\"https:\u002F\u002Fwww.tcgplayer.com\u002Fproduct\u002F707613\u002Friftbound-league-of-legends-trading-card-game-vendetta-baccai-sandspinner\"\n",[577,1021,1023],{"class":579,"line":1022},30,[577,1024,832],{"class":616},[577,1026,1028,1031],{"class":579,"line":1027},31,[577,1029,1030],{"class":587},"      \"cardmarket\"",[577,1032,668],{"class":616},[577,1034,1036,1039,1041,1043],{"class":579,"line":1035},32,[577,1037,1038],{"class":587},"        \"product_name\"",[577,1040,625],{"class":616},[577,1042,679],{"class":591},[577,1044,631],{"class":616},[577,1046,1048,1050],{"class":579,"line":1047},33,[577,1049,846],{"class":587},[577,1051,640],{"class":616},[577,1053,1055,1057,1060,1062,1065,1067,1070,1072,1075,1077,1080,1082,1085,1087,1090,1092,1094],{"class":579,"line":1054},34,[577,1056,854],{"class":616},[577,1058,1059],{"class":587},"\"variant_type\"",[577,1061,625],{"class":616},[577,1063,1064],{"class":591},"\"normal\"",[577,1066,113],{"class":616},[577,1068,1069],{"class":587},"\"avg\"",[577,1071,625],{"class":616},[577,1073,1074],{"class":587},"0.08",[577,1076,113],{"class":616},[577,1078,1079],{"class":587},"\"low\"",[577,1081,625],{"class":616},[577,1083,1084],{"class":587},"0.02",[577,1086,113],{"class":616},[577,1088,1089],{"class":587},"\"trend\"",[577,1091,625],{"class":616},[577,1093,871],{"class":587},[577,1095,631],{"class":616},[577,1097,1099,1102,1104,1107,1109,1112,1114,1117,1119,1122,1124,1127],{"class":579,"line":1098},35,[577,1100,1101],{"class":587},"            \"avg1\"",[577,1103,625],{"class":616},[577,1105,1106],{"class":587},"0.17",[577,1108,113],{"class":616},[577,1110,1111],{"class":587},"\"avg7\"",[577,1113,625],{"class":616},[577,1115,1116],{"class":587},"0.06",[577,1118,113],{"class":616},[577,1120,1121],{"class":587},"\"avg30\"",[577,1123,625],{"class":616},[577,1125,1126],{"class":587},"0.04",[577,1128,631],{"class":616},[577,1130,1132,1134,1136,1139],{"class":579,"line":1131},36,[577,1133,921],{"class":587},[577,1135,625],{"class":616},[577,1137,1138],{"class":591},"\"2026-09-30T14:50:06.98989+00:00\"",[577,1140,929],{"class":616},[577,1142,1144,1146,1148,1150,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1178],{"class":579,"line":1143},37,[577,1145,854],{"class":616},[577,1147,1059],{"class":587},[577,1149,625],{"class":616},[577,1151,1152],{"class":591},"\"foil\"",[577,1154,113],{"class":616},[577,1156,1069],{"class":587},[577,1158,625],{"class":616},[577,1160,1074],{"class":587},[577,1162,113],{"class":616},[577,1164,1079],{"class":587},[577,1166,625],{"class":616},[577,1168,1084],{"class":587},[577,1170,113],{"class":616},[577,1172,1089],{"class":587},[577,1174,625],{"class":616},[577,1176,1177],{"class":587},"0.12",[577,1179,631],{"class":616},[577,1181,1183,1185,1187,1189,1191,1193,1195,1198,1200,1202,1204,1207],{"class":579,"line":1182},38,[577,1184,1101],{"class":587},[577,1186,625],{"class":616},[577,1188,871],{"class":587},[577,1190,113],{"class":616},[577,1192,1111],{"class":587},[577,1194,625],{"class":616},[577,1196,1197],{"class":587},"0.1",[577,1199,113],{"class":616},[577,1201,1121],{"class":587},[577,1203,625],{"class":616},[577,1205,1206],{"class":587},"0.14",[577,1208,631],{"class":616},[577,1210,1212,1214,1216,1218],{"class":579,"line":1211},39,[577,1213,921],{"class":587},[577,1215,625],{"class":616},[577,1217,1138],{"class":591},[577,1219,1002],{"class":616},[577,1221,1223],{"class":579,"line":1222},40,[577,1224,1008],{"class":616},[577,1226,1228,1231,1233],{"class":579,"line":1227},41,[577,1229,1230],{"class":587},"        \"product_url\"",[577,1232,625],{"class":616},[577,1234,1235],{"class":591},"\"https:\u002F\u002Fwww.cardmarket.com\u002Fen\u002FRiftbound\u002FProducts\u002FSingles\u002FVendetta\u002FBaccai-Sandspinner\"\n",[577,1237,1239],{"class":579,"line":1238},42,[577,1240,1241],{"class":616},"      }\n",[577,1243,1245],{"class":579,"line":1244},43,[577,1246,1247],{"class":616},"    }\n",[577,1249,1251],{"class":579,"line":1250},44,[577,1252,1253],{"class":616},"  ],\n",[577,1255,1257,1260],{"class":579,"line":1256},45,[577,1258,1259],{"class":587},"  \"metadata\"",[577,1261,668],{"class":616},[577,1263,1265,1268,1270,1272,1274,1277,1279,1281,1283,1286,1288,1290],{"class":579,"line":1264},46,[577,1266,1267],{"class":587},"    \"total_count\"",[577,1269,625],{"class":616},[577,1271,373],{"class":587},[577,1273,113],{"class":616},[577,1275,1276],{"class":587},"\"tcg\"",[577,1278,625],{"class":616},[577,1280,373],{"class":587},[577,1282,113],{"class":616},[577,1284,1285],{"class":587},"\"cardmarket\"",[577,1287,625],{"class":616},[577,1289,373],{"class":587},[577,1291,631],{"class":616},[577,1293,1295,1298,1300,1302,1304,1307,1309,1311,1313,1316,1318,1320,1322,1325,1327],{"class":579,"line":1294},47,[577,1296,1297],{"class":587},"    \"tcg_only\"",[577,1299,625],{"class":616},[577,1301,349],{"class":587},[577,1303,113],{"class":616},[577,1305,1306],{"class":587},"\"cardmarket_only\"",[577,1308,625],{"class":616},[577,1310,349],{"class":587},[577,1312,113],{"class":616},[577,1314,1315],{"class":587},"\"both_sources\"",[577,1317,625],{"class":616},[577,1319,373],{"class":587},[577,1321,113],{"class":616},[577,1323,1324],{"class":587},"\"truncated\"",[577,1326,625],{"class":616},[577,1328,1329],{"class":587},"false\n",[577,1331,1333],{"class":579,"line":1332},48,[577,1334,1335],{"class":616},"  }\n",[577,1337,1339],{"class":579,"line":1338},49,[577,1340,1341],{"class":616},"}\n",[20,1343,1344],{},"Three details to note before you go further:",[1346,1347,1348,1361,1403],"ol",{},[103,1349,1350,1356,1357,1360],{},[25,1351,1352,1353,1355],{},"The ",[39,1354,170],{}," is the stable key."," It's long, and Riftbound card IDs start with ",[39,1358,1359],{},"rft_",". Store it and use it for everything.",[103,1362,1363,1366,1367,1370,1371,1373,1374,1376,1377,1380,1381,1370,1384,1373,1386,1388,1389,1392,1393,113,1396,113,1399,1402],{},[25,1364,1365],{},"TCGplayer and CardMarket don't share a schema."," TCGplayer uses ",[39,1368,1369],{},"sub_type_name"," (",[39,1372,771],{},"\u002F",[39,1375,776],{},") with ",[39,1378,1379],{},"market_price",". CardMarket uses ",[39,1382,1383],{},"variant_type",[39,1385,1064],{},[39,1387,1152],{},", lower case) with ",[39,1390,1391],{},"trend"," and rolling averages ",[39,1394,1395],{},"avg1",[39,1397,1398],{},"avg7",[39,1400,1401],{},"avg30",". Normalize the case before you join the two.",[103,1404,1405,109,1411,1414,1415,70,1418,1421],{},[25,1406,1407,1410],{},[39,1408,1409],{},"metadata"," tells you source coverage.",[39,1412,1413],{},"both_sources: 1"," means the card matched on both marketplaces. Use ",[39,1416,1417],{},"tcg_only",[39,1419,1420],{},"cardmarket_only"," to spot cards that only one side lists.",[272,1423,1425],{"id":1424},"free-endpoints","Free Endpoints",[20,1427,1428,1429,1432],{},"All five catalog endpoints work on every plan. On the free tier you get ",[25,1430,1431],{},"100 requests\u002Fhour and 1,000\u002Fday",", enough to build and test a full integration.",[298,1434,1435,1445],{},[301,1436,1437],{},[304,1438,1439,1442],{},[307,1440,1441],{},"Endpoint",[307,1443,1444],{},"What it returns",[329,1446,1447,1468,1478,1492,1502],{},[304,1448,1449,1454],{},[334,1450,1451],{},[39,1452,1453],{},"GET \u002Frft\u002Fsets",[334,1455,1456,1457,113,1459,113,1461,113,1463,113,1466],{},"All Riftbound sets with ",[39,1458,314],{},[39,1460,199],{},[39,1462,389],{},[39,1464,1465],{},"sealed_count",[39,1467,206],{},[304,1469,1470,1475],{},[334,1471,1472],{},[39,1473,1474],{},"GET \u002Frft\u002Fsets\u002F:set",[334,1476,1477],{},"One set's details plus a paginated card list",[304,1479,1480,1485],{},[334,1481,1482],{},[39,1483,1484],{},"GET \u002Frft\u002Fcards\u002F:id",[334,1486,1487,1488,1491],{},"One card with full ",[39,1489,1490],{},"card_info",", TCGplayer and CardMarket blocks",[304,1493,1494,1499],{},[334,1495,1496],{},[39,1497,1498],{},"GET \u002Frft\u002Fsearch?q=",[334,1500,1501],{},"Name search across all Riftbound sets",[304,1503,1504,1509],{},[334,1505,1506],{},[39,1507,1508],{},"GET \u002Frft\u002Fimages\u002F:id",[334,1510,1511],{},"Card image",[20,1513,1514,1515,1517,1518,625,1520,70,1523,1526,1527,1529,1530,1532,1533,1536,1537,1540,1541,1544,1545,1548,1549,113,1552,113,1555,113,1558,1561,1562,175],{},"The set endpoint takes either the ",[39,1516,314],{}," or the numeric ",[39,1519,199],{},[39,1521,1522],{},"\u002Frft\u002Fsets\u002FVEN",[39,1524,1525],{},"\u002Frft\u002Fsets\u002F24698"," both return Vendetta. If a ",[39,1528,314],{}," is shared by several sets, the API answers with the candidates instead, so store the ",[39,1531,199],{},". The response opens with a ",[39,1534,1535],{},"set"," object (",[39,1538,1539],{},"\"total_cards\": 260",", release date July 31, 2026), followed by ",[39,1542,1543],{},"cards"," and a ",[39,1546,1547],{},"pagination"," block (",[39,1550,1551],{},"page",[39,1553,1554],{},"limit",[39,1556,1557],{},"total",[39,1559,1560],{},"total_pages","). For the paging query parameters, see the ",[89,1563,1565],{"href":1564},"\u002Fapi-docs?game=rft","Riftbound API documentation",[20,1567,1568,1569,1576,1577,70,1580,1583,1584,1586,1587,1589],{},"One detail here causes confusion: ",[25,1570,1571,1572,1575],{},"in the set card list, the ",[39,1573,1574],{},"prices"," arrays come back empty."," Each card has its ",[39,1578,1579],{},"tcgplayer.url",[39,1581,1582],{},"cardmarket.product_url",", but no numbers. That's by design. Bulk prices for a whole set come from ",[39,1585,135],{},", which is an Ultra endpoint. Don't loop ",[39,1588,119],{}," across 260 cards to rebuild that feed. It would use a quarter of your daily free quota on one set.",[20,1591,1592,1593,1595,1596,113,1599,1602,1603,1606,1607,175],{},"Watch the ",[39,1594,419],{}," field when you render cards. It contains raw HTML (",[39,1597,1598],{},"\u003Cem>",[39,1600,1601],{},"\u003Cbr>",") and Windows line breaks (",[39,1604,1605],{},"\\r\\n","). Sanitize it before it reaches the DOM. Promo cards can also include a disclaimer inside a ",[39,1608,1609],{},"\u003Cspan style=\"color: red;\">",[272,1611,1613],{"id":1612},"ultra-endpoints-prices-analytics","Ultra Endpoints: Prices & Analytics",[20,1615,1616,1617,58,1620,1622,1623,1626,1627,175],{},"These five endpoints need ",[25,1618,1619],{},"Ultra (€29\u002Fmonth, 7,000 requests\u002Fhour, 70,000\u002Fday)",[25,1621,61],{},", which you start from the dashboard after you ",[89,1624,1625],{"href":561},"log in",". Pro only unlocks Pokémon and One Piece, so it won't work here. All figures below were captured on ",[25,1628,1629],{},"October 13, 2026",[95,1631,1633,1636],{"id":1632},"get-rftpricesset-bulk-set-prices",[39,1634,1635],{},"GET \u002Frft\u002Fprices\u002F:set",": bulk set prices",[20,1638,1639,1642,1643,1646,1647,1650,1651,1654,1655,1658,1659,1662,1663,1666,1667,1669],{},[39,1640,1641],{},"\u002Frft\u002Fprices\u002F24698"," returns one row per card ",[25,1644,1645],{},"per variant",", with TCGplayer and CardMarket side by side (",[39,1648,1649],{},"\"source\": \"both\"","). For Vendetta that came to ",[39,1652,1653],{},"\"total\": 360"," rows. Baccai Sandspinner shows up twice, once as ",[39,1656,1657],{},"\"variant\": \"Normal\""," (TCGplayer market ",[25,1660,1661],{},"$0.05",", CardMarket trend ",[25,1664,1665],{},"€0.05",") and once as ",[39,1668,776],{}," ($0.13 \u002F €0.12). Use this endpoint for nightly syncs, because one call replaces hundreds.",[95,1671,1673],{"id":1672},"get-rftsetssetstatistics",[39,1674,1675],{},"GET \u002Frft\u002Fsets\u002F:set\u002Fstatistics",[20,1677,1678],{},"The Vendetta summary:",[298,1680,1681,1692],{},[301,1682,1683],{},[304,1684,1685,1688,1690],{},[307,1686,1687],{},"Metric",[307,1689,69],{},[307,1691,73],{},[329,1693,1694,1705,1716,1727,1737],{},[304,1695,1696,1699,1702],{},[334,1697,1698],{},"Average price",[334,1700,1701],{},"$58.84",[334,1703,1704],{},"€34.59",[304,1706,1707,1710,1713],{},[334,1708,1709],{},"Cheapest card",[334,1711,1712],{},"$0.08",[334,1714,1715],{},"€0.04",[304,1717,1718,1721,1724],{},[334,1719,1720],{},"Most expensive",[334,1722,1723],{},"$3,229.71",[334,1725,1726],{},"€2,516.75",[304,1728,1729,1732,1735],{},[334,1730,1731],{},"Top card",[334,1733,1734],{},"Akali, Rogue Assassin (Signature)",[334,1736,1734],{},[304,1738,1739,1742,1744],{},[334,1740,1741],{},"Trend",[334,1743,523],{},[334,1745,1746],{},"up",[20,1748,1749,1750,1753],{},"The rarity breakdown: ",[25,1751,1752],{},"58 Common, 46 Uncommon, 46 Rare, 28 Epic, 68 Showcase."," The average price is pulled up by the Showcase tier, so don't treat it as the price of a typical card.",[95,1755,1757],{"id":1756},"get-rftsetssetcompletion-value",[39,1758,1759],{},"GET \u002Frft\u002Fsets\u002F:set\u002Fcompletion-value",[20,1761,1762],{},"This is what one copy of every Vendetta card costs at base finish:",[298,1764,1765,1781],{},[301,1766,1767],{},[304,1768,1769,1772,1775,1778],{},[307,1770,1771],{},"Source",[307,1773,1774],{},"Low",[307,1776,1777],{},"Market \u002F Avg",[307,1779,1780],{},"High \u002F Trend",[329,1782,1783,1796],{},[304,1784,1785,1787,1790,1793],{},[334,1786,69],{},[334,1788,1789],{},"$13,385.72",[334,1791,1792],{},"$14,436.01 (market)",[334,1794,1795],{},"$41,697.43 (high)",[304,1797,1798,1800,1803,1806],{},[334,1799,73],{},[334,1801,1802],{},"€8,570.56",[334,1804,1805],{},"€9,669.26 (avg)",[334,1807,1808],{},"€5,496.27 (trend)",[20,1810,1811],{},"The rarity breakdown adds up exactly to the TCGplayer market estimate:",[298,1813,1814,1826],{},[301,1815,1816],{},[304,1817,1818,1821,1823],{},[307,1819,1820],{},"Rarity",[307,1822,321],{},[307,1824,1825],{},"Total cost",[329,1827,1828,1839,1850,1860,1871],{},[304,1829,1830,1833,1836],{},[334,1831,1832],{},"Common",[334,1834,1835],{},"58",[334,1837,1838],{},"$5.31",[304,1840,1841,1844,1847],{},[334,1842,1843],{},"Uncommon",[334,1845,1846],{},"46",[334,1848,1849],{},"$4.71",[304,1851,1852,1855,1857],{},[334,1853,1854],{},"Rare",[334,1856,1846],{},[334,1858,1859],{},"$9.93",[304,1861,1862,1865,1868],{},[334,1863,1864],{},"Epic",[334,1866,1867],{},"28",[334,1869,1870],{},"$80.13",[304,1872,1873,1876,1879],{},[334,1874,1875],{},"Showcase",[334,1877,1878],{},"68",[334,1880,160],{},[20,1882,1883,1884,1887,1888,1891,1892,1895],{},"Commons through Epics together cost ",[25,1885,1886],{},"about $100",". Showcase is ",[25,1889,1890],{},"99.3%"," of the bill. For collectors, that means the playable set is cheap and the master set is a Showcase hunt. The API itself warns that ",[39,1893,1894],{},"\"Cross-currency comparison not available\"",", so don't convert one column to compare it with the other.",[20,1897,1898,1899,1902,1903,1906],{},"The statistics and completion endpoints count ",[25,1900,1901],{},"248 cards",", while the set endpoint lists ",[25,1904,1905],{},"260",". Use the set endpoint for catalog size and the analytics endpoints for the cards that have a price.",[95,1908,1910],{"id":1909},"get-rftanalyticstop-cards",[39,1911,1912],{},"GET \u002Frft\u002Fanalytics\u002Ftop-cards",[20,1914,1915],{},"With no parameters, it ranks by TCGplayer price across all of Riftbound:",[298,1917,1918,1930],{},[301,1919,1920],{},[304,1921,1922,1925,1927],{},[307,1923,1924],{},"Card",[307,1926,309],{},[307,1928,1929],{},"Price",[329,1931,1932,1943],{},[304,1933,1934,1937,1940],{},[334,1935,1936],{},"Teemo, Swift Scout (Metal) (Prize Wall)",[334,1938,1939],{},"Organized Play Promotional Cards",[334,1941,1942],{},"$4,400.00",[304,1944,1945,1948,1951],{},[334,1946,1947],{},"Ahri, Nine-Tailed Fox (Signature)",[334,1949,1950],{},"Origins",[334,1952,1953],{},"$3,624.82",[20,1955,1956,1957,1960],{},"With ",[39,1958,1959],{},"?metric=growth&source=cm",", it ranks by 7-day CardMarket growth:",[298,1962,1963,1976],{},[301,1964,1965],{},[304,1966,1967,1969,1971,1973],{},[307,1968,1924],{},[307,1970,309],{},[307,1972,1929],{},[307,1974,1975],{},"7-day change",[329,1977,1978,1992],{},[304,1979,1980,1983,1986,1989],{},[334,1981,1982],{},"Altar to Unity",[334,1984,1985],{},"Promos",[334,1987,1988],{},"€759.29",[334,1990,1991],{},"+104.7%",[304,1993,1994,1997,1999,2002],{},[334,1995,1996],{},"Teemo - Scout",[334,1998,1985],{},[334,2000,2001],{},"€1,922.11",[334,2003,2004],{},"+102.9%",[20,2006,2007,2008,113,2011,2014,2015,2017,2018,2021,2022,2024],{},"Those growth entries come back with ",[39,2009,2010],{},"rarity: null",[39,2012,2013],{},"card_type: null",", empty ",[39,2016,416],{},", and IDs ",[25,2019,2020],{},"without"," the ",[39,2023,1359],{}," prefix. They're CardMarket-side products, so your code must handle missing metadata.",[95,2026,2028],{"id":2027},"get-rftsetstrending",[39,2029,2030],{},"GET \u002Frft\u002Fsets\u002Ftrending",[20,2032,2033,2034,2037],{},"This endpoint reports set-level movement over ",[39,2035,2036],{},"\"period\": \"7d\"",", from CardMarket:",[298,2039,2040,2058],{},[301,2041,2042],{},[304,2043,2044,2046,2049,2052,2055],{},[307,2045,309],{},[307,2047,2048],{},"Change",[307,2050,2051],{},"Avg now",[307,2053,2054],{},"Avg before",[307,2056,2057],{},"Top movers",[329,2059,2060,2081],{},[304,2061,2062,2069,2072,2075,2078],{},[334,2063,2064,2065,2068],{},"Riftbound Promotional Cards (",[39,2066,2067],{},"PR",")",[334,2070,2071],{},"−7.8%",[334,2073,2074],{},"€41.28",[334,2076,2077],{},"€44.78",[334,2079,2080],{},"Ahri - Alluring −25.9%, Teemo - Scout −21.4%",[304,2082,2083,2089,2092,2095,2098],{},[334,2084,2085,2086,2068],{},"Promos (",[39,2087,2088],{},"promo-rift",[334,2090,2091],{},"+2.3%",[334,2093,2094],{},"€22.35",[334,2096,2097],{},"€21.85",[334,2099,2100],{},"Bird \u002F\u002F Sprite +29.1%, Sprite \u002F\u002F Bird +24.4%",[20,2102,2103,2104,2107,2108,2111,2112,2114],{},"The TCGplayer side returns ",[39,2105,2106],{},"\"status\": \"work_in_progress\""," with the message ",[39,2109,2110],{},"\"TCGPlayer price history not yet available\""," on the first set, and ",[39,2113,209],{}," on the second. Code for both cases.",[20,2116,2117,2118,2121,2122,2124,2125,2128,2129,2131,2132,175],{},"There's also a trap here. In the same week, \"Teemo - Scout\" is ",[25,2119,2120],{},"up 102.9%"," in the growth ranking (set ",[39,2123,2088],{},") and ",[25,2126,2127],{},"down 21.4%"," among trending movers (set ",[39,2130,2067],{},"). These are different products in different sets. An app that keys on card name would merge them into nonsense, which is why you key on ",[39,2133,170],{},[272,2135,2137],{"id":2136},"code-examples-javascript-python","Code Examples: JavaScript & Python",[20,2139,2140],{},"Both examples read the key from an environment variable and only use fields that appear in the responses above. The documentation also includes Node.js and Go snippets. There's no official SDK, so you call the endpoints over plain HTTP.",[95,2142,2144],{"id":2143},"javascript-search-a-card-and-compare-both-marketplaces","JavaScript: search a card and compare both marketplaces",[568,2146,2150],{"className":2147,"code":2148,"language":2149,"meta":573,"style":573},"language-javascript shiki shiki-themes github-light github-dark","const BASE_URL = \"https:\u002F\u002Fapi.pokewallet.io\";\nconst API_KEY = process.env.POKEWALLET_API_KEY;\n\nif (!API_KEY) throw new Error(\"Missing POKEWALLET_API_KEY\");\n\nasync function api(path) {\n  const res = await fetch(`${BASE_URL}${path}`, {\n    headers: { \"X-API-Key\": API_KEY },\n  });\n  if (!res.ok) {\n    throw new Error(`GET ${path} failed: ${res.status} ${await res.text()}`);\n  }\n  return res.json();\n}\n\nasync function comparePrices(query) {\n  const { results } = await api(`\u002Frft\u002Fsearch?q=${encodeURIComponent(query)}`);\n\n  return results.map((card) => {\n    const tcg = card.tcgplayer?.prices ?? [];\n    const cm = card.cardmarket?.prices ?? [];\n\n    \u002F\u002F TCGplayer uses \"Foil\", CardMarket uses \"foil\": normalize before joining\n    const variants = card.card_info.variants.map((variant) => {\n      const t = tcg.find((p) => p.sub_type_name === variant);\n      const c = cm.find((p) => p.variant_type === variant.toLowerCase());\n      return {\n        variant,\n        tcgplayerMarketUsd: t?.market_price ?? null,\n        cardmarketTrendEur: c?.trend ?? null,\n      };\n    });\n\n    return {\n      id: card.id,\n      name: card.card_info.name,\n      set: card.card_info.set_code,\n      might: Number(card.card_info.might), \u002F\u002F sent as a string\n      variants,\n    };\n  });\n}\n\ncomparePrices(\"Sandspinner\")\n  .then((rows) => console.log(JSON.stringify(rows, null, 2)))\n  .catch((err) => console.error(err.message));\n","javascript",[39,2151,2152,2170,2187,2193,2227,2231,2251,2286,2300,2305,2317,2364,2368,2381,2385,2389,2405,2443,2447,2471,2490,2506,2510,2516,2541,2574,2610,2617,2622,2634,2645,2650,2655,2659,2666,2671,2676,2681,2695,2700,2705,2709,2713,2717,2729,2775],{"__ignoreMap":573},[577,2153,2154,2158,2161,2164,2167],{"class":579,"line":580},[577,2155,2157],{"class":2156},"szBVR","const",[577,2159,2160],{"class":587}," BASE_URL",[577,2162,2163],{"class":2156}," =",[577,2165,2166],{"class":591}," \"https:\u002F\u002Fapi.pokewallet.io\"",[577,2168,2169],{"class":616},";\n",[577,2171,2172,2174,2177,2179,2182,2185],{"class":579,"line":598},[577,2173,2157],{"class":2156},[577,2175,2176],{"class":587}," API_KEY",[577,2178,2163],{"class":2156},[577,2180,2181],{"class":616}," process.env.",[577,2183,2184],{"class":587},"POKEWALLET_API_KEY",[577,2186,2169],{"class":616},[577,2188,2189],{"class":579,"line":634},[577,2190,2192],{"emptyLinePlaceholder":2191},true,"\n",[577,2194,2195,2198,2200,2203,2206,2209,2212,2215,2218,2221,2224],{"class":579,"line":643},[577,2196,2197],{"class":2156},"if",[577,2199,1370],{"class":616},[577,2201,2202],{"class":2156},"!",[577,2204,2205],{"class":587},"API_KEY",[577,2207,2208],{"class":616},") ",[577,2210,2211],{"class":2156},"throw",[577,2213,2214],{"class":2156}," new",[577,2216,2217],{"class":583}," Error",[577,2219,2220],{"class":616},"(",[577,2222,2223],{"class":591},"\"Missing POKEWALLET_API_KEY\"",[577,2225,2226],{"class":616},");\n",[577,2228,2229],{"class":579,"line":649},[577,2230,2192],{"emptyLinePlaceholder":2191},[577,2232,2233,2236,2239,2242,2244,2248],{"class":579,"line":662},[577,2234,2235],{"class":2156},"async",[577,2237,2238],{"class":2156}," function",[577,2240,2241],{"class":583}," api",[577,2243,2220],{"class":616},[577,2245,2247],{"class":2246},"s4XuR","path",[577,2249,2250],{"class":616},") {\n",[577,2252,2253,2256,2259,2261,2264,2267,2269,2272,2275,2278,2280,2283],{"class":579,"line":671},[577,2254,2255],{"class":2156},"  const",[577,2257,2258],{"class":587}," res",[577,2260,2163],{"class":2156},[577,2262,2263],{"class":2156}," await",[577,2265,2266],{"class":583}," fetch",[577,2268,2220],{"class":616},[577,2270,2271],{"class":591},"`${",[577,2273,2274],{"class":587},"BASE_URL",[577,2276,2277],{"class":591},"}${",[577,2279,2247],{"class":616},[577,2281,2282],{"class":591},"}`",[577,2284,2285],{"class":616},", {\n",[577,2287,2288,2291,2294,2296,2298],{"class":579,"line":684},[577,2289,2290],{"class":616},"    headers: { ",[577,2292,2293],{"class":591},"\"X-API-Key\"",[577,2295,625],{"class":616},[577,2297,2205],{"class":587},[577,2299,929],{"class":616},[577,2301,2302],{"class":579,"line":697},[577,2303,2304],{"class":616},"  });\n",[577,2306,2307,2310,2312,2314],{"class":579,"line":710},[577,2308,2309],{"class":2156},"  if",[577,2311,1370],{"class":616},[577,2313,2202],{"class":2156},[577,2315,2316],{"class":616},"res.ok) {\n",[577,2318,2319,2322,2324,2326,2328,2331,2333,2336,2339,2341,2344,2347,2350,2352,2354,2357,2360,2362],{"class":579,"line":723},[577,2320,2321],{"class":2156},"    throw",[577,2323,2214],{"class":2156},[577,2325,2217],{"class":583},[577,2327,2220],{"class":616},[577,2329,2330],{"class":591},"`GET ${",[577,2332,2247],{"class":616},[577,2334,2335],{"class":591},"} failed: ${",[577,2337,2338],{"class":616},"res",[577,2340,175],{"class":591},[577,2342,2343],{"class":616},"status",[577,2345,2346],{"class":591},"} ${",[577,2348,2349],{"class":2156},"await",[577,2351,2258],{"class":616},[577,2353,175],{"class":591},[577,2355,2356],{"class":583},"text",[577,2358,2359],{"class":591},"()",[577,2361,2282],{"class":591},[577,2363,2226],{"class":616},[577,2365,2366],{"class":579,"line":736},[577,2367,1335],{"class":616},[577,2369,2370,2373,2376,2378],{"class":579,"line":749},[577,2371,2372],{"class":2156},"  return",[577,2374,2375],{"class":616}," res.",[577,2377,609],{"class":583},[577,2379,2380],{"class":616},"();\n",[577,2382,2383],{"class":579,"line":762},[577,2384,1341],{"class":616},[577,2386,2387],{"class":579,"line":782},[577,2388,2192],{"emptyLinePlaceholder":2191},[577,2390,2391,2393,2395,2398,2400,2403],{"class":579,"line":794},[577,2392,2235],{"class":2156},[577,2394,2238],{"class":2156},[577,2396,2397],{"class":583}," comparePrices",[577,2399,2220],{"class":616},[577,2401,2402],{"class":2246},"query",[577,2404,2250],{"class":616},[577,2406,2407,2409,2412,2415,2418,2421,2423,2425,2427,2430,2433,2435,2437,2439,2441],{"class":579,"line":806},[577,2408,2255],{"class":2156},[577,2410,2411],{"class":616}," { ",[577,2413,2414],{"class":587},"results",[577,2416,2417],{"class":616}," } ",[577,2419,2420],{"class":2156},"=",[577,2422,2263],{"class":2156},[577,2424,2241],{"class":583},[577,2426,2220],{"class":616},[577,2428,2429],{"class":591},"`\u002Frft\u002Fsearch?q=${",[577,2431,2432],{"class":583},"encodeURIComponent",[577,2434,2220],{"class":591},[577,2436,2402],{"class":616},[577,2438,2068],{"class":591},[577,2440,2282],{"class":591},[577,2442,2226],{"class":616},[577,2444,2445],{"class":579,"line":818},[577,2446,2192],{"emptyLinePlaceholder":2191},[577,2448,2449,2451,2454,2457,2460,2463,2465,2468],{"class":579,"line":829},[577,2450,2372],{"class":2156},[577,2452,2453],{"class":616}," results.",[577,2455,2456],{"class":583},"map",[577,2458,2459],{"class":616},"((",[577,2461,2462],{"class":2246},"card",[577,2464,2208],{"class":616},[577,2466,2467],{"class":2156},"=>",[577,2469,2470],{"class":616}," {\n",[577,2472,2473,2476,2479,2481,2484,2487],{"class":579,"line":835},[577,2474,2475],{"class":2156},"    const",[577,2477,2478],{"class":587}," tcg",[577,2480,2163],{"class":2156},[577,2482,2483],{"class":616}," card.tcgplayer?.prices ",[577,2485,2486],{"class":2156},"??",[577,2488,2489],{"class":616}," [];\n",[577,2491,2492,2494,2497,2499,2502,2504],{"class":579,"line":843},[577,2493,2475],{"class":2156},[577,2495,2496],{"class":587}," cm",[577,2498,2163],{"class":2156},[577,2500,2501],{"class":616}," card.cardmarket?.prices ",[577,2503,2486],{"class":2156},[577,2505,2489],{"class":616},[577,2507,2508],{"class":579,"line":851},[577,2509,2192],{"emptyLinePlaceholder":2191},[577,2511,2512],{"class":579,"line":886},[577,2513,2515],{"class":2514},"sJ8bj","    \u002F\u002F TCGplayer uses \"Foil\", CardMarket uses \"foil\": normalize before joining\n",[577,2517,2518,2520,2523,2525,2528,2530,2532,2535,2537,2539],{"class":579,"line":918},[577,2519,2475],{"class":2156},[577,2521,2522],{"class":587}," variants",[577,2524,2163],{"class":2156},[577,2526,2527],{"class":616}," card.card_info.variants.",[577,2529,2456],{"class":583},[577,2531,2459],{"class":616},[577,2533,2534],{"class":2246},"variant",[577,2536,2208],{"class":616},[577,2538,2467],{"class":2156},[577,2540,2470],{"class":616},[577,2542,2543,2546,2549,2551,2554,2557,2559,2561,2563,2565,2568,2571],{"class":579,"line":932},[577,2544,2545],{"class":2156},"      const",[577,2547,2548],{"class":587}," t",[577,2550,2163],{"class":2156},[577,2552,2553],{"class":616}," tcg.",[577,2555,2556],{"class":583},"find",[577,2558,2459],{"class":616},[577,2560,20],{"class":2246},[577,2562,2208],{"class":616},[577,2564,2467],{"class":2156},[577,2566,2567],{"class":616}," p.sub_type_name ",[577,2569,2570],{"class":2156},"===",[577,2572,2573],{"class":616}," variant);\n",[577,2575,2576,2578,2581,2583,2586,2588,2590,2592,2594,2596,2599,2601,2604,2607],{"class":579,"line":963},[577,2577,2545],{"class":2156},[577,2579,2580],{"class":587}," c",[577,2582,2163],{"class":2156},[577,2584,2585],{"class":616}," cm.",[577,2587,2556],{"class":583},[577,2589,2459],{"class":616},[577,2591,20],{"class":2246},[577,2593,2208],{"class":616},[577,2595,2467],{"class":2156},[577,2597,2598],{"class":616}," p.variant_type ",[577,2600,2570],{"class":2156},[577,2602,2603],{"class":616}," variant.",[577,2605,2606],{"class":583},"toLowerCase",[577,2608,2609],{"class":616},"());\n",[577,2611,2612,2615],{"class":579,"line":992},[577,2613,2614],{"class":2156},"      return",[577,2616,2470],{"class":616},[577,2618,2619],{"class":579,"line":1005},[577,2620,2621],{"class":616},"        variant,\n",[577,2623,2624,2627,2629,2632],{"class":579,"line":1011},[577,2625,2626],{"class":616},"        tcgplayerMarketUsd: t?.market_price ",[577,2628,2486],{"class":2156},[577,2630,2631],{"class":587}," null",[577,2633,631],{"class":616},[577,2635,2636,2639,2641,2643],{"class":579,"line":1022},[577,2637,2638],{"class":616},"        cardmarketTrendEur: c?.trend ",[577,2640,2486],{"class":2156},[577,2642,2631],{"class":587},[577,2644,631],{"class":616},[577,2646,2647],{"class":579,"line":1027},[577,2648,2649],{"class":616},"      };\n",[577,2651,2652],{"class":579,"line":1035},[577,2653,2654],{"class":616},"    });\n",[577,2656,2657],{"class":579,"line":1047},[577,2658,2192],{"emptyLinePlaceholder":2191},[577,2660,2661,2664],{"class":579,"line":1054},[577,2662,2663],{"class":2156},"    return",[577,2665,2470],{"class":616},[577,2667,2668],{"class":579,"line":1098},[577,2669,2670],{"class":616},"      id: card.id,\n",[577,2672,2673],{"class":579,"line":1131},[577,2674,2675],{"class":616},"      name: card.card_info.name,\n",[577,2677,2678],{"class":579,"line":1143},[577,2679,2680],{"class":616},"      set: card.card_info.set_code,\n",[577,2682,2683,2686,2689,2692],{"class":579,"line":1182},[577,2684,2685],{"class":616},"      might: ",[577,2687,2688],{"class":583},"Number",[577,2690,2691],{"class":616},"(card.card_info.might), ",[577,2693,2694],{"class":2514},"\u002F\u002F sent as a string\n",[577,2696,2697],{"class":579,"line":1211},[577,2698,2699],{"class":616},"      variants,\n",[577,2701,2702],{"class":579,"line":1222},[577,2703,2704],{"class":616},"    };\n",[577,2706,2707],{"class":579,"line":1227},[577,2708,2304],{"class":616},[577,2710,2711],{"class":579,"line":1238},[577,2712,1341],{"class":616},[577,2714,2715],{"class":579,"line":1244},[577,2716,2192],{"emptyLinePlaceholder":2191},[577,2718,2719,2722,2724,2726],{"class":579,"line":1250},[577,2720,2721],{"class":583},"comparePrices",[577,2723,2220],{"class":616},[577,2725,628],{"class":591},[577,2727,2728],{"class":616},")\n",[577,2730,2731,2734,2737,2739,2742,2744,2746,2749,2752,2754,2757,2759,2762,2765,2767,2769,2772],{"class":579,"line":1256},[577,2732,2733],{"class":616},"  .",[577,2735,2736],{"class":583},"then",[577,2738,2459],{"class":616},[577,2740,2741],{"class":2246},"rows",[577,2743,2208],{"class":616},[577,2745,2467],{"class":2156},[577,2747,2748],{"class":616}," console.",[577,2750,2751],{"class":583},"log",[577,2753,2220],{"class":616},[577,2755,2756],{"class":587},"JSON",[577,2758,175],{"class":616},[577,2760,2761],{"class":583},"stringify",[577,2763,2764],{"class":616},"(rows, ",[577,2766,209],{"class":587},[577,2768,113],{"class":616},[577,2770,2771],{"class":587},"2",[577,2773,2774],{"class":616},")))\n",[577,2776,2777,2779,2782,2784,2787,2789,2791,2793,2796],{"class":579,"line":1264},[577,2778,2733],{"class":616},[577,2780,2781],{"class":583},"catch",[577,2783,2459],{"class":616},[577,2785,2786],{"class":2246},"err",[577,2788,2208],{"class":616},[577,2790,2467],{"class":2156},[577,2792,2748],{"class":616},[577,2794,2795],{"class":583},"error",[577,2797,2798],{"class":616},"(err.message));\n",[20,2800,2801,2802,2805,2806,175],{},"For Baccai Sandspinner this prints the Normal variant at ",[25,2803,2804],{},"$0.05 \u002F €0.05"," and the Foil at ",[25,2807,2808],{},"$0.13 \u002F €0.12",[95,2810,2812],{"id":2811},"python-what-does-a-full-set-cost-ultra","Python: what does a full set cost? (Ultra)",[568,2814,2818],{"className":2815,"code":2816,"language":2817,"meta":573,"style":573},"language-python shiki shiki-themes github-light github-dark","import os\nimport requests\n\nBASE_URL = \"https:\u002F\u002Fapi.pokewallet.io\"\nAPI_KEY = os.environ.get(\"POKEWALLET_API_KEY\")\nif not API_KEY:\n    raise SystemExit(\"Missing POKEWALLET_API_KEY\")\n\ndef api(path: str) -> dict:\n    res = requests.get(f\"{BASE_URL}{path}\", headers={\"X-API-Key\": API_KEY}, timeout=15)\n    res.raise_for_status()\n    return res.json()\n\ndef completion_report(set_id: str) -> None:\n    data = api(f\"\u002Frft\u002Fsets\u002F{set_id}\u002Fcompletion-value\")\n    tcg = data[\"completion_cost\"][\"tcgplayer\"]\n    cm = data[\"completion_cost\"][\"cardmarket\"]\n    breakdown = data[\"breakdown_by_rarity\"]\n    total = sum(r[\"total_cost\"] for r in breakdown.values())\n\n    print(f\"{data['set_info']['name']} — {data['set_info']['total_cards']} cards\")\n    print(f\"TCGplayer market: {tcg['market_estimate']:,.2f} {tcg['currency']}\")\n    print(f\"CardMarket avg:   {cm['avg_estimate']:,.2f} {cm['currency']}\")\n    for rarity, row in breakdown.items():\n        share = row[\"total_cost\"] \u002F total * 100 if total else 0\n        print(f\"  {rarity:\u003C10} {row['count']:>3} cards  {row['total_cost']:>10,.2f}  ({share:.1f}%)\")\n\nif __name__ == \"__main__\":\n    try:\n        completion_report(\"24698\")  # Vendetta\n    except requests.HTTPError as err:\n        print(f\"Request failed: {err}\")\n","python",[39,2819,2820,2825,2830,2834,2839,2844,2849,2854,2858,2863,2868,2873,2878,2882,2887,2892,2897,2902,2907,2912,2916,2921,2926,2931,2936,2941,2946,2950,2955,2960,2965,2970],{"__ignoreMap":573},[577,2821,2822],{"class":579,"line":580},[577,2823,2824],{},"import os\n",[577,2826,2827],{"class":579,"line":598},[577,2828,2829],{},"import requests\n",[577,2831,2832],{"class":579,"line":634},[577,2833,2192],{"emptyLinePlaceholder":2191},[577,2835,2836],{"class":579,"line":643},[577,2837,2838],{},"BASE_URL = \"https:\u002F\u002Fapi.pokewallet.io\"\n",[577,2840,2841],{"class":579,"line":649},[577,2842,2843],{},"API_KEY = os.environ.get(\"POKEWALLET_API_KEY\")\n",[577,2845,2846],{"class":579,"line":662},[577,2847,2848],{},"if not API_KEY:\n",[577,2850,2851],{"class":579,"line":671},[577,2852,2853],{},"    raise SystemExit(\"Missing POKEWALLET_API_KEY\")\n",[577,2855,2856],{"class":579,"line":684},[577,2857,2192],{"emptyLinePlaceholder":2191},[577,2859,2860],{"class":579,"line":697},[577,2861,2862],{},"def api(path: str) -> dict:\n",[577,2864,2865],{"class":579,"line":710},[577,2866,2867],{},"    res = requests.get(f\"{BASE_URL}{path}\", headers={\"X-API-Key\": API_KEY}, timeout=15)\n",[577,2869,2870],{"class":579,"line":723},[577,2871,2872],{},"    res.raise_for_status()\n",[577,2874,2875],{"class":579,"line":736},[577,2876,2877],{},"    return res.json()\n",[577,2879,2880],{"class":579,"line":749},[577,2881,2192],{"emptyLinePlaceholder":2191},[577,2883,2884],{"class":579,"line":762},[577,2885,2886],{},"def completion_report(set_id: str) -> None:\n",[577,2888,2889],{"class":579,"line":782},[577,2890,2891],{},"    data = api(f\"\u002Frft\u002Fsets\u002F{set_id}\u002Fcompletion-value\")\n",[577,2893,2894],{"class":579,"line":794},[577,2895,2896],{},"    tcg = data[\"completion_cost\"][\"tcgplayer\"]\n",[577,2898,2899],{"class":579,"line":806},[577,2900,2901],{},"    cm = data[\"completion_cost\"][\"cardmarket\"]\n",[577,2903,2904],{"class":579,"line":818},[577,2905,2906],{},"    breakdown = data[\"breakdown_by_rarity\"]\n",[577,2908,2909],{"class":579,"line":829},[577,2910,2911],{},"    total = sum(r[\"total_cost\"] for r in breakdown.values())\n",[577,2913,2914],{"class":579,"line":835},[577,2915,2192],{"emptyLinePlaceholder":2191},[577,2917,2918],{"class":579,"line":843},[577,2919,2920],{},"    print(f\"{data['set_info']['name']} — {data['set_info']['total_cards']} cards\")\n",[577,2922,2923],{"class":579,"line":851},[577,2924,2925],{},"    print(f\"TCGplayer market: {tcg['market_estimate']:,.2f} {tcg['currency']}\")\n",[577,2927,2928],{"class":579,"line":886},[577,2929,2930],{},"    print(f\"CardMarket avg:   {cm['avg_estimate']:,.2f} {cm['currency']}\")\n",[577,2932,2933],{"class":579,"line":918},[577,2934,2935],{},"    for rarity, row in breakdown.items():\n",[577,2937,2938],{"class":579,"line":932},[577,2939,2940],{},"        share = row[\"total_cost\"] \u002F total * 100 if total else 0\n",[577,2942,2943],{"class":579,"line":963},[577,2944,2945],{},"        print(f\"  {rarity:\u003C10} {row['count']:>3} cards  {row['total_cost']:>10,.2f}  ({share:.1f}%)\")\n",[577,2947,2948],{"class":579,"line":992},[577,2949,2192],{"emptyLinePlaceholder":2191},[577,2951,2952],{"class":579,"line":1005},[577,2953,2954],{},"if __name__ == \"__main__\":\n",[577,2956,2957],{"class":579,"line":1011},[577,2958,2959],{},"    try:\n",[577,2961,2962],{"class":579,"line":1022},[577,2963,2964],{},"        completion_report(\"24698\")  # Vendetta\n",[577,2966,2967],{"class":579,"line":1027},[577,2968,2969],{},"    except requests.HTTPError as err:\n",[577,2971,2972],{"class":579,"line":1035},[577,2973,2974],{},"        print(f\"Request failed: {err}\")\n",[20,2976,2977,2978,2982,2983,2986,2987,2990],{},"Running this against Vendetta reproduces the table in the previous section, including Showcase at 99.3%. For a full tracker with storage and alerts, the ",[89,2979,2981],{"href":2980},"\u002Fblog\u002Fbuild-one-piece-card-price-tracker-berrywallet-api-tutorial","BerryWallet price tracker tutorial"," walks through the architecture. Swap ",[39,2984,2985],{},"\u002Fop\u002F"," for ",[39,2988,2989],{},"\u002Frft\u002F"," and the pattern carries over.",[272,2992,2994],{"id":2993},"how-it-compares-to-the-alternatives","How It Compares to the Alternatives",[20,2996,2997],{},"Riftbound is young, and the API ecosystem around it is thin. Community deckbuilders and card databases have card text and images, and several of them do it well. If all you need is rules text for a deckbuilder, one of them may be enough. ",[20,2999,3000],{},"Developers usually end up choosing between three approaches:",[100,3002,3003,3009,3015],{},[103,3004,3005,3008],{},[25,3006,3007],{},"A community card database"," for catalog data. This works if you don't need prices, and you depend on how long someone's side project stays maintained.",[103,3010,3011,3014],{},[25,3012,3013],{},"Scraping marketplace pages"," for prices. This is brittle, often against terms of service, and breaks the next time a page changes. You'd also be doing it twice, once for TCGplayer and once for CardMarket.",[103,3016,3017,3020],{},[25,3018,3019],{},"A priced API",", which is where PokéWallet fits.",[20,3022,3023],{},"Here's what we offer and what we don't. You get both marketplaces in one response, normalized per variant, with set-level analytics ready-made, and the catalog is free. You don't get price history for Riftbound, eBay sold listings, graded prices, or intraday updates. If your product needs any of those, we're not the right tool today.",[20,3025,3026,3027,3030,3031,175],{},"Our real advantage isn't Riftbound on its own. It's that the same key reads ",[25,3028,3029],{},"12 games",": Pokémon, One Piece, Magic: The Gathering, Yu-Gi-Oh!, Lorcana, Flesh and Blood, Dragon Ball Super, Digimon, Star Wars Unlimited, Cardfight!! Vanguard, Riftbound and Cyberpunk. For Magic or Yu-Gi-Oh! alone, mature single-game sources like Scryfall and YGOPRODeck are strong, and many developers use them for card data. If your app or shop handles several games, one schema and one bill beat running five integrations. For how multi-source apps are usually structured, see our ",[89,3032,3034],{"href":3033},"\u002Fblog\u002Fpokemon-tcg-api-power-modern-collection-apps-architecture","architecture guide for TCG collection apps",[228,3036],{},[272,3038,3040],{"id":3039},"frequently-asked-questions","Frequently Asked Questions",[95,3042,3044],{"id":3043},"is-there-a-riftbound-api","Is there a Riftbound API?",[20,3046,3047,3048,3050,3051,175],{},"Yes. PokéWallet serves Riftbound at ",[39,3049,285],{}," with sets, cards, search and images, plus TCGplayer and CardMarket prices. It covered 15 sets as of October 13, 2026, including promos and sealed products for upcoming sets. Full reference: ",[89,3052,1565],{"href":1564},[95,3054,3056],{"id":3055},"is-the-riftbound-api-free","Is the Riftbound API free?",[20,3058,3059],{},"The catalog is free: sets, cards, search and images, on the free tier with 100 requests\u002Fhour and 1,000\u002Fday and no credit card. Bulk prices, set statistics, completion value, trending sets and top cards need Ultra (€29\u002Fmonth) or the 7-day trial.",[95,3061,3063],{"id":3062},"does-the-pro-plan-include-riftbound-prices","Does the Pro plan include Riftbound prices?",[20,3065,3066],{},"No. Pro (€20\u002Fmonth) unlocks the paid endpoints for Pokémon and One Piece only. Riftbound and the other nine games need Ultra, which also includes everything in Pro.",[95,3068,3070],{"id":3069},"how-do-i-get-riftbound-card-prices-from-tcgplayer-and-cardmarket","How do I get Riftbound card prices from TCGplayer and CardMarket?",[20,3072,3073,3074,3076,3077,3079,3080,3083,3084,3087,3088,3091,3092,175],{},"Call ",[39,3075,135],{}," with your set's ",[39,3078,199],{}," (for example ",[39,3081,3082],{},"24698"," for Vendetta) and an Ultra or trial key. Each row has a ",[39,3085,3086],{},"tcgplayer"," block in USD and a ",[39,3089,3090],{},"cardmarket"," block in EUR for one variant (Normal or Foil). The plan details are on the ",[89,3093,3095],{"href":3094},"\u002Fpricing","pricing page",[95,3097,3099],{"id":3098},"how-often-are-riftbound-prices-updated","How often are Riftbound prices updated?",[20,3101,3102,3103,3105],{},"Once a day, for both TCGplayer and CardMarket. The ",[39,3104,145],{}," field shows when a price last changed, not when it was last checked, so a stable common can carry a timestamp several weeks old.",[95,3107,3109],{"id":3108},"does-the-api-have-riftbound-price-history","Does the API have Riftbound price history?",[20,3111,3112,3113,113,3115,113,3117,3119,3120,70,3123,175],{},"No. Price history is Pokémon-only. For Riftbound you can use CardMarket's rolling averages (",[39,3114,1395],{},[39,3116,1398],{},[39,3118,1401],{},") on each card and the 7-day changes from ",[39,3121,3122],{},"\u002Frft\u002Fsets\u002Ftrending",[39,3124,3125],{},"\u002Frft\u002Fanalytics\u002Ftop-cards?metric=growth",[95,3127,3129],{"id":3128},"what-is-the-most-expensive-riftbound-card-right-now","What is the most expensive Riftbound card right now?",[20,3131,3132],{},"In our October 13 data, the top TCGplayer card was Teemo, Swift Scout (Metal) (Prize Wall) at $4,400, followed by Ahri, Nine-Tailed Fox (Signature) at $3,624.82. Within Vendetta, Akali, Rogue Assassin (Signature) leads at $3,229.71 on TCGplayer and €2,516.75 on CardMarket.",[95,3134,3136],{"id":3135},"does-it-include-ebay-or-psa-graded-prices","Does it include eBay or PSA graded prices?",[20,3138,3139],{},"No. The only sources are TCGplayer and CardMarket, and there's no grading data from PSA, CGC or anyone else.",[228,3141],{},[15,3143,18,3145],{"style":3144},"background: rgba(107, 76, 154, 0.12); border-left: 4px solid #6B4C9A; padding: 1rem 1.5rem; margin: 1.5rem 0; border-radius: 4px;",[20,3146,23,3148,3151],{"style":3147},"margin: 0; font-size: 0.85rem; color: #e0e0e0;",[25,3149,3150],{},"💬 Price disclaimer:"," All prices and statistics in this article come from live PokéWallet API responses captured on October 13, 2026, and are sourced from TCGplayer (USD) and CardMarket (EUR). Individual price timestamps range from September 20 to September 30, 2026. Card prices change daily, and this is not financial advice.\n  ",[228,3153],{},[272,3155,3157],{"id":3156},"start-building-with-the-pokéwallet-api","Start Building with the PokéWallet API",[20,3159,3160],{},"Everything in this guide (the Vendetta completion cost, the Teemo name collision, the side-by-side marketplace prices) came from a few calls with one key. Start on the free catalog, and turn on the 7-day trial when you're ready to work with prices.",[100,3162,3163,3169,3175,3181,3188],{},[103,3164,222,3165,3168],{},[25,3166,3167],{},"One API key for 12 trading card games"," — Pokémon, One Piece, Magic, Yu-Gi-Oh!, Lorcana, Riftbound and more",[103,3170,129,3171,3174],{},[25,3172,3173],{},"TCGplayer (USD) and CardMarket (EUR) prices",", refreshed daily",[103,3176,105,3177,3180],{},[25,3178,3179],{},"Catalog endpoints free on every plan"," — sets, cards, search and images",[103,3182,3183,3184,3187],{},"⚡ ",[25,3185,3186],{},"Ultra unlocks prices and analytics for every game"," — try it free for 7 days from your dashboard",[103,3189,3190,3191,3194,3195],{},"💬 ",[25,3192,3193],{},"Developer support"," in our ",[89,3196,3200],{"href":3197,"rel":3198},"https:\u002F\u002Fdiscord.gg\u002FznDxEjmDVP",[3199],"nofollow","Discord",[20,3202,3203],{},[25,3204,3205],{},"Get Started:",[100,3207,3208,3217,3224],{},[103,3209,3210,3211,3216],{},"🚀 ",[25,3212,3213],{},[89,3214,3215],{"href":561},"Get Your Free API Key"," — no credit card required",[103,3218,3219,3220],{},"📖 Read the ",[89,3221,3223],{"href":3222},"\u002Fapi-docs","API documentation",[103,3225,3226,3227],{},"💳 Compare plans on the ",[89,3228,3095],{"href":3094},[228,3230],{},[20,3232,3233],{},[3234,3235,3236],"em",{},"This article is for informational purposes only and is not financial advice. Details reflect information available at the time of writing; release dates, pricing and set contents are subject to change. Card prices are volatile — always verify current market pricing before buying or selling.",[3238,3239,3240],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":573,"searchDepth":598,"depth":598,"links":3242},[3243,3244,3245,3246,3247,3255,3259,3260,3270],{"id":97,"depth":634,"text":98},{"id":274,"depth":598,"text":275},{"id":554,"depth":598,"text":555},{"id":1424,"depth":598,"text":1425},{"id":1612,"depth":598,"text":1613,"children":3248},[3249,3251,3252,3253,3254],{"id":1632,"depth":634,"text":3250},"GET \u002Frft\u002Fprices\u002F:set: bulk set prices",{"id":1672,"depth":634,"text":1675},{"id":1756,"depth":634,"text":1759},{"id":1909,"depth":634,"text":1912},{"id":2027,"depth":634,"text":2030},{"id":2136,"depth":598,"text":2137,"children":3256},[3257,3258],{"id":2143,"depth":634,"text":2144},{"id":2811,"depth":634,"text":2812},{"id":2993,"depth":598,"text":2994},{"id":3039,"depth":598,"text":3040,"children":3261},[3262,3263,3264,3265,3266,3267,3268,3269],{"id":3043,"depth":634,"text":3044},{"id":3055,"depth":634,"text":3056},{"id":3062,"depth":634,"text":3063},{"id":3069,"depth":634,"text":3070},{"id":3098,"depth":634,"text":3099},{"id":3108,"depth":634,"text":3109},{"id":3128,"depth":634,"text":3129},{"id":3135,"depth":634,"text":3136},{"id":3156,"depth":598,"text":3157},"Developer Guide","2026-10-20","Riftbound API guide: free card database endpoints, TCGplayer and CardMarket prices with Ultra, and real JSON responses with JavaScript and Python examples.","md","\u002Fblog\u002Friftbound\u002F2026\u002F10\u002Friftbound-api-card-prices-tcgplayer-cardmarket.webp","Akali in her dark mask with twin kamas crouched beside Ahri with nine glowing fox tails and Teemo in his green scout hat, on a neon-lit holographic battlefield at dusk as Riftbound cards and glowing price charts swirl through the air around them.",{},"\u002Fblog\u002Friftbound\u002F2026\u002F10\u002Friftbound-api-card-prices-tcgplayer-cardmarket","12 min read",{"title":5,"description":3273},"blog\u002Friftbound\u002F2026\u002F10\u002Friftbound-api-card-prices-tcgplayer-cardmarket",[3283,3284,3285,3286,3287],"riftbound api","riftbound card prices api","riftbound tcg api","riftbound card database api","league of legends tcg api","EVgjYMjCWeM4aCqDtboyILKkqp8rMPO81fXWJ7maYtU",1792476987708]