بنکەی زانیاری گەشەپێدەران
باڵانس، زیادکردنی شارتی کارت و کلیلەکان
ئەوەی لای خۆت هەیە پشکنین بکە، لە ڕێگەی Lightning ڤە زیاد بکە، بە شێوەیەکی خۆکار لە ناو پارەدانەکەتەوە (wallet) زیاد بکە، ببینە هەر داواکارییەک چەند تێچووی هەبووە، و کلیلەکان لە ڕێگەی کۆدەوە بەڕێوە ببە.
ئەم لاپەڕەیە بە ئامێری وەرگێڕدراوە بۆ ئاسانکاری. ئەسڵی ئینگلیزی ئەو وەشانەیە کە کاری پێدەکرێت.
پشکنینی باڵانسەکە
هەردوو باڵانسەکەت، و ئەوەی کە چەند لە سنووری ئەم کلیلییە بەکارهاتووە.
GET https://nymbot.ai/api/v1/credits/balance — پێویستی بە کلیلێکی API هەیە. POST بۆ ئەو کڕیارانەش کار دەکات کە چاوەڕێی ئەوە دەکەن.
balance ئایا دوو هاوسەنگەکە پێکەوە بە دۆلار لە نرخى ئێستای بیتکۆین، بۆ
ئەو ئامرازانەی کە چاوەڕێی یەک ژمارەیان دەکات (null (ئەگەر نرخەکە نەخوێندرێت). ئەوەی تری لە
کریدیت و ساتدایە، کە بەو شێوەیە هاوسەنگییەکان لە ڕاستیدا دەپارێزرێن. key وەسفی ئەو کلیلە دەکات
کە داوا کربوو. کلیلێک کە گەیشتووەتە سنوورەکەی، هێشتا دەتوانێت باڵانسەکە checkers بکات.
وەڵام
{
"balance": 49.18,
"balance_sats": 42037,
"standard": { "credits": 120.4, "sats": 1204 },
"pro": { "credits": 408.33, "sats": 40833 },
"key": {
"id": "4f0c9a1be27d3856",
"name": "laptop scripts",
"limit_sats": 20000,
"period_used_sats": 3412,
"total_used_sats": 18230,
"reset_period": "monthly",
"reset_at": "2026-10-01T00:00:00Z"
}
}
| بارودۆخ | کەی |
|---|---|
401 | کلیلەکە نەماوە، نەناسراوە، هەڵوەشاوەتەوە یان بەسەرچووە. |
cURL
curl https://nymbot.ai/api/v1/credits/balance \
-H "Authorization: Bearer $NYMBOT_API_KEY"
Python
import os
import requests
res = requests.get(
"https://nymbot.ai/api/v1/credits/balance",
headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
)
balance = res.json()
print(balance["standard"]["sats"], balance["pro"]["sats"])
JavaScript
const res = await fetch("https://nymbot.ai/api/v1/credits/balance", {
headers: { "Authorization": "Bearer " + process.env.NYMBOT_API_KEY },
});
const balance = await res.json();
console.log(balance.standard.sats, balance.pro.sats);
شێوازەکانی پارەدان
چۆن دەتوانیت پرکردنەوە بکەیت و سنوورەکان. لایتنینگ تەنها ڕێگەیە.
GET https://nymbot.ai/api/v1/topup/payment-methods — پێویستی بە کلیل نییە.
بارکردنەکە لە ١٠ بۆ ١,٠٠٠,٠٠٠ ساتسە؛ بارکردنی Pro دەبێت لانی کەم یەک کرێدی Pro بکڕێت، بۆیە لە ١٠٠ ساتسەوە دەست پێدەکات. سنوورە دۆلارییەکان پابەندی نرخەکەی بیتکوینن. bulk_bonus لیستکردنی کۆدە زیادەکان لەسەر زیادکردنەوەی باڵاتر، ڕێک وەک ناو ئەپەکە: ١٠٪، ١٥٪ یان ٢٠٪ زیاتر لەسەر زیادکردنەوەی ئاسایی لە ٥٠٠، ١،٠٠٠ یان ٥،٠٠٠ ساتۆشی، و لەسەر زیادکردنەوەی پرۆ لە ٥،٠٠٠، ١٠،٠٠٠ یان ٥٠،٠٠٠ ساتۆشی.
وەڵام
{
"supported_methods": [
{
"method": "btc-lightning",
"display_name": "Bitcoin Lightning",
"supported_currencies": ["SATS", "USD", "BTC"],
"limits": {
"SATS": { "min": 10, "max": 1000000 },
"USD": { "min": 0.02, "max": 1170 },
"BTC": { "min": 1e-7, "max": 0.01 }
},
"tiers": ["standard", "pro"],
"default_tier": "pro",
"tier_min_sats": { "standard": 10, "pro": 100 },
"sats_per_credit": { "standard": 10, "pro": 100 },
"bulk_bonus": [
{ "bonus": 0.1, "standard_sats": 500, "pro_sats": 5000 },
{ "bonus": 0.15, "standard_sats": 1000, "pro_sats": 10000 },
{ "bonus": 0.2, "standard_sats": 5000, "pro_sats": 50000 }
]
}
]
}
cURL
curl https://nymbot.ai/api/v1/topup/payment-methods
Python
import requests
methods = requests.get("https://nymbot.ai/api/v1/topup/payment-methods").json()
print(methods["supported_methods"][0]["limits"])
JavaScript
const methods = await (await fetch("https://nymbot.ai/api/v1/topup/payment-methods")).json();
console.log(methods.supported_methods[0].limits);
بارکردنەوە لە ڕێگەی Lightning
فاتورێکی Lightning دروست دەکات کە کرێ بۆ nym زیاد دەکات کە کلیەکە هیەتی. لە هەر جەمەدانی Lightning (Lightning wallet) یەکەوە بیPlpay بکە، پاشان پشکنین بکە بۆ ئەوەی کرێدیتەکە زیاد بکرێت.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning — پێویستی بە کلیلێکی API هەیە.
| بوار | نووسین | پێویستە | وەسف |
|---|---|---|---|
amount | ژمارە | بەڵێ | بە چەند، لە... currencyژمارەیەکی تەواو بۆ ساتەکان. |
currency | گیر</li> | نەخێر | SATS (بە دیاریکراوی)، USD یان BTCدۆلارەکان بە نرخی ئێستای بیتکۆین دەگۆڕدرێن. |
tier | گیر</li> | نەخێر | pro (ئەوەی بە شێوەی خۆماڵییە) یان standard: کرێدیتەکە بۆ کام باڵانس دەچێت. |
کڕینێکی ستاندارد ١٠ ساتە و کڕینێکی پرۆ ١٠٠ ساتە، جگە لە هەر بۆنوسێکی کڕینی بە کۆڵەکە؛
credits دەڵێت ئەم فاکتەرە چی زیاد دەکات.
وەڵام
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| بارودۆخ | کەی |
|---|---|
400 | ڕێگەیەکی تری لە ڕێگادا (unsupported_method), دراوی نەناسراو (unsupported_currency) یان ئاست، بڕێکی ونبوو، یان بڕێک لە خوار کەمترین بڕ (amount_too_small), زیاتر لە ١,٠٠٠,٠٠٠ ساتس (amount_too_largeیان لەلایەن پارەدانی Lightning ڕەتکرایەوە (amount_out_of_range). |
429 | زیاتر لە ٦٠ فاکتۆر بۆ ئەم nym، یان ١٢٠ لەم ناونیشانەوە، لە کاتێکی یەک کاتدا (rate_limit_exceeded، لەگەڵ Retry-After). |
502 | لە ئێستادا ناتوانرێت هیچ فاکتۆرەیەک دروست بکرێت (invoice_unavailable، لەگەڵ Retry-After). |
cURL
curl https://nymbot.ai/api/v1/topup/create/btc-lightning \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amount": 10000, "currency": "SATS", "tier": "pro"}'
Python
import os
import requests
res = requests.post(
"https://nymbot.ai/api/v1/topup/create/btc-lightning",
headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
json={"amount": 10000, "currency": "SATS", "tier": "pro"},
)
invoice = res.json()
print(invoice["payment_request"])
JavaScript
const res = await fetch("https://nymbot.ai/api/v1/topup/create/btc-lightning", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ amount: 10000, currency: "SATS", tier: "pro" }),
});
const invoice = await res.json();
console.log(invoice.payment_request);
پشکنینی پرکردنەوەی بار (top-up)
دەپرسێت ئایا پسوڵەکەیدەدراوە و، کاتێک دراو، کرێدیتەکە زیاد دەکات. پشکنین ئەوەیە کێ کرێدیت دەکات، بۆیە دوای دران، پشکنین بکە تاوەکو بارودۆخەکە دەبێتە creditedدوبارە پشکنینەوە دوای ئەوە سەلامەتە: کۆشکە/کڕینەکە تەنها یەک جار دێت، هەرچەند جارێک داوای بکەیت.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} — پێویستی بە کلیلێکە لەو ناوەی (nym) کە فاکتورەکەی دروست کردووە.
status یە pending (هێشتا پارەی نەدراوە)، paid (دراوە، بەڵام هێشتا نەدراوەتە ناو ئەژمارەوە؛ دووبارە پشکنین بکەوە)، credited (لە باڵانسەکەتدا) یان expired (لە کاتی خۆیدا پارە دانەدراوە). بوارەکانی هاوسەنگی بۆ ئەو پلەیەن کە فاکتەرەکە پڕی دەکاتەوە.
وەڵام
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| بارودۆخ | کەی |
|---|---|
400 | ئەو ناسنامەیە (id) ئەو ناسنامە ٦٤ خەرەکتەرەی ناو بانگی دروستکردنەکە (create call) نییە. |
404 | هیچ پسوولەیەک بەو ناسنامەیە بۆ ناوەکەت نەبوو (invoice_not_found). |
cURL
curl https://nymbot.ai/api/v1/topup/status/$INVOICE_ID \
-H "Authorization: Bearer $NYMBOT_API_KEY"
Python
import os, time
import requests
headers = {"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]}
url = "https://nymbot.ai/api/v1/topup/status/" + invoice["invoice_id"]
while True:
status = requests.get(url, headers=headers).json()["status"]
if status in ("credited", "expired"):
break
time.sleep(3)
print(status)
JavaScript
const headers = { "Authorization": "Bearer " + process.env.NYMBOT_API_KEY };
const url = "https://nymbot.ai/api/v1/topup/status/" + invoice.invoice_id;
let status;
do {
await new Promise((r) => setTimeout(r, 3000));
status = (await (await fetch(url, { headers })).json()).status;
} while (status !== "credited" && status !== "expired");
console.log(status);
مێژووی پرسیارەکان
هەر داواکارییەک لە ڕێزییەکدا: چی بوو، چ مۆدێلێک بوو، چەند تۆکنی هەبوو و چەند تێچووی هەبوو. هیچ پرۆمپت یان وەڵامێک هەڵنابگیرێت، بۆیە هیچەیان ناهێنرێتەوە. ڕیزەکان بۆ ماوەی ٩٠ ڕۆژ دەبێت لە مێژوو، نوێترین لە سەرەوە. کلیلێک کە گەیشتووەتە سنوورەکەی، هێشتا دەتوانێت مێژووەکەی بخوێنێتەوە.
GET https://nymbot.ai/api/v1/queries/history — پێویستی بە کلیلی API هەیە، کە داواکارییەکانی خۆی دەبینێت، یان داواکاری واژەکراو لە ناو ناوی تۆوە، کە هەموو کلیلەکان دەبینێت.
| بوار | نووسین | پێویستە | وەسف |
|---|---|---|---|
page | بەشێک (پرس) | نەخێر | بە دیاریکراوی ١، ل劲ە ١,٠٠٠؛ لاپەڕەیەکی بەرزتر بریتییە لە 400 invalid_value. |
page_count | بەشێک (پرس) | نەخێر | ڕیز لە هەر لاپەڕەیەکدا. دیاریکراو ٢٠، لە زۆرترین حاڵەتدا ١٠٠. |
start_dateend_date | زنجیرە (پرسار) | نەخێر | بەروار یان کاتەکانی ISO 8601. |
model | زنجیرە (پرسار) | نەخێر | تەنها ئەم مۆدێلە. |
type | زنجیرە (پرسار) | نەخێر | chat, responses, messages, image, video, speech, transcription یان embedding. |
all_keys | بۆلین (پرس) | نەخێر | بە کلیلێک: true هەموو کلیلی هەر ناوێکی هاوشێوە دەگرێتەوە. Default false. |
key_id | زنجیرە (پرسار) | نەخێر | بە داواکارییەکی واژۆکراو، یان بە all_keys=true: تەنها ئەم کلیلە. |
وەڵام
{
"data": [
{
"id": "q_71c4e9a0",
"timestamp": "2026-09-30T08:12:00Z",
"model": "anthropic/claude-sonnet-5",
"type": "chat",
"input_tokens": 1240,
"output_tokens": 380,
"cached_tokens": 0,
"cost_sats": 16.2,
"cost_usd": 0.01895,
"balance": "pro",
"key_id": "4f0c9a1be27d3856",
"web_search": false,
"status": "ok"
}
],
"pagination": { "page": 1, "page_count": 20, "total": 311, "total_pages": 16 }
}
cURL
curl "https://nymbot.ai/api/v1/queries/history?page_count=50&type=chat" \
-H "Authorization: Bearer $NYMBOT_API_KEY"
Python
import os
import requests
res = requests.get(
"https://nymbot.ai/api/v1/queries/history",
headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
params={"page_count": 50, "type": "chat"},
)
for row in res.json()["data"]:
print(row["timestamp"], row["model"], row["cost_sats"])
JavaScript
const res = await fetch("https://nymbot.ai/api/v1/queries/history?page_count=50&type=chat", {
headers: { "Authorization": "Bearer " + process.env.NYMBOT_API_KEY },
});
for (const row of (await res.json()).data) console.log(row.timestamp, row.model, row.cost_sats);
واژۆکردنی داواکارییەکانی ئەکاونت
دروستکردن، گۆڕین و هەڵوەشاندنەوەی کلیلەکان، پوختەی هەژمار و پڕکردنەوەی ئۆتۆماتیکی، کلیلێکی API ناگرنەوە. ئەوان واژۆیەکی (signature) لە nymەکەت وەردەگرن، بۆیە کلیلێک کە ڕ泄漏 بوێت دەتوانێت تا سنووری خۆی خەرجی بکات، بەڵام هەرگیز ناتوانێت کلیلێکی تر دروست بکات یان سنووری خۆی بەرز بکاتەوە.
ئەپەکە ئەمە بۆ تۆ دەکات: هەموو شتێک لە شوێنی خۆیدا API ڕیزبەندییەکە ئەم کۆتاییە (endpoints) بەکاردێنێت. تەنها پێویستت بەم بەشە هەیە بۆ بەڕێوەبردنی کلیلەکان لە کۆدی خۆتەوە.
واژەکە ڕووداوێکی Nostrە لە جۆری ٢٧٢٣٥ (NIP-98)، کە بە شێوەی base64-encoded نێردراوە لە
Authorization سەری ناوەڕۆک بە وشەکە Nostr لە پێش:
ڕێکخستنەکە
{
"kind": 27235,
"created_at": 1790726400,
"tags": [
["u", "https://nymbot.ai/api/v1/keys"],
["method", "POST"],
["nonce", "9c4e21f07a3b...16 random bytes in hex"],
["payload", "3f1a0d7c8e2b...sha256 of the exact request body in hex"]
],
"content": "",
"pubkey": "your public key in hex",
"id": "...",
"sig": "..."
}
uئایا ناونیشانی (URL) تەواوی داواکارییەکە، بە لەقوتکردنی (query string) پێوەوە، ڕێک وەک ئەوەیە کە ناردووە.methodمیتۆدی HTTPـە.payloadئایا SHA-256ی جەستەی داواکارییە خاوەکە، بە شێوەی hex. پێویستە لەسەرPOSTوPATCH، و ئەو ناوەڕۆکەی دەیەنێریت دەبێت بە بایتی بۆ بایتی هەمان ئەو ناوەڕۆکەیە بێت کە هاشی کردووتە.created_atدەبێت لە چواراندازی ٦٠ چرکەی کاتژمێری سێرڤەرەکەدا بێت.- هەر ڕووداوێک جارێک کار دەکات، a
GETتێکهەڵتاوە، بۆ ئەوەی سەرەتاکەی وەرگیراو نەتوانێت دووبارە بەکاربهێنرێتەوە. بۆ هەر داواکارییەک سەرەتایەکی نوێ واژۆ بکە. زیادکردنیnonceتاگێک بە بەهایەکی هەڕەمەکی لەبەر ئەوەی دوو داواکاری کە لە هەمان چرکەدا واژۆ کرابن، هێشتا جیاواز بن. - ناوەرۆکی داواکارییەکی واژۆکراوە دەکرێت لە زۆرترین حاڵەتدا ٦٤ کیلۆبایت بێت، و پێویستی بە ناوەڕۆک هەیە
Content-Type: application/json.
ڕووداوێکی ون کراو دەگەڕێتەوە 401 missing_nostr_auth; ئەوەی کە هەڵە لە پێکهاتەدایە، واژۆکردنی هەڵەیە، زۆر کۆنە، یان بۆ URL، ڕێگەیەک یان جەستەیەکی جیاوازە، دەگەڕێنێتەوە
invalid_nostr_auth، لەگەڵ هۆکارەکە لە نامەکەدا؛ یەکێکی دووبارەکراوەوە دەگەڕێتەوە
nostr_auth_replayedکلیلێکی API کە بۆ ئەم کۆتاییەکان (endpoints) بنێردرێت ڕەتدەکرێتەوە. واژۆکەکە پێش خوێندنەوەی ناوەڕۆکەکە (body) وردبینی دەکرێت، و هەر ناونیشانێک دەتوانێت لە خولەکێکدا ٣٠ جار شکستی تێدا بچێت (ناونیشانی IPv6 وەک تەواوی /64 دەژمێرێت)؛ دوای ئەوە دەگاتە 429 لەگەڵ
Retry-After.
گەڕاوەکان تەنها دەتوانن ئەم کۆتاییە (endpoints) لە ڕێگەی سایتەکانی خۆیەوە لە Nymbotەوە بانگ بکەن (https://nymbot.ai,
https://nymchat.app و ژێرەوەیەکانیان). لاپەڕەیەک لە هەر ماڵپەڕێکی دیکەدا هیچ سەردەن (headers) CORS وەردەگرێتەوە، بۆیە ناتوانێت ئەوە بخوێنێتەوە کە ئەوان دەگەڕێننەوە. سکرێپتەکان و ئەپڵیکەیشنە ڕەسەنەکان، کە هیچ ناردنی...
Origin، کاریگەر نییە.
واژەکردن پێویستی بە کلیلە نهێنییەکەی nymەکەت هەیە (the nsec), کە کۆنترۆڵی هەموو شتێک دەکات: ناسنامەکەت، مێژوویەکەت و باڵانسەکەت. تەنها لەناو سکریپتێکدا دایبنێ لە ئامێرێکدا کە متمانەت پێیەتی، لە ڕێگەی ژینگەوە (environment) بیخوێنەرەوە لەبری ئەوەی لەناو فایلەکەدا بنووسیت، و کاتێک دەتوانیت ئەپەکە بەکاربهێنە.
ئەم هاوکارانە سەر (header) دروست دەکەن. نموونەکانی دواتر لەم لاپەڕەیەدا بەکاسیان دەهێنێت. ئەوان کلیلە نهێنییەکە بە شێوەی هێکس (hex) دەخوێننەوە لە NOSTR_SECRET_HEX; ئەوەی cURL بەکاردێنێت بەکاردێنێت
نەک ئەداەیەک لە ڕێگەی هێڵەکۆماند (command-line tool)، کە کلیلێکی nsec یان hex وەردەگرێت، و sha256sum (لەسەر macOS، shasum -a 256).
cURL
nostr_auth() {
method="$1"; url="$2"; body="$3"
nonce=$(openssl rand -hex 16)
if [ -n "$body" ]; then
hash=$(printf '%s' "$body" | sha256sum | cut -d' ' -f1)
event=$(nak event --sec "$NOSTR_SECRET_HEX" -k 27235 -t "u=$url" -t "method=$method" -t "nonce=$nonce" -t "payload=$hash")
else
event=$(nak event --sec "$NOSTR_SECRET_HEX" -k 27235 -t "u=$url" -t "method=$method" -t "nonce=$nonce")
fi
printf 'Nostr %s' "$(printf '%s' "$event" | base64 | tr -d '\n')"
}
Python
# pip install coincurve requests
import base64, hashlib, json, os, time
from coincurve import PrivateKey, PublicKeyXOnly
SECRET = bytes.fromhex(os.environ["NOSTR_SECRET_HEX"])
def nostr_auth(method, url, body=b""):
pubkey = PublicKeyXOnly.from_secret(SECRET).format().hex()
tags = [["u", url], ["method", method], ["nonce", os.urandom(16).hex()]]
if body:
tags.append(["payload", hashlib.sha256(body).hexdigest()])
created_at = int(time.time())
serialized = json.dumps([0, pubkey, created_at, 27235, tags, ""], separators=(",", ":"), ensure_ascii=False)
event_id = hashlib.sha256(serialized.encode()).digest()
event = {
"id": event_id.hex(),
"pubkey": pubkey,
"created_at": created_at,
"kind": 27235,
"tags": tags,
"content": "",
"sig": PrivateKey(SECRET).sign_schnorr(event_id).hex(),
}
return "Nostr " + base64.b64encode(json.dumps(event).encode()).decode()
JavaScript
// npm install nostr-tools
import { createHash, randomBytes } from "node:crypto";
import { finalizeEvent } from "nostr-tools/pure";
const secret = Buffer.from(process.env.NOSTR_SECRET_HEX, "hex");
export function nostrAuth(method, url, body = "") {
const tags = [["u", url], ["method", method], ["nonce", randomBytes(16).toString("hex")]];
if (body) tags.push(["payload", createHash("sha256").update(body).digest("hex")]);
const event = finalizeEvent(
{ kind: 27235, created_at: Math.floor(Date.now() / 1000), tags, content: "" },
secret,
);
return "Nostr " + Buffer.from(JSON.stringify(event)).toString("base64");
}
کورتەی ئەکاونتەکە
چی لە سەرەوەی لاپەڕەی API ئەپەکە دەردەکەوێت: کلیلە گشتییەکەت، هەردوو هاوسەنگ (balance)، چەند کلیلێک چالاکن (نەک هەڵوەشاوە یان بەسەرچوو)، و زیادکردنی ئۆتۆماتیکی بارکردن ڕێکخستنەکان، یان
null کاتێک سێرڤەرەکە ئەوانە پێشکەش ناکات.
GET https://nymbot.ai/api/v1/account — پێویستی بە داواکاری واژەکراو.
وەڵام
{
"data": {
"pubkey": "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d",
"balances": {
"standard": { "credits": 120.4, "sats": 1204 },
"pro": { "credits": 408.33, "sats": 40833 }
},
"keys_active": 3,
"nwc_auto_topup": {
"connected": true, "threshold_sats": 5000, "topup_sats": 20000, "tier": "pro",
"last_topup_at": null, "last_topup_sats": null, "last_error": null
}
}
}
cURL
URL=https://nymbot.ai/api/v1/account
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/account"
print(requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json())
JavaScript
const url = "https://nymbot.ai/api/v1/account";
const res = await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } });
console.log(await res.json());
بەڕێوەبردنی کلیلەکان
کۆتاییەکان (endpoints) لە پشت لیستی کلیلەکانی ئەپەکە. هەموویان پێویستیان بە واژەکراو داواکاری. هەموو کلیلێک بەم شێوەیە دەگەڕێنەوە، لەگەڵ کاتەکان بە ISO 8601 و بڕەکان بە sats:
تەنیشتی سەرەکی
{
"id": "4f0c9a1be27d3856",
"name": "laptop scripts",
"hint": "sk-nymbot-Qm7x…c2Lw",
"limit_sats": 20000,
"reset_period": "monthly",
"reset_at": "2026-10-01T00:00:00Z",
"expire_at": null,
"period_used_sats": 3412,
"total_used_sats": 18230,
"created_at": "2026-08-14T09:21:07Z",
"updated_at": "2026-09-02T17:40:55Z",
"last_used_at": "2026-09-30T08:12:00Z",
"revoked_at": null
}
hint بە پێویستە بۆ ناسینەوەی کلیلێک، بەڵام نەک بۆ بەکارهێنانی. کلیلەکە خۆی تەنها جارێک دەگەڕێتەوە، کاتێک دروست دەکرێت.
لیستکردنی کلیلەکان
GET https://nymbot.ai/api/v1/keys — واژەکراوە.
| بوار | نووسین | پێویستە | وەسف |
|---|---|---|---|
include_revoked | بۆلین (پرس) | نەخێر | کلیلە هەڵوەشاوەکان بکە ناوەوە. Default false. |
وەڵام
{ "data": [ { "id": "4f0c9a1be27d3856", "name": "laptop scripts", "hint": "sk-nymbot-Qm7x…c2Lw", "...": "..." } ] }
cURL
URL=https://nymbot.ai/api/v1/keys
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/keys"
for key in requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json()["data"]:
print(key["id"], key["name"], key["period_used_sats"], key["limit_sats"])
JavaScript
const url = "https://nymbot.ai/api/v1/keys";
const { data } = await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json();
for (const key of data) console.log(key.id, key.name, key.period_used_sats, key.limit_sats);
دروستکردنی کلیلێک
POST https://nymbot.ai/api/v1/keys — واژەکراوە. گەڕانەوەکان 201.
| بوار | نووسین | پێویستە | وەسف |
|---|---|---|---|
name | گیر</li> | بەڵێ | ١ بۆ ٤٠ خانە، جیاواز لە کلیلە چالاکەکانی ترت (بەپێچەوانەبوونەوەی پیتی گەورە و بچووک). |
limit_sats | بەشگێڕ (integer) | نەخێر | سنووری خەرجکردن بە ساتس، بە کەم ١. بۆ ئەوەی هیچ سنوورێک نەبێت، بەتاڵ دایبنێ. |
reset_period | گیر</li> | نەخێر | daily, weekly یان monthlyپێویستییەکان limit_satsبۆ کڵاوێک کە هەرگیز نوێ ناکرێتەوە، وای بێ ئەوە لە دەست بدە. |
expire_at | سترینگ یان ژمارە (integer) | نەخێر | کاتێک کلیلەکە کار ناکات: کاتێکی ISO 8601، یان میلی 초دانە لە ساڵی ١٩٧٠وە. |
وەڵام (٢٠١)
{
"data": {
"id": "4f0c9a1be27d3856",
"name": "laptop scripts",
"hint": "sk-nymbot-Qm7x…c2Lw",
"limit_sats": 20000,
"reset_period": "monthly",
"key": "sk-nymbot-Qm7x...c2Lw",
"...": "the rest of the key object"
}
}
| بارودۆخ | کەی |
|---|---|
400 | ناوی نەبوو یان زۆر درێژە؛ ناوێک کە پێشتر بەکارهاتووە (duplicate_name); سنوورێک کە ژمارەیەکی تەواو نییە و لانی کەم ١ بێت؛ ماوەی ڕیزبەندییەک (reset period) بەبێ سنوور؛ expiration (بە تەواوی ڕۆیشتوو)؛ کێڵگەیەکی نەناسراو (unknown_parameter); یان ٢٥ کلیل چالاککراو پێشتر (too_many_keys). |
429 | زیاتر لە ٦٠ کلیل لەلایەن ئەم nymـەوە دروستکراوە، یان ١٢٠ دانە لەم ناونیشانە، لە یەک کاتژمێردا (rate_limit_exceeded، لەگەڵ Retry-After). |
cURL
URL=https://nymbot.ai/api/v1/keys
BODY='{"name":"laptop scripts","limit_sats":20000,"reset_period":"monthly"}'
curl "$URL" \
-H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
-H "Content-Type: application/json" \
-d "$BODY"
Python
import json
import requests
url = "https://nymbot.ai/api/v1/keys"
body = json.dumps({"name": "laptop scripts", "limit_sats": 20000, "reset_period": "monthly"}).encode()
res = requests.post(
url,
data=body,
headers={"Authorization": nostr_auth("POST", url, body), "Content-Type": "application/json"},
)
print(res.json()["data"]["key"])
JavaScript
const url = "https://nymbot.ai/api/v1/keys";
const body = JSON.stringify({ name: "laptop scripts", limit_sats: 20000, reset_period: "monthly" });
const res = await fetch(url, {
method: "POST",
headers: { "Authorization": nostrAuth("POST", url, body), "Content-Type": "application/json" },
body,
});
console.log((await res.json()).data.key);
خوێندنەوەی یەک کلیل
GET https://nymbot.ai/api/v1/keys/{id} — واژەکراوە.
گەڕانەکان {"data": {…}} بە ئۆبجێکتەکەی کلیلییەوە، یان 404
key_not_found ئەگەر هیچ کلیلێکی تۆ ئەو ناسنامەیە نەبێت.
cURL
URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
print(requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json()["data"])
JavaScript
const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
console.log((await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json()).data);
گۆڕینی کلیلێک
PATCH https://nymbot.ai/api/v1/keys/{id} — واژەکراوە.
هەر کامێکیان بنێرە name, limit_sats, reset_period و
expire_at، بە هەمان یاساکان وەک کاتێک کلیل دروست دەکرێت. null کەشی: سنوور نییە، ڕیست نییە، بەسەرچوون نییە. گۆڕینی ماوەی ڕیستکردن، ماوەیەکی نوێ لە سفرەوە دەست پێ دەکات. کلیلێکی هەڵوەشاوە ناگۆڕدرێت (400 key_revoked). دەگەڕێنێتەوە
{"data": {…}} لەگەڵ ئۆبجێکت کلیلەکە نوێکراوەکە.
cURL
URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
BODY='{"limit_sats":50000,"expire_at":null}'
curl -X PATCH "$URL" \
-H "Authorization: $(nostr_auth PATCH "$URL" "$BODY")" \
-H "Content-Type: application/json" \
-d "$BODY"
Python
import json
import requests
url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
body = json.dumps({"limit_sats": 50000, "expire_at": None}).encode()
res = requests.patch(
url,
data=body,
headers={"Authorization": nostr_auth("PATCH", url, body), "Content-Type": "application/json"},
)
print(res.json()["data"])
JavaScript
const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
const body = JSON.stringify({ limit_sats: 50000, expire_at: null });
const res = await fetch(url, {
method: "PATCH",
headers: { "Authorization": nostrAuth("PATCH", url, body), "Content-Type": "application/json" },
body,
});
console.log((await res.json()).data);
هەڵوەشاندنەوەی کلیلێک
DELETE https://nymbot.ai/api/v1/keys/{id} — واژەکراوە.
کلیلەکە دەستبەجێ ڕادەگرێت، بۆ هەمیشە. لە لیستەکەدا دەمێنێتەوە لەگەڵ revoked_at دانراوە، و دەتوانرێت
ببینرێت لەگەڵ include_revoked=trueڕەگەزدارکردنەوەی کلیلێک کە پێشتر ڕەگەزدار کراوە، هەمان وەڵام دەداتەوە. تەنها نوێترین ٥٠ کلیل ڕەگەزدارکراو دەپارێزرێن؛ کۆنترەکانیان دەسڕێنەوە کاتێک کلیلێکی تر ڕەگەزدار دەکرێت.
وەڵام
{ "data": { "id": "4f0c9a1be27d3856", "revoked": true } }
cURL
URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
curl -X DELETE "$URL" -H "Authorization: $(nostr_auth DELETE "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
print(requests.delete(url, headers={"Authorization": nostr_auth("DELETE", url)}).json())
JavaScript
const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
const res = await fetch(url, { method: "DELETE", headers: { "Authorization": nostrAuth("DELETE", url) } });
console.log(await res.json());
کردنەوەی خۆکارانەی پرکردنەوەی NWC
جزدانێکی Lightning بە Nostr Wallet Connect ببەستەوە و کاتێک خەرجی API باڵانسەکە کەم دەکاتەوە، Nymbot خۆی باڵانسەکە پڕ دەکاتەوە. لیستی APIی ئەپەکە هەمان ڕێکخستنەکانی هەیە؛ ئەمانە ئەو endpoint-انەن کە لە پشتەوەیانە. هەموویان پێویستیان بە... داواکاری واژەکراو.
چۆن کار دەکات: دوای ئەوەی تێچووی داواکارییەکی API لەو باڵانسەی هەڵبژاردووتە بۆ بینین لێ دەخرێت، ئەگەر ئەو باڵانسە لە سنووری دیاریکراوت کەمتر بوو، Nymbot فاکتۆرێک بۆ بڕی پرکردنەوەکەت دروست دەکات، داوای وەڵامدانەوە لە وۆڵێتەکەت دەکات و کرێیەکە زیاد دەکات. زۆرترین جار لە هەر ٥ خولەکێکدا بۆ هەر nym و باڵانسێک پرکردنەوە ئەنجام دەدات، بۆ ئەوەی ڕەوانی داواکارییەکان نەتوانێت وۆڵێتەکە بە تەواوی بەتاڵ بکاتەوە. خەرجکردن لە ناو ئەپەکاندا کار ناکات بۆ ئەم پرۆسەیە. کات و قەبارەی دوایین پرکردنەوە، و دوایین هەڵە، لە ڕێکخستنەکاندان (settings) دەبینرێن؛ ئەگەر پارەدانێک دوای هەڵەیەک سەرکەوتوو بووبێت، پشکنینی فاکتۆرەکەی لەگەڵ بارودۆخی پر充کردنەکە بەخشینەکە بۆ ئەوەیە.
بەستری پەیوەندی (connection string) ڕێگە دەدات بە هەر کەسێک کە خاوەنی بێت داوا بکات لە جزدانەکەتەوە پارە بدات. Nymbot
ئەو بە شێوەیە کۆگای دەکات کە بە کۆدکراو (encrypted) بێت و تەنها بۆ دانەوەی پسوولەکانی پرکردنەوەی خۆی بەکاری دەهێنێت، بەڵام بەستنێکی تایبەت بۆ ئەم کارە دروست بکە، بە بودجەیەکی دیاریکراوی خەرجکردن لە جزدانەکەتدا، بەوەndەی زۆرترین بڕی پارەی بتوانێت بدات تەنها ئەو ژمارەیە بێت کە تۆ هەڵبژاردووە. جەوانەکە دەبێت پشتگیری بکات pay_invoice.
بەستنەوەی بەختەوەری (wallet)
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect — واژەکراوە.
| بوار | نووسین | پێویستە | وەسف |
|---|---|---|---|
nwc_url | گیر</li> | بەڵێ | بەستەرە دەقەکە، دەستپێکردن nostr+walletconnect://. Nymbot داوا لە وۆڵێتەکە دەکات بۆ get_info پێش پاشەکەوتکردنی، و بە شێوەی کۆدکراو دەپارێزێت. |
threshold_sats | بەشگێڕ (integer) | بەڵێ | کە هاوسەنگی کەمتر لەم ژمارە سەتسە خوارەوە چوو، پڕی بکەوە. لانی کەم ١,٠٠٠. |
topup_sats | بەشگێڕ (integer) | بەڵێ | بڕی هەر جارێک چەند زیاد بکەم. ١,٠٠٠ بۆ ١,٠٠٠,٠٠٠ ساتۆشی. |
tier | گیر</li> | نەخێر | pro (ئەوەی بە شێوەی خۆماڵییە) یان standard: باڵانسەکە بۆ بینین و پڕکردنەوە. |
وەڵام
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| بارودۆخ | کەی |
|---|---|
400 | بە پەیوەندییەک (connection string) نییە (invalid_nwc_url); جزدانەکە لە ڕێگەی ڕێگەی گواستنەوەی خۆیەوە وەڵامی نەدایەوە (nwc_unreachable) یان پشکنینەکە ڕەتکردەوە (nwc_rejected); پەیوەندییەکە ناتوانێت پسوولەکان بدات (nwc_missing_permission); یان بڕێک لە دەرەوەی سنوورەکان. |
501 | ناوکردنەوەی خۆکار بۆ ئەم سێرڤەرە کار ناکات (nwc_unavailable). هەمان شت بۆ ئەو دوو کۆتاییە (endpoints) دیکەش true دەبێت. |
cURL
URL=https://nymbot.ai/api/v1/nwc-auto-topup/connect
BODY='{"nwc_url":"nostr+walletconnect://...","threshold_sats":5000,"topup_sats":20000,"tier":"pro"}'
curl "$URL" \
-H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
-H "Content-Type: application/json" \
-d "$BODY"
Python
import json, os
import requests
url = "https://nymbot.ai/api/v1/nwc-auto-topup/connect"
body = json.dumps({
"nwc_url": os.environ["NWC_URL"],
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
}).encode()
res = requests.post(
url,
data=body,
headers={"Authorization": nostr_auth("POST", url, body), "Content-Type": "application/json"},
)
print(res.json())
JavaScript
const url = "https://nymbot.ai/api/v1/nwc-auto-topup/connect";
const body = JSON.stringify({
nwc_url: process.env.NWC_URL,
threshold_sats: 5000,
topup_sats: 20000,
tier: "pro",
});
const res = await fetch(url, {
method: "POST",
headers: { "Authorization": nostrAuth("POST", url, body), "Content-Type": "application/json" },
body,
});
console.log(await res.json());
خوێندنەوەی ڕێکخستنەکان
GET https://nymbot.ai/api/v1/nwc-auto-topup — واژەکراوە.
هەمان ئۆبجێکت دەگەڕێنێتەوە وەک پەیوەستکردن، لەگەڵ connected: false و بوارەکانی دیکە
null کاتێک هیچ پارەدانێک (wallet) بەستراوەتەوە. خودی دەقەکە بەستنەوەییەکە (connection string) هەرگیز ن戻ێxrێتەوە.
cURL
URL=https://nymbot.ai/api/v1/nwc-auto-topup
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/nwc-auto-topup"
print(requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json())
JavaScript
const url = "https://nymbot.ai/api/v1/nwc-auto-topup";
console.log(await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json());
پەیوەستبوونەوە
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection — واژەکراوە.
سترینگی پەیوەندی کۆکراوە دەسڕێتەوە. هیچ زانیارییەکی زیادکردنی بودجە (top-up) ئەنجام دەدرێتەوە. بۆ دڵنیابوونەوە، دەتوانیت پەیوەندییەکە لە ناو بەحەشتەکەتدا (wallet) هەڵبوەشێنیتەوە.
وەڵام
{ "data": { "connected": false, "threshold_sats": null, "topup_sats": null, "tier": null, "last_topup_at": null, "last_topup_sats": null, "last_error": null } }
cURL
URL=https://nymbot.ai/api/v1/nwc-auto-topup/connection
curl -X DELETE "$URL" -H "Authorization: $(nostr_auth DELETE "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/nwc-auto-topup/connection"
print(requests.delete(url, headers={"Authorization": nostr_auth("DELETE", url)}).json())
JavaScript
const url = "https://nymbot.ai/api/v1/nwc-auto-topup/connection";
const res = await fetch(url, { method: "DELETE", headers: { "Authorization": nostrAuth("DELETE", url) } });
console.log(await res.json());
بەپێی داواکاری پارە دەنیشێریت بەبێ کلیل
خاڵە کۆتاییەkirawە نرخە جێگیرەکان دەکرێت لە ڕێگەی Lightningیەوە بۆ هەر داواکارییەک لە کاتێکدا بی paid بکرێت، بە بێ کلیل،
بە بێ ئەکاونت و بە بێ باڵانس: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations و POST /embeddingsچات، وەڵامەکان و نامەکان هەمیشە پێویستیان بە کلیلێک هەیە. ئەو داواکارییەی کە کلیلێکی لەگەڵە، وەک ئاسایی لە هاوسەنگکەرەکە (balance) خەرجی دەکرێت؛ پرۆسەی پارەدان تەنها دەست پێ دەکات کاتێک هیچ کلیلێک نەنێردرێت.
Nymbot دوو وەشانی هەمان بیرۆکە دەڵێتەوە، لە یەک باکئێندەوە: Lightning Labs'
L402 (هەروەها بە ناوی کۆنییەوە وەرگیراوە، LSAT) و ڕەشنووسی IETF
پارەدان ڕێکخستنەوەی ناسینەوەی HTTP لەگەڵ lightning ڕێگەی و
charge مەبەست. هەر دانەیەک کە کڕیارەکەت لێی تێدەگات بەکاربهێنە.
پارەدان بەبێ کلیل تەنها کاتێک کارا دەبێت کە API_L402_SECRET کەمتر نییە لە ٣٢ بایتی هەڕەمەکی هەڵدەگرێت، وەک هێکس (٦٤ کاراکتەر) یان base64 (٤٤). یەکێکیان دروست بکە بە... openssl rand -hex 32بەهایەکی کورتتر یان ئەوەی دەتوانرێت پێشبینی بکرێت تایبەتمەندییەکە دادەخات و هۆکارەکە تۆمار دەکات. بۆ گۆڕینی، بەهایە کۆنەکە منتقل بکە بۆ API_L402_SECRET_PREVIOUS بۆ ماوەی ڕۆژێک: ناسنامەکان (credentials)، لینکەکانی دۆخ (status URLs) و
ئەو تەحەدییانەی لەژێرەوە دروستکراون کار دەکەن تا ئەو کاتەی بەسەردهێن.
چالاکییەکە
داواکارییەکە بنێرە بەبێ هیچ Authorization سەرەوە. ئەگەر دروست بێت، هیچ شتێک ڕانەدەبێت، و
دەستت دەکەوێت 402 Payment Required بە پسوولەیەک بۆ ڕێک ئەو شتەی داواکراوە تێچووی دەدات:
هەمان نرخێک کە کلیلەکە دەیدات، بە گۆڕینی بە ١٠ سات بۆ هەر کرێدیتێکی ئاسایی یان ١٠٠ سات بۆ هەر کرێدیتێکی Pro
و ڕێکخراوە بۆ ساتێکی تەواو (لانی کەم ١ سات، و لانی کەم کەمترین ڕادەی ٠.٠٥ کرێدیت).
وەڵامەکە سێ دانەیە WWW-Authenticate ئاستەنگەکان بۆ هەمان فاکتۆر:
HTTP/1.1 402 Payment Required
Content-Type: application/problem+json; charset=utf-8
Cache-Control: no-store
WWW-Authenticate: L402 macaroon="AgJC...", invoice="lnbc2370n1..."
WWW-Authenticate: LSAT macaroon="AgJC...", invoice="lnbc2370n1..."
WWW-Authenticate: Payment id="kM9x...", realm="nymbot", method="lightning", intent="charge",
request="eyJhbW91bnQiOiIyMzciLC...", description="Nymbot API POST /images/generations (237 sats)",
digest="sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:", expires="2026-09-30T12:15:00.000Z",
opaque="eyJlbmRwb2ludCI6IlBPU1QgL2ltYWdlcy9nZW5lcmF0aW9ucyJ9"
{
"type": "https://paymentauth.org/problems/payment-required",
"title": "Payment Required",
"status": 402,
"detail": "This request costs 237 sats. Pay the Lightning invoice, then send the identical request again ...",
"challengeId": "kM9x...",
"amount_sats": 237,
"invoice": "lnbc2370n1...",
"payment_hash": "9db1370f...",
"expires_at": "2026-09-30T12:15:00.000Z",
"error": { "message": "This request costs 237 sats. ...", "type": "payment_required", "code": "payment_required", "param": null }
}
پارەدانەکە request پەرەمتەر base64url JSONـە:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
گۆڕانکارییەک بەستراوەتەوە بە کۆتاییگەیەوە، بۆ Content-Type (جۆری میدیایەکەی و، بۆ
multipart، سنووری سنوورکردنی (boundary)ەکەی) و بۆ SHA-256ی ڕێک ئەو باوەتەی کە ناردووتە، و ١٥
دقێقە دەخایەنێت. دوای پارەدان، ئەوە بنێرە یەکگرتوو دووبارە داواکاری بکە: هەمان شت
Content-Type و هەمان بایتی JSON، یان بۆ ئەندپۆینتەکانی multipart
(/images/edits, /audio/transcriptions, /audio/translations)
هەمان جەستەی چەندین بەش (multipart body) بە هەمان سنووردارکەرەوە (boundary). زۆربەی کتێبخانەکانی HTTP سنووردارکەرەوەیەکی نوێ هەڵدەبژێرن هەر جارێک کە فۆرمێک کۆد دەکەنەوە، بۆیە جارێک کۆدی بکە و ئەو بایتانە دوو جار بنێرە.
هەر ناونیشانێک دەتوانێت لە هەر خولەکێکدا ٣٠ تەحەدی داوا بکات (ناونیشانی IPv6 وەک تەواوی /64 دەژمرێت). ئەو داواکارییانەی ناونیشانیان نەزانراوە، ١٠ دانە لە هەر خولەکێکدا بە شێوەیەکی توندتر بە هاوبەشی بەکاردێنن، و سنوورێکی گشتی لەسەر ئەو تەحەدییانەیە کە Nymbot لە هەموو ناونیشانەکانەوە دەدات؛ داواکارییەک کە پێش ئەوەی تەحەدییەک بکرێت ڕەت دەکرێتەوە (بۆ نموونە بەهۆی ئەوەی ناوەڕۆکەکەی JSONی دروست نییە) هەژمار ناکرێت بۆ ئەوە. جگە لەوەش، وەڵامەکە بریتییە لە 429 لەگەڵ Retry-After، پێش ئەوەی ناوەرۆکەکە بخوێندرێت ناردراوە. ئەو خاڵانەی (endpoints) کە بەبێ کلیل یان ناسنامە بانگ دەکرێن، هەروەها هەژمار دەکرێن بۆ سنووری گشتی ١٢٠ داواکاریی نەناسراو لە خولەکێکدا بۆ هەر ناونیشانێک. ناسنامە پێش ئەوەی ناوەرۆکەکە بخوێندرێت پشکنین بۆ دەکرێت، و داواکارییەک کە Content-Type نییە application/json (یان
multipart/form-data بۆ ئەپلۆدکردن) بە ڕەتکرانەوە دەردەکەوێت لەگەڵ 415 و هەرگیز
فاتوێری بۆ نێریت.
نرخی ئیمبیدینگەکان (Embeddings) لەسەر بنەمای خەمڵاندنی توکنەکانی ناوەڕۆکی دەرەنجام (input) دیاری دەکرێت، بە margins 1.5×، لەبەر ئەوەی ژمارەی ڕاستەقینە تەنها دوای ئەوە دەزانرێت. تۆ پارەی ئەو توکانە دەدەی کە بە ڕاستی بەکارهاتوون، و بەشی بەکارنەهێنراوی پارەکە وەک... دەگەڕێتەوە گەڕاندنەوەی تۆکن.
ناردنی پارەکە
وەتی بە ئەلیکترۆنییەک (invoice) بە هەر جۆرە والییەتییەکی Lightning (Lightning wallet) بییە. والیێتەکە precondition (preimage) دەداتێ، کە ٦٤ کارەکتەری hexـە. دوای ئەوە هەمان داواکاری بنێرەوە بە یەکێک لە ئەمانە:
| پلان | سەرناو |
|---|---|
| L402 | Authorization: L402 <macaroon>:<preimage> (LSAT کار دەکاتەوە) |
| پارەدان | Authorization: Payment <base64url JSON>، کە JSONەکە لێیە {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
داوا nymbot
ئۆبجێکتەکە هیچ بوارێکی هاوسەنگی (balance) نییە: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}, و هیچ ... نییە X-Nymbot-Balance-Sats سەرەوە. A
داواکارییەک کە بە ڕێگەی پارەدانەکەوە دراوابێت، دەستی پێدەکات بە Payment-Receipt سەرپێ (base64url
JSON لەگەڵ ناسنامەی تەحەددی، هاشەکەی پارەکە وەک reference, status و
timestamp). داواکارییە پارەدانکراوەکان بە هیچ ناویەک (nym) بەستراوەتەوە، بۆیە لە مێژووی پرسیارەکاندا دەردەکەون.
| بارودۆخ | کەی |
|---|---|
402 payment_already_used | هەموو پارەدانێک تێچووی یەک داواکارییە. وەڵامەکە تەحەددییەکی نوێیە بۆ ئەم داواکارییە، بۆیە ئەو کڕیارەی کە دوایین ناسنامەی خۆی کۆگای دەکات (وەک lnget بە سادەیی دووبارە دەداتەوە. |
402 payment_mismatch | بڕوانامەکە بۆ خاڵی کۆتایی (endpoint)ێکی تر دەربخرابوو، Content-Type یان جەستە، یان کەمتر لەوە دەدات کە ئێستا تێچووی ئەم داواکارییە هەیە. تەحەدിയەیەکی نوێ بۆ ئەم داواکارییە لەگەڵیدایە؛ ئەگەر پارەکە زۆر کەم بووایە، ئەوەی پێی شتی دەگەڕێتەوە وەک... گەڕاندنەوەی تۆکن (refund_token و refund_sats لە جەستەدا). |
402 payment_expired | زیاتر لە ١٥ خولەک بەسەر تەحەدییەکەدا تێپەڕی. تەحەدییەکی نوێ لەگەڵیدا دێت. ئەگەر وێنەی پێشوەختە (preimage) نیشانی بدات کە تۆ پارەت داناوە، ئەوەی دراوەتەوە وەک ... دەگەڕێتەوە گەڕاندنەوەی تۆکن (refund_token و refund_sats لە ناو جەستەدا)، جارێک؛ پاشان ناسنامەکە بەکار دەهێنرێت و بەسەرێ دێت. |
401 invalid_preimage | پێش-وێنەکە هاش ناکات بۆ هاشی پارەدانەکەی پسوولەکە. پارەدانەکە بەکار ناهێنراوە. |
401 invalid_payment_credential | بڕوانامەکە هەڵەیە، یان دوای ئەوەی Nymbot دەرستی کردووە گۆڕاوە، یان ئاماژە بە هێڵەکی (hash) پارەدانێک دەکات کە Nymbot هەر وەسڵێکی بۆ دەرنەکردووە. مەکارۆنێک (macaroon) کە ڕەهەندێکی (caveat) تێدابێت کە Nymbot نەیداناسێت، یان ڕەهەندی پێداچوونەوەی تێدابێت، ڕەت دەکرێتەوە. |
429 rate_limit_exceeded | زیاتر لە ٣٠ ناسنامە یان کلیل کە لە دەکۆڵینەوەدا سەرکەوتوو نەبوون لەم ناونیشانەوە هات لە خولەکێکدا، یان یەک تۆکەنی گەڕانەوە زیاتر لە ٦٠ جار لە خولەکێکدا ناردراوە. چاوەڕێ بکە بۆ Retry-After. |
cURL
BODY='{"model":"nano-banana","prompt":"a lighthouse at dusk","response_format":"b64_json"}'
URL=https://nymbot.ai/api/v1/images/generations
# 1. Get the challenge
CH=$(curl -s -D - -o /dev/null "$URL" -H "Content-Type: application/json" -d "$BODY" | grep -i '^www-authenticate: L402')
MAC=$(echo "$CH" | sed -E 's/.*macaroon="([^"]+)".*/\1/')
INVOICE=$(echo "$CH" | sed -E 's/.*invoice="([^"]+)".*/\1/')
# 2. Pay $INVOICE with your wallet and copy the preimage
PREIMAGE=...
# 3. Send the identical request with the credential
curl "$URL" -H "Content-Type: application/json" -H "Authorization: L402 $MAC:$PREIMAGE" -d "$BODY"
lnget
# lnget (Lightning Labs) pays L402 challenges from your own lnd node and retries for you
lnget -X POST -H "Content-Type: application/json" \
-d '{"model":"nano-banana","prompt":"a lighthouse at dusk","response_format":"b64_json"}' \
https://nymbot.ai/api/v1/images/generations
Python
import base64, json, re
import requests
url = "https://nymbot.ai/api/v1/images/generations"
body = json.dumps({"model": "nano-banana", "prompt": "a lighthouse at dusk", "response_format": "b64_json"}).encode()
headers = {"Content-Type": "application/json"}
challenge = requests.post(url, data=body, headers=headers)
assert challenge.status_code == 402
info = challenge.json()
print("Pay", info["amount_sats"], "sats:", info["invoice"])
preimage = pay_with_your_wallet(info["invoice"]) # 64 hex characters
# L402
mac = re.search(r'L402 macaroon="([^"]+)"', challenge.headers["WWW-Authenticate"]).group(1)
res = requests.post(url, data=body, headers={**headers, "Authorization": f"L402 {mac}:{preimage}"})
print(res.json()["nymbot"])
JavaScript
const url = "https://nymbot.ai/api/v1/images/generations";
const body = JSON.stringify({ model: "nano-banana", prompt: "a lighthouse at dusk", response_format: "b64_json" });
const headers = { "Content-Type": "application/json" };
const challenge = await fetch(url, { method: "POST", headers, body });
const www = challenge.headers.get("www-authenticate");
// The Payment scheme: echo every challenge parameter back with the preimage
const start = www.indexOf("Payment ");
const params = Object.fromEntries([...www.slice(start + 8).matchAll(/(\w+)="((?:[^"\\]|\\.)*)"/g)].map((m) => [m[1], m[2]]));
const { invoice } = JSON.parse(Buffer.from(params.request, "base64url").toString()).methodDetails;
const preimage = await payWithYourWallet(invoice);
const credential = Buffer.from(JSON.stringify({ challenge: params, payload: { preimage } })).toString("base64url");
const res = await fetch(url, { method: "POST", headers: { ...headers, Authorization: `Payment ${credential}` }, body });
console.log((await res.json()).nymbot, res.headers.get("payment-receipt"));
کڕیارەکان لەسەر بنیات نراون mppx بە ڕێگەی Lightning کار لە تەحەدای پارەدانەکە بکەن؛ ئاراستەی کۆتاییەکەیان (endpoint) بکەن و ڕێگەیان بدەن پارە بدەن.
ڤیدیۆکان
پارەدراو POST /videos وەڵامەکان 202 وەک ئەوەی کلیلکراو بێت، لەگەڵ a
status_url: GET بەبێ هیچ کلیلێک بۆ بەدواداچوون بۆ کارەکە. وا ئیمزا کراوە
و بۆ ماوەی ٢٤ کاتژمێر کار دەکات، تا ئەو کاتەی کارەکە پارێزراو دەبێت.
{
"id": "vid_...",
"status": "in_progress",
"status_url": "https://nymbot.ai/api/v1/videos/vid_...?exp=1790000000&sig=...",
"nymbot": {
"payment": "l402", "tier": "pro", "paid_sats": 4800, "charged_sats": 4800,
"refund_token": "REFUND-5E0B..."
}
}
پارێزگاری لەوە بکە refund_token لە ئەم وەڵامەدا: تەنها لێرە نیشان دەدرێت. بەتاڵە کاتێک
ڤیدیۆکە دروست دەکرێت (GET /api/v1/l402/refunds وەڵامەکان "status": "pending");
ئەگەر ڕێندەرەکە بەبێ پارە شکست بخوات، پارەکە دەچێتە سەر ئەوە. URL ی بارودۆخەکە نیشان دەدات
refund_sats بۆ کارێک کە پارەکەی گەڕێنراوەوە بەڵام هەرگیز تۆکنەکەی نەدراوە، بۆیە هاوبەشکردنی لینکەکە (URL) دۆخی گەڕاندنەوەکە هاوبەش ناکات. پشکنینی تۆکنەکە هەروەها کارێکی سەرکەوتێنەراوە کە کەسیش پرسیار (poll) نەکردووە، ڕێکدەخات.
گەڕانەوەی پارە
ئەگەر داواکارییەکی پارەدار شکست هەڵدات و دابینکەر پارەی ئەو هەوڵە لە Nymbot گرت، پارەکە دەبێتە خۆیان و
هەڵەکە ئاماژە بەوە دەکات، لەگەڵ charged_sats, ڕێک وەک بۆ داواکارییەکی کلیلدار. ئەگەر شکستی هێنا
بەبێ ئەوەی پارەی لێ بگیرێت، هەڵەکە هەڵگرتنی گەڕاندنەوەی تۆکن شایەنی ئەوە نییە کە پارەی بۆ دابڕێژیت:
{
"error": {
"message": "The image generator failed. Nothing was charged. Please try again. The 237 sats you paid are on refund token REFUND-...",
"type": "api_error",
"code": "upstream_error",
"refund_token": "REFUND-0C15DBED145D59131BA70298A413ADEB3D9B9AB082C476EA70A5BD38FCA5DE6D",
"refund_sats": 237,
"refund_expires_at": "2026-10-30T12:00:00.000Z"
}
}
بەشە بەکارنەهێنراوەکان بە هەمان شێوە دەگەڕێنەوە: ئەگەر داوای دوو وێنەت کردبێت و یەکێکیان بە سەرکەوتوویی نەبێت و بڕیار نەدرێت،
وەڵامی سەرکەوتنەکە nymbot ئەو ئۆبجێکتە تۆکەنێکی گەڕانەوەی بۆ ئەو بەشیye کە نەبووە؛
دەقی وەرگێڕانێک کە نەدەتوانرا درێژییەکەی لە سەرەتادا بخوێندرێتەوە، بەپێی درێژترین ئەگەر کە فایلەکە دەتوانێت بێت نرخ دەستنیشان دەکرێت (هەرگیز زیاتر لە ٣٠ خولەک)، و جیاوازییەکە لەگەڵ درێژییە ڕاستەکەوە وەک تۆکەنێکی گەڕانەوە دەگەڕێتەوە؛ ئەگەر دەرکەوت درێژ hơnە لە ٣٠ خولەک، بەم ڕەزامەند نەبوونەوە وەرناگیرێت 413
و هەموو پارەکە دەگەڕێتەوە. Embeddings ئەو شتانە دەگەڕێننەوە کە خەمڵاندەکە ڕاگرتبوو. ڤیدیۆیەکی شکستی هێناوە دەگەڕێتەوە بۆ ئەو تۆکەنەی کە ناردنی گەڕاندەوە.
تۆکنی گەڕاندنەوە کۆدێکی ٢٥٦-بیتە و هەڕەمەکییە. Nymbot تەنها هاشەکەی هەڵدەگرێت، و دوای ٣٠ ڕۆژ بەسەردهێت. باڵانسی sat هەڵدەگری، و دەتوانیت:
- بەو پارە بدە. بنێرە
Authorization: Bearer REFUND-…لە هەر یەک لە ئەو کۆتاییە سەرەوەیانە (OpenAI SDK وەک کلیلێکی API وەری دەگرێت). نرخەکە لە تۆکنەکە دەڕوات و ئەوەی دەمێنێتەوە لەسەر دەمێنێت (refund_token_satsلە ناوnymbotکەشی). تۆکەنێک کە نرخی لە داواکاری کەمترە وەڵام دەداتەوە402refund_insufficient; شکستێکی نەنووسراوە (unbilled) ساتەکان دەگەڕێنێتەوە سەر هەمان تۆکن. - پێداچوونەوەی بۆ بکە
GET /api/v1/l402/refundsبە هەمان سەردێڕ دەگەڕێنێتەوە{"sats": 237, "status": "open", "expires_at": "..."}. - یەک تۆکەن دەتوانرێت بە زۆرترین ٦٠ جار لە خولەکێکدا بەکاربهێنرێت.
- بگوازەرەوە بۆ ناو ناوی ڕاستەقینە. بیخە ناو دیارییەک بخە بەکارەوە لە ئەپڵیکەیشنی
Nymbot، یان پەیوەندی بکە
POST /api/v1/l402/refunds/redeemبە یەک داواکاری واژەکراو و{"refund_token": "REFUND-...", "balance": "standard"}(یان"pro"). هەموو کرێدیتەکان دەچنە سەر باڵانسەکە (١٠ سات بۆ هەر یەک لە standard، ١٠٠ سات بۆ Pro)؛ ئەو ساتانەی کە کرێدیتێکی تەواو دروست ناکەن لەسەر تۆکەنەکە دەمێننەوە بۆ داواکارییەکانی API.
cURL
URL=https://nymbot.ai/api/v1/l402/refunds/redeem
BODY='{"refund_token":"REFUND-...","balance":"standard"}'
curl "$URL" \
-H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
-H "Content-Type: application/json" \
-d "$BODY"
وەڵام
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }