> ## Documentation Index
> Fetch the complete documentation index at: https://docs.8bitedge.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Intelligence — Condition strategy reference

> Recommends how to sell a specific title — loose, CIB, or new — by blending where buyer demand concentrates with each condition's relative price into a 0–100 strategy score. Scope: intelligence.read.

The condition strategy endpoint answers a single seller question: **"I have a copy of this game — should I list it loose, CIB, or new, and why?"** It is the composite counterpart to [`GET /api/v1/demand-intent/games/{id}/conditions`](/api/demand-conditions): that endpoint *reports* per-condition demand, while this one *recommends* — blending where watch demand concentrates with each condition's relative price into a `0`–`100` `strategy_score`, then naming a single recommended condition. It requires the `intelligence.read` scope and a valid `Authorization: Bearer <token>` header.

<Note>
  This page covers the per-game condition recommendation. To rank or score whole titles by liquidity — or to score a lot/inventory in bulk — see [Intelligence: Games](/api/intelligence-games).
</Note>

## How the recommendation is built

For each of the three sellable conditions — **loose** (cartridge/disc only), **CIB** (complete in box), and **new** (sealed) — the endpoint combines two normalised signals:

* **Demand concentration** — how much of the game's watch demand is attached to that condition, drawn from saved notification alerts where a buyer selected the condition they want.
* **Relative value** — that condition's catalog price, normalised against the highest of the title's three condition prices.

These are blended into a `strategy_score`, and the highest-scoring condition becomes the `recommended` pick.

### `demand_share`

Each condition's share of the game's watch demand, expressed between `0.0` and `1.0`. A high `demand_share` on `cib` means buyers who alert on this title overwhelmingly want the complete-in-box version.

### `value_index`

Each condition's catalog price normalised against the highest of the title's three condition prices (`0.0`–`1.0`). The priciest condition scores `1.0`; the others are scored relative to it. This is the value component that the `strategy_score` weighs against demand.

### `strategy_score`

A `0`–`100` blend of demand concentration and relative value, normalised across the game's three conditions:

```
strategy_score = 100 × (w_demand · (watch_count ÷ max_watch_count) + w_value · (price ÷ max_price))
```

The weights (`w_demand` and `w_value`) are set in the API's serving configuration. The condition with the highest `strategy_score` is the one returned in `recommended`.

### `premiums`

Price step-ups between conditions, expressed as ratios. `complete_over_loose` of `1.6786` means CIB sells for 168% of the loose price. Each ratio is `null` when its base price is `0`.

***

## GET /api/v1/intelligence/{id}/conditions

Returns the full condition breakdown for one game, scored and ranked, with a single recommended condition to list in.

```bash theme={null}
curl -s "https://api.8bitedge.com/api/v1/intelligence/5337/conditions?period=7d" \
  -H "Authorization: Bearer $TOKEN" | jq
```

### Path parameters

<ParamField path="id" type="integer" required>
  The numeric ID of the game. You can resolve IDs from the [Games catalog endpoints](/api/games).
</ParamField>

### Query parameters

<ParamField query="period" type="string" default="7d">
  The time window to aggregate over. One of `day`, `7d`, or `30d`.
</ParamField>

<ParamField query="date" type="string">
  Override the target window-end date. Defaults to the latest computed date. Format: `YYYY-MM-DD`.
</ParamField>

### Response

<ResponseField name="data" type="object">
  <ResponseField name="game" type="object">
    Game identity fields.

    <ResponseField name="id" type="integer">Game ID.</ResponseField>
    <ResponseField name="name" type="string">Display name.</ResponseField>
    <ResponseField name="slug" type="string">URL slug.</ResponseField>
    <ResponseField name="console_id" type="integer">Console ID.</ResponseField>
    <ResponseField name="console_name" type="string">Console display name.</ResponseField>
  </ResponseField>

  <ResponseField name="pricing" type="object">
    Current market prices from the catalog.

    <ResponseField name="loose" type="string">Loose price (decimal string).</ResponseField>
    <ResponseField name="complete" type="string">Complete-in-box price (decimal string).</ResponseField>
    <ResponseField name="new" type="string">Sealed/new price (decimal string).</ResponseField>
  </ResponseField>

  <ResponseField name="premiums" type="object">
    Price step-ups between conditions, expressed as ratios. Each is `null` when its base price is `0`.

    <ResponseField name="complete_over_loose" type="float">How much more CIB sells for than loose (e.g. `1.6786` = 168% of the loose price).</ResponseField>
    <ResponseField name="new_over_complete" type="float">How much more sealed/new sells for than CIB.</ResponseField>
  </ResponseField>

  <ResponseField name="conditions" type="array">
    One row per sellable condition — `loose`, `cib`, and `new` — sorted by `strategy_score` descending.

    <ResponseField name="condition" type="string">The condition: `loose`, `cib`, or `new`.</ResponseField>
    <ResponseField name="price" type="string">The catalog price for this condition (decimal string).</ResponseField>
    <ResponseField name="watch_count" type="integer">Active watchlist alerts for this game in this condition.</ResponseField>
    <ResponseField name="demand_share" type="float">This condition's share of the game's watch demand (`0.0`–`1.0`).</ResponseField>
    <ResponseField name="value_index" type="float">This condition's price normalised against the highest of the three condition prices (`0.0`–`1.0`); the priciest condition is `1.0`.</ResponseField>
    <ResponseField name="strategy_score" type="integer">A `0`–`100` blend of demand concentration and relative value, normalised across the game's three conditions.</ResponseField>
  </ResponseField>

  <ResponseField name="recommended" type="object">
    The single suggested condition to list in.

    <ResponseField name="condition" type="string">The highest-scoring condition (ties break to the higher price).</ResponseField>
    <ResponseField name="reason" type="string">A short rationale reconciling the pick against the pure-demand and pure-value winners — e.g. `"where buyer demand concentrates"`, `"best price with viable demand"`, `"highest demand and best price"`, or `"best demand/value balance"`.</ResponseField>
  </ResponseField>
</ResponseField>

<ResponseField name="meta" type="object">
  <ResponseField name="period" type="string">The resolved period.</ResponseField>
  <ResponseField name="period_date" type="string">The window-end date the data was computed for (YYYY-MM-DD).</ResponseField>
</ResponseField>

**Example response:**

```json theme={null}
{
  "data": {
    "game": {
      "id": 5337,
      "name": "Super Mario World",
      "slug": "super-mario-world",
      "console_id": 19,
      "console_name": "Nintendo SNES"
    },
    "pricing": { "loose": "28.00", "complete": "75.00", "new": "320.00" },
    "premiums": { "complete_over_loose": 1.6786, "new_over_complete": 3.2667 },
    "conditions": [
      { "condition": "loose", "price": "28.00",  "watch_count": 12, "demand_share": 0.30, "value_index": 0.0875, "strategy_score": 34 },
      { "condition": "cib",   "price": "75.00",  "watch_count": 28, "demand_share": 0.55, "value_index": 0.2344, "strategy_score": 71 },
      { "condition": "new",   "price": "320.00", "watch_count": 3,  "demand_share": 0.06, "value_index": 1.0,    "strategy_score": 52 }
    ],
    "recommended": { "condition": "cib", "reason": "where buyer demand concentrates" }
  },
  "meta": { "period": "7d", "period_date": "2026-06-19" }
}
```

In the example above, CIB wins despite "new" carrying the highest price: 55% of buyer demand for this title concentrates on the complete-in-box version, and only 3 alerts target a sealed copy. The `reason` — `"where buyer demand concentrates"` — reconciles the recommendation against the pure-value winner (`new`).

<Note>
  Returns `404 not_found` only when the `id` is not a real, enabled game.
</Note>

<Tip>
  This endpoint *recommends* a condition. To see the raw per-condition demand breakdown across all four conditions (including `any`) without the scoring layer, use [`GET /api/v1/demand-intent/games/{game_id}/conditions`](/api/demand-conditions).
</Tip>
