Changelog

Changelog

DateVersionNotes
2026-09-24v1.1Whitepay preparation: compatible deposit interfaces added with Whitepay disabled. Existing Heleket top-ups remain active.
2026-09-23v1.1Purchase 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-17v1.1Realtime 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-23v1.0CatalogItem 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-03v1.0CatalogItem 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-15v1.0Added 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-15v1.0Added 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_id and trade_offer_url values 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-sync failures and buy-by-name replays of a failed attempt include purchase_id, custom_id, failure, and trade offer fields alongside the existing HTTP error. 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.