Tier odds + EV

GET /api/v1/mystery/catalog/:tier_id/odds read:catalog

The rarity breakdown, what’s currently available, and the average item value for one tier — ready to show players before they buy.

Try it GET /api/v1/mystery/catalog/1/odds

These inputs are shared across all docs pages — an id entered here carries over.

response
200 100ms preloaded server-side with the default context
object · 3 keys
{
  "success": true,
  "data": {
    "tier_id": 1,
    "scope": "onchain",
    "currency": "USDC",
    "tier_price_usdc": "25",
    "target_ev_usdc": "25.75",
    "slot_count": 1,
    "active": true,
    "rarity_groups": [
      {
        "group_id": 22,
        "name": "Common",
        "tier_label": "Cards-1",
        "color": "#9CA3AF",
        "min_price": "10",
        "max_price": "25",
        "avg_price": "12",
        "weight": "7604",
        "probability": 0.7640675241157556,
        "available_count": 43
      },
      {
        "group_id": 5,
        "name": "Uncommon",
        "tier_label": "Cards-1",
        "color": "#3B82F6",
        "min_price": "25",
        "max_price": "50",
        "avg_price": "30",
        "weight": "2000",
        "probability": 0.20096463022508038,
        "available_count": 8
      },
      {
        "group_id": 21,
        "name": "Rare",
        "tier_label": "Cards-1",
        "color": "#A855F7",
        "min_price": "50",
        "max_price": "115",
        "avg_price": "70",
        "weight": "250",
        "probability": 0.025120578778135047,
        "available_count": 23
      },
      {
        "group_id": 6,
        "name": "Chase",
        "tier_label": "Cards-1",
        "color": "#F5B50A",
        "min_price": "115",
        "max_price": "700",
        "avg_price": "150",
        "weight": "98",
        "probability": 0.00984726688102894,
        "available_count": 4
      }
    ],
    "slots": [
      {
        "slot_index": 0,
        "slot_type": "CARD",
        "min_value_usdc": "10",
        "max_value_usdc": "500",
        "groups": [
          {
            "group_id": 5,
            "weight": "2000",
            "probability": 0.20096463022508038
          },
          {
            "group_id": 6,
            "weight": "98",
            "probability": 0.00984726688102894
          },
          {
            "group_id": 21,
            "weight": "250",
            "probability": 0.025120578778135047
          },
          {
            "group_id": 22,
            "weight": "7604",
            "probability": 0.7640675241157556
          }
        ]
      }
    ]
  },
  "meta": {
    "note": "Authoritative odds from MysteryComboPool tier weights (getTiers). `probability` is the weight share across all slots (expected fraction of pulled items); `slots` has the per-slot breakdown. `available_count` is current inventory."
  }
}
curl (tracks the inputs above)
curl -X GET 'https://service.rip.fun/api/v1/mystery/catalog/1/odds' \
  -H 'X-API-Key: rip_…'

Response fields (data)

FieldDescription
total_availableItems currently available in the pool
average_item_valueInventory-derived EV per item (USDC decimal string)
rarity_groups[].name / tier_label / colorDisplay metadata per rarity group
rarity_groups[].min_price / max_price / avg_priceValue range within the group
rarity_groups[].available_count / probabilityCount + share of the pool

Errors

StatusCodeWhen
400invalid_tiertier_id is not a known tier

See Errors for the response envelope and the full code list.