Kucoin现货账户余额查询报错:Invalid KC-API-SIGN (400005)
解决Kucoin REST API 401 Invalid KC-API-SIGN错误
调用Kucoin查询现货账户余额的API时返回401错误,提示Invalid KC-API-SIGN,以下是问题排查和修正方案:
代码中的关键问题
- 缺少
time模块导入,导致time.time()无法正常调用 - 加密后的
passphrase是bytes类型,未转换为字符串直接放入请求头,导致签名验证失败 - 需确保API凭证(Key/Secret/Passphrase)与Kucoin平台生成的内容完全匹配,无多余空格或字符
修正后的代码
import hmac import hashlib import base64 import requests import time # 补充time模块导入 api_key = 'YOUR_API_KEY' api_secret = 'YOUR_API_SECRET' api_passphrase = 'YOUR_API_PASSPHRASE' url = 'https://api.kucoin.com/api/v1/accounts' now = str(int(time.time() * 1000)) # 签名字符串格式:timestamp + 大写请求方法 + API路径(不含域名) str_to_sign = now + 'GET' + '/api/v1/accounts' signature = hmac.new(api_secret.encode('utf-8'), str_to_sign.encode('utf-8'), hashlib.sha256).hexdigest() # 将加密后的passphrase从bytes转为字符串 passphrase = base64.b64encode(hmac.new(api_secret.encode('utf-8'), api_passphrase.encode('utf-8'), hashlib.sha256).digest()).decode('utf-8') headers = { "KC-API-SIGN": signature, "KC-API-TIMESTAMP": now, "KC-API-KEY": api_key, "KC-API-PASSPHRASE": passphrase, "KC-API-KEY-VERSION": "2" } response = requests.get(url, headers=headers) print(response.status_code) print(response.json())
额外排查要点
- 时间同步:本地服务器时间需与UTC时间误差控制在30秒内,Kucoin API对时间戳有效性有严格校验
- 请求方法一致性:
str_to_sign中的请求方法必须为大写(如GET),且与实际请求方法完全一致 - 路径准确性:
str_to_sign中的API路径必须和请求的endpoint路径完全匹配,不能包含域名部分 - API权限检查:确认生成的API Key已开启「查询账户余额」的权限,部分受限的API Key会导致签名验证失败
内容的提问来源于stack exchange,提问作者Asad Jalbani
相关产品推荐
相关产品推荐

