Skip to main content
GET/v1/arbitrage/opportunitiesDEVELOPER+

/v1/arbitrage/opportunities

Ranked cross-market arbitrage opportunities. Each pairs a fresh ask on one market with a fresh bid on another and reports the gross spread (spreadBps/spreadCents), an estimated net before withdrawal/trading fees (estimatedNetCents), the tradable quantity, the estimated notional, and per-leg freshness. All prices are integer USD cents.

Each opportunity pairs a fresh ask on one market (buy, where you'd buy) with a fresh bid on another (sell, where you'd sell), and reports the gross spread (spreadBps / spreadCents) plus an estimatedNetCents *before* withdrawal and trading fees. Read feeNotes: the net is an estimate, not a guarantee.

maxTradableQuantity is the size you could actually move across both legs; freshness gives each leg's quote age in milliseconds so you can drop stale pairs. Tune the feed with minSpreadBps, minNotionalCents, limit, and sort.

Parameters

limitintegeroptional
Query. Max opportunities to return. Default: 50.
minSpreadBpsintegeroptional
Query. Minimum gross spread in basis points. Default: 200.
minNotionalCentsintegeroptional
Query. Minimum estimated buy-side notional in USD cents. (minNotional is accepted as a deprecated alias.)
sortstringoptional
Query. estimatedNetCents (default) | spreadBps.
marketsstringoptional
Query. CSV of market ids to restrict both legs, e.g. csfloat,buff163.

Response fields

ArbitrageResponseRanked cross-market arbitrage opportunities.
Ranked by sort (default estimatedNetCents).

Nested and shared shapes link to the API Objects reference.

Response 200

{
  "opportunities": [
    {
      "canonicalItemId": "cmlofcnv60ob001vs1ttav3c4",
      "marketHashName": "★ Butterfly Knife | Doppler (Factory New) - Black Pearl",
      "slug": "butterfly-knife-doppler-factory-new-black-pearl",
      "imageUrl": "https://community.akamai.steamstatic.com/economy/image/...",
      "buy": {
        "market": "avanmarket",
        "price": 838504,
        "quoteSize": 2,
        "updatedAt": "2026-06-23T22:02:19.569Z",
        "isStale": false
      },
      "sell": {
        "market": "buff163",
        "price": 1102328,
        "quoteSize": 10,
        "updatedAt": "2026-06-23T21:59:48.717Z",
        "isStale": false
      },
      "spreadBps": 3146,
      "spreadCents": 263824,
      "estimatedNetCents": 263824,
      "maxTradableQuantity": 2,
      "estimatedNotionalCents": 1677008,
      "feeNotes": "Estimated before withdrawal/trading fees; source prices are buyer-visible USD cents.",
      "freshness": {
        "buyAgeMs": 30366,
        "sellAgeMs": 181218
      },
      "calculatedAt": "2026-06-23T22:02:49.935Z"
    }
  ]
}

Errors

401 / 403Missing, invalid, or insufficient-plan API key.
429Rate limit exceeded; see Retry-After + X-RateLimit-* headers.
5xxUpstream snapshot unavailable or a server-side issue. Retry with backoff.
curl "https://pricing.skinpricer.com/v1/arbitrage/opportunities" \
  -H "Authorization: ApiKey sk_live_•••••••••••"

Authenticated endpoint — call it with your API key from your own client (see the code sample).

Response headers
X-RateLimit-Limit: <per-minute, set by your plan>
X-RateLimit-Remaining: <remaining this minute>
X-RateLimit-Reset: <seconds to reset>
X-Request-ID: req_xxxxxxxxxxxxxxxx

Usage & licensing

Access to the API and its data is governed by our Terms of Service. You may not resell or redistribute the data, use it to build a competing service, or exceed your plan’s rate limits, and you must attribute SkinPricer as the source wherever the Terms permit you to display it. Abuse may be throttled or suspended.