مواد ڏانهن وڃو
واپس Nymbot

علم جو بنياد ترقی ڪندڙ

توازن، ٽاپ اپ ۽ چابیون

چیڪ ڪریو تہ توہان وٽ ڇا آھی، بجلی مٿان مٿی ڪریو، توہان جی پنھنجی پرس مان پنھنجو پاڻ مٿی ڪریو، ڏسو تہ ہر درخواست جی قیمت ڇا آھی، ۽ ڪوڊ مان چابیون منظم ڪریو

توازن کي چکڻ

توھان جا ٻئی بیلنس، ۽ ھن ڪنجی جی ڪیپ جو ڪیترو استعمال ڪیو ویو آھی

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 سیٽ آھی ؛ ھڪ پرو ٽاپ اپ کی گھٽ ۾ گھٽ ھڪ پرو ڪریڊٽ خرید ڪرڻو پوندو آھی، تنہنڪری اھو 100 سیٽ تی شروع ٿئی ٿو 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);

بجلی جی مٿان مٿی

بجلی جی انوائس ٺاہی ٿی جیڪا ان نیم ۾ ڪریڊٽ شامل ڪری ٿی جنہن جی ڪنجی سان تعلق رکی ٿی ان کی ڪنھن بہ بجلی جی پرس مان ادا ڪریو ڏسو ته ڪریڊٽ کی شامل ڪرڻ لاء

POST https://nymbot.ai/api/v1/topup/create/btc-lightning - ھڪ API ڪنجی جی ضرورت آھی

فیلڊقسمضروری آھیوضاحت
amountنمبرهاڪیترو، ان ۾ currency۔ Sats لاء ھڪ پورو نمبر
currencyاسٽرنگنہ نہSATS (ڊیفالٽ)، USD یا BTCدولارن کي موجودي Bitcoin قیمت تي بدلجي ٿو.
tierاسٽرنگنہ نہpro (ڊیفالٽ) یا standard: جنہن کی ڪریڊٽ بیلنس ڏانہن وڃی ٿو

ھڪ معیاری ڪریڊٽ آھی 10 سیٽ ۽ ہڪ پرو ڪریڊٽ 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,000,000 sats (amount_too_largeان کان سواءِ ٻيو ڪو به نه هو، پر ان کان سواءِ ڪو به نه هو.amount_out_of_range).
429اُن وقت اُن ۾ 60 سيڪڙو سيڪڙو سيڪڙو سيڪڙو سيڪڙو (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);

ھڪ ٽاپ اپ چیڪ ڪریو

پڇندو آھی تہ ڇا انوائس ادا ڪئی وئی آھی ۽ ھڪ دفعو اھو آھی، ڪریڊٽ کی شامل ڪری ٿو چیڪ ڪرڻ اھو آھی جیڪو ان کی ڪریڊٽ ڪری ٿو، تنہنڪری ادا ڪرڻ کان پوء، چیڪ ڪریو جیستائین حالت نہ آھی creditedبعد ۾ دوبار چکڻ محفوظ آهي: قرض هڪ ڀيرو ايندي آهي، هر چند ڀيرو توهان پڇيو.

GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - NIM مان ہڪ ڪنجی جی ضرورت آھی جنہن انوائس ٺاہی

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
}
حالتڪڏھن
400ID تخلیق ڪال مان 64 اکرن جی ID نہ آھی
404توھان جی NIM لاء ان ID سان ڪو انوائس ناہی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 ڪنجی جی ضرورت آھی، جیڪا پنھنجی درخواستن کی ڏسی ٿی، یا دستخط ٿیل درخواست توھان جی NIM مان، جیڪو ہر ڪنجی کی ڏسی ٿو

فیلڊقسمضروری آھیوضاحت
pageاهو ئي سوال آهي.نہ نہمعيار 1، وڌيڪ 1000، هڪ وڌيڪ صفحي آهي. 400 invalid_value.
page_countاهو ئي سوال آهي.نہ نہپرت فی صفحو۔ ڊیفالٽ 20، وڌ ۾ وڌ 100
start_date
end_date
تار (سوال)نہ نہISO 8601 تاریخون یا وقت
modelتار (سوال)نہ نہصرف اھو ماڊل
typeتار (سوال)نہ نہchat, responses, messages, image, video, speech, transcription یا embedding.
all_keysبولین (سوال)نہ نہھڪ ڪنجی سان: true ھن ۾ ھڪ ئی نیم جی ہر ڪنجی شامل آھی۔ ڊیفالٽ 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 ڪنجی نہ وٺندا آھن اھی توہان جی NIM مان دستخط وٺندا آھن، تنہنڪری ہڪ لیک ٿیل ڪنجی پنھنجی ڪیپ تائین خرچ ڪری سگہی ٿی پر ڪڏھن بہ ٻی ڪنجی نہ ٺاہی سگہی ٿی یا پنھنجی ڪیپ وڌائی سگہی ٿی

اهو توهان لاءِ ڪم ڪري ٿو: هر شيءِ ای۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔۔ توهان کي رڳو توهان جي انٽرويوٽ ڪرڻ جي ضرورت آهي.You only need this section to manage keys from your own code.

دستخطی قسم 27235 (NIP-98) جو ہڪ Nostr واقعو آھی، جنہن ۾ بیس 64-اینڪوڊ موڪلیو ویو 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 آهي ته درخواست، پڇ سلسلي ۾ شامل آهي، درست طور تي موڪليو.
  • method اهو HTTP طريقو آهي.
  • payload ھیڪس ۾ خام درخواست جسم جو SHA-256 آھی POST ۽ PATCH۽ جیڪو جسم توھان موڪلیو آھی اھو بائیٽ ہجڻ گھرجی بائیٽ جی لاء جیڪو توھان ھیش ڪیو آھی
  • created_at سرور جی ڪلاڪ جی 60 سیڪنڊن اندر ہجڻ گھرجی
  • ہر واقعو ھڪ دفعو ڪم ڪری ٿو GET شامل ڪیو ویو، تنہنڪری ہڪ قبضو ڪیل ہیڊر کی وری نہ ہلائی سگہجی۔ ہر درخواست لاء ہڪ نئین سائن ڪریو nonce اهو هڪ عارضي معيار آهي ته هڪ ئي ثاني ۾ ٻه درخواستون مختلف ٿيندا.
  • ھڪ دستخط ٿیل درخواست جو جسم وڌ ۾ وڌ 64 KB ٿی سگہی ٿو، ۽ ھڪ جسم جی ضرورت آھی Content-Type: application/json.

گم ٿیل واقعا واپس اچی ٿو 401 missing_nostr_authہڪ جیڪو خراب طئور تی ٺہیل آھی، خراب طئور تی دستخط ٿیل آھی، تمام پراڻو آھی، یا ھڪ مختلف یو آر ایل، طریقی یا جسم جی واپسی لاء invalid_nostr_authپوءِ اُن کي موٽائي موڪليو ويندو. nostr_auth_replayedهڪ API کلید انهن انڌن ڏانھن موڪليو وڃي ٿو.توهين کي پڙهيو وڃي ٿو، ۽ هر انڌن کي هڪ منٽ ۾ 30 ڀيرو (IPv6 انڌن کي سندس کل /64) جي طور تي حساب ڪيو وڃي ٿو. 429 سان گڊ Retry-After.

ان کان سواءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ توهان جي ايئرپورٽ لاءِ.https://nymbot.ai, https://nymchat.app ان کانسواءِ ٻيو ڪو به ڪم نه آهي، پر ان جو ڪو به ڪم نه آهي، پر ان جو ڪو به ڪم نه آهي. Origin، متاثر نہ ٿیندا آھن

توهان جي راز جو کلید

دستخط ڪرڻ لاء توھان جی نیم جی راز واری ڪنجی جی ضرورت آھی nsec)، جیڪو ہر شی کی سنڀالیندو آھی: توہان جی سڃاڻپ، توہان جی تاریخ ۽ توہان جو توازن صرف ان کی ہڪ مشین تی ہڪ رسم الخط ۾ رکجو جنہن تی توہان کی ڀروسو آھی، ان کی فائل ۾ لکڻ جی بجاء ماحول مان پڙھو، ۽ ایپ کی ترجیح ڏیو جڏھن توہان ڪری سگہو ٿا

ھی مددگار ھیڊر ٺاہیندا آھن۔ ھن صفحی تی بعد ۾ مثال انھن کی استعمال ڪندا آھن اھی ھیڪس ۾ راز واری ڪنجی کی پڙھندا آھن NOSTR_SECRET_HEXاُن کي استعمال ڪيو وڃي ٿو. اکيون ڪيمٽ لائن آلہ، جيڪو 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 - ہڪ جی ضرورت آھی دستخط ٿیل درخواست.

جواب ڏیو

{
  "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بولین (سوال)نہ نہرد ڪیل چابیون شامل ڪریو۔ ڊیفالٽ 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اسٽرنگها1 کان 40 اکرن تائین، توہان جی ٻین فعال ڪنجین کان مختلف (ڪیس کی نظر انداز ڪندی)
limit_satsانٽرونہ نہخرچ جی حد گھٽ ۾ گھٽ 1. ان کی بغیر ڪنہن حد تائین ڇڏی ڏیو
reset_periodاسٽرنگنہ نہdaily, weekly یا monthlyضرورت آھی۔ limit_satsان کی ھڪ ڪیپ لاء ڇڏی ڏیو جیڪا ڪڏھن بہ ری سیٽ نہ ٿیندی آھی
expire_atتار یا عددنہ نہجڏھن ڪنجی ڪم ڪرڻ بند ڪری ٿی: ہڪ 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 جیڪڏھن توھان جی ڪنھن بہ ڪنجی وٽ اھا سڃاڻپ نہ آھی۔

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 سان گڏ.

ہڪ لائٽنگ والیٽ کی Nostr Wallet Connect سان ڳنڍیو ۽ Nymbot پنھنجی پاڻ ۾ ہڪ توازن کی مٿی ڪری ٿو جڏھن API خرچ ان کی گھٽ ہلائی ٿو ایپ جی API شیٽ ۾ ساڳیو سیٽنگون آھن اھی ان جی پویان آخری پوائنٽون آھن انھن سڀنی کی ضرورت آھی دستخط ٿیل درخواست.

اھو ڪیئن ڪم ڪری ٿو: ھڪ API درخواست کان پوء ان بیلنس تی چارج ڪیو ویندو آھی جیڪو توہان ڏسڻ لاء چونڊیو آھی، جیڪڏھن اھو بیلنس توہان جی حد کان ھیٺ اچی ویو آھی، Nymbot توہان جی ٽاپ اپ رقم لاء انوائس ٺاہی ٿو، توہان جی پرس کی ان کی ادا ڪرڻ لاء پڇی ٿو، ۽ ڪریڊٽ شامل ڪری ٿو مٿی-مٿی حالت ان کی ڪریڊٽ ڏیو

ھڪ پرس سان ڳنڍڻ کان اڳ

ھڪ ڪنیڪشن اسٽرنگ اجازت ڏئی ٿو جیڪو بہ ان کی رکی ٿو توھان جی پرس کی ادا ڪرڻ لاء پڇی ٿو۔ نمبوٽ ان کی انڪرپٽ ٿیل اسٽور ڪری ٿو ۽ صرف ان کی پنھنجی ٽاپ اپ انوائس ادا ڪرڻ لاء استعمال ڪری ٿو، پر صرف ان لاء ڪنیڪشن ٺاہیو، توہان جی پرس ۾ خرچن جی بجیٽ سان، تنہنڪری اہو سڀ کان وڌیڪ ادا ڪری سگہی ٿو ہڪ نمبر جیڪو توہان چونڊیو pay_invoice.

ھڪ پرس سان ڳنڍیو پیو وڃی

POST https://nymbot.ai/api/v1/nwc-auto-topup/connect - دستخط ڪیو

فیلڊقسمضروری آھیوضاحت
nwc_urlاسٽرنگهارابطي، شروع ڪرڻ nostr+walletconnect://Nymbot پوڄي ٿو. get_info ان کان اڳ، ان کي ان جو استعمال ڪيو ويو آهي.
threshold_satsانٽروهامٿی ڪریو جڏھن بیلنس ھن ڪیترن ئی سیٽ کان ھیٺ اچی ٿو گھٽ ۾ گھٽ 1, 000
topup_satsانٽروهاہر وقت ڪیترو شامل ڪرڻو آھی۔ 1, 000 کان 1,000,000 sats
tierاسٽرنگنہ نہ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());

چابی کان سواء فی درخواست ادا ڪرڻ

مقرر قیمت جی آخری پوائنٽن کی بجلی تی ہڪ وقت ۾ ہڪ درخواست لاء ادا ڪری سگہجی ٿو، جنہن ۾ ڪا ڪنجی ناہی، ڪو اڪائونٽ ناہی ۽ ڪو بیلنس ناہی POST /images/generations, POST /images/edits, POST /videos, POST /audio/speech, POST /audio/transcriptions, POST /audio/translations ۽ POST /embeddingsچیٽ، جواب ۽ پیغام ہمیشہ ہڪ ڪنجی جی ضرورت آھی ہڪ درخواست جنہن ۾ ڪنجی ھوندی آھی عام طئور تی بیلنس تی بل ڪیو ویندو آھی ادائیگی جو وہڪرو صرف ان وقت شروع ٿیندو آھی جڏھن ڪا ڪنجی نہ موڪلی ویندی آھی

Nymbot ہڪ ئی خیال جا ٻہ ورجن ڳالھائیندو آھی ھڪ بیڪ اینڊ مان: لائٽنگ لیبز هڪ 402 (پڻ ان جی پراڻی نالی تحت قبول ڪیو ویو، LSAT) ۽ IETF مسودو ادائگی HTTP تصدیق واری منصوبی سان lightning طریقو ۽ charge ارادو۔ جیڪو بہ توہان جو گراہڪ سمجھی ان کی استعمال ڪریو

پنهنجي سرور کي استعمال ڪرڻ

چابی کان سواء ادائگی صرف ان وقت تی ٿیندی آھی جڏھن API_L402_SECRET گھٽ ۾ گھٽ 32 بی ترتیبی بائٽس رکی ٿو ھیڪس (64 اکرن) یا بیس 64 (44) جی طئور تی openssl rand -hex 32هڪ وڌيڪ يا معياري ڪرڻ واري قيمت هڪ خاصيت کي بند ڪري ٿو ۽ ان جي سبب کي رجوع ڪري ٿو. API_L402_SECRET_PREVIOUS ھڪ ڏینھن لاء: ان جی تحت ٺاہیل سڃاڻپ، حالت یو آر ایل ۽ چیلینج ڪم ڪندا رہن ٿا جیستائین اہی ختم نہ ٿین

چیلینج

نہ سان درخواست موڪلیو Authorization ھیڊر۔ جیڪڏھن اھو صحیح آھی، ڪجھ بہ نہ ھلندو آھی ۽ توھان کی ملندو آھی 402 Payment Required ھن درخواست جی قیمت جی لاء ہڪ انوائس سان گڏ: ساھی قیمت جیڪا ہڪ ڪنجی ادا ڪندی، 10 سیٽ تی ھڪ معیاری ڪریڊٽ یا 100 سیٽ ہڪ پرو ڪریڊٽ ۾ تبدیل ڪیو ویندو ۽ پوری سیٽ تائین گول ڪیو ویندو (گھٽ ۾ گھٽ 1 سیٽ، ۽ گھٽ ۾ گھٽ 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 منٽ حصیداری ڪریو ۽ سڀنی پتی ۾ نمبوٽ مسئلن تی مجموعی حد آھی ہڪ چیلینج ٿیڻ کان اڳ ۾ انڪار ڪیل درخواست (مثال طئور ہڪ جسم سان جیڪو صحیح JSON ناہی) ان طرف شمار نٿو ڪری 429 سان گڊ Retry-After، جسم کی پڙھڻ کان اڳ موڪلیو ویو آھی۔ ادا ڪیل آخری نقطا بغیر ڪنجی یا سند جی ڪال ڪیا ویا آھن عام حد جی طرف شمار ڪیا ویا آھن 120 غیر تصدیق ٿیل درخواستون فی منٽ فی پتو Content-Type نه آهي application/json يا multipart/form-data ان کان پوءِ به انڪار ڪيو ويو. 415 ڪڏھن به حساب نه ملندو.

انپٽ ۾ ٽوڪن جی اندازی مطابق انبیڊنگ جی قیمت آھی 1.5&times ؛ مارجن سان، ڇاڪاڻ تہ حقیقی ڳڻپ صرف بعد ۾ معلوم ٿئی ٿی توہان اصل ۾ استعمال ٿیل ٽوڪن جی ادائیگی ڪریو ٿا، ۽ ادائیگی جو غیر استعمال ٿیل حصو واپسی جی طئور تی اچی ٿو واپسی جو ٽوڪن.

ادائگی موڪلیو

ڪنھن بہ لائٽنگ والیٽ سان انوائس ادا ڪریو۔ والیٽ توہان کی پہرین تصویر ڏئی ٿو، 64 ھیڪس اکر

یوجناہیڊر
هڪ 402Authorization: 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 ان جو مطلب اهو آهي ته JSON (base64url JSON with the challenge id) آهي. reference, status ۽ timestamp) ادا ڪیل درخواستون ڪنھن بہ NIM سان جڙیل نہ آھن، تنہنڪری اہی سوال جی تاریخ ۾ ظاھر نہ ٿیون ٿین

حالتڪڏھن
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_exceeded30 کان وڌيڪ اعترافات يا کلیدون جو تصديق ڪرڻ نه ڪيو هو هڪ منٽ ۾ ان پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌري پڌ 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 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"(اي پيغمبر) جيڪڏھن اُن (ڪتاب) تي عمل نه ڪبو ته اُن (ڪتاب) تي عمل نه ڪبو.(علامه تاج محمود امروٽي) refund_sats واپسی واری نوڪری لاء پر ٽوڪن ڪڏھن بہ نہ، تنہنڪری حالت یو آر ایل شیئر ڪرڻ واپسی کی حصیداری نٿو ڪری۔ ٽوڪن کی چیڪ ڪرڻ پڻ ہڪ ناڪام نوڪری کی آباد ڪری ٿو جنہن کی ڪنھن بہ پول نہ ڪیو

واپسی

جيڪڏھن ادا ڪرڻ جو درخواست ناکام ٿي وڃي ۽ پروفيسر 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-… مٿین ڪنھن بہ آخری نقطی تی (ہڪ اوپنائی ایس ڊی ڪی ان کی پنھنجی API ڪنجی جی طئور تی وٺی ٿو) قیمت ٽوڪن مان اچی ٿی ۽ جیڪو بچی ویو آھی ان تی رہی ٿو (refund_token_sats ان ۾ nymbot اعتراض)۔ درخواست جی جوابن کان گھٽ قیمت وارو ٽوڪن 402 refund_insufficientہڪ اڻ بل ٿیل ناڪامی سیٽ کی ساڳئی ٽوڪن تی واپس رکی ٿی
  • چیڪ ڪریو GET /api/v1/l402/refunds ساھی ھیڊر موٽڻ سان {"sats": 237, "status": "open", "expires_at": "..."}.
  • ھڪ ٽوڪن ھڪ منٽ ۾ وڌ ۾ وڌ 60 دفعا استعمال ڪری سگہجی ٿو
  • ان کی nym ڏانہن منتقل ڪریو ان ۾ چپایو هُو هُو هُو، هُو هُو. Nymbot ایپ ۾، یا ڪال ڪریو POST /api/v1/l402/refunds/redeem ای سان گڏ دستخط ٿیل درخواست ۽ {"refund_token": "REFUND-...", "balance": "standard"} يا "pro"سجی ڪریڊٽ بیلنس ڏانہن ویندی آھی (10 سیٽ ہر ہڪ معیاری تی، 100 پرو تی) ؛ جیڪی سجی ڪریڊٽ نہ ٺاہیندا آھن 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 } }