Changelog
| Date | Version | Notes |
|---|---|---|
| 2026-09-24 | v1.1 | Whitepay preparation: compatible deposit interfaces added with Whitepay disabled. Existing Heleket top-ups remain active. |
| 2026-09-23 | v1.1 | Purchase failure reasons and trade offer IDs: shared failure codes across all providers, consistent purchase/webhook details, and preservation of known offer IDs after failure. Includes integration and historical-payload compatibility notes. |
| 2026-09-17 | v1.1 | Realtime feed: authenticated WebSocket batches for offer additions, price changes and removals, cursor replay and explicit resync after engine restarts. Full dumps expose X-Catalog-Cursor and X-Catalog-Epoch when a replay checkpoint is available. |
| 2026-06-23 | v1.0 | CatalogItem now includes a stickers array on every item (full-dump, listing, and search). The array is always present — empty [] when the item has no stickers or when sticker details are unavailable for the source provider. Each entry exposes slot, name, sticker_id, image_url, and wear. Full data available for CS2DT / SkinsBack / SalesPanel sourced listings. See Sticker object. |
| 2026-06-03 | v1.0 | CatalogItem now exposes supplier-side Steam identifiers: asset_id, steam_id, class_id, instance_id. All string | null and additive — existing fields are unchanged. See the schema note on volatility and coverage. |
| 2026-05-15 | v1.0 | Added POST /buy-by-name — purchase by market_hash_name with automatic retry on the next cheapest item when the provider rejects. Up to 5 attempts within a 30-second budget. |
| 2026-05-15 | v1.0 | Added POST /buy-sync — purchase that blocks until the provider acknowledges (or rejects) the order. |
The versions above label API releases. The HTTP path remains /api/v1/merchant; | ||
WebSocket frames use their own v: 1 field. The OpenAPI specification format is separate | ||
| from both. See Versioning for compatibility. |
Whitepay preparation
Released on 2026-09-24 with Whitepay disabled. This release prepares the deposit interfaces and merchant panel for a later Whitepay rollout. Whitepay wallet creation and deposit processing are not enabled.
Continue using the existing Heleket deposit addresses. Existing balances, deposit history and commission tiers are preserved. No integration changes are required for this preparation release; Whitepay availability will be announced separately.
Purchase failure reasons and trade offer IDs
Released on 2026-09-23. Purchase failures now use the same
16 public reason codes across all
providers in GET/list responses, synchronous failure details and new purchase
webhooks (data.failure_code). Specific causes include private inventory, unavailable
trading, invalid trade URLs or tokens, declined offers, counteroffers and expiry.
A specific cause is reported only when the provider identifies it; otherwise the
response uses a broader cancellation code or UNKNOWN.
- Known
trade_offer_idandtrade_offer_urlvalues are retained after failure or rollback. A later response without an ID does not erase a known one. Null means the ID is unknown, even if an offer may have been sent. buy-syncfailures andbuy-by-namereplays of a failed attempt includepurchase_id,custom_id,failure, and trade offer fields alongside the existing HTTPerror. Pre-creation errors and retry-cycle exhaustion keep their ordinary error body. See Failure and offer metadata.- Public reason codes do not determine refund eligibility. Check the reported refund amount and refund events. Buyer rollback after delivery receives no refund; seller rollback receives a full refund; an unknown initiator requires manual review without an automatic refund.
Integration action: update any failure-code allowlists to the shared reference,
handle unknown values, and stop matching on message text. HTTP error.code values
remain MERCHANT_*; they are separate from a purchase’s failure.code.
Existing purchases without a stored detailed reason use a conservative fallback; reading them does not rewrite history. Already-saved webhook payloads and their retries retain the previous codes/messages and can omit offer fields. No historical events are automatically replayed. See compatibility and the webhook event catalogue.