# How to get BUFF163 prices, float buckets, and history in USD

> Get BUFF163 prices, native float buckets, and price history for CS2 items in USD cents, without scraping or converting currency. Runnable API code included.

*History & backtesting · Intermediate · Updated 2026-09-25*

BUFF163 is one of the deepest CS2 markets in the world, and for many high-value items it is where price discovery actually happens. It is also awkward to consume from outside China: prices are quoted in yuan, and its float-range and phase segmentation is its own. If you want BUFF numbers next to the rest of the market, you have to scrape, convert, and re-bucket before you can compare anything.

SkinPricer ingests BUFF's listings, buy orders, and native float, fade, and phase buckets, and serves all of it normalized to integer USD cents alongside every other venue. There are four reads, depending on the question you are asking.

| Your question | Endpoint |
| --- | --- |
| What is BUFF's ask and bid for this item right now? | [`GET /v1/pricing/:marketHashName`](/api-docs/price) with `markets=buff163` |
| What does BUFF charge for a specific float range, fade, or phase? | [`GET /v1/markets/buff163/latest`](/api-docs/buff163) |
| How has BUFF's price for this item moved? | [`GET /v1/pricing/:marketHashName/history/markets`](/api-docs/history-markets) with `markets=buff163` |
| How has one BUFF float band moved? | [`GET /v1/markets/buff163/history`](/api-docs/buff163-history) |

## Step 1: read BUFF's current ask and bid

The pricing snapshot accepts a `markets` filter. Restrict it to `buff163` and the response carries BUFF's lowest listing in `markets[]`, its highest buy order in `buyOrders[]`, and the matching `bestAsk`, `bestBid`, and `spreadBps`. BUFF has a real buy-order book, so unlike listing-only venues the bid side is usually populated. This read is included from the Developer plan up.

**curl**

```bash
export SKINPRICER_API_KEY="sp_live_•••"   # from your account's API keys page

curl -s "https://pricing.skinpricer.com/v1/pricing/AK-47%20%7C%20Redline%20(Field-Tested)?markets=buff163" \
  -H "Authorization: ApiKey $SKINPRICER_API_KEY"
```

**Node (SDK)**

```ts
// npm i @skinpricer/sdk
import { SkinpricerClient, formatUsd } from "@skinpricer/sdk";

const client = new SkinpricerClient({
  apiKey: process.env.SKINPRICER_API_KEY!,
  authScheme: "ApiKey",
});

const snapshot = await client.pricing.get("AK-47 | Redline (Field-Tested)", {
  markets: ["buff163"],
});

const ask = snapshot.markets.find((m) => m.market === "buff163");
const bid = snapshot.buyOrders?.find((m) => m.market === "buff163");

console.log("BUFF ask:", ask ? formatUsd(ask.price) : "no listings");
console.log("BUFF bid:", bid ? formatUsd(bid.price) : "no buy orders");
```

**Python**

```python
import os
from urllib.parse import quote

import requests

name = "AK-47 | Redline (Field-Tested)"
res = requests.get(
    f"https://pricing.skinpricer.com/v1/pricing/{quote(name, safe='')}",
    params={"markets": "buff163"},
    headers={"Authorization": f"ApiKey {os.environ['SKINPRICER_API_KEY']}"},
    timeout=10,
)
res.raise_for_status()
snap = res.json()

ask, bid = snap["bestAsk"], snap["bestBid"]
print("BUFF ask:", ask and ask["price"] / 100, "BUFF bid:", bid and bid["price"] / 100)
```

*Prices come back in USD cents, already converted. Divide by 100 only when you display them.*

## Step 2: price by BUFF's own float bands

BUFF segments many items by float range, fade percentage, and Doppler phase, and prices each segment separately. The BUFF bucket endpoint returns those segments as buckets, each with its own `askCents`, `bidCents`, and listing counts. The float bands are BUFF's native, non-uniform ranges, for example 0.15 to 0.18, 0.18 to 0.21, and so on up to 0.27 to 0.38 for Field-Tested, not fixed 0.01 steps. Always read the exact bounds from each bucket's `dimensions` rather than parsing the label.

**curl**

```bash
curl -s "https://pricing.skinpricer.com/v1/markets/buff163/latest?marketHashName=AK-47%20%7C%20Redline%20(Field-Tested)" \
  -H "Authorization: ApiKey $SKINPRICER_API_KEY"
```

**Node (SDK)**

```ts
const buff = await client.buff163.latest({
  marketHashName: "AK-47 | Redline (Field-Tested)",
});

for (const item of buff.items) {
  for (const bucket of item.buckets) {
    const band = bucket.dimensions.float;
    if (!band) continue;
    console.log(
      `${band.min} to ${band.max}:`,
      bucket.askCents === null ? "no asks" : formatUsd(bucket.askCents),
      `(${bucket.askListingCount ?? 0} listed)`,
    );
  }
}
```

**Response 200** (`GET /v1/markets/buff163/latest`)

```json
{
  "bucketSchemaVersion": 1,
  "market": "buff163",
  "currency": "USD",
  "asOf": "2026-06-23T09:19:23.280Z",
  "items": [
    {
      "canonicalItemId": "cmlofa7dh08ww01yo9lrpej3e",
      "marketHashName": "★ Karambit | Doppler (Factory New) - Phase 2",
      "market": "buff163",
      "buckets": [
        {
          "bucketId": "buff163:cmlofa7dh08ww01yo9lrpej3e:tag:446954:float:0-0.01",
          "bucketKey": "tag:446954:float:0-0.01",
          "bucketType": "attribute",
          "attributeType": "tag",
          "attributeTypes": ["tag", "float"],
          "dimensions": {
            "variant": "Phase2",
            "float": { "min": 0, "max": 0.01, "minInclusive": true, "maxInclusive": false },
            "fade": null,
            "pattern": null,
            "paintSeed": null
          },
          "askCents": 197795,
          "bidCents": 179787,
          "askListingCount": 82,
          "bidOrderCount": null,
          "sourceUpdatedAt": "2026-06-23T09:10:00.000Z",
          "collectedAt": "2026-06-23T09:11:35.446Z"
        },
        {
          "bucketId": "buff163:cmlofa7dh08ww01yo9lrpej3e:tag:446954:float:0.01-0.02",
          "bucketKey": "tag:446954:float:0.01-0.02",
          "bucketType": "attribute",
          "attributeType": "tag",
          "attributeTypes": ["tag", "float"],
          "dimensions": {
            "variant": "Phase2",
            "float": { "min": 0.01, "max": 0.02, "minInclusive": true, "maxInclusive": false },
            "fade": null,
            "pattern": null,
            "paintSeed": null
          },
          "askCents": 189676,
          "bidCents": 179344,
          "askListingCount": 66,
          "bidOrderCount": null,
          "sourceUpdatedAt": "2026-06-23T09:10:00.000Z",
          "collectedAt": "2026-06-23T09:11:35.446Z"
        }
      ]
    }
  ],
  "nextCursor": null,
  "sourceGaps": []
}
```

*The documented response for a Doppler Phase 2 Karambit: each bucket combines the phase (`variant`) with a float band.*

By default only float buckets are returned. Add `attributes=float,fade,tag` to include fade-percentage buckets and phase or pattern (`tag`) buckets. Called without an item, the endpoint returns a paginated snapshot of every item; follow `nextCursor` until it is `null`. The [attribute buckets concept page](/api-docs/attribute-buckets) lists BUFF's band edges for every exterior.

## Step 3: pull BUFF's price history

For the item-level series, call per-market history and filter to BUFF. You get the same buckets as the aggregate history (average, median, min, max, best ask, best bid) computed from BUFF observations only. History reads require the Pro plan.

```ts
const history = await client.history.byMarket("AK-47 | Redline (Field-Tested)", {
  markets: ["buff163"],
  interval: "DAY_1",
  from: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000),
});

const buffSeries = history.series.find((s) => s.market === "buff163");
for (const bucket of buffSeries?.history ?? []) {
  console.log(bucket.timestamp.slice(0, 10), bucket.bestAskCents, bucket.bestBidCents);
}
```

For one float band over time, use the BUFF history endpoint. It returns the same buckets with a `points[]` series of open, high, low, and close asks plus the closing bid, at `10m`, `1h`, or `1d` spacing (the default window is the last 7 days). Once you know a band's `bucketId` from Step 2, pass it directly so you only pay for the series you track.

```ts
const bandHistory = await client.buff163.history({
  bucketId: "buff163:cmlofa7dh08ww01yo9lrpej3e:tag:446954:float:0-0.01",
  granularity: "1h",
});

const points = bandHistory.items[0]?.buckets[0]?.points ?? [];
const closes = points.map((p) => p.closeAskCents).filter((c): c is number => c !== null);
console.log(`${closes.length} hourly closes, latest ${closes.at(-1) ?? "n/a"} cents`);
```

*Bucket ids are stable, so store them once and reuse them. This one is the Phase 2 Karambit's 0 to 0.01 band from the sample above.*

## Pitfalls when comparing BUFF with other venues

- Bucket widths differ per market. BUFF uses its own bands; Steam, Market.CSGO, CSFloat, and DMarket use uniform 0.01 bins. Compare on `dimensions.float.min` and `max`, never on bucket labels.
- `bidCents` and `bidOrderCount` can be `null` on a bucket. That means no bid was observed for that band, not a bid of zero.
- A band-level ask is the cheapest listing inside that band. The item-level ask in Step 1 is the cheapest listing overall, which is usually in the widest, highest-float band.
- BUFF's prices are what a buyer sees on BUFF. Withdrawing value from BUFF has its own costs, so a lower BUFF ask is not automatically the cheaper place to buy once you account for moving the item or the money.

> **History windows are capped:** Attribute history rejects windows that would exceed 10,000 buckets (for example, more than about 69 days at `10m`). Use `1h` or `1d` for long ranges, or page the window yourself.

## When to reach for a different endpoint

If you want the same float and phase buckets from every supported market at once, use [cross-market attribute prices](/api-docs/floats), covered in the [float range guide](/resources/cs2-float-range-prices). For Doppler and Gamma Doppler specifically, the [phase pricing guide](/resources/cs2-doppler-phase-prices) shows how to enumerate every phase of an item. And if you are comparing BUFF against Steam, read [Steam vs cash-market prices](/resources/steam-vs-cash-market-prices) first: the two quote in different kinds of money.

## Endpoints used

- [GET /v1/markets/buff163/latest](/api-docs/buff163.md)
- [GET /v1/markets/buff163/history](/api-docs/buff163-history.md)
- [GET /v1/pricing/:marketHashName](/api-docs/price.md)
- [GET /v1/pricing/:marketHashName/history/markets](/api-docs/history-markets.md)

## Related guides

- [How to price a CS2 skin by its float range](/resources/cs2-float-range-prices.md)
- [How to get CS2 Doppler phase prices, from Phase 1 to Emerald](/resources/cs2-doppler-phase-prices.md)
- [How to get CS2 skin price history at any interval](/resources/cs2-price-history.md)
- [Steam Market vs cash-market prices: how to compare them correctly](/resources/steam-vs-cash-market-prices.md)
