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

# POST /v1/sell/quotes: Quote a Steam Inventory for Instant Sell

> Price every CS2, Dota 2 or Rust item in a seller's Steam inventory. Each item comes back with the exact USD amount your balance is credited, and the trade offer it would ship in.

Quote a seller's inventory before you sell it. Every item the CSBoard network will buy right now comes back with `price_usd`, the exact amount your balance is credited for it. Items nobody will buy are left out.

**Authentication required.** Send your key as `Authorization: Bearer csb_pub_...`.

**Selling capability required.** Instant Sell is invite-only. Until it is enabled for your key this answers `403 selling_not_enabled`. See the [Instant Sell guide](/guides/instant-sell).

## Request body

<ParamField body="trade_url" type="string" required>
  The seller's Steam trade URL (20 to 300 characters). Their inventory is quoted, and the trade offers are later sent here.
</ParamField>

<ParamField body="app_id" type="integer" default="730">
  Steam app to quote: `730` CS2, `570` Dota 2, `252490` Rust. Leave it out for CS2. A game your key cannot sell answers `422 unsupported_game` with the `supported_app_ids` it can.
</ParamField>

<ParamField body="split" type="boolean" default="false">
  `false`: the whole sale ships as **one** trade offer. `true`: every item goes to the market that pays the most for it, which can mean several offers. Use the same value when you create the order. See [one offer or several](/guides/instant-sell#one-offer-or-several).
</ParamField>

## Response fields

<ResponseField name="items" type="SellQuoteItem[]" required>
  Sellable items.

  <Expandable title="SellQuoteItem object">
    <ResponseField name="asset_id" type="string" required>
      Steam asset id. Pass it back in `asset_ids` to sell the item.
    </ResponseField>

    <ResponseField name="app_id" type="integer" required>
      Steam app of the item.
    </ResponseField>

    <ResponseField name="market_hash_name" type="string" required />

    <ResponseField name="price_usd" type="number" required>
      Exactly what your balance is credited for this item, in USD. The order books this same price.
    </ResponseField>

    <ResponseField name="float" type="number | null">
      CS2 float, when known. Always `null` for Dota 2 and Rust.
    </ResponseField>

    <ResponseField name="phase" type="string | null">
      Reserved. Always `null` today.
    </ResponseField>

    <ResponseField name="icon_url" type="string | null">
      Reserved. Always `null` today.
    </ResponseField>

    <ResponseField name="offer_group" type="string" required>
      The trade offer this item rides in if you sell the whole inventory: `a`, `b` and so on, biggest offer first. Count the distinct letters to know how many offers the seller will get. Always `a` when `split` is `false`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="expires_at" type="datetime" required>
  Quotes are good for about two minutes. Re-quote before you create an order if this has passed.
</ResponseField>

## Example request

```bash theme={null}
curl -X POST https://csboard.com/v1/sell/quotes \
  -H "Authorization: Bearer csb_pub_..." \
  -H "Content-Type: application/json" \
  -d '{
    "trade_url": "https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh",
    "app_id": 730,
    "split": true
  }'
```

## Example response

```json theme={null}
{
  "items": [
    {
      "asset_id": "41165110534",
      "app_id": 730,
      "market_hash_name": "AK-47 | Redline (Field-Tested)",
      "price_usd": 48.3,
      "float": 0.23,
      "phase": null,
      "icon_url": null,
      "offer_group": "a"
    },
    {
      "asset_id": "41165110599",
      "app_id": 730,
      "market_hash_name": "Glock-18 | Water Elemental (Minimal Wear)",
      "price_usd": 13.12,
      "float": 0.11,
      "phase": null,
      "icon_url": null,
      "offer_group": "b"
    }
  ],
  "expires_at": "2026-10-06T14:04:11Z"
}
```

## Error codes

| HTTP status | Code | Meaning |
| - | - | - |
| 400 | `invalid_request` | Malformed body, or an `app_id` outside `730`, `570`, `252490`. |
| 400 | `invalid_trade_url` | The trade URL does not resolve to a Steam account. |
| 400 | `private_inventory` | The seller's Steam inventory is private. |
| 403 | `selling_not_enabled` | Instant Sell is not enabled for this key. |
| 422 | `unsupported_game` | The game is not open for instant sell on this key. Includes `supported_app_ids`. |
| 429 | `rate_limited` | More than 10 quotes per minute on this key. Wait `Retry-After` seconds. |
| 502 | `inventory_unavailable` | Steam did not return the inventory. Retry shortly. |
| 503 | `sell_disabled` | Instant Sell is switched off right now. |


## OpenAPI

````yaml POST /sell/quotes
openapi: 3.1.0
info:
  title: CSBoard API
  version: 1.0.0
  description: >-
    Market data over the CSBoard marketplace — live listings, floats, stickers,
    minAsk prices, FX rates — plus opt-in buying straight from your balance.
    Free to read, key-gated, built for automation.
  contact:
    name: CSBoard
    url: https://csboard.com/docs
servers:
  - url: https://csboard.com/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Status
    description: Liveness and freshness probes.
  - name: Market data
    description: Read the live catalog, prices, and FX rates.
  - name: Trading
    description: Buy listings from your CSBoard balance. Opt-in, key-gated.
  - name: Instant Sell
    description: >-
      Sell CS2, Dota 2 and Rust items from any Steam inventory to the CSBoard
      network and get paid to your balance. Invite-only.
  - name: P2P
    description: >-
      List your own CS2 skins on the CSBoard P2P market. Free — any valid key,
      no balance requirement.
  - name: Account
    description: Your balance, settled funds, and trading status.
  - name: Webhooks
    description: Register an endpoint and receive signed order updates instead of polling.
paths:
  /sell/quotes:
    post:
      tags:
        - Instant Sell
      summary: Quote a Steam inventory
      description: >-
        Every item in the seller's inventory that the CSBoard network will buy
        right now, with the exact USD amount your balance is credited per item.
        10 requests per minute per key.
      operationId: createSellQuote
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SellQuoteRequest'
            example:
              trade_url: >-
                https://steamcommunity.com/tradeoffer/new/?partner=123456789&token=AbCdEfGh
              app_id: 730
              split: true
      responses:
        '200':
          description: Quoted items.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SellQuote'
              example:
                items:
                  - asset_id: '41165110534'
                    app_id: 730
                    market_hash_name: AK-47 | Redline (Field-Tested)
                    price_usd: 48.3
                    float: 0.23
                    phase: null
                    icon_url: null
                    offer_group: a
                  - asset_id: '41165110599'
                    app_id: 730
                    market_hash_name: Glock-18 | Water Elemental (Minimal Wear)
                    price_usd: 13.12
                    float: 0.11
                    phase: null
                    icon_url: null
                    offer_group: b
                expires_at: '2026-10-06T14:04:11Z'
        '400':
          description: >-
            Malformed body, or a trade URL that does not resolve to a Steam
            account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: invalid_trade_url
                detail: >-
                  The trade URL is malformed or does not resolve to a Steam
                  account.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: Selling is not enabled for this key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: selling_not_enabled
                detail: >-
                  Instant Sell API is granted per-account. Contact
                  support@csboard.com to request access.
        '422':
          description: The game is not open for instant sell on this key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: unsupported_game
                detail: >-
                  app_id 570 is not open for instant sell on this key.
                  Supported: 730, 252490.
                supported_app_ids:
                  - 730
                  - 252490
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          description: Instant Sell is switched off right now. Reads keep working.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                code: sell_disabled
                detail: Instant Sell API is temporarily disabled.
components:
  schemas:
    SellQuoteRequest:
      type: object
      required:
        - trade_url
      properties:
        trade_url:
          type: string
          minLength: 20
          maxLength: 300
          description: >-
            The seller's Steam trade URL. Their inventory is quoted and the
            offers are sent here.
        app_id:
          type: integer
          enum:
            - 730
            - 570
            - 252490
          default: 730
          description: >-
            Steam app to quote: `730` CS2, `570` Dota 2, `252490` Rust. Leave it
            out for CS2. A game your key cannot sell answers `422
            unsupported_game`.
        split:
          type: boolean
          default: false
          description: >-
            `false`: the whole sale ships as ONE trade offer. `true`: every item
            goes to the market that pays most for it, which can mean several
            offers. See the Instant Sell guide.
    SellQuote:
      type: object
      required:
        - items
        - expires_at
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/SellQuoteItem'
        expires_at:
          type: string
          format: date-time
          description: Quotes are good for about two minutes.
    Error:
      type: object
      description: >-
        All errors return { code, detail }. Some carry extra fields (e.g.
        price_moved adds current_total_usd, insufficient_balance adds
        required_usd/current_usd).
      properties:
        code:
          type: string
          description: >-
            Machine-readable error code, e.g. rate_limit_exceeded,
            trading_not_enabled, price_moved.
        detail:
          type: string
          description: Human-readable explanation.
      required:
        - code
    SellQuoteItem:
      type: object
      required:
        - asset_id
        - app_id
        - market_hash_name
        - price_usd
        - offer_group
      properties:
        asset_id:
          type: string
          description: Steam asset id. Pass it back in `asset_ids` to sell the item.
        app_id:
          type: integer
          description: Steam app of the item.
        market_hash_name:
          type: string
        price_usd:
          type: number
          description: Exactly what your balance is credited for this item, in USD.
        float:
          type:
            - number
            - 'null'
          description: CS2 float, when known. Always null for Dota 2 and Rust.
        phase:
          type:
            - string
            - 'null'
          description: Reserved. Always null today.
        icon_url:
          type:
            - string
            - 'null'
          description: Reserved. Always null today.
        offer_group:
          type: string
          description: >-
            Which trade offer the item rides in if you sell the whole inventory:
            `a`, `b`, and so on, biggest offer first. Always `a` when `split` is
            false.
  responses:
    Unauthorized:
      description: Missing or invalid API key (`missing_api_key` or `invalid_api_key`).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: missing_api_key
            detail: >-
              Provide your API key via `Authorization: Bearer csb_pub_…`.
              Generate one at https://csboard.com/profile?tab=api
    RateLimited:
      description: >-
        Rate limit exceeded. Includes a Retry-After header (60 seconds on the
        per-key limits).
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            code: rate_limit_exceeded
            detail: Rate limit of 100 requests/min exceeded.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Send your key as a Bearer token on every request: `Authorization: Bearer
        csb_pub_...`. Generate keys in your CSBoard profile.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.