Rip or Flip

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.com

Path Parameters

ParameterDescriptionExample
gameSlugGame identifierpokemon, one-piece, riftbound
setSlugSet identifier (kebab-case)prismatic-evolutions, ascended-heroes

Endpoints

GET/api/ev

Returns 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"
}
GET/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"
}
GET/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

StatusMeaningBody
404Set or pull rates not found{"error": "Set not found"}
429Rate limit exceeded{"error": "Rate limit exceeded", "retryAfter": 42}