Skip to content

Commit 390e952

Browse files
authored
move apikey to public (#329)
* move apikey to public * add apikey to intro
1 parent a1360ea commit 390e952

3 files changed

Lines changed: 273 additions & 273 deletions

File tree

source/includes/_intro.md

Lines changed: 273 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,279 @@ Authorization: Token yourTOKENhereHEX0000000000
4949
<a href="#login">API ورود - دریافت توکن</a>
5050
استفاده نمایید. ولی این کار ضروری نیست و روش پیشنهادی ما برای اغلب کاربران دریافت مستقیم توکن از پنل کاربری است. تنها در صورتی که با مخاطرات ذخیره گذرواژه خود در کد و روش‌های امن این کار آشنا هستید، در استفاده از API مهارت دارید، و از طرفی نیاز به دریافت کاملاً خودکار توکن دارید، از API دریافت توکن استفاده نمایید.
5151

52+
## کلید ای‌پی‌آی (آزمایشی)
53+
54+
کلید ای پی آی برای دسترسی امن تر و با مجوز مشخص به ای پی آی‌های نوبیتکس طراحی
55+
شده است.
56+
کلید ای پی آی به شما اجازه می‌دهد به صورت کنترل شده و از روی آی پی مشخص،
57+
به ای پی آی های نوبیتکس دسترسی داشته باشید و مدت زمان اعتبار کلید را مشخص کنید.
58+
59+
60+
### اهداف و کاربردها
61+
62+
#### چرا API Key؟
63+
- امنیت بیشتر (امکان تعریف سطح دسترسی محدود) با سه دسترسی READ, WITHDRAW, TRADE
64+
- پشتیبانی از **IP Whitelist**
65+
- قابلیت تنظیم تاریخ انقضای دلخواه
66+
- قابلیت غیرفعال‌سازی یا حذف بدون تغییر پسورد اصلی
67+
- مناسب برای ربات‌ها و اسکریپت‌های خودکار
68+
69+
#### سطوح دسترسی (Permissions)
70+
- **READ** →دریافت اطلاعات بدون تغییر در دیتابیس
71+
- **TRADE** → عملیات‌های مربوط به معامله و ترید، که منجر به تغییری در دیتابیس می‌شوند.
72+
- **WITHDRAW** → دسترسی عملیات برداشت
73+
74+
توجه کنید که برای دسترسی به ای پی آی هایی مانند لیست سفارشات، دسترسی READ الزامی است.
75+
هر کلید می‌تواند یکی یا چند دسترسی داشته باشد.
76+
77+
---
78+
79+
### 2. ایجاد API Key
80+
81+
#### آدرس
82+
83+
POST /apikeys/create
84+
85+
#### پارامترهای ورودی
86+
87+
| پارامتر | نوع | پیش‌فرض | توضیحات | نمونه |
88+
|------------------------|----------------|-------------|--------------------------------------------------------------------------|---------------------------------------------|
89+
| `name` | string | الزامی | نام کلید برای شناسایی توسط کاربر | `"my-api-key"` |
90+
| `description` | string | خالی (`''`) | توضیحات دلخواه کاربر | `"API key for internal services"` |
91+
| `permissions` | string (enum) | الزامی | مقادیر مجاز: `READ`, `TRADE`, `WITHDRAW` (به صورت رشته و جداشده با کاما) | `"READ,TRADE"` |
92+
| `ipAddressesWhitelist` | list | `[]` | لیست آدرس‌های IP مجاز (IPv4/IPv6) | `["192.168.1.10", "10.0.0.5"]` |
93+
| `expirationDate` | datetime (UTC) | `None` | تاریخ انقضای کلید (اختیاری) | `"2025-12-31T23:59:59Z"` |
94+
95+
96+
#### نکات امنیتی
97+
- ارسال **OTP (2FA)** در هدر `X-totp` الزامی است.
98+
- بعد از ایجاد کلید، یک **ایمیل اطلاع‌رسانی** برای کاربر ارسال می‌شود.
99+
- رویداد ایجاد کلید در لاگ ثبت می‌شود.
100+
101+
> نمونه درخواست
102+
103+
```json
104+
{
105+
"name": "my-api-key",
106+
"description": "API key for internal services",
107+
"permissions": "READ,TRADE",
108+
"ipAddressesWhitelist": [
109+
"192.168.1.10",
110+
"10.0.0.5"
111+
],
112+
"expirationDate": "2025-12-31T23:59:59Z"
113+
}
114+
```
115+
116+
> نمونه پاسخ
117+
118+
```json
119+
{
120+
"key": {
121+
"createdAt": "2025-09-02T16:50:29.381869Z",
122+
"description": "API key for internal services",
123+
"expirationDate": "2025-12-31T23:59:59Z",
124+
"ipAddressesWhitelist": ["192.168.1.10", "10.0.0.5"],
125+
"key": "5XOCQZSPLQM4MiLzuUnZoBuqgYgTKl40W2X5j1pxfIA=",
126+
"name": "my-api-key",
127+
"permissions": "READ,TRADE",
128+
"updatedAt": "2025-09-02T16:50:29.381876Z"
129+
},
130+
"privateKey": "S5y19KewZzheCWCO4xqMcwwvtR8vQ-hHjE_cdjz-XxE=",
131+
"status": "ok"
132+
}
133+
```
134+
⚠️ توجه: کلید خصوصی (privateKey) فقط یک بار در پاسخ نمایش داده می‌شود. حتماً آن را در مکان امن (Secret Manager) ذخیره کنید.
135+
136+
### 2. مدیریت کلیدها
137+
138+
#### لیست کلیدها
139+
140+
GET /apikeys/list
141+
142+
خروجی: لیست کلیدهای کاربر + وضعیت و اطلاعات آنها.
143+
144+
#### حذف کلید
145+
146+
POST /apikeys/delete/<public_key>
147+
148+
ورودی: public_key در آدرس
149+
خروجی:
150+
```json
151+
{
152+
"status": "ok"
153+
}
154+
```
155+
156+
کلید عمومی را در یو آر ال قرار دهید.
157+
158+
#### بروزرسانی کلید
159+
160+
POST /apikeys/update/<public_key>
161+
162+
قابل تغییر: name, description, ipAddressesWhitelist
163+
خروجی: شیء کلید به‌روزرسانی‌شده.
164+
165+
> نمونه درخواست
166+
167+
```json
168+
{
169+
"name": "my-api-key",
170+
"description": "API key for internal services",
171+
"ipAddressesWhitelist": [
172+
"192.168.1.10",
173+
"10.0.0.5"
174+
]
175+
}
176+
```
177+
178+
> نمونه پاسخ
179+
180+
```json
181+
{
182+
"key": {
183+
"createdAt": "2025-09-02T16:50:29.381869Z",
184+
"description": "API key for internal services",
185+
"expirationDate": "2025-12-31T23:59:59Z",
186+
"ipAddressesWhitelist": ["192.168.1.10", "10.0.0.5"],
187+
"key": "5XOCQZSPLQM4MiLzuUnZoBuqgYgTKl40W2X5j1pxfIA=",
188+
"name": "my-api-key",
189+
"permissions": "READ,TRADE",
190+
"updatedAt": "2025-09-02T16:50:29.381876Z"
191+
},
192+
"status": "ok"
193+
}
194+
```
195+
196+
### دسترسی ها
197+
198+
سه دسترسی خواندن، معامله و برداشت تعریف شده است.
199+
200+
#### READ
201+
202+
دسترسی خواندن مخصوص تمام ای پی آی هایی است که تغییری در دیتابیس ایجاد نمی‌کنند.
203+
با ایجاد این دسترسی روی یک کلید، دسترسی به ای پی آی های زیر، ایجاد می‌شود.:
204+
205+
**اطلاعات کاربر**
206+
207+
* `users/preferences`
208+
* `users/profile`
209+
* `users/verification/status`
210+
* `notifications/list`
211+
* `users/limitations`
212+
213+
**مارکت**
214+
215+
* `market/orders/status`
216+
* `market/orders/list`
217+
* `market/trades/list`
218+
219+
**پورتفولیو**
220+
221+
* `users/portfolio/last-week-daily-profit`
222+
* `users/portfolio/last-week-daily-total-profit`
223+
* `users/portfolio/last-month-total-profit`
224+
* `users/portfolio/daily_total_balance`
225+
226+
**واریز شتابی**
227+
228+
* `users/payments/ids-list`
229+
230+
**کیف پول**
231+
232+
* `users/wallets/list`
233+
* `v2/wallets`
234+
* `users/wallets/balance`
235+
* `users/wallets/transactions/list`
236+
* `users/transactions-history`
237+
* `users/wallets/deposits/list`
238+
* `users/wallets/withdraws/list`
239+
* `users/wallets/deposit/bank`
240+
* `users/wallets/deposit/shetab`
241+
* `withdraws/<withdraw_id>`
242+
243+
**معاملات تعهدی**
244+
245+
* `margin/fee-rates`
246+
* `margin/delegation-limit`
247+
* `margin/v2/delegation-limit`
248+
* `positions/list`
249+
* `positions/active-count`
250+
* `positions/<position_id>/status`
251+
* `positions/<position_id>/edit-collateral/options`
252+
* `margin/predict/<category>`
253+
254+
255+
### Trade
256+
کلید با این دسترسی، به ای پی آی هایی که برای ثبت و کنسل سفارشات و در کل کنترل
257+
سفارشات استفاده می‌شوند، دسترسی دارد.
258+
259+
با اختصاص این مجوز به یک کلید، دسترسی به ای پی آی های زیر به آن کلید داده می‌شود:
260+
261+
**معاملات تعهدی**
262+
263+
* `margin/orders/add`
264+
* `positions/<int:pk>/close`
265+
* `positions/<int:pk>/edit-collateral`
266+
267+
**معاملات بازار اسپات**
268+
269+
* `market/orders/add`
270+
* `market/orders/batch-add`
271+
* `market/orders/update-status`
272+
* `market/orders/cancel-old`
273+
* `market/orders/cancel-batch`
274+
* `users/wallets/convert`
275+
276+
### Withdraw
277+
278+
کلید با این دسترسی، به ای پی آی های برداشت دسترسی دارد.
279+
پیشنهاد می‌کنیم برای این کلید حتما آی پی مشخص کنید.
280+
با اختصاص این مجوز به یک کلید، دسترسی به این اند پوینت ها باز می‌شود:
281+
282+
* `withdraws/<withdraw_id>/update-status`
283+
* `users/wallets/withdraw`
284+
* `users/wallets/withdraw-confirm`
285+
* `users/wallets/withdraw-cancel`
286+
*
287+
288+
### استفاده از کلید API
289+
290+
برای استفاده از API باید سه هدر زیر در هر درخواست ارسال شوند:
291+
292+
| Header | توضیح |
293+
|------------------------|----------------------------------------------------------------------|
294+
| `Nobitex-Key` | کلید عمومی تولید شده توسط کاربر |
295+
| `Nobitex-Signature` | امضای محاسبه‌شده با الگوریتم `Ed25519` |
296+
| `Nobitex-Timestamp` | زمان جاری به ثانیه (Unix timestamp) در منطقه زمانی UTC |
297+
298+
### نحوه محاسبه امضا (Signature)#
299+
300+
امضا به صورت زیر محاسبه می‌شود:
301+
302+
```shell
303+
signature = base64(Ed25519(timestamp + method + url + body))
304+
```
305+
306+
- **timestamp**: عدد ثانیه‌ای (Unix time) بر اساس UTC
307+
- **method**: متد HTTP درخواست (مانند `GET`, `POST`)
308+
- **url**: مسیر کامل درخواست (endpoint) مانند `/market/orders/list?fromId=123`
309+
- **body**: محتوای خام بدنه درخواست (برای متدهای `POST`، `PUT` و …)
310+
311+
> توجه: مقدار `Nobitex-Key` همان کلید عمومی شماست و باید به صورت ثابت در هدر ارسال شود.
312+
313+
```bash
314+
curl -X POST "https://apiv2.nobitex.ir/orders/cancel-old" \
315+
-H "Content-Type: application/json" \
316+
-H "Nobitex-Key: <Your-Public-Key>" \
317+
-H "Nobitex-Signature: <Generated-Signature>" \
318+
-H "Nobitex-Timestamp: <Unix-Timestamp>" \
319+
-d '{
320+
"order": 27032,
321+
"status": "canceled"
322+
}'
323+
```
324+
52325

53326
<h2 id="intro-ua">تنظیم User Agent</h2>
54327
جهت شناسایی و تفکیک بهتر بات‌ها و پشتیبانی از آن‌ها، اکیداً توصیه می‌شود که در تمامی درخواست‌ها مقدار هدر User-Agent را مطابق الگوی `TraderBot/XXXXX` ارسال نمایید، که بخش `XXXXX` هر نام یکتایی است که می‌توانید برای بات خود انتخاب کنید. با رعایت این نام‌گذاری پاسخگویی به درخواست‌های پشتیبانی و عیب‌یابی مشکلات بهتر صورت می‌گیرد.

0 commit comments

Comments
 (0)