Get every number on PackRips as JSON. It's free and needs no key.
33 sites46 packs with pulls countedCORS open
Every endpoint returns JSON. A bad parameter gets a 400, and an unknown site or pack gets a 404.
Rip sites ranked by average return:
curl -s https://packrips.org/api/operators | jq '.operators[] | {name, rank, rtp: .stat.rtp, n: .stat.n, source: .stat.source}'The ranked Pokémon packs (500 or more pulls counted, the boards' threshold), best first:
curl -s 'https://packrips.org/api/packs?category=pokemon&minN=500&sort=rtp&limit=10'One site, then one of its packs with its 50 newest pulls:
curl -s https://packrips.org/api/operators/courtyard
curl -s 'https://packrips.org/api/packs/courtyard/PACK-SLUG?pulls=50'Pulls worth 10 times the pack price or more, biggest first:
curl -s 'https://packrips.org/api/pulls?minMultiple=10&sort=value&limit=20'courtyardTakes operator, category, currency (cash, crypto or store_credit), minN, listed (true, false or all), sort, order, page and limit up to 500. The full schema is in openapi.json.
Every response starts with meta, so a number never travels without its pulls counted and its source:
{
"meta": {
"publisher": "PackRips (https://packrips.org)",
"docs": "https://packrips.org/api",
"license": {
"name": "CC BY 4.0",
"url": "https://creativecommons.org/licenses/by/4.0/",
"note": "Applies to every figure; all are measured by PackRips. Payout terms text is seeded from RipRanks' published operator data."
},
"source": "feed",
"provenance": "Measured by PackRips",
"n": 760,
"computedAt": "2026-10-13T15:09:46.605Z",
"generatedAt": "2026-10-16T01:47:06.011Z"
}
}That's the live meta for the whole site right now. source is feed for every figure: PackRips measures them all from the sites' live feeds. n is the number of pulls counted behind the figures in the response.
Each stat inside carries the same fields (rtp, median, n, source, computedAt). rtp is the average return: all card value ÷ all money spent, before any sell back. median is the typical pull as a share of the pack price. The methodology explains every field.
AI agents in your browser can call these 5 read-only tools on any PackRips page.
PackRips declares them through WebMCP (document.modelContext.registerTool, with a fallback for browsers that shipped it as navigator.modelContext). In other browsers nothing happens. Each tool calls the endpoints above and returns their JSON.
Every tool is marked readOnlyHint. Tools that return pulls also set untrustedContentHint, because card and pack names come from the sites' own feeds. The WebMCP draft defines no discovery file, so PackRips publishes none, and agents find the tools on the page.
/llms.txt describes the site, the data and this API in a few hundred words. /llms-full.txt adds the full methodology and the current rankings in one file.