v1.14.0 - 2026-01-07
Added
-
Price increment validation for order prices
Order prices must now be divisible by the minimum price increment for the base asset. This ensures consistent pricing across all trading pairs and improves orderbook efficiency.
Price increments by asset:
Asset Minimum Increment BTC $1.00 ETH $0.10 ARB $0.01 Affected endpoints:
POST /limit- validatespricefieldPATCH /limit- validatespricefieldPOST /market- validateslimit_pricefieldPOST /combo- validateslimit_perp_pricefield (perp leg only; option legs are exempt)
New error code:
MIN_INCREMENT_PRICE_VIOLATIONOrders with non-compliant prices will be rejected with HTTP 400:
{ "error": "MIN_INCREMENT_PRICE_VIOLATION", "message": "Min price increment requirement violated for ETH_USDC-PERPETUAL. Price: 2500.15, Must be divisible by: 0.1" }Migration:
// Before (may fail validation) const order = { instrument_name: 'ETH_USDC-PERPETUAL', price: 2500.15, // Not divisible by 0.1 amount: 1000 }; // After (compliant) const order = { instrument_name: 'ETH_USDC-PERPETUAL', price: 2500.10, // Divisible by 0.1 amount: 1000 };Benefits: Consistent pricing grid improves orderbook depth aggregation and reduces price fragmentation.
-
Size increment constraints now documented
Order sizes must be divisible by the size increment for the asset. This validation was already enforced but is now explicitly documented with programmatic access via
/api/v1/exchange_info.Size increments:
Instrument Asset Size Increment Options BTC 0.01 contracts Options ETH 0.1 contracts Options ARB 100 contracts Perpetuals All $1 USD Error code:
MIN_INCREMENT_SIZE_VIOLATION{ "error": "MIN_INCREMENT_SIZE_VIOLATION", "message": "Min size increment requirement violated for BTC_USDC-PERPETUAL. Size: 1.5, Must be divisible by: 1" } -
GET /api/v1/exchange_infoendpoint now documentedThis public endpoint (no authentication required) returns static exchange configuration including:
- Trading pairs and their status
- Order constraints (price increments, minimum sizes, max slippage)
- Instrument specifications and naming formats
- Fee structures
- Rate limits
- WebSocket channel definitions
Usage:
const response = await fetch('https://sandbox.kyan.sh/api/v1/exchange_info'); const config = await response.json(); // Access price increments const btcIncrement = config.orderConstraints.priceIncrements.constraints.BTC; // 1 const ethIncrement = config.orderConstraints.priceIncrements.constraints.ETH; // 0.1 const arbIncrement = config.orderConstraints.priceIncrements.constraints.ARB; // 0.01Benefits: Programmatic access to exchange configuration enables dynamic validation and reduces hardcoded values in client applications.
