AI agent integration
If you are building an AI agent or LLM-powered tool, the fastest way to give it access to the full API surface is via the machine-readable spec at/llms.txt. That file contains the complete API in a single, compact document — no parsing required.
For agents that support the Model Context Protocol (MCP), add the CSBoard server to your MCP config:
Tracking order state
Do not poll for it. Register a webhook and we POST the order to you the moment its state changes — the same objectGET /v1/orders/:id returns, HMAC-signed, retried for 24 hours if your endpoint is down. A withdrawal flow that has to react to delivered, hold or returned is the case push exists for: polling every open order is a cost that grows with your order book rather than with the number of things that actually happened.
Keep a periodic GET /v1/orders sweep as a reconciliation backstop, not as your primary signal.
Polling for new listings
To detect new listings as they appear without re-scanning the entire catalog, usesort=newest combined with cursor pagination. On each poll cycle, walk pages until you reach a listing ID you have already seen, then stop.
Price monitoring bot
PollGET /v1/prices on a schedule, compare each item’s min_price_usd against your target threshold, and trigger an alert or automated buy when the price drops below it.
min_price_usd from /v1/prices is an indicative grouped snapshot — it can lag the live per-item price. Always fetch the specific listing from /v1/listings and use its price_usd as the authoritative price before placing an order.Safe buying automation
Automated buying requires more defensive coding than manual purchasing. Follow these four rules unconditionally. 1. Always sendmax_price_usd
Your ceiling is enforced atomically inside the balance debit. Without it, a price spike between your listing fetch and your order execution can result in an unexpected charge. Set max_price_usd to the price_usd you observed, plus a small buffer if you are willing to absorb minor slippage:
429 with Retry-After
Rate-limited responses include a Retry-After header (seconds). Always read that value and sleep for exactly that duration — do not use a fixed backoff, as it may be shorter or longer than required.
4. Handle 409 price_moved gracefully
A 409 price_moved means the price moved past your ceiling — nothing was charged. Decide whether to re-fetch the listing, update max_price_usd, and retry, or abandon the opportunity:
Bulk data pipeline
For comparison sites, analytics dashboards, or any system that needs the full catalog, use the snapshot endpoint instead of paginating through/v1/prices.
ETag header value from each 200 response and send it back as If-None-Match on the next request. A 304 Not Modified response means your local copy is still current.
The snapshot endpoint is rate-limited to 1 request per minute. Structure your pipeline to use it as a base layer refreshed every few minutes, and overlay real-time updates from
/v1/prices for items you are actively monitoring.