Added

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:

    AssetMinimum Increment
    BTC$1.00
    ETH$0.10
    ARB$0.01

    Affected endpoints:

    • POST /limit - validates price field
    • PATCH /limit - validates price field
    • POST /market - validates limit_price field
    • POST /combo - validates limit_perp_price field (perp leg only; option legs are exempt)

    New error code: MIN_INCREMENT_PRICE_VIOLATION

    Orders 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:

    InstrumentAssetSize Increment
    OptionsBTC0.01 contracts
    OptionsETH0.1 contracts
    OptionsARB100 contracts
    PerpetualsAll$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_info endpoint now documented

    This 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.01

    Benefits: Programmatic access to exchange configuration enables dynamic validation and reduces hardcoded values in client applications.