Skip to main content
POST
Publishes your own CS2 items on the CSBoard P2P market at your price. Send one item, or a batch of up to 50 as { "items": [...] }. Take operational_asset_id and asset_revision from GET /v1/p2p/inventory and send them unchanged. Authentication required. Send your key as Authorization: Bearer csb_pub_.... Free — any valid key, no balance requirement and no trading permission.

Seller rules

The same rules as on the website apply:
  • a verified email or a linked Telegram, so we can tell you when an item sells;
  • the CSBoard extension or app able to send the Steam trade, and Steam Mobile Authenticator on the account;
  • no P2P cooldown, suspension or shop lock;
  • a current read of your inventory (see inventory_proof in GET /v1/p2p/inventory).

Price floor

The price may not be under half of our market price for the item. On the website a seller can confirm a lower price after a warning. Over an API key there is no such confirmation: a lower price answers 422 price_below_market with market_usd and floor_usd, so you can adjust and resend. This refusal does not spend your Idempotency-Key. When we have no market price for an item, no floor applies. Prices are in USD, from 0.10 to 100000, in whole cents. 12.345 is refused, not rounded.

Idempotency

Idempotency-Key is required (8–128 characters, unique per publish request). If you resend the same request with the same key, every item that was already published comes back as it is instead of being listed twice. A single replayed item answers 200 with the header Idempotent-Replay: true.
  • Reusing a key with a different price or revision answers 409 idempotency_key_mismatch.
  • After 409 idempotency_key_consumed, an earlier attempt failed part-way — retry with a new key.

Responses

  • One item: 201 with the listing, or 200 on a replay.
  • A batch: always 200, with one result per item in data. One item that fails does not stop the others; a failed item carries the status and code it would have answered on its own.
Writes are limited to 30 requests per minute per key, shared with price changes and removals.

Example request

Example response

Error codes

See the P2P listing guide for what happens after an item sells.

Authorizations

Authorization
string
header
required

Send your key as a Bearer token on every request: Authorization: Bearer csb_pub_.... Generate keys in your CSBoard profile.

Headers

Idempotency-Key
string
required

Required, 8–128 characters, unique per publish request. Resending the same request with the same key returns each item that was already published instead of listing it twice. A key reused with a different price or revision answers 409 idempotency_key_mismatch; after 409 idempotency_key_consumed, use a new key. A 422 price_below_market refusal does not spend the key.

Required string length: 8 - 128

Body

application/json
operational_asset_id
string
required

The copy to list, from GET /p2p/inventory.

Maximum string length: 256
Example:

"5b0c1f7e-3d2a-4c8e-9a61-2f4d8b7e1c30"

asset_revision
string
required

From GET /p2p/inventory, unchanged. If the item changed since you read it, the publish answers 409 asset_revision_changed — read the inventory again.

Required string length: 16 - 128
Example:

"sha256:fd0e6de607b774aaaf4d9cdb7e014c003ba614b03f0460b01e8c94bce034bac5"

price_usd
number
required

Asking price in USD, whole cents (12.34; 12.345 is refused, not rounded). It may not be under half of our market price for the item — see price_below_market.

Required range: 0.1 <= x <= 100000Must be a multiple of 0.01

Response

A batch result, or a single item that was already published under this Idempotency-Key (header Idempotent-Replay: true).

data
object[]
success_count
integer
total_requested
integer