پایگاه دانش توسعه دهندگان
توازن، بالا و کلیدها
ببینید که چه چیزی دارید، بر روی Lightning، به طور خودکار از کیف پول خود، ببینید که هر درخواست چه هزینه ای دارد و کلیدها را از کد مدیریت کنید.
این صفحه برای سهولت به صورت ماشینی ترجمه شده است. نسخه اصلی انگلیسی نسخه ای است که اعمال می شود.
بررسی توازن
هر دو توازن شما، و چقدر از پوشش این کلید استفاده می شود.
GET https://nymbot.ai/api/v1/credits/balance نیاز به کلید API دارد. POST همچنین برای مشتریان که انتظارش را دارند.
balance این دو حساب در دلار در قیمت فعلی بیت کوین است، برای ابزار هایی که انتظار یک عدد واحد را دارند (null اگر قیمت نمی تواند خوانده شود) بقیه در اعتبارات و sats است، که این گونه توازن ها در واقع حفظ می شود. key یک کلید که حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر
پاسخ
{
"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 نیازی به کلید ندارد.
یک Top-up 10 تا 1,000,000 sats است؛ یک Top-up Pro باید حداقل یک اعتبار Pro خریداری کند، بنابراین از 100 sats شروع می شود. bulk_bonus لیست اعتبار اضافی در بالای های بزرگتر، همانطور که در برنامه: 10٪، 15٪ یا 20٪ بیشتر در بالای های استاندارد از 500، 1000 یا 5000 sats، و در بالای های حرفه ای از 5,000، 10,000 یا 50,000 sats.
پاسخ
{
"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، سپس چک کنید برای اضافه کردن اعتبار
POST https://nymbot.ai/api/v1/topup/create/btc-lightning نیاز به کلید API دارد.
| میدان | نوع | مورد نیاز | توضیحات |
|---|---|---|---|
amount | شماره | بله | چقدر، در currencyیک عدد کامل برای شرط. |
currency | String | نه | SATS (در صورت عدم وجود) USD یا BTCدلار در قیمت فعلی بیت کوین تبدیل می شود. |
tier | String | نه | pro (بخش اول) یا standard• به چه میزان اعتبار پرداخت می شود. |
یک اعتبار استاندارد 10 sats و یک اعتبار Pro 100 sats، علاوه بر هر پاداش بزرگ؛
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) یا توسط کیف پول فلش رد شده (amount_out_of_range). |
429 | بیش از 60 حساب برای این نیم، یا 120 از این آدرس، در یک ساعت (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} - نیاز به یک کلید از نیم که حساب را ایجاد کرد.
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 یک ID 64 حروف از دعوت ایجاد نیست. |
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);
آرزوی تاریخ
یک خط برای هر درخواست: چه بود، کدام مدل، چه مقدار تیکون ها و چه هزینه ای بود. هیچ پیشنهاد یا پاسخ نگهداری نمی شود، بنابراین هیچ پاسخ داده نمی شود. رده ها برای 90 روز، تازه ترین اول نگهداری می شود. یک کلید که حداکثر آن را به دست آورد، هنوز می تواند تاریخ آن را بخواند.
GET https://nymbot.ai/api/v1/queries/history - نیاز به کلید API، که درخواست های خود را می بیند، یا یک درخواست امضا شد از نیم شما که هر کلید را می بیند.
| میدان | نوع | مورد نیاز | توضیحات |
|---|---|---|---|
page | کل (Query) | نه | استاندارد 1, حداکثر 1000; یک صفحه بالاتر 400 invalid_value. |
page_count | کل (Query) | نه | رده ها در هر صفحه. استاندارد 20, حداکثر 100. |
start_dateend_date | آرشیو ( Query ) | نه | ISO 8601 تاریخ یا زمان |
model | آرشیو ( Query ) | نه | فقط این مدل |
type | آرشیو ( Query ) | نه | chat, responses, messages, image, video, speech, transcription یا embedding. |
all_keys | پوتین (Query) | نه | با یک کلید: true شامل هر کلید از همان nym.Default false. |
key_id | آرشیو ( Query ) | نه | با یک درخواست امضا شده، یا با 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 را نمی گیرند. آنها یک امضای از نیم شما را می گیرند، بنابراین یک کلید آلوده می تواند تا حداکثر حداکثر آن صرف شود، اما هرگز نمی تواند کلید دیگری ایجاد کند یا حداکثر خود را افزایش دهد.
این برنامه این کار را برای شما انجام می دهد: همه چیز در آن آتش شما فقط به این بخش نیاز دارید تا کلید های خود را از کد خود مدیریت کنید.
این امضا یک رویداد Nostr از نوع 27235 (NIP-98) است که به base64 کد داده می شود.
Authorization Header با کلمه 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": "..."
}
uURL کامل درخواست است، زنجیره سوال شامل شده، دقیقا همانطور که ارسال شده است.methodروش HTTP است.payloadاست SHA-256 از بدن درخواست خام، در Hex.POSTوPATCHو بدن شما ارسال باید بیتی برای بیتی است که شما hashed.created_atباید در عرض 60 ثانیه از ساعت سرور باشد.- هر کار یک بار انجام می شود، یک
GETبه این ترتیب، یک عنوان ثبت شده را نمی توان دوباره پخش کرد. برای هر درخواست، یک عنوان جدید را ثبت کنید.nonceبرچسب با یک ارزش تصادفی به طوری که دو درخواست امضا شده در همان ثانیه هنوز متفاوت است. - بدن درخواست امضا می تواند حداکثر 64 KB باشد و یک بدن نیاز دارد.
Content-Type: application/json.
بازگشت یک رویداد ناپدید 401 missing_nostr_authیکی که به طور بد شکل گرفته، به طور بد امضا شده، خیلی قدیمی است، یا برای یک URL، روش یا بدن متفاوت باز می گردد.
invalid_nostr_authپس از آن، به معنای بازگرداندن یک پیام است.
nostr_auth_replayedکلید API ارسال شده به این نقطه پایانی رد می شود. امضا قبل از خواندن بدن چک می شود و هر آدرس می تواند 30 بار در دقیقه آن را شکست دهد (IPv6 آدرس به عنوان کل آن /64) محاسبه می شود؛ پس از آن دریافت می شود 429 با
Retry-After.
از این طریق می توان از وبسایت های خود Nymbot (https://nymbot.ai,
https://nymchat.app یک صفحه در هر سایت دیگر هیچ عنوان CORS را دریافت نمی کند، بنابراین نمی تواند آنچه را که آنها باز می گردند بخواند.
Originآنها تحت تاثیر قرار نمی گیرند.
امضا نیاز به کلید مخفی نیم شما (نیم شما) nsec) که همه چیز را کنترل می کند: هویت شما، تاریخچه شما و حساب شما. فقط آن را در یک اسکرپت در یک ماشین که شما اعتماد می کنید، آن را از محیط بخوانید به جای نوشتن آن به فایل، و ترجیح می دهد که اپلیکیشن هنگامی که شما می توانید.
این کمک کننده ها عنوان را ایجاد می کنند. مثال های بعدی در این صفحه از آنها استفاده می کنند. آنها کلید مخفی را در هکتار از NOSTR_SECRET_HEXCURL یکی از استفاده های
ناک ابزار خط فرمان، که یک دکمه 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 برنامه در بالا نشان می دهد: کلید عمومی شما، هر دو توازن، چه تعداد کلید های فعال (نه رد شده و نه ختم شده) و اتوماتیک Top-Up تنظیمات، یا
null هنگامی که سرور آنها را ارائه نمی دهد.
GET https://nymbot.ai/api/v1/account نیاز به A درخواست امضا شد.
پاسخ
{
"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());
مدیریت کلیدها
نقاط پایانی پشت لیست کلیدی برنامه. همه آنها نیاز به یک درخواست امضا شدهر کلید در این فرم با زمان در 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 | پوتین (Query) | نه | شامل کلیدهای حذف شده.پایه 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 | String | بله | 1 تا 40 شخصیت، متفاوت از دیگر کلید های فعال شما (نمایند مورد). |
limit_sats | Integral | نه | ۱- در صورت عدم پرداخت هزینه، هزینه را از دست بدهید. |
reset_period | String | نه | daily, weekly یا monthlyنیازهای limit_satsبگذارید آن را برای یک کلاه که هرگز بازگردد. |
expire_at | String یا integer | نه | هنگامی که کلید کار را متوقف می کند: یک زمان ISO 8601، یا میلی ثانیه از سال 1970. |
پاسخ دادن (201)
{
"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)؛ حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حداکثر حدunknown_parameter)؛ یا 25 کلید فعال در حال حاضر (too_many_keys). |
429 | بیش از 60 کلید ساخته شده توسط این نیم، یا 120 از این آدرس، در یک ساعت (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 اگر هیچ کلید شما این ID را ندارد.
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بازگرداندن یک کلید که در حال حاضر بازگردانده شده است به همان روش پاسخ می دهد. تنها آخرین 50 کلید بازگردانده شده حفظ می شود؛ قدیمی ترین آن ها زمانی که یک کلید دیگر بازگردانده می شود حذف می شود.
پاسخ
{ "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 Auto-Top-Up جدید
یک کیف پول Lightning را با Nostr Wallet Connect متصل کنید و Nymbot به تنهایی یک توازن را بالا می برد، هنگامی که هزینه API آن را کم انجام می دهد. درخواست امضا شد.
چگونه کار می کند: پس از یک درخواست API به توازن که شما انتخاب کرده اید پرداخت می شود، اگر این توازن زیر حد شما سقوط کرده است، Nymbot یک فاکتور برای مبلغ بالای شما ایجاد می کند، از کیف پول شما درخواست می کند تا آن را بپردازد و اعتبار را اضافه می کند. آن را به حداکثر یک بار در هر 5 دقیقه برای هر نیم و توازن بالا می رود، بنابراین یک انفجار از درخواست ها نمی تواند کیف پول را از بین ببرد. هزینه در برنامه ها آن را ایجاد نمی کند. زمان و اندازه آخرین بالا، و آخرین اشتباه، در تنظیمات هستند؛ اگر یک پرداخت پس از یک اشتباه، حساب خود را با وضعیت بالا اعتبار آن.
Nymbot آن را رمزگذاری می کند و فقط از آن برای پرداخت حساب های خود استفاده می کند، اما فقط برای این کار، با یک بودجه صرفه جویی در کیف پول خود را ایجاد می کند، بنابراین بیشتر آن را می تواند هرگز پرداخت یک شماره انتخاب شما است. pay_invoice.
اتصال یک کیف پول
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect امضا شده است.
| میدان | نوع | مورد نیاز | توضیحات |
|---|---|---|---|
nwc_url | String | بله | خطوط ارتباطی، آغاز nostr+walletconnect://Nymbot از کیف پول درخواست می کند get_info قبل از آنکه آن را ذخیره و ذخیره کنید، آن را رمزگذاری کنید. |
threshold_sats | Integral | بله | در صورتی که حساب شما پایین تر از این مقدار باشد، حداقل ۱۰۰۰ دلار. |
topup_sats | Integral | بله | چه مقدار باید هر بار اضافه شود؟ 1000 تا 1,000,000 sats. |
tier | String | نه | 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 | (مطالعه ای ندارد)invalid_nwc_url)؛ کیف پول در مورد ریل خود پاسخ نداد (nwc_unreachable) یا ردیابی چک (nwc_rejected)؛ ارتباط نمی تواند حسابداری را پرداخت کند (nwc_missing_permission)؛ یا مقدار خارج از محدودیت ها. |
501 | این نرم افزار به صورت خودکار برای این سرور فعال نمی شود (nwc_unavailableهمان طور که در مورد دو نقطه پایانی دیگر هم گفته می شود. |
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 هنگامی که هیچ کیف پول متصل نشده است، قطعه اتصال خود را هرگز باز نمی گردند.
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 امضا شده است.
حذف زنجیره اتصال ذخیره شده. هیچ ترجیح دیگری وجود ندارد. برای اطمینان، شما همچنین می توانید اتصال را در کیف پول خود حذف کنید.
پاسخ
{ "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());
پرداخت بر اساس درخواست بدون کلید
نقاط پایانی با قیمت ثابت می توانند برای یک درخواست در هر زمان در طول Lightning پرداخت شوند، بدون کلید، بدون حساب و بدون توازن: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations و POST /embeddingsچت، پاسخ ها و پیام ها همیشه به یک کلید نیاز دارند. یک درخواست که یک کلید را حمل می کند به طور معمول به توازن محاسبه می شود؛ جریان پرداخت تنها زمانی شروع می شود که هیچ کلید ارسال نمی شود.
Nymbot دو نسخه از همان ایده را از یک پشتیبان می گوید: Lightning Labs
L402 همچنین با نام قدیمی خود، LSAT) و پروژه IETF
پرداخت HTTP Authentication با استفاده از lightning روش و
charge استفاده از آنچه مشتری شما درک می کند.
پرداخت بدون کلید تنها در زمانی است که API_L402_SECRET دارای حداقل 32 بیتی تصادفی، به عنوان شش (64 شخصیت) یا base64 (44) است. openssl rand -hex 32یک ارزش کوتاه تر یا قابل پیش بینی، ویژگی را خاموش می کند و دلیل آن را ثبت می کند. API_L402_SECRET_PREVIOUS برای یک روز: اعتبارات، URL های وضعیت و چالش هایی که تحت آن ساخته شده اند تا زمانی که به پایان برسند، کار می کنند.
چالش
درخواست را با No ارسال کنید Authorization عنوان: اگر درست باشد، هیچ چیز اجرا نمی شود و شما 402 Payment Required با یک فاکتور برای دقیقا آنچه درخواست هزینه: همان قیمت یک کلید می خواهد پرداخت، تبدیل به 10 sats یک اعتبار استاندارد یا 100 sats یک اعتبار Pro و به طور کامل متغیر شده است ( حداقل 1 sat، و حداقل 0.05 اعتبار حداقل). 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 (به نوع رسانه و، برای چند بخش، مرز آن) و به SHA-256 بدن دقیق بیتی که شما ارسال کرده اید، و طول می کشد 15 دقیقه. مشابه درخواست دوباره: همان
Content-Type و همان بیتی های JSON، و یا برای نقاط پایانی چند بخش (/images/edits, /audio/transcriptions, /audio/translationsبیشتر کتابخانه های HTTP هر بار که یک فرم را رمزگذاری می کنند یک مرز جدید را انتخاب می کنند، بنابراین یک بار آن را رمزگذاری کنید و این بیتی ها را دو بار ارسال کنید.
هر آدرس می تواند برای 30 چالش در دقیقه درخواست کند (IPv6 آدرس به عنوان کل آن /64 محاسبه می شود). درخواست هایی که آدرس آنها شناخته نمی شود 10 در دقیقه سخت تر به اشتراک می گذارند، و یک حد کل بر چالش های Nymbot در تمام آدرس ها وجود دارد؛ یک درخواست رد شده قبل از یک چالش انجام می شود (به عنوان مثال با یک بدن که JSON قابل اجرا نیست) به آن توجه نمی کند. 429 با Retry-Afterپس از ارسال، قبل از خواندن بدن ارسال می شود.پایان پرداخت بدون کلید یا اعتبار نیز به مرز عمومی 120 درخواست غیر معتبر در هر دقیقه برای هر آدرس محاسبه می شود.یک اعتبار قبل از خواندن بدن چک می شود، و یک درخواست که از آن استفاده می شود. Content-Type نیست application/json (یا
multipart/form-data در صورتی که از آن اجتناب شود، 415 هرگز به حساب نمی رسند.
واردات از یک ارزیابی از تیکن ها در واردات، با یک margin 1.5، قیمت می شود، زیرا تعداد واقعی فقط بعد از آن شناخته می شود. بازگرداندن Token.
ارسال پرداخت
پرداخت حساب با هر کیف پول ریتنینگ. کیف پول شما را پیش تصویر، 64 شخصیت شیکس می دهد. سپس همان درخواست را با یکی از این ها ارسال کنید:
| برنامه | Header |
|---|---|
| L402 | Authorization: L402 <macaroon>:<preimage> (LSAT همچنین کار می کند) |
| پرداخت | Authorization: Payment <base64url JSON>کجاست JSON {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
یک درخواست پرداخت دقیقا همانند یک درخواست با کلید پاسخ می دهد، به جز این که nymbot
موضوع هیچ زمینه توازن ندارد: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}و وجود ندارد X-Nymbot-Balance-Sats یک درخواست پرداخت شده با سیستم پرداخت نیز یک Payment-Receipt عنوان (base64url JSON با ID چالش، hash پرداخت به عنوان reference, status و
timestampدرخواست های پرداخت با هیچ نیم مرتبط نیستند، بنابراین در تاریخچه سوال ظاهر نمی شوند.
| وضعیت | وقتی |
|---|---|
402 payment_already_used | هر پرداخت برای یک درخواست پرداخت می شود. پاسخ یک چالش جدید برای این درخواست است، بنابراین یک مشتری که آخرین اعتبار خود را (به عنوان lnget ب) به صورت مجددا به زمین برود. |
402 payment_mismatch | در نهایت، این امر برای یک نقطه دیگر صادر شد. Content-Type یا بدن، یا پرداخت کمتر از این درخواست در حال حاضر هزینه است. یک چالش جدید برای این درخواست همراه با آن است؛ اگر پرداخت بسیار کوچک بود، آنچه شما پرداخت می کنید به عنوان یک چالش باز می گردد. بازگرداندن Token (refund_token و refund_sats در بدن ) |
402 payment_expired | بیش از 15 دقیقه از زمان چالش گذشت. یک چالش جدید همراه با آن است. اگر تصویر پیش نمایش نشان می دهد که شما پرداخت کرده اید، آنچه که پرداخت کرده اید به عنوان یک چالش باز می گردد. بازگرداندن Token (refund_token و refund_sats یک بار در بدن)؛ پس از آن معتبر استفاده می شود. |
401 invalid_preimage | پیش تصویر به hash پرداخت فاکتور هش نمی کند. |
401 invalid_payment_credential | گواهینامه فاسد است، پس از Nymbot آن را صادر کرده، یا نام یک هش پرداخت Nymbot هیچ گاه یک فاکتور را صادر نکرده است. |
429 rate_limit_exceeded | بیش از 30 اعتبار یا کلید که موفق به تأیید نشدند در یک دقیقه از این آدرس آمده اند، یا یک تیک بازپرداخت بیش از 60 بار در یک دقیقه ارسال شد. 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 با روش فلش، چالش پرداخت را خودشان انجام می دهند؛ آنها را در نقطه پایانی نشان می دهند و اجازه می دهند پرداخت کنند.
ویدیو
با پرداخت POST /videos پاسخ ها 202 مانند یک کلید، plus a
status_url: GET بدون هیچ کلید برای پیگیری کار، آن را امضا می کند و برای 24 ساعت کار می کند، تا زمانی که کار نگه می دارد.
{
"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")؛ اگر render شکست ناپذیر شود، پرداخت بر روی آن می افتد.
refund_sats برای یک شغل بازگردانده شده اما هرگز تیکن، بنابراین به اشتراک گذاری URL وضعیت به اشتراک گذاری بازپرداخت نمی پردازد.
بازپرداخت
اگر یک درخواست پرداخت ناپذیر شود و ارائه دهنده Nymbot را برای این تلاش محاسبه کرد، پرداخت را نگه می دارد و خطا چنین می گوید. charged_satsبه عنوان مثال، اگر این درخواست بدون پرداخت، شکست ناپذیر شود، اشتباه باعث می شود که بازگرداندن Token ارزش آنچه پرداخت کرده اید:
{
"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 موضوع یک تکیه بازپرداخت را برای آن که از دست رفته است حمل می کند؛ یک تکیه که طول آن نمی تواند قبل خوانده شود، برای طولانی ترین فایل می تواند باشد (هرگز بیش از 30 دقیقه)، و تفاوت به طول واقعی به عنوان یک تکیه بازپرداخت باز می گردد؛ اگر بیش از 30 دقیقه باشد، آن را رد می کند. 413
و تمام پرداخت باز می گردد.دست آورده ها آن چیزی را باز می گردند که ارزیابی آن را حفظ کرده است.یک ویدئو شکست ناپذیر به تیکن ارسال آن باز می گردد.
یک تیکن بازپرداخت یک کد 256-بیت تصادفی است. Nymbot فقط hash خود را ذخیره می کند و پس از 30 روز به پایان می رسد.
- با آن پرداخت کنید. ارسال کنید
Authorization: Bearer REFUND-…در این مطلب به شرح زیر می پردازیم: (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول) (بخش اول)refund_token_satsدر اینnymbotیک تیکن ارزش کمتر از پاسخ به درخواست402refund_insufficientیک شکست ناپذیر، sats را بر روی همان token قرار می دهد. - آن را چک کنید
GET /api/v1/l402/refundsبا همان هارد باز می گردد{"sats": 237, "status": "open", "expires_at": "..."}. - یک تیکن می تواند حداکثر 60 بار در دقیقه مورد استفاده قرار گیرد.
- آن را به یک نیم منتقل کنید. آن را در یک هدیه را باز کنید در برنامه Nymbot، یا تماس
POST /api/v1/l402/refunds/redeemبا A درخواست امضا شد و{"refund_token": "REFUND-...", "balance": "standard"}(یا"pro"کل اعتبارها به توازن می روند (10 سهم هر یک بر اساس استاندارد، 100 سهم بر اساس 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 } }