Query & Manage Earn Instruments

KuCoin's Earn products — flexible/fixed savings, staking (general, KCS, ETH), dual investment, and promotions — share one purchase/redeem flow under client.earn. These calls need credentials — see API Keys Setup.

List Products

Each product family has its own listing call:

from typed_kucoin import KuCoin

async with KuCoin.new() as client:
  savings = await client.earn.savings_products(currency='USDT')
  staking = await client.earn.staking_products(currency='USDT')
  dual = await client.earn.dual_investment_products(category='DUAL_CLASSIC')
  for product in savings:
    print(product['id'], product['currency'], product['returnRate'])

earn.kcs_staking_products, earn.eth_staking_products and earn.promotion_products cover the remaining families.

List Your Holdings

from typed_kucoin import KuCoin

async with KuCoin.new() as client:
  holdings = await client.earn.account_holding(currency='USDT')
  for holding in holdings['items']:
    print(holding['orderId'], holding['productType'], holding['holdAmount'])

Use earn.account_holding_paged to walk every page automatically — see Paginate Through Results.

Subscribe To A Product

from typed_kucoin import KuCoin

async with KuCoin.new() as client:
  savings = await client.earn.savings_products(currency='USDT')
  result = await client.earn.purchase({
    'productId': savings[0]['id'],
    'amount': '10',
    'accountType': 'TRADE',
  })
  print(result['orderId'])

Redeem A Holding

Preview a redemption before submitting it — early redemption of a fixed-term holding can carry an interest penalty:

from typed_kucoin import KuCoin

async with KuCoin.new() as client:
  order_id = 'holding-order-id'
  preview = await client.earn.redeem_preview(order_id=order_id)
  print(preview['redeemAmount'], preview['penaltyInterestAmount'])

  redeemed = await client.earn.redeem(order_id=order_id, amount='10')
  print(redeemed['status'])