قاعدة المعرفة المطورين
التوازن والخلفيات والأصابع
تحقق من ما لديك، تحقق من Lightning، تحقق تلقائيًا من حسابك الخاص، انظر ما تكلفه كل طلب، وإدارة المفاتيح من الكود.
تمت ترجمة هذه الصفحة آليًا من أجل الراحة. النسخة الأصلية الإنجليزية هي النسخة التي تنطبق.
التحقق من التوازن
كلا من توازناتك ، وكما يتم استخدام كمية من كفة هذا المفتاح.
GET https://nymbot.ai/api/v1/credits/balance تحتاج إلى مفتاح API. POST تعمل أيضا ، للعملاء الذين يتوقعون ذلك.
balance هو التوازنات المشتركة في الدولارات في سعر بوتين الحالي، بالنسبة للأدوات التي تتوقع رقم واحد (null إذا كان السعر لا يمكن قراءته).الخيار هو في الائتمان والضرائب، وهذا هو الطريقة التي يتم الحفاظ عليها في الواقع. 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 لا حاجة إلى مفتاح
يبدأ التكلفة من 10 إلى 1،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000،000. bulk_bonus يحدد الائتمان الإضافي على أعلى أعلى، كما هو الحال في التطبيق: 10٪، 15٪ أو 20% أكثر على أعلى أعلى من 500، 1000 أو 5000 أسهم، و على أعلى أعلى من 5000، 10,000 أو 50،000 أسهم.
الإجابة
{
"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);
تساقط فوق الضوء
يخلق حساب الفراش الذي يضيف القيمة إلى الفراش الذي يملك المفتاح. تحقق من من أجل الحصول على القيمة المضافة.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning تحتاج إلى مفتاح API.
| الفضاء | نوع | المطلوب | وصف |
|---|---|---|---|
amount | رقم | نعم | كم، في currencyعدد كامل من الأسهم. |
currency | String | لا | SATS (الإيمان باليوم الآخر) USD أو BTCيتم تحويل الدولارات إلى سعر بيتكوين الحالي. |
tier | String | لا | pro (الخطأ) أو standard: ما هو التوازن الذي يمر به القرض. |
الائتمان القياسي هو 10 سعر و Pro الائتمان 100 سعر ، بالإضافة إلى أي مكافأة كبيرة.
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(أو أكثر من 1 مليار دولار)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 ليست هوية 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 على الأقل. |
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": "..."
}
uهو URL الكامل للطلب، وتشمل سلسلة الاستفسارات، تماما كما تم إرسالها.methodهذا هو طريقة HTTP.payloadهو SHA-256 من جسم الطلب الأسود، في الفئة السادسة.POSTوPATCHويجب أن يكون الجسم الذي تريد إرساله هو بيتي لكل بيتي الذي تريد إرساله.created_atيجب أن يكون في غضون 60 ثانية من ساعات المورد.- كل حدث يعمل مرة واحدة ، a
GETلا يمكن إعادة تشغيل العلامة المكتوبة التي تم تخزينها. تسجيل جديد لكل طلب.nonceتقييم مع قيمة عشوائية حتى يتم تقييم اثنين من الطلبات المقبولة في نفس ثانية لا تزال مختلفة. - يمكن أن يكون الجسم من طلب مكتوب إلى حد ما 64 كابيتال ، ويحتاج الجسم إلى
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_HEX• يُستخدم CURL 1
نان أداة خطة الأوامر ، والتي تتخذ ميزة nsec أو Hex ، و sha256sum في ماكسو , 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 | النسيج | لا | التكلفة في الأسهم ، على الأقل 1 ، أتركها بدون كلفة. |
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( 1 ) ؛ حد لا يتجزأ أقل من 1 ؛ فترة الاسترداد دون حد ؛ انتهاء في الماضي ؛ مساحة غير معروفة (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 Wallet مع Nostr Wallet Connect و Nymbot تصل إلى التوازن بنفسك عندما تتراوح استهلاك API بها منخفضة. التوقيع التوقيع.
كيف تعمل: بعد إرسال طلب API إلى التكلفة التي اخترت مشاهدةها، إذا انخفض التكلفة فوق حدودك، تقوم Nymbot بإنشاء حساب على مبلغ التكلفة الخاصة بك، وتطلب من الكمبيوتر الخاص بك دفعها، وإضافة الائتمان. موقع Top-Up تمنحها
يتيح سلسلة الاتصال لأولئك الذين يحتفظون بها طلب المال الخاص بك. Nymbot تخزينها رمزيا وتستخدمها فقط لتسديد رسومها الخاصة بها، ولكن جعل الاتصال فقط لهذا، مع ميزانية التكلفة في بيتك، حتى أكبر ما يمكن أن تدفعه هو رقم اختارك. pay_invoice.
الاتصال بالبضائع
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect ثم التوقيع.
| الفضاء | نوع | المطلوب | وصف |
|---|---|---|---|
nwc_url | String | نعم | خط الاتصال ، بدءاً nostr+walletconnect://Nymbot يطلب من محفظة get_info قبل تخزينها، وتخزينها رمزية. |
threshold_sats | النسيج | نعم | أدناه عندما ينخفض التكلفة أقل من هذا العدد الكثير من الأسهم. |
topup_sats | النسيج | نعم | كم تكسب كل مرة؟ 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 مع lightning الطريقة و
charge إستخدام ما يعرفه العملاء.
الدفع دون المفتاح هو على فقط عندما API_L402_SECRET يحتوي على 32 بيتاً على الأقل، مثل السترات (64 علامة) أو base64 (44). openssl rand -hex 32إن قيمة أقصر أو قابلة للتنبؤ تنبئ الميزات وتسجل لماذا. لتنقلها، قم بتحرك القيمة القديمة إلى API_L402_SECRET_PREVIOUS لمدة يوم واحد: تظل الوثائق والمواقع الإلكترونية المستمرة والتحديات التي تم إنشاؤها تحتها تعمل حتى تنتهي.
التحدي
إرسال طلب مع لا Authorization إذا كان صحيحًا، لا شيء يعمل، وكنت 402 Payment Required مع رسالة للغاية ما يصل إلى هذا الطلب: نفس السعر الذي سوف يدفعه المفتاح ، يتم تحويلها إلى 10 سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر سعر س 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 وبهذه الطريقة، يمكن أن تتمكن من إعادة تثبيت الأقمار الصناعية (/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 ولا يحصل على حساب أبداً.
يتم تقييم الإدخالات من إجمالي تقييمات القطط في الدخول ، مع 1.5×؛ الحد الأدنى ، حيث يتم معرفة عدد الحقيقي فقط بعد ذلك. إعادة تقييم تقييم.
إرسال الدفع
ادفع الحساب مع أي محفظة الضوء. تمنحك المحفظة صورة إضافية، 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 التحدي، الحد الأدنى من الدفع reference, status و
timestampلا يرتبط طلبات المدفوعات بأي نيم ، لذلك لا تظهر في تاريخ الاستفسارات.
| الوضع | عندما |
|---|---|
402 payment_already_used | كل دفع يلجأ إلى طلب واحد.الرد هو تحدي جديد لهذه الطلبة، وبالتالي، يستخدم المستخدم الذي يختبئ آخر مؤلفاته (مثل: lnget وَهُوَ يَقُولُ: إِنَّهُ يَقُولُ: إِنَّهُ يَقُولُ إِنَّهُ يَقُولُ. |
402 payment_mismatch | وقد تم إدخال الإشارة إلى نقطة أخرى، Content-Type أو الدفع أقل من هذا الطلب الآن تكلفة. تحدي جديد لهذا الطلب يأتي معه؛ إذا كان الدفع صغيرًا للغاية، ما ادفعته يعود كبديل. إعادة تقييم تقييم (refund_token و refund_sats في الجسم ) |
402 payment_expired | ما يزيد عن 15 دقيقة منذ التحدي. يأتي التحدي الجديد معها.إذا أظهرت الصورة المفتوحة أنك اشتريت، فإن ما اشتريت يعود كإيداع. إعادة تقييم تقييم (refund_token و refund_sats في الجسم) مرة واحدة، ثم يتم استخدامه. |
401 invalid_preimage | لا يقلل الصورة المفتوحة عن هشاشة الدفع في الحساب. |
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 على سبيل المثال، على سبيل المثال، 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"( )؛ إذا لم يكن التقديم غير مبالغ فيه، فإن الدفع يقع على ذلك.
refund_sats للعمل المدفوع ولكن لا يلجأ أبدا إلى الورق، لذلك تشارك URL المستوى لا يشارك الورق.
استرداد
إذا لم يكن الطلب المدفوع ناجحًا، وإذا حصل على خدمة 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 يتناول الموضوع علامة استرداد لعدم وجودها؛ يتم تقييم الترجمة التي لا يمكن قراءتها أمامها لأطول فترة ممكنة من الملف (لا يزيد عن 30 دقيقة) ، ويعود الفرق في الطول الحقيقي ك علامة استرداد؛ إذا أظهرت أنها أطول من 30 دقيقة ، يتم رفضها مع 413
ويعود الدفع بأكملها.إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال إرسال
توقيع العائد هو رمز 256 بوصة عشوائي. Nymbot تخزين القذف فقط، وتنتهي بعد 30 يوما. إنه يحتوي على سعر معين، ويمكنك:
- الدفع معها. إرسال
Authorization: Bearer REFUND-…وَقَوْلُهُ تَعَالَى: {وَإِذْ قُلْنَا لِلْمَلاَئِكَةِ اسْجُدُواْ لآدَمَ فَسَجَدُواْ إِلاَّ إِبْلِيسَ أَبَى وَاسْتَكْبَرَ وَكَانَ مِنَ الْكَافِرِينَ} [البقرة: 34] .refund_token_satsفي الnymbotموضوع). تقييم قيمة أقل من الإجابة على الطلب402refund_insufficient· فشل غير مبرر يضع الأسهم مرة أخرى على نفس التوقيت. - تحقق ذلك
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 } }