[{"data":1,"prerenderedAt":1516},["ShallowReactive",2],{"blog-one-piece-card-game-api-guide-real-time-prices":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"category":11,"author":12,"readTime":13,"tags":14,"image":23,"imageAlt":24,"imageCredit":12,"body":25,"_type":1510,"_id":1511,"_source":1512,"_file":1513,"_stem":1514,"_extension":1515},"/blog/one-piece/2026/05/one-piece-card-game-api-guide-real-time-prices","05",false,"","One Piece Card Game API: How to Fetch Real-Time OPCG Card Prices","A complete developer guide to BerryWallet — the One Piece Card Game API by PokéWallet. Fetch real-time TCGPlayer and CardMarket prices for all OP sets. Free tier available.","2026-05-15","Developer Guide","PokéWallet Team","8 min read",[15,16,17,18,19,20,21,22],"one piece card game api","opcg api","one piece tcg api","one piece card price api","op card api","one piece card game developer","berrywallet","berrywallet api","/blog/one-piece/2026/05/one-piece-card-game-api-guide.webp","Code editor showing a REST API call fetching One Piece card prices, with OPCG card art in the background.",{"type":26,"children":27,"toc":1477},"root",[28,36,65,88,92,99,133,145,150,153,159,166,179,191,197,202,215,221,234,242,245,251,257,278,287,295,306,327,330,336,341,350,401,426,433,442,486,489,495,508,517,544,547,553,562,582,589,598,616,619,625,638,647,667,674,683,697,700,706,711,722,725,731,772,798,879,906,909,915,920,1043,1048,1056,1059,1065,1071,1076,1082,1182,1188,1221,1227,1256,1262,1281,1287,1314,1320,1351,1357,1369,1375,1402,1408,1421,1424,1430,1462],{"type":29,"tag":30,"props":31,"children":33},"element","h1",{"id":32},"one-piece-card-game-api-how-to-fetch-real-time-opcg-card-prices",[34],{"type":35,"value":8},"text",{"type":29,"tag":37,"props":38,"children":40},"div",{"style":39},"background: rgba(204, 0, 0, 0.1); border-left: 4px solid #CC0000; padding: 1rem 1.5rem; margin: 1.5rem 0; border-radius: 4px;",[41,43],{"type":35,"value":42},"\n  ",{"type":29,"tag":44,"props":45,"children":47},"p",{"style":46},"margin: 0; font-size: 0.9rem; color: #e0e0e0;",[48,50,56,58,63],{"type":35,"value":49},"\n    ",{"type":29,"tag":51,"props":52,"children":53},"strong",{},[54],{"type":35,"value":55},"⚓ DEVELOPER GUIDE:",{"type":35,"value":57}," ",{"type":29,"tag":51,"props":59,"children":60},{},[61],{"type":35,"value":62},"BerryWallet",{"type":35,"value":64}," is the One Piece Card Game API by PokéWallet — named after the Berry, the currency of the One Piece world. This guide walks you through fetching real-time card prices, browsing sets, and building price trackers — all with the same API key you already use for Pokémon TCG.\n  ",{"type":29,"tag":44,"props":66,"children":67},{},[68,70,75,77,86],{"type":35,"value":69},"If you're building a ",{"type":29,"tag":51,"props":71,"children":72},{},[73],{"type":35,"value":74},"One Piece Card Game price tracker",{"type":35,"value":76},", a collection app, or any tool that needs real-time OPCG market data, this guide covers everything you need to know about ",{"type":29,"tag":51,"props":78,"children":79},{},[80],{"type":29,"tag":81,"props":82,"children":84},"a",{"href":83},"/berrywallet",[85],{"type":35,"value":62},{"type":35,"value":87},", the One Piece Card Game API.",{"type":29,"tag":89,"props":90,"children":91},"hr",{},[],{"type":29,"tag":93,"props":94,"children":96},"h2",{"id":95},"why-build-with-berrywallet",[97],{"type":35,"value":98},"Why Build with BerryWallet?",{"type":29,"tag":44,"props":100,"children":101},{},[102,104,110,112,117,119,124,126,131],{"type":35,"value":103},"The OPCG market has grown dramatically since its international release in 2022. Sets like ",{"type":29,"tag":105,"props":106,"children":107},"em",{},[108],{"type":35,"value":109},"Romance Dawn",{"type":35,"value":111}," (OP01), ",{"type":29,"tag":105,"props":113,"children":114},{},[115],{"type":35,"value":116},"Paramount War",{"type":35,"value":118}," (OP02), and the newer releases generate significant secondary market activity on both ",{"type":29,"tag":51,"props":120,"children":121},{},[122],{"type":35,"value":123},"TCGPlayer",{"type":35,"value":125}," (USD) and ",{"type":29,"tag":51,"props":127,"children":128},{},[129],{"type":35,"value":130},"CardMarket",{"type":35,"value":132}," (EUR).",{"type":29,"tag":44,"props":134,"children":135},{},[136,138,143],{"type":35,"value":137},"Most developers trying to build OPCG tools run into the same problem: ",{"type":29,"tag":51,"props":139,"children":140},{},[141],{"type":35,"value":142},"there's no reliable, free API for One Piece card prices",{"type":35,"value":144},". Scrapers break with every site update, and manual data collection doesn't scale.",{"type":29,"tag":44,"props":146,"children":147},{},[148],{"type":35,"value":149},"That's what we built BerryWallet for. Just as PokéWallet tracks the value of Pokémon collections, BerryWallet does the same for the One Piece Card Game — with the same infrastructure, the same API key, and dual-market coverage from day one.",{"type":29,"tag":89,"props":151,"children":152},{},[],{"type":29,"tag":93,"props":154,"children":156},{"id":155},"getting-started",[157],{"type":35,"value":158},"Getting Started",{"type":29,"tag":160,"props":161,"children":163},"h3",{"id":162},"_1-get-your-api-key",[164],{"type":35,"value":165},"1. Get Your API Key",{"type":29,"tag":44,"props":167,"children":168},{},[169,171,177],{"type":35,"value":170},"Sign up at ",{"type":29,"tag":81,"props":172,"children":174},{"href":173},"/dashboard",[175],{"type":35,"value":176},"pokewallet.io/dashboard",{"type":35,"value":178}," to get a free API key. No credit card required.",{"type":29,"tag":44,"props":180,"children":181},{},[182,184,189],{"type":35,"value":183},"BerryWallet shares the same API key as PokéWallet — ",{"type":29,"tag":51,"props":185,"children":186},{},[187],{"type":35,"value":188},"one key for both Pokémon TCG and One Piece endpoints",{"type":35,"value":190},". No separate signup needed.",{"type":29,"tag":160,"props":192,"children":194},{"id":193},"_2-authentication",[195],{"type":35,"value":196},"2. Authentication",{"type":29,"tag":44,"props":198,"children":199},{},[200],{"type":35,"value":201},"Pass your key as an HTTP header on every request. Both methods work:",{"type":29,"tag":203,"props":204,"children":209},"pre",{"code":205,"language":206,"meta":7,"className":207},"# Recommended\nX-API-Key: your_api_key_here\n\n# Also accepted\nAuthorization: Bearer your_api_key_here\n","bash",[208],"language-bash",[210],{"type":29,"tag":211,"props":212,"children":213},"code",{"__ignoreMap":7},[214],{"type":35,"value":205},{"type":29,"tag":160,"props":216,"children":218},{"id":217},"_3-base-url",[219],{"type":35,"value":220},"3. Base URL",{"type":29,"tag":44,"props":222,"children":223},{},[224,226,232],{"type":35,"value":225},"All One Piece endpoints live under the ",{"type":29,"tag":211,"props":227,"children":229},{"className":228},[],[230],{"type":35,"value":231},"/op/",{"type":35,"value":233}," prefix:",{"type":29,"tag":203,"props":235,"children":237},{"code":236},"https://api.pokewallet.io\n",[238],{"type":29,"tag":211,"props":239,"children":240},{"__ignoreMap":7},[241],{"type":35,"value":236},{"type":29,"tag":89,"props":243,"children":244},{},[],{"type":29,"tag":93,"props":246,"children":248},{"id":247},"core-endpoints",[249],{"type":35,"value":250},"Core Endpoints",{"type":29,"tag":160,"props":252,"children":254},{"id":253},"list-all-one-piece-sets",[255],{"type":35,"value":256},"List All One Piece Sets",{"type":29,"tag":44,"props":258,"children":259},{},[260,262,268,270,276],{"type":35,"value":261},"Returns all One Piece sets ordered by release date. You can filter by language (",{"type":29,"tag":211,"props":263,"children":265},{"className":264},[],[266],{"type":35,"value":267},"en",{"type":35,"value":269}," or ",{"type":29,"tag":211,"props":271,"children":273},{"className":272},[],[274],{"type":35,"value":275},"jp",{"type":35,"value":277},").",{"type":29,"tag":203,"props":279,"children":282},{"code":280,"language":206,"meta":7,"className":281},"curl -H \"X-API-Key: your_api_key\" \\\n     \"https://api.pokewallet.io/op/sets?language=en\"\n",[208],[283],{"type":29,"tag":211,"props":284,"children":285},{"__ignoreMap":7},[286],{"type":35,"value":280},{"type":29,"tag":44,"props":288,"children":289},{},[290],{"type":29,"tag":51,"props":291,"children":292},{},[293],{"type":35,"value":294},"Response:",{"type":29,"tag":203,"props":296,"children":301},{"code":297,"language":298,"meta":7,"className":299},"{\n  \"success\": true,\n  \"data\": [\n    {\n      \"name\": \"Romance Dawn\",\n      \"set_code\": \"OP01\",\n      \"set_id\": \"3188\",\n      \"language\": \"en\",\n      \"release_date\": \"2022-12-02\"\n    },\n    {\n      \"name\": \"Paramount War\",\n      \"set_code\": \"OP02\",\n      \"set_id\": \"3189\",\n      \"language\": \"en\",\n      \"release_date\": \"2023-03-10\"\n    }\n  ],\n  \"total\": 100\n}\n","json",[300],"language-json",[302],{"type":29,"tag":211,"props":303,"children":304},{"__ignoreMap":7},[305],{"type":35,"value":297},{"type":29,"tag":44,"props":307,"children":308},{},[309,311,317,319,325],{"type":35,"value":310},"Note: ",{"type":29,"tag":211,"props":312,"children":314},{"className":313},[],[315],{"type":35,"value":316},"set_id",{"type":35,"value":318}," maps to the internal ",{"type":29,"tag":211,"props":320,"children":322},{"className":321},[],[323],{"type":35,"value":324},"group_id",{"type":35,"value":326},". Positive values are TCG sets (available on both TCGPlayer and CardMarket); negative values are CM-only sets with no TCGPlayer data. Set images are not available for One Piece sets.",{"type":29,"tag":89,"props":328,"children":329},{},[],{"type":29,"tag":160,"props":331,"children":333},{"id":332},"get-all-cards-and-prices-for-a-set",[334],{"type":35,"value":335},"Get All Cards and Prices for a Set",{"type":29,"tag":44,"props":337,"children":338},{},[339],{"type":35,"value":340},"This is the most useful endpoint for collection trackers. It returns a paginated card list for a specific set with both TCGPlayer and CardMarket prices:",{"type":29,"tag":203,"props":342,"children":345},{"code":343,"language":206,"meta":7,"className":344},"curl -H \"X-API-Key: your_api_key\" \\\n     \"https://api.pokewallet.io/op/sets/OP01?page=1&limit=50\"\n",[208],[346],{"type":29,"tag":211,"props":347,"children":348},{"__ignoreMap":7},[349],{"type":35,"value":343},{"type":29,"tag":44,"props":351,"children":352},{},[353,355,361,363,369,371,376,378,384,386,392,394,400],{"type":35,"value":354},"The ",{"type":29,"tag":211,"props":356,"children":358},{"className":357},[],[359],{"type":35,"value":360},":setCode",{"type":35,"value":362}," path parameter accepts ",{"type":29,"tag":211,"props":364,"children":366},{"className":365},[],[367],{"type":35,"value":368},"OP01",{"type":35,"value":370},", a numeric ",{"type":29,"tag":211,"props":372,"children":374},{"className":373},[],[375],{"type":35,"value":324},{"type":35,"value":377}," like ",{"type":29,"tag":211,"props":379,"children":381},{"className":380},[],[382],{"type":35,"value":383},"3188",{"type":35,"value":385},", or a fuzzy variant like ",{"type":29,"tag":211,"props":387,"children":389},{"className":388},[],[390],{"type":35,"value":391},"EB01",{"type":35,"value":393}," (automatically tries ",{"type":29,"tag":211,"props":395,"children":397},{"className":396},[],[398],{"type":35,"value":399},"EB-01",{"type":35,"value":277},{"type":29,"tag":44,"props":402,"children":403},{},[404,409,410,416,418,424],{"type":29,"tag":51,"props":405,"children":406},{},[407],{"type":35,"value":408},"Query parameters:",{"type":35,"value":57},{"type":29,"tag":211,"props":411,"children":413},{"className":412},[],[414],{"type":35,"value":415},"page",{"type":35,"value":417}," (default: 1) and ",{"type":29,"tag":211,"props":419,"children":421},{"className":420},[],[422],{"type":35,"value":423},"limit",{"type":35,"value":425}," (default: 50, max: 200).",{"type":29,"tag":44,"props":427,"children":428},{},[429],{"type":29,"tag":51,"props":430,"children":431},{},[432],{"type":35,"value":294},{"type":29,"tag":203,"props":434,"children":437},{"code":435,"language":298,"meta":7,"className":436},"{\n  \"success\": true,\n  \"set\": {\n    \"set_code\": \"OP01\",\n    \"set_id\": \"3188\",\n    \"name\": \"Romance Dawn\",\n    \"language\": \"en\",\n    \"release_date\": \"2022-12-02\"\n  },\n  \"total\": 50,\n  \"page\": 1,\n  \"limit\": 50,\n  \"data\": [\n    {\n      \"id\": \"op_3f8a12c4e9b7d02f...\",\n      \"card_number\": \"OP01-001\",\n      \"name\": \"Roronoa Zoro\",\n      \"clean_name\": \"Roronoa Zoro\",\n      \"sub_type_name\": \"Normal\",\n      \"rarity\": \"L\",\n      \"card_type\": \"Leader\",\n      \"ext_color\": \"Red\",\n      \"ext_cost\": null,\n      \"ext_power\": \"5000\",\n      \"ext_life\": \"5\",\n      \"ext_subtypes\": \"Straw Hat Crew;Supernovas\",\n      \"ext_attribute\": \"Slash\",\n      \"ext_counterplus\": null,\n      \"ext_description\": \"[DON!! x1] ...\",\n      \"tcgplayer\": {\n        \"url\": \"https://www.tcgplayer.com/product/...\",\n        \"prices\": {\n          \"low_price\": 1.20,\n          \"market_price\": 1.76,\n          \"high_price\": 3.50\n        }\n      },\n      \"cardmarket\": {\n        \"product_name\": \"Roronoa Zoro (OP01-001)\",\n        \"product_url\": \"https://www.cardmarket.com/...\",\n        \"prices\": { \"avg\": 1.64, \"low\": 0.50, \"trend\": 1.70 }\n      }\n    }\n  ]\n}\n",[300],[438],{"type":29,"tag":211,"props":439,"children":440},{"__ignoreMap":7},[441],{"type":35,"value":435},{"type":29,"tag":44,"props":443,"children":444},{},[445,447,452,454,460,462,468,470,476,478,484],{"type":35,"value":446},"Cards from CM-only sets (negative ",{"type":29,"tag":211,"props":448,"children":450},{"className":449},[],[451],{"type":35,"value":324},{"type":35,"value":453},") have ",{"type":29,"tag":211,"props":455,"children":457},{"className":456},[],[458],{"type":35,"value":459},"tcgplayer: null",{"type":35,"value":461}," and all ",{"type":29,"tag":211,"props":463,"children":465},{"className":464},[],[466],{"type":35,"value":467},"ext_*",{"type":35,"value":469}," fields are ",{"type":29,"tag":211,"props":471,"children":473},{"className":472},[],[474],{"type":35,"value":475},"null",{"type":35,"value":477},". The ",{"type":29,"tag":211,"props":479,"children":481},{"className":480},[],[482],{"type":35,"value":483},"total",{"type":35,"value":485}," field is the full card count for the set, not just the current page.",{"type":29,"tag":89,"props":487,"children":488},{},[],{"type":29,"tag":160,"props":490,"children":492},{"id":491},"get-a-single-card-by-id",[493],{"type":35,"value":494},"Get a Single Card by ID",{"type":29,"tag":44,"props":496,"children":497},{},[498,500,506],{"type":35,"value":499},"Once you have a card ",{"type":29,"tag":211,"props":501,"children":503},{"className":502},[],[504],{"type":35,"value":505},"id",{"type":35,"value":507}," from a set or search response, fetch its full details directly:",{"type":29,"tag":203,"props":509,"children":512},{"code":510,"language":206,"meta":7,"className":511},"curl -H \"X-API-Key: your_api_key\" \\\n     \"https://api.pokewallet.io/op/cards/op_3f8a12c4e9b7d02f...\"\n",[208],[513],{"type":29,"tag":211,"props":514,"children":515},{"__ignoreMap":7},[516],{"type":35,"value":510},{"type":29,"tag":44,"props":518,"children":519},{},[520,521,526,528,534,536,542],{"type":35,"value":354},{"type":29,"tag":211,"props":522,"children":524},{"className":523},[],[525],{"type":35,"value":505},{"type":35,"value":527}," must include the ",{"type":29,"tag":211,"props":529,"children":531},{"className":530},[],[532],{"type":35,"value":533},"op_",{"type":35,"value":535}," prefix. The response structure matches the card objects returned by ",{"type":29,"tag":211,"props":537,"children":539},{"className":538},[],[540],{"type":35,"value":541},"/op/sets/:setCode",{"type":35,"value":543},".",{"type":29,"tag":89,"props":545,"children":546},{},[],{"type":29,"tag":160,"props":548,"children":550},{"id":549},"search-cards-by-name",[551],{"type":35,"value":552},"Search Cards by Name",{"type":29,"tag":203,"props":554,"children":557},{"code":555,"language":206,"meta":7,"className":556},"curl -H \"X-API-Key: your_api_key\" \\\n     \"https://api.pokewallet.io/op/search?q=zoro&page=1&limit=20\"\n",[208],[558],{"type":29,"tag":211,"props":559,"children":560},{"__ignoreMap":7},[561],{"type":35,"value":555},{"type":29,"tag":44,"props":563,"children":564},{},[565,567,573,575,580],{"type":35,"value":566},"Full-text search on card name and card number (",{"type":29,"tag":211,"props":568,"children":570},{"className":569},[],[571],{"type":35,"value":572},"ILIKE %q%",{"type":35,"value":574},"). The ",{"type":29,"tag":211,"props":576,"children":578},{"className":577},[],[579],{"type":35,"value":423},{"type":35,"value":581}," parameter defaults to 20, max 100.",{"type":29,"tag":44,"props":583,"children":584},{},[585],{"type":29,"tag":51,"props":586,"children":587},{},[588],{"type":35,"value":294},{"type":29,"tag":203,"props":590,"children":593},{"code":591,"language":298,"meta":7,"className":592},"{\n  \"success\": true,\n  \"data\": [\n    {\n      \"id\": \"op_3f8a12c4e9b7d02f...\",\n      \"card_number\": \"OP01-001\",\n      \"name\": \"Roronoa Zoro\",\n      \"sub_type_name\": \"Normal\",\n      \"rarity\": \"L\",\n      \"card_type\": \"Leader\",\n      \"tcgplayer\": {\n        \"url\": \"https://www.tcgplayer.com/product/...\",\n        \"prices\": { \"low_price\": 1.20, \"market_price\": 1.76, \"high_price\": 3.50 }\n      },\n      \"cardmarket\": {\n        \"product_name\": \"Roronoa Zoro (OP01-001)\",\n        \"product_url\": \"https://www.cardmarket.com/...\",\n        \"prices\": { \"avg\": 1.64, \"low\": 0.50, \"trend\": 1.70 }\n      }\n    }\n  ],\n  \"total\": 12,\n  \"page\": 1,\n  \"limit\": 20\n}\n",[300],[594],{"type":29,"tag":211,"props":595,"children":596},{"__ignoreMap":7},[597],{"type":35,"value":591},{"type":29,"tag":44,"props":599,"children":600},{},[601,606,608,614],{"type":29,"tag":51,"props":602,"children":603},{},[604],{"type":35,"value":605},"Known limitations:",{"type":35,"value":607}," queries containing apostrophes (e.g. ",{"type":29,"tag":211,"props":609,"children":611},{"className":610},[],[612],{"type":35,"value":613},"d'artagnan",{"type":35,"value":615},") return 0 results. CM-only cards are not indexed — only TCG cards appear in search results.",{"type":29,"tag":89,"props":617,"children":618},{},[],{"type":29,"tag":160,"props":620,"children":622},{"id":621},"bulk-prices-for-a-set-pro",[623],{"type":35,"value":624},"Bulk Prices for a Set (Pro)",{"type":29,"tag":44,"props":626,"children":627},{},[628,630,636],{"type":35,"value":629},"If you only need raw prices for an entire set, the ",{"type":29,"tag":211,"props":631,"children":633},{"className":632},[],[634],{"type":35,"value":635},"/op/prices",{"type":35,"value":637}," endpoint returns all variants (Normal and Foil as separate rows) without pagination:",{"type":29,"tag":203,"props":639,"children":642},{"code":640,"language":206,"meta":7,"className":641},"curl -H \"X-API-Key: your_api_key\" \\\n     \"https://api.pokewallet.io/op/prices?set_code=OP01\"\n",[208],[643],{"type":29,"tag":211,"props":644,"children":645},{"__ignoreMap":7},[646],{"type":35,"value":640},{"type":29,"tag":44,"props":648,"children":649},{},[650,652,658,659,665],{"type":35,"value":651},"You can use ",{"type":29,"tag":211,"props":653,"children":655},{"className":654},[],[656],{"type":35,"value":657},"set_code=OP01",{"type":35,"value":269},{"type":29,"tag":211,"props":660,"children":662},{"className":661},[],[663],{"type":35,"value":664},"group_id=3188",{"type":35,"value":666}," (at least one is required).",{"type":29,"tag":44,"props":668,"children":669},{},[670],{"type":29,"tag":51,"props":671,"children":672},{},[673],{"type":35,"value":294},{"type":29,"tag":203,"props":675,"children":678},{"code":676,"language":298,"meta":7,"className":677},"{\n  \"success\": true,\n  \"group_id\": \"3188\",\n  \"total\": 159,\n  \"data\": [\n    {\n      \"card_number\": \"OP01-001\",\n      \"name\": \"Roronoa Zoro (001)\",\n      \"variant\": \"Normal\",\n      \"tcgplayer\": {\n        \"low_price\": 1.20,\n        \"market_price\": 1.76,\n        \"high_price\": 3.50,\n        \"mid_price\": 2.10,\n        \"direct_low_price\": 1.50,\n        \"updated_at\": \"2026-05-14T00:00:00Z\"\n      },\n      \"cardmarket\": {\n        \"avg\": 1.64,\n        \"low\": 0.50,\n        \"trend\": 1.70,\n        \"avg1\": 1.60,\n        \"avg7\": 1.65,\n        \"avg30\": 1.70,\n        \"updated_at\": \"2026-05-14T00:00:00Z\"\n      }\n    },\n    {\n      \"card_number\": \"OP01-001\",\n      \"name\": \"Roronoa Zoro (001) (Foil)\",\n      \"variant\": \"Foil\",\n      \"tcgplayer\": { \"low_price\": 3.50, \"market_price\": 4.20, \"high_price\": 6.00 },\n      \"cardmarket\": { \"avg\": 3.80, \"low\": 2.50, \"trend\": 3.90 }\n    }\n  ]\n}\n",[300],[679],{"type":29,"tag":211,"props":680,"children":681},{"__ignoreMap":7},[682],{"type":35,"value":676},{"type":29,"tag":684,"props":685,"children":686},"blockquote",{},[687],{"type":29,"tag":44,"props":688,"children":689},{},[690,695],{"type":29,"tag":51,"props":691,"children":692},{},[693],{"type":35,"value":694},"Pro feature",{"type":35,"value":696}," — a 7-day free trial is available from your dashboard. Ideal for building a collection value calculator: fetch once per day and cache.",{"type":29,"tag":89,"props":698,"children":699},{},[],{"type":29,"tag":93,"props":701,"children":703},{"id":702},"building-a-price-tracker-in-javascript",[704],{"type":35,"value":705},"Building a Price Tracker in JavaScript",{"type":29,"tag":44,"props":707,"children":708},{},[709],{"type":35,"value":710},"Here's a minimal example that fetches the top 10 most expensive cards from any OPCG set by TCGPlayer market price:",{"type":29,"tag":203,"props":712,"children":717},{"code":713,"language":714,"meta":7,"className":715},"async function getTopOPCards(setCode, apiKey) {\n  const res = await fetch(\n    `https://api.pokewallet.io/op/sets/${setCode}?limit=200`,\n    { headers: { 'X-API-Key': apiKey } }\n  );\n  const data = await res.json();\n\n  return data.data\n    .sort((a, b) =>\n      (b.tcgplayer?.prices?.market_price ?? 0) -\n      (a.tcgplayer?.prices?.market_price ?? 0)\n    )\n    .slice(0, 10);\n}\n\nconst top10 = await getTopOPCards('OP01', 'your_api_key');\nconsole.log(top10);\n","javascript",[716],"language-javascript",[718],{"type":29,"tag":211,"props":719,"children":720},{"__ignoreMap":7},[721],{"type":35,"value":713},{"type":29,"tag":89,"props":723,"children":724},{},[],{"type":29,"tag":93,"props":726,"children":728},{"id":727},"normal-vs-foil-how-opcg-pricing-works",[729],{"type":35,"value":730},"Normal vs. Foil — How OPCG Pricing Works",{"type":29,"tag":44,"props":732,"children":733},{},[734,736,741,743,748,750,756,758,764,765,771],{"type":35,"value":735},"In the One Piece Card Game, ",{"type":29,"tag":51,"props":737,"children":738},{},[739],{"type":35,"value":740},"Normal and Foil variants are distinct products",{"type":35,"value":742}," on both TCGPlayer and CardMarket. The ",{"type":29,"tag":211,"props":744,"children":746},{"className":745},[],[747],{"type":35,"value":635},{"type":35,"value":749}," endpoint reflects this directly — each variant appears as a separate row with its own ",{"type":29,"tag":211,"props":751,"children":753},{"className":752},[],[754],{"type":35,"value":755},"variant",{"type":35,"value":757}," field (",{"type":29,"tag":211,"props":759,"children":761},{"className":760},[],[762],{"type":35,"value":763},"\"Normal\"",{"type":35,"value":269},{"type":29,"tag":211,"props":766,"children":768},{"className":767},[],[769],{"type":35,"value":770},"\"Foil\"",{"type":35,"value":277},{"type":29,"tag":44,"props":773,"children":774},{},[775,776,781,783,789,791,797],{"type":35,"value":354},{"type":29,"tag":211,"props":777,"children":779},{"className":778},[],[780],{"type":35,"value":541},{"type":35,"value":782}," endpoint returns the card's primary variant (usually Normal) with prices nested inside ",{"type":29,"tag":211,"props":784,"children":786},{"className":785},[],[787],{"type":35,"value":788},"tcgplayer.prices",{"type":35,"value":790}," and ",{"type":29,"tag":211,"props":792,"children":794},{"className":793},[],[795],{"type":35,"value":796},"cardmarket.prices",{"type":35,"value":543},{"type":29,"tag":799,"props":800,"children":801},"table",{},[802,821],{"type":29,"tag":803,"props":804,"children":805},"thead",{},[806],{"type":29,"tag":807,"props":808,"children":809},"tr",{},[810,816],{"type":29,"tag":811,"props":812,"children":813},"th",{},[814],{"type":35,"value":815},"Endpoint",{"type":29,"tag":811,"props":817,"children":818},{},[819],{"type":35,"value":820},"Foil handling",{"type":29,"tag":822,"props":823,"children":824},"tbody",{},[825,843],{"type":29,"tag":807,"props":826,"children":827},{},[828,838],{"type":29,"tag":829,"props":830,"children":831},"td",{},[832],{"type":29,"tag":211,"props":833,"children":835},{"className":834},[],[836],{"type":35,"value":837},"GET /op/sets/:setCode",{"type":29,"tag":829,"props":839,"children":840},{},[841],{"type":35,"value":842},"Primary variant per card (Normal by default)",{"type":29,"tag":807,"props":844,"children":845},{},[846,861],{"type":29,"tag":829,"props":847,"children":848},{},[849,855,856],{"type":29,"tag":211,"props":850,"children":852},{"className":851},[],[853],{"type":35,"value":854},"GET /op/prices",{"type":35,"value":57},{"type":29,"tag":105,"props":857,"children":858},{},[859],{"type":35,"value":860},"(Pro)",{"type":29,"tag":829,"props":862,"children":863},{},[864,866,872,873],{"type":35,"value":865},"Separate rows per variant — ",{"type":29,"tag":211,"props":867,"children":869},{"className":868},[],[870],{"type":35,"value":871},"variant: \"Normal\"",{"type":35,"value":790},{"type":29,"tag":211,"props":874,"children":876},{"className":875},[],[877],{"type":35,"value":878},"variant: \"Foil\"",{"type":29,"tag":44,"props":880,"children":881},{},[882,884,889,891,897,898,904],{"type":35,"value":883},"A ",{"type":29,"tag":211,"props":885,"children":887},{"className":886},[],[888],{"type":35,"value":475},{"type":35,"value":890}," value on ",{"type":29,"tag":211,"props":892,"children":894},{"className":893},[],[895],{"type":35,"value":896},"tcgplayer",{"type":35,"value":269},{"type":29,"tag":211,"props":899,"children":901},{"className":900},[],[902],{"type":35,"value":903},"cardmarket",{"type":35,"value":905}," means no market data is available for that source.",{"type":29,"tag":89,"props":907,"children":908},{},[],{"type":29,"tag":93,"props":910,"children":912},{"id":911},"rate-limits",[913],{"type":35,"value":914},"Rate Limits",{"type":29,"tag":44,"props":916,"children":917},{},[918],{"type":35,"value":919},"Rate limits are shared across Pokémon and One Piece endpoints and apply both hourly and daily:",{"type":29,"tag":799,"props":921,"children":922},{},[923,949],{"type":29,"tag":803,"props":924,"children":925},{},[926],{"type":29,"tag":807,"props":927,"children":928},{},[929,934,939,944],{"type":29,"tag":811,"props":930,"children":931},{},[932],{"type":35,"value":933},"Plan",{"type":29,"tag":811,"props":935,"children":936},{},[937],{"type":35,"value":938},"Hourly limit",{"type":29,"tag":811,"props":940,"children":941},{},[942],{"type":35,"value":943},"Daily limit",{"type":29,"tag":811,"props":945,"children":946},{},[947],{"type":35,"value":948},"Price",{"type":29,"tag":822,"props":950,"children":951},{},[952,975,998,1021],{"type":29,"tag":807,"props":953,"children":954},{},[955,960,965,970],{"type":29,"tag":829,"props":956,"children":957},{},[958],{"type":35,"value":959},"Free",{"type":29,"tag":829,"props":961,"children":962},{},[963],{"type":35,"value":964},"100 requests",{"type":29,"tag":829,"props":966,"children":967},{},[968],{"type":35,"value":969},"1,000 requests",{"type":29,"tag":829,"props":971,"children":972},{},[973],{"type":35,"value":974},"$0/month",{"type":29,"tag":807,"props":976,"children":977},{},[978,983,988,993],{"type":29,"tag":829,"props":979,"children":980},{},[981],{"type":35,"value":982},"Coffee ☕",{"type":29,"tag":829,"props":984,"children":985},{},[986],{"type":35,"value":987},"1,000+ requests",{"type":29,"tag":829,"props":989,"children":990},{},[991],{"type":35,"value":992},"10,000+ requests",{"type":29,"tag":829,"props":994,"children":995},{},[996],{"type":35,"value":997},"Buy a coffee on Ko-fi",{"type":29,"tag":807,"props":999,"children":1000},{},[1001,1006,1011,1016],{"type":29,"tag":829,"props":1002,"children":1003},{},[1004],{"type":35,"value":1005},"Pro",{"type":29,"tag":829,"props":1007,"children":1008},{},[1009],{"type":35,"value":1010},"5,000 requests",{"type":29,"tag":829,"props":1012,"children":1013},{},[1014],{"type":35,"value":1015},"50,000 requests",{"type":29,"tag":829,"props":1017,"children":1018},{},[1019],{"type":35,"value":1020},"€20/month",{"type":29,"tag":807,"props":1022,"children":1023},{},[1024,1029,1034,1038],{"type":29,"tag":829,"props":1025,"children":1026},{},[1027],{"type":35,"value":1028},"Business",{"type":29,"tag":829,"props":1030,"children":1031},{},[1032],{"type":35,"value":1033},"Custom",{"type":29,"tag":829,"props":1035,"children":1036},{},[1037],{"type":35,"value":1033},{"type":29,"tag":829,"props":1039,"children":1040},{},[1041],{"type":35,"value":1042},"Contact us",{"type":29,"tag":44,"props":1044,"children":1045},{},[1046],{"type":35,"value":1047},"Every API response includes rate limit headers so you can track usage:",{"type":29,"tag":203,"props":1049,"children":1051},{"code":1050},"X-RateLimit-Limit-Hour: 100\nX-RateLimit-Remaining-Hour: 95\nX-RateLimit-Limit-Day: 1000\nX-RateLimit-Remaining-Day: 823\n",[1052],{"type":29,"tag":211,"props":1053,"children":1054},{"__ignoreMap":7},[1055],{"type":35,"value":1050},{"type":29,"tag":89,"props":1057,"children":1058},{},[],{"type":29,"tag":93,"props":1060,"children":1062},{"id":1061},"frequently-asked-questions",[1063],{"type":35,"value":1064},"Frequently Asked Questions",{"type":29,"tag":160,"props":1066,"children":1068},{"id":1067},"is-there-a-free-one-piece-card-game-api",[1069],{"type":35,"value":1070},"Is there a free One Piece Card Game API?",{"type":29,"tag":44,"props":1072,"children":1073},{},[1074],{"type":35,"value":1075},"BerryWallet offers a free tier that requires no credit card and provides 100 requests per hour and 1,000 requests per day. Developers can fetch real-time OPCG card prices, browse all sets, and search by card name without spending anything. Paid plans start at €20/month (Pro: 5,000 requests/hour, 50,000/day).",{"type":29,"tag":160,"props":1077,"children":1079},{"id":1078},"what-one-piece-card-price-data-does-berrywallet-return",[1080],{"type":35,"value":1081},"What One Piece card price data does BerryWallet return?",{"type":29,"tag":44,"props":1083,"children":1084},{},[1085,1087,1091,1093,1097,1099,1105,1107,1113,1115,1121,1123,1129,1130,1136,1137,1143,1145,1150,1152,1158,1159,1165,1166,1172,1174,1180],{"type":35,"value":1086},"BerryWallet returns real-time prices from two sources for every card: ",{"type":29,"tag":51,"props":1088,"children":1089},{},[1090],{"type":35,"value":123},{"type":35,"value":1092}," (USD, North American market) and ",{"type":29,"tag":51,"props":1094,"children":1095},{},[1096],{"type":35,"value":130},{"type":35,"value":1098}," (EUR, European market). TCGPlayer prices include ",{"type":29,"tag":211,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":35,"value":1104},"low_price",{"type":35,"value":1106},", ",{"type":29,"tag":211,"props":1108,"children":1110},{"className":1109},[],[1111],{"type":35,"value":1112},"market_price",{"type":35,"value":1114},", and ",{"type":29,"tag":211,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":35,"value":1120},"high_price",{"type":35,"value":1122},". CardMarket prices include ",{"type":29,"tag":211,"props":1124,"children":1126},{"className":1125},[],[1127],{"type":35,"value":1128},"avg",{"type":35,"value":1106},{"type":29,"tag":211,"props":1131,"children":1133},{"className":1132},[],[1134],{"type":35,"value":1135},"low",{"type":35,"value":1114},{"type":29,"tag":211,"props":1138,"children":1140},{"className":1139},[],[1141],{"type":35,"value":1142},"trend",{"type":35,"value":1144},". The Pro ",{"type":29,"tag":211,"props":1146,"children":1148},{"className":1147},[],[1149],{"type":35,"value":635},{"type":35,"value":1151}," endpoint additionally returns historical averages (",{"type":29,"tag":211,"props":1153,"children":1155},{"className":1154},[],[1156],{"type":35,"value":1157},"avg1",{"type":35,"value":1106},{"type":29,"tag":211,"props":1160,"children":1162},{"className":1161},[],[1163],{"type":35,"value":1164},"avg7",{"type":35,"value":1106},{"type":29,"tag":211,"props":1167,"children":1169},{"className":1168},[],[1170],{"type":35,"value":1171},"avg30",{"type":35,"value":1173},") and ",{"type":29,"tag":211,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":35,"value":1179},"direct_low_price",{"type":35,"value":1181}," from TCGPlayer Direct.",{"type":29,"tag":160,"props":1183,"children":1185},{"id":1184},"does-berrywallet-support-european-prices-in-eur",[1186],{"type":35,"value":1187},"Does BerryWallet support European prices in EUR?",{"type":29,"tag":44,"props":1189,"children":1190},{},[1191,1193,1198,1200,1205,1207,1212,1214,1219],{"type":35,"value":1192},"BerryWallet returns CardMarket EUR prices for every card that has European market data. The ",{"type":29,"tag":211,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":35,"value":796},{"type":35,"value":1199}," object includes ",{"type":29,"tag":211,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":35,"value":1128},{"type":35,"value":1206}," (average sale price in EUR), ",{"type":29,"tag":211,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":35,"value":1135},{"type":35,"value":1213}," (lowest listed price), and ",{"type":29,"tag":211,"props":1215,"children":1217},{"className":1216},[],[1218],{"type":35,"value":1142},{"type":35,"value":1220}," (7-day trend price). European developers can use these fields directly without any currency conversion. CardMarket covers all major European markets including Germany, France, Italy, Spain, and the Netherlands.",{"type":29,"tag":160,"props":1222,"children":1224},{"id":1223},"does-berrywallet-support-japanese-one-piece-cards",[1225],{"type":35,"value":1226},"Does BerryWallet support Japanese One Piece cards?",{"type":29,"tag":44,"props":1228,"children":1229},{},[1230,1232,1238,1240,1246,1248,1254],{"type":35,"value":1231},"BerryWallet indexes both English and Japanese One Piece Card Game sets. Pass ",{"type":29,"tag":211,"props":1233,"children":1235},{"className":1234},[],[1236],{"type":35,"value":1237},"language=jp",{"type":35,"value":1239}," to ",{"type":29,"tag":211,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":35,"value":1245},"GET /op/sets",{"type":35,"value":1247}," to retrieve only Japanese sets, or ",{"type":29,"tag":211,"props":1249,"children":1251},{"className":1250},[],[1252],{"type":35,"value":1253},"language=en",{"type":35,"value":1255}," for English. Japanese sets return the same price structure — TCGPlayer USD and CardMarket EUR — where marketplace data is available.",{"type":29,"tag":160,"props":1257,"children":1259},{"id":1258},"which-one-piece-sets-are-available-in-berrywallet",[1260],{"type":35,"value":1261},"Which One Piece sets are available in BerryWallet?",{"type":29,"tag":44,"props":1263,"children":1264},{},[1265,1267,1272,1274,1279],{"type":35,"value":1266},"BerryWallet covers every released One Piece Card Game set starting from ",{"type":29,"tag":51,"props":1268,"children":1269},{},[1270],{"type":35,"value":1271},"OP01 Romance Dawn",{"type":35,"value":1273}," (December 2022) through the latest releases, including Extra Booster sets (EB series) in both English and Japanese. Call ",{"type":29,"tag":211,"props":1275,"children":1277},{"className":1276},[],[1278],{"type":35,"value":1245},{"type":35,"value":1280}," to retrieve the complete list with set codes, release dates, and language tags.",{"type":29,"tag":160,"props":1282,"children":1284},{"id":1283},"how-often-does-berrywallet-update-prices",[1285],{"type":35,"value":1286},"How often does BerryWallet update prices?",{"type":29,"tag":44,"props":1288,"children":1289},{},[1290,1292,1297,1299,1304,1306,1312],{"type":35,"value":1291},"BerryWallet updates card prices from both TCGPlayer and CardMarket ",{"type":29,"tag":51,"props":1293,"children":1294},{},[1295],{"type":35,"value":1296},"once per day",{"type":35,"value":1298},". Every price object returned by ",{"type":29,"tag":211,"props":1300,"children":1302},{"className":1301},[],[1303],{"type":35,"value":635},{"type":35,"value":1305}," includes an ",{"type":29,"tag":211,"props":1307,"children":1309},{"className":1308},[],[1310],{"type":35,"value":1311},"updated_at",{"type":35,"value":1313}," ISO timestamp. The recommended usage pattern is to fetch prices once daily and cache the response locally.",{"type":29,"tag":160,"props":1315,"children":1317},{"id":1316},"what-is-the-difference-between-tcgplayer-and-cardmarket-prices-in-berrywallet",[1318],{"type":35,"value":1319},"What is the difference between TCGPlayer and CardMarket prices in BerryWallet?",{"type":29,"tag":44,"props":1321,"children":1322},{},[1323,1325,1329,1331,1336,1338,1342,1344,1349],{"type":35,"value":1324},"TCGPlayer and CardMarket are separate secondary marketplaces that reflect distinct regional demand. ",{"type":29,"tag":51,"props":1326,"children":1327},{},[1328],{"type":35,"value":123},{"type":35,"value":1330}," serves the United States and Canada market and prices are denominated in ",{"type":29,"tag":51,"props":1332,"children":1333},{},[1334],{"type":35,"value":1335},"USD",{"type":35,"value":1337},". ",{"type":29,"tag":51,"props":1339,"children":1340},{},[1341],{"type":35,"value":130},{"type":35,"value":1343}," serves the European market and prices are denominated in ",{"type":29,"tag":51,"props":1345,"children":1346},{},[1347],{"type":35,"value":1348},"EUR",{"type":35,"value":1350},". The same One Piece card regularly trades at different price points across the two platforms. BerryWallet returns both in a single response so applications can display the correct regional price without additional API calls.",{"type":29,"tag":160,"props":1352,"children":1354},{"id":1353},"do-i-need-a-separate-api-key-for-berrywallet-and-pokéwallet",[1355],{"type":35,"value":1356},"Do I need a separate API key for BerryWallet and PokéWallet?",{"type":29,"tag":44,"props":1358,"children":1359},{},[1360,1362,1367],{"type":35,"value":1361},"BerryWallet and PokéWallet share a single API key. The same key authenticates requests to both the One Piece (",{"type":29,"tag":211,"props":1363,"children":1365},{"className":1364},[],[1366],{"type":35,"value":231},{"type":35,"value":1368},") and Pokémon TCG endpoints, and the rate limit quota is shared across both. There is no separate signup or additional cost to access BerryWallet data.",{"type":29,"tag":160,"props":1370,"children":1372},{"id":1371},"can-i-retrieve-one-piece-card-images-through-berrywallet",[1373],{"type":35,"value":1374},"Can I retrieve One Piece card images through BerryWallet?",{"type":29,"tag":44,"props":1376,"children":1377},{},[1378,1379,1385,1387,1392,1394,1400],{"type":35,"value":354},{"type":29,"tag":211,"props":1380,"children":1382},{"className":1381},[],[1383],{"type":35,"value":1384},"GET /images/:id",{"type":35,"value":1386}," endpoint serves One Piece card images via CDN. The ",{"type":29,"tag":211,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":35,"value":505},{"type":35,"value":1393}," path parameter accepts the card's number (e.g. ",{"type":29,"tag":211,"props":1395,"children":1397},{"className":1396},[],[1398],{"type":35,"value":1399},"OP01-001",{"type":35,"value":1401},"). Images are returned as binary content and can be embedded directly in any web or mobile application.",{"type":29,"tag":160,"props":1403,"children":1405},{"id":1404},"which-programming-languages-work-with-berrywallet",[1406],{"type":35,"value":1407},"Which programming languages work with BerryWallet?",{"type":29,"tag":44,"props":1409,"children":1410},{},[1411,1413,1419],{"type":35,"value":1412},"BerryWallet is a standard REST API that works with any language capable of making HTTP GET requests: JavaScript, Python, PHP, Ruby, Go, Swift, Kotlin, Java, Rust, and others. Authentication requires only the ",{"type":29,"tag":211,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":35,"value":1418},"X-API-Key",{"type":35,"value":1420}," header. No SDK or client library is needed.",{"type":29,"tag":89,"props":1422,"children":1423},{},[],{"type":29,"tag":93,"props":1425,"children":1427},{"id":1426},"start-building-with-berrywallet",[1428],{"type":35,"value":1429},"Start Building with BerryWallet",{"type":29,"tag":44,"props":1431,"children":1432},{},[1433,1435,1440,1442,1447,1449,1453,1455,1461],{"type":35,"value":1434},"BerryWallet is ",{"type":29,"tag":51,"props":1436,"children":1437},{},[1438],{"type":35,"value":1439},"live and free to use",{"type":35,"value":1441},". Visit ",{"type":29,"tag":81,"props":1443,"children":1444},{"href":83},[1445],{"type":35,"value":1446},"pokewallet.io/berrywallet",{"type":35,"value":1448}," to get started, grab your API key at ",{"type":29,"tag":81,"props":1450,"children":1451},{"href":173},[1452],{"type":35,"value":176},{"type":35,"value":1454},", and check the full endpoint reference at ",{"type":29,"tag":81,"props":1456,"children":1458},{"href":1457},"/berrywallet-docs",[1459],{"type":35,"value":1460},"pokewallet.io/berrywallet-docs",{"type":35,"value":543},{"type":29,"tag":44,"props":1463,"children":1464},{},[1465,1467,1475],{"type":35,"value":1466},"Questions? Join the ",{"type":29,"tag":81,"props":1468,"children":1472},{"href":1469,"rel":1470},"https://discord.gg/znDxEjmDVP",[1471],"nofollow",[1473],{"type":35,"value":1474},"Discord community",{"type":35,"value":1476}," — we're happy to help.",{"title":7,"searchDepth":1478,"depth":1478,"links":1479},2,[1480,1481,1487,1494,1495,1496,1497,1509],{"id":95,"depth":1478,"text":98},{"id":155,"depth":1478,"text":158,"children":1482},[1483,1485,1486],{"id":162,"depth":1484,"text":165},3,{"id":193,"depth":1484,"text":196},{"id":217,"depth":1484,"text":220},{"id":247,"depth":1478,"text":250,"children":1488},[1489,1490,1491,1492,1493],{"id":253,"depth":1484,"text":256},{"id":332,"depth":1484,"text":335},{"id":491,"depth":1484,"text":494},{"id":549,"depth":1484,"text":552},{"id":621,"depth":1484,"text":624},{"id":702,"depth":1478,"text":705},{"id":727,"depth":1478,"text":730},{"id":911,"depth":1478,"text":914},{"id":1061,"depth":1478,"text":1064,"children":1498},[1499,1500,1501,1502,1503,1504,1505,1506,1507,1508],{"id":1067,"depth":1484,"text":1070},{"id":1078,"depth":1484,"text":1081},{"id":1184,"depth":1484,"text":1187},{"id":1223,"depth":1484,"text":1226},{"id":1258,"depth":1484,"text":1261},{"id":1283,"depth":1484,"text":1286},{"id":1316,"depth":1484,"text":1319},{"id":1353,"depth":1484,"text":1356},{"id":1371,"depth":1484,"text":1374},{"id":1404,"depth":1484,"text":1407},{"id":1426,"depth":1478,"text":1429},"markdown","content:blog:one-piece:2026:05:one-piece-card-game-api-guide-real-time-prices.md","content","blog/one-piece/2026/05/one-piece-card-game-api-guide-real-time-prices.md","blog/one-piece/2026/05/one-piece-card-game-api-guide-real-time-prices","md",1778856658630]