API Documentation
Free REST API for TCG expected value data. No authentication required. All responses are JSON with CORS enabled.
Rate Limiting
All API endpoints are limited to 60 requests per minute per IP address. Exceeding the limit returns a 429 Too Many Requests response. Data is updated daily at 21:00 UTC, so aggressive polling is unnecessary.
Base URL
https://riporfliptcg.comPath Parameters
| Parameter | Description | Example |
|---|---|---|
| gameSlug | Game identifier | pokemon, one-piece, riftbound |
| setSlug | Set identifier (kebab-case) | prismatic-evolutions, ascended-heroes |
Endpoints
/api/evReturns EV summaries for all sets across all games. Each set includes per-pack EV, product-level verdicts, and the last calculation timestamp.
Example Response
{
"sets": [
{
"gameSlug": "pokemon",
"setSlug": "ascended-heroes",
"setName": "Ascended Heroes",
"evPerPack": 4.12,
"products": [
{
"productType": "etb",
"productName": "Ascended Heroes ETB",
"sealedPrice": 42.99,
"marketEV": 45.23,
"evReturnPct": 105.2,
"verdict": "neutral"
}
],
"calculatedAt": "2026-02-28T21:00:00.000Z"
}
],
"updatedAt": "2026-02-28T21:00:00.000Z"
}/api/ev/{gameSlug}/{setSlug}Returns the full EV breakdown for a specific set, including per-tier EV calculations, top cards, all product verdicts, and pull rate confidence.
Example Response
{
"gameSlug": "pokemon",
"setSlug": "prismatic-evolutions",
"setName": "Prismatic Evolutions",
"evPerPack": 6.84,
"tierBreakdown": [
{
"rarity": "Illustration Rare",
"abbreviation": "IR",
"cardCount": 16,
"avgCardValue": 12.45,
"pullRate": 0.0556,
"evPerPack": 0.69,
"topCards": [{ "name": "Umbreon ex", "marketPrice": 89.99 }]
}
],
"products": [...],
"topCards": [...],
"calculatedAt": "2026-02-28T21:00:00.000Z",
"pullRateConfidence": "high"
}/api/pull-rates/{gameSlug}/{setSlug}Returns pull rate data for a specific set, including per-tier rates, sample sizes, and data sources.
Example Response
{
"setSlug": "prismatic-evolutions",
"setName": "Prismatic Evolutions",
"tiers": [
{
"rarity": "Illustration Rare",
"abbreviation": "IR",
"cardCount": 16,
"pullRate": 0.0556,
"isHitSlot": true,
"sampleSize": 5000,
"source": "TCGPlayer"
}
],
"totalSampleSize": 5000,
"confidence": "high",
"lastUpdated": "2026-02-01",
"sources": ["TCGPlayer", "CardChill"]
}Response Headers
Cache-Control— Responses are cached for 24 hours with stale-while-revalidate.Access-Control-Allow-Origin: *— CORS is enabled for all origins.
Error Responses
| Status | Meaning | Body |
|---|---|---|
| 404 | Set or pull rates not found | {"error": "Set not found"} |
| 429 | Rate limit exceeded | {"error": "Rate limit exceeded", "retryAfter": 42} |