API کلید API نوبیتکس
API Key برای دسترسی کنترلشده به APIهای نوبیتکس طراحی شده است. هر کلید میتواند دسترسی محدود، لیست IP مجاز و تاریخ انقضا داشته باشد.
چرا API Key؟
- محدود کردن سطح دسترسی به مجوزهای مشخص
- پشتیبانی از IP Whitelist
- امکان تعیین تاریخ انقضا
- امکان حذف یا غیرفعالسازی بدون تغییر رمز عبور اصلی
- مناسب برای رباتها و اسکریپتهای خودکار
دسترسیها
| دسترسی | کاربرد |
|---|---|
READ | خواندن اطلاعات کاربر، سفارشها، کیفپولها، برداشتها، پرتفو و دادههای مشابه |
TRADE | ثبت، لغو یا تغییر سفارشهای اسپات و تعهدی و عملیات تبدیل موجودی |
WITHDRAW | ثبت، تایید، لغو و عملیات مرتبط با برداشت |
DEPOSIT | ساخت آدرس واریز رمزارز |
ADDRESS_BOOK | افزودن، حذف و تغییر وضعیت دفتر آدرس و برداشت امن |
OTP | درخواست رمز یکبارمصرف از APIهای مرتبط، مانند دفتر آدرس یا آنتیفیشینگ |
هر کلید میتواند یک یا چند دسترسی داشته باشد. مقدار permissions هنگام ساخت کلید به صورت رشته جداشده با کاما ارسال میشود، مانند READ,TRADE.
استفاده از API Key
برای درخواستهای پشتیبانیشده، به جای هدر Authorization سه هدر زیر را ارسال کنید:
| Header | توضیح |
|---|---|
Nobitex-Key | کلید عمومی برگشتی در فیلد key |
Nobitex-Signature | امضای Ed25519 به صورت URL-safe Base64 |
Nobitex-Timestamp | زمان Unix بر حسب ثانیه در UTC |
مقدار Nobitex-Timestamp در محیط production باید حداکثر ۳۰ ثانیه با زمان سرور اختلاف داشته باشد.
ساخت امضا
متن امضا دقیقا به این شکل ساخته میشود:
timestamp + METHOD + full_path + raw_body
timestamp: همان رشتهای که در هدرNobitex-Timestampارسال میکنید.METHOD: متد HTTP با حروف بزرگ، مانندGETیاPOST.full_path: مسیر کامل درخواست همراه query string، مانند/market/orders/list?fromId=123.raw_body: بدنه خام درخواست دقیقا به همان شکلی که ارسال میشود. برای درخواست بدون body این بخش رشته خالی است.
دقت کنید که فاصلهها، ترتیب کلیدهای JSON و newlineهای body در امضا اثر دارند. رشتهای را امضا کنید که دقیقا به سرور ارسال میشود.
نمونه ساخت امضا برای درخواست POST /market/orders/cancel-old:
import base64
import json
import time
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
timestamp = str(int(time.time()))
method = "POST"
full_path = "/market/orders/cancel-old"
body = json.dumps({"hours": 2.4}, separators=(",", ":"))
payload = f"{timestamp}{method}{full_path}{body}".encode()
private_key_b64 = "<Your-Private-Key>"
private_key_bytes = base64.urlsafe_b64decode(private_key_b64)
private_key = Ed25519PrivateKey.from_private_bytes(private_key_bytes)
signature = private_key.sign(payload)
signature_b64 = base64.urlsafe_b64encode(signature).decode()
print(signature_b64)
نمونه درخواست متناظر:
BODY='{"hours":2.4}'
curl -X POST 'https://apiv2.nobitex.ir/market/orders/cancel-old' \
-H "Content-Type: application/json" \
-H "Nobitex-Key: <Your-Public-Key>" \
-H "Nobitex-Signature: <Generated-Signature>" \
-H "Nobitex-Timestamp: <Unix-Timestamp>" \
-d "$BODY"
در این نمونه مقدار BODY باید همان رشتهای باشد که در متغیر body پایتون امضا شده است.
Authentication
- API Key: TokenAuth
- API Key: NobitexKeyAuth
- API Key: NobitexSignatureAuth
- API Key: NobitexTimestampAuth
توکن احراز هویت به صورت Token <token>.
Security Scheme Type: | apiKey |
|---|---|
Header parameter name: | Authorization |
کلید عمومی API Key.
Security Scheme Type: | apiKey |
|---|---|
Header parameter name: | Nobitex-Key |
امضای Ed25519 به صورت URL-safe Base64.
Security Scheme Type: | apiKey |
|---|---|
Header parameter name: | Nobitex-Signature |
زمان Unix بر حسب ثانیه در UTC.
Security Scheme Type: | apiKey |
|---|---|
Header parameter name: | Nobitex-Timestamp |