راهنمای کلید API
API Key برای دسترسی کنترلشده به APIهای نوبیتکس طراحی شده است. هر کلید میتواند دسترسی محدود، لیست IP مجاز و تاریخ انقضا داشته باشد.
چرا API Key؟
- محدود کردن سطح دسترسی به مجوزهای مشخص
- پشتیبانی از IP Whitelist
- امکان تعیین تاریخ انقضا
- امکان حذف کلید بدون تغییر رمز عبور اصلی
- مناسب برای رباتها و اسکریپتهای خودکار
دسترسیها
| دسترسی | کاربرد |
|---|---|
READ | خواندن اطلاعات کاربر، سفارشها، کیفپولها، برداشتها، پرتفو و دادههای مشابه |
TRADE | ثبت، لغو یا تغییر سفارشهای اسپات و تعهدی و عملیات تبدیل موجودی |
WITHDRAW | ثبت، تایید، لغو و عملیات مرتبط با برداشت |
DEPOSIT | ساخت شناسه عمومی کاربر و آدرس واریز رمزارز |
ADDRESS_BOOK | افزودن، حذف و تغییر وضعیت دفتر آدرس و برداشت امن |
OTP | درخواست رمز یکبارمصرف از APIهای مرتبط، مانند دفتر آدرس یا آنتیفیشینگ |
VIP_CREDIT | دریافت و بازپرداخت اعتبار ویژه و مشاهده طرح، بدهی، تراکنشها و سقفهای قابل محاسبه |
هر کلید میتواند یک یا چند دسترسی داشته باشد. مقدار permissions هنگام ساخت کلید به صورت رشته جداشده با کاما ارسال میشود، مانند READ,TRADE.
مسیرهای اصلی هر دسترسی
فهرست زیر مسیرهای مستندشدهای را نشان میدهد که از API Key پشتیبانی میکنند. صفحه اختصاصی هر API مرجع نهایی دسترسی مورد نیاز آن است.
استفاده از 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 پایتون امضا شده است.