ꯀꯟꯇꯦꯟꯇ ꯑꯗꯨꯗꯥ ꯆꯠꯂꯨ꯫
Nymbot দা মখা তৌদবা

ꯅꯣꯂꯦꯖ ꯕꯦꯖ꯫ Developerশিং

Balance, top-ups amasung keys

নঙগী খঙবা পাম্বসি চেক তৌবসুং, Lightning হেন্না টপ-আপ তৌবসুং, নঙগী নিজস্ব ৱাল্লেটদগী অটোমেটিক টপ-আপ তৌবসুং, খুৎলিং (request) ꯑমমমগী মখাদা মহৈবা চাউনা ফংবসি চঙদবা অমসুং কোডদগী কী (keys) মতাংদা ম্যনজ (manage) তৌবসুং।

ꯕꯦꯂꯦꯟꯁ ꯑꯗꯨ ꯌꯦꯡꯁꯤꯟꯕ

নখোয়গী balance দুখোং অমসুং মসিগী key গী cap অসি মচু অমা খangদবা অসি।

GET https://nymbot.ai/api/v1/credits/balance — API key অমা মথৌ তাই। POST ꯃꯗꯨ ꯄꯥꯝꯂꯤꯕ ꯀ ꯭ ꯂꯦꯟ ꯭ ꯇꯁꯤꯡꯒꯤꯗꯃꯛꯇꯁꯨ ꯊꯕꯛ ꯇꯧꯏ ꯫

balance ꯍꯧꯖꯤꯛ ꯂꯩꯔꯤꯕ ꯕꯤꯠꯀꯣꯏꯟꯒꯤ ꯃꯃꯜꯗ ꯗꯣꯂꯔꯁꯤꯡꯗ ꯕꯦꯂꯦꯟꯁ ꯑꯅꯤ ꯑꯁꯤ ꯄꯨꯟꯅ ꯂꯩꯕ ꯭ ꯔꯥ, ꯃꯁꯤꯡ ꯑꯃꯈꯛꯇꯃꯛ ꯂꯩꯕ ꯌꯥꯕ ꯈꯨꯠꯂꯥꯏꯁꯤꯡꯒꯤ (null ꯀꯔꯤꯒꯨꯝꯕ ꯃꯃꯜ ꯑꯗꯨ ꯄꯥꯕ ꯉꯝꯗ ꯭ ꯔꯕꯗꯤ) ꯫ ꯑꯔꯦꯞꯄ ꯑꯗꯨ ꯀ ꯭ ꯔꯦꯗꯤꯠꯁꯤꯡ ꯑꯃꯁꯨꯡ ꯁꯦꯠꯁꯤꯡꯗ ꯂꯩ, ꯑꯁꯨꯝꯅ ꯕꯦꯂꯦꯟꯁꯁꯤꯡ ꯑꯗꯨ ꯑꯁꯦꯡꯕ ꯃꯑꯣꯡꯗ ꯊꯝꯃꯤ ꯫ key খুzeug অমসুং মখাশিংগী মতাংদা মখা তৌদুনা পীরি। মখা পীনবা চৌখৎপা অমসুং চঙখৎপা কুপেল অমগী চাউখৎপা খঙবা য়াই।

ꯔꯤꯄ ꯭ ꯂꯥꯟꯁ

{
  "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);

পেমেন্ট মETHODশিং

নহাকনা ময়াংবা (top up) কয়ালে অমসুং মসিগী limitশিং অসি কদাইগনি। Lightning অদু চৎনবা লৈরিবা মথৌ তৌবা মথৌদগী মথৌ লৈবা মথৌ (method) অমনি।

GET https://nymbot.ai/api/v1/topup/payment-methods — চাউখৎপা চৎনবা চেরিশিন অদুগীদমক চেরিশিন অদু মথৌ তৌদবনি।

top-up অসি ১০দাৎ ১,০০০,০০০ sats তৌবা অমনি; Pro top-up অসি Pro credit অমুক্কী মীনবা অমত্তা থোকপা থৌরমনি, অদুগা মসি ১০০ sats দগী চত্থরি। Dollar limitশিং অসি Bitcoin price অসিগী মতেংদা চৎলি। bulk_bonus App অদুদা লৈবা মতাংননা, top-up অখন্নবা sing singgi extra credit অদু list তৌরি: 500, 1,000 নত্রগা 5,000 sats standard top-up singgiদমক 10%, 15% নত্রগা 20% অখন্নবা, অমসুং 5,000, 10,000 নত্রগা 50,000 sats Pro top-up singgiদমক।

ꯔꯤꯄ ꯭ ꯂꯥꯟꯁ

{
  "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);

ꯃꯩꯒꯤ ꯃꯊꯛꯇ ꯀꯥꯈꯠꯄ

ꯃꯥꯏꯠꯅꯤꯡ ꯏꯟꯚꯣꯏꯁ ꯑꯃ ꯁꯦꯝꯏ ꯃꯗꯨꯅ ꯀꯤ ꯑꯗꯨ ꯌꯥꯎꯕ ꯅꯤꯑꯦꯝ ꯑꯗꯨꯗ ꯀ ꯭ ꯔꯦꯗꯤꯠ ꯍꯥꯞꯆꯤꯜꯂꯤ ꯫ ꯃꯗꯨ ꯃꯥꯏꯠꯅꯤꯡ ꯋꯥꯂꯦꯠ ꯑꯃꯍꯦꯛꯇꯗꯒꯤ ꯄꯤꯌꯨ, ꯃꯗꯨꯒꯤ ꯃꯇꯨꯡꯗ Check tou ꯀ ꯭ ꯔꯦꯗꯤꯠ ꯑꯗꯨ ꯍꯥꯞꯆꯤꯟꯕ ꯫

POST https://nymbot.ai/api/v1/topup/create/btc-lightning — API key অমা মথৌ তাই।

ꯐꯤꯜꯗꯃꯈꯜꯇꯉꯥꯏꯐꯗꯕꯑꯀꯨꯞꯄ ꯃꯔꯣꯜ
amountলেপ (lep)ꯍꯣꯏꯀꯌꯥꯝ ꯂꯩꯕꯒꯦ currencysats gi damak mathak thiba number amani।
currencyꯁ ꯭ ꯇ ꯭ ꯔꯤꯡনহৈদ্রেSATS (মখলগীদমক), USD অর BTCডলারশিংবু Bitcoin গী অসিগী মচা চাউখৎপা য়াম্না লৈবা চাউখৎপা মখলদা মীয়ামগী মতাংদা মচানা মচেৎপা তৌই।
tierꯁ ꯭ ꯇ ꯭ ꯔꯤꯡনহৈদ্রেpro (default) নত্রগা 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) নত্রগা tier, মীনবা লৈদবা অমা, নত্রগা মীনবা থৌদোক্কী মচেৎতা মীনবা লৈবা অমা (amount_too_small), 1,000,000 sats ningthina (amount_too_large) নত্রগা Lightning wallet না refusing তৌবসি (amount_out_of_range).
429Masi nym ki damak invoice 60 ahingba, nattraga masi address ki namba 120, maokei amada (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);

ꯇꯣꯞ-ꯑꯞ ꯑꯃ ꯌꯦꯡꯁꯤꯟꯕ

ইনভয়েস অসি পেমেন্ট তৌখ্রেব্রা হায়বীয়ু অমসুং পেমেন্ট তৌখ্রেগেদি, ক্রেডিট অসি তৌখু। ক্রেডিটিং তৌবা চুম্বা চেক তৌবসি হৌজিক পেমেন্ট তৌখ্রেগেদি, স্ট্যাটাস অসি ... অঙাকচবা অমা ওইগMDAনা চেক তৌউ। creditedꯃꯗꯨꯒꯤ ꯃꯇꯨꯡꯗ ꯑꯃꯨꯛ ꯍꯟꯅ ꯆꯦꯛ ꯇꯧꯕ ꯑꯁꯤ ꯆꯦꯛꯅꯤꯉꯥꯏ ꯑꯣꯏꯗꯦ: ꯅꯍꯥꯛꯅ ꯀꯌꯥꯔꯛ ꯍꯥꯏꯖꯔꯕꯁꯨ ꯀ ꯭ ꯔꯦꯗꯤꯠ ꯑꯗꯨ ꯑꯃꯨꯛ ꯂꯦꯟ ꯇꯧꯋꯤ ꯫

GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - ꯏꯟꯚꯣꯏꯁ ꯑꯗꯨ ꯁꯦꯝꯈꯤꯕ ꯅꯤꯝ ꯑꯗꯨꯗꯒꯤ ꯀꯤ ꯑꯃ ꯃꯊꯧ ꯇꯥꯏ ꯫

status নি (ni) pending (অকপা লৈজখ্রেদবা), paid (ꯄꯦꯗ, ꯑꯗꯨꯕꯨ ꯍꯧꯖꯤꯛ ꯐꯥꯎꯕ ꯀ ꯭ ꯔꯦꯗꯤꯠ ꯇꯧꯗ ꯭ ꯔꯤ; ꯑꯃꯨꯛ ꯍꯟꯅ ꯆꯦꯛ ꯇꯧ), credited (নিনগী ব্যালেন্সতা) অঙা expired (মখাদা পাংবা চাউরাকপা ঈশৈতা ঙাকপা নত্তে)। Balance fieldশিংদি invoice অসি থোকপা tier গীদমকনি।

ꯔꯤꯄ ꯭ ꯂꯥꯟꯁ

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "status": "credited",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": null,
  "balance_credits": 523.33,
  "balance_sats": 52333
}
থৌরমꯀꯔꯝꯕ ꯃꯇꯝꯗ
400ꯑꯥꯏ. ꯗꯤ. ꯑꯗꯨ ꯀ ꯭ ꯔꯤꯑꯦꯠ ꯀꯣꯜ ꯑꯗꯨꯒꯤ ꯀꯦꯔꯦꯛꯇꯔ 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 - ꯃꯁꯥꯒꯤ ꯑꯣꯏꯕ ꯍꯥꯏꯖꯕꯁꯤꯡ ꯎꯔꯤꯕ ꯑꯦ. ꯄꯤ. ꯑꯥꯏ. ꯀꯤ ꯑꯃ ꯃꯊꯧ ꯇꯥꯏ, ꯅꯠꯇ ꯭ ꯔꯒ ꯈꯨꯠꯌꯦꯛ ꯄꯤꯅꯕ ꯍꯥꯏꯖꯔꯛꯄ নিন্নগী মনুংগী ওইবা মীয়ামগী অমসুং চাউনা খঙবা পাম্বৈ অসিগীদমক, মসি অখন্নবা চাউনা মীয়ামগী চাউখৎপা অমসুং খঙবা পাম্বৈ অসিগীদমক।

ꯐꯤꯜꯗꯃꯈꯜꯇꯉꯥꯏꯐꯗꯕꯑꯀꯨꯞꯄ ꯃꯔꯣꯜ
pageꯏꯟꯇꯤꯖꯔ (ꯀ ꯭ ꯋꯥꯔꯤ)নহৈদ্রেDefault 1, অহানবা ১,০০০; অহানবা মপোক অদমক অসি অমুক চৎপা ꯑনিবা অমা ওইনা ꯑৈ। 400 invalid_value.
page_countꯏꯟꯇꯤꯖꯔ (ꯀ ꯭ ꯋꯥꯔꯤ)নহৈদ্রেপেজ অমদা রো (row) কয়া। ডিফল্ট ২০, ১০০ কয়া অতোপ্পা লাকপা নাই।
start_date
end_date
ꯁ ꯭ ꯇ ꯭ ꯔꯤꯡ (ꯀ ꯭ ꯋꯥꯔꯤ)নহৈদ্রেISO 8601 date sing amasung time sing।
modelꯁ ꯭ ꯇ ꯭ ꯔꯤꯡ (ꯀ ꯭ ꯋꯥꯔꯤ)নহৈদ্রেমডেল অসিদমক ই।)
typeꯁ ꯭ ꯇ ꯭ ꯔꯤꯡ (ꯀ ꯭ ꯋꯥꯔꯤ)নহৈদ্রেchat, responses, messages, image, video, speech, transcription অর embedding.
all_keysবুলিয়ান (query)নহৈদ্রেচাবী অমগা: 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);

Account request singba

Key semba, sinthaba amasung revoking touba, account summary amasung automatic top-ups singda API key thamoi nattri. Masida nanggi nym gi signature amasi thamoi, aduna leiba key amadi adumna cap amadi hourakpa thiba nattri, adubu key amagumiba amadi aduna cap hourakpa thiba nattri.

ꯑꯦꯞ ꯑꯁꯤꯅ ꯑꯗꯣꯝꯒꯤꯗꯃꯛ ꯃꯁꯤ ꯇꯧꯋꯤ: ꯃꯁꯤꯒꯤ ꯃꯅꯨꯡꯗ ꯂꯩꯕ ꯄꯨꯝꯅꯃꯛ ꯫ ꯑꯦ. ꯄꯤ. ꯑꯥꯏ. ꯁꯤꯠꯅ ꯃꯁꯤꯒꯤ ꯑꯔꯣꯏꯕ ꯄꯣꯏꯟ ꯭ ꯇꯁꯤꯡ ꯑꯁꯤ ꯁꯤꯖꯤꯟꯅꯩ ꯫ ꯅꯍꯥꯛꯀꯤ ꯃꯁꯥꯒꯤ ꯀꯣꯗꯇꯒꯤ ꯀꯤꯁꯤꯡ ꯁꯤꯟꯗꯣꯛ-ꯁꯤꯟꯖꯤꯟ ꯇꯧꯅꯕꯒꯤꯗꯃꯛ ꯅꯍꯥꯛꯅ ꯃꯁꯤꯒꯤ ꯁꯔꯨꯛ ꯑꯁꯤꯈꯛꯇꯃꯛ ꯃꯊꯧ ꯇꯥꯏ ꯫

Signature asi kind 27235 (NIP-98) Nostr event amani, base64-encoded ta thuna thokpa... 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 query string দা কনবা ওইনা, request গী URL অসি মখাদা পীরিবা মতাংদা অখন্নবা অমা ওনরি।
  • method HTTP method অসি অমনি।
  • payload ꯔꯥꯎ ꯔꯤꯀ ꯭ ꯋꯦꯁ ꯭ ꯠ ꯕꯣꯗꯤꯒꯤ ꯑꯦꯁ. ꯑꯩꯆ. ꯑꯦ.-256 ꯑꯁꯤ ꯍꯦꯛꯁꯇ ꯂꯩꯕꯔꯥ ꯫ ꯃꯁꯤꯗ ꯃꯊꯧ ꯇꯥꯏ POST ꯑꯃꯁꯨꯡ PATCH, ꯑꯃꯁꯨꯡ ꯅꯍꯥꯛꯅ ꯊꯥꯔꯛꯂꯤꯕ ꯍꯛꯆꯥꯡ ꯑꯗꯨ ꯅꯍꯥꯛꯅ ꯍꯥꯁ ꯇꯧꯈꯤꯕ ꯕꯥꯏꯠꯀꯤ ꯕꯥꯏꯠ ꯑꯣꯏꯒꯗꯕꯅꯤ ꯫
  • created_at ꯁꯔꯚꯔꯒꯤ ꯄꯨꯡ ꯑꯗꯨꯒꯤ ꯁꯦꯀꯦꯟ 60ꯒꯤ ꯃꯅꯨꯡꯗ ꯂꯩꯒꯗꯕꯅꯤ ꯫
  • ꯊꯧꯔꯝ ꯈꯨꯗꯤꯡꯃꯛ ꯃꯇꯝ ꯑꯃꯗ ꯊꯕꯛ ꯇꯧꯋꯤ, a GET ꯌꯥꯎꯍꯟꯈ ꯭ ꯔꯦ, ꯃꯔꯝ ꯑꯗꯨꯅ ꯐꯥꯖꯤꯟꯈ ꯭ ꯔꯕ ꯍꯦꯗꯔ ꯑꯃ ꯑꯃꯨꯛ ꯍꯟꯅ ꯊꯥꯗꯣꯛꯄ ꯌꯥꯔꯣꯏ ꯫ ꯍꯥꯏꯖꯕ ꯈꯨꯗꯤꯡꯃꯛꯀꯤꯗꯃꯛ ꯑꯅꯧꯕ ꯑꯃ ꯈꯨꯠꯌꯦꯛ ꯄꯤꯌꯨ ꯫ ꯑꯦ ꯍꯥꯞꯆꯤꯟꯕ nonce Random value ama da tag tou, aduga sekund amada sign touriba request ani asumna khangba oina oigani.
  • ꯈꯨꯠꯌꯦꯛ ꯄꯤꯔꯕ ꯍꯥꯏꯖꯔꯛꯄ ꯑꯃꯒꯤ ꯕꯣꯗꯤ ꯑꯁꯤ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯀꯦ. ꯕꯤ. 64 ꯑꯣꯏꯕ ꯌꯥꯏ, ꯑꯃꯁꯨꯡ ꯕꯣꯗꯤ ꯑꯃꯅ ꯃꯊꯧ ꯇꯥꯕ ꯌꯥꯏ ꯫ Content-Type: application/json.

মপোকপা ইভেন্ট অমা মচেং চুরক্লবা অমা ফিরক্লি 401 missing_nostr_auth; ꯐꯖꯅ ꯁꯦꯝꯗꯣꯛꯇ ꯭ ꯔꯤꯕ, ꯐꯖꯅ ꯈꯨꯠꯌꯦꯛ ꯄꯤꯗꯕ, ꯌꯥꯝꯅ ꯑꯔꯤꯕ, ꯅꯠꯇ ꯭ ꯔꯒ ꯇꯣꯉꯥꯟ-ꯇꯣꯉꯥꯟꯕ ꯌꯨ. ꯑꯥꯔ. ꯑꯦꯜ., ꯃꯦꯊꯗ ꯅꯠꯇ ꯭ ꯔꯒ ꯕꯣꯗꯤ ꯔꯤꯇꯔꯟꯁꯤꯡꯒꯤ ꯑꯣꯏꯕ ꯑꯃ invalid_nostr_authꯃꯦꯁꯦꯖ ꯑꯗꯨꯗ ꯂꯩꯔꯤꯕ ꯃꯔꯝ ꯑꯗꯨꯒ ꯂꯣꯏꯅꯅ; ꯑꯃꯨꯛ ꯍꯟꯅ ꯁꯤꯖꯤꯟꯅꯕ ꯑꯃꯅ ꯍꯜꯂꯛꯏ ꯫ nostr_auth_replayedꯑidagi endpoints শিংবদা thakpa API key অমুক্ত অসি নাঙথোক্লগা। body অসি ପঠিবনা মমাংদা signature অসি চখলগে, অমসুং address খুদিংমক অসি মীনিত্তা ৩௦ বার (a minute) fail তৌবা ঙমগনি (IPv6 address অসি মখাদা /64 অসিদা য়ুম্না শেনবা য়ে) ; মসিগী মপান্দা ꯑনিবা... 429 ꯃꯁꯤꯒ ꯂꯣꯏꯅꯅ Retry-After.

Browserশিংনা মসি endpoints singse Nymbot-gi মৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈৈhttps://nymbot.ai, https://nymchat.app অমসুং মখোয়গী subdomains)। অতোপ্পা সাই অমুগী পেজ অমা প্রসিন্নবা CORS headers ফংদ্রে, মরম অদুনা মখোয়না পীরিবা মশাগী মখাদা লৈবা মসিদা পীনবা য়াবা মথৌ নাই। Scripts অমসুং native apps, মখোয়না পীরিব্রা... Origin, অৱাৎ অয়ে।

ꯅꯤꯡꯒꯤ ꯑக்கꯨꯝꯕ ꯆꯕꯤꯖꯣꯜ

ꯈꯨꯠꯌꯦꯛ ꯄꯤꯕꯗ ꯅꯍꯥꯛꯀꯤ ꯅꯤꯑꯦꯝꯒꯤ ꯁꯦꯀ ꯭ ꯔꯤꯠ ꯀꯤ ꯑꯗꯨ ꯃꯊꯧ ꯇꯥꯏ (ꯗꯤ nsec), মসিনা তৌবা মখোল অসিঙী মখাদা পীরি: নহাক্কী মওং (identity), নহাক্কী ইতিক (history) অমসুং নহাক্কী মৈরেল (balance)। মসিবু নহাক্না থাজবা ম shin (machine) অমা অমদা script অমা ওন্দুনা থমবীয়ু, মসিদা ফাইল অমা ওন্দুনা পাইখৎপা তৌদনা environment দাদি নহাক্না পীরকপা থৌরম অসিদা পাইখৎপা পীবীয়ু, অমসুং ইথোকপা পাম্লবদা app অদু পামজবীয়ু।

ꯍꯥꯏꯔꯤꯕ ꯃꯇꯦꯡ ꯄꯥꯡꯂꯤꯕꯁꯤꯡ ꯑꯁꯤꯅ ꯍꯦꯗꯔ ꯑꯗꯨ ꯁꯦꯝꯒꯠꯂꯤ ꯫ ꯄꯦꯖ ꯑꯁꯤꯗ ꯃꯇꯨꯡ ꯇꯥꯔꯛꯄ ꯈꯨꯗꯝꯁꯤꯡ ꯑꯁꯤꯅ ꯃꯈꯣꯏꯕꯨ ꯁꯤꯖꯤꯟꯅꯩ ꯫ ꯃꯈꯣꯏꯅ ꯍꯦꯛ ꯭ ꯁꯇꯒꯤ ꯁꯤꯀ ꯭ ꯔꯤꯠ ꯀꯤ ꯑꯗꯨ ꯄꯥꯔꯤ ꯫ NOSTR_SECRET_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");
}

অ্যাকাউন্টকী মতমচাং দবা চেল্লা ওনবা মচাং চৎনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চেল্লা ওনবা চ

ꯑꯦꯞ ꯑꯁꯤꯒꯤ ꯑꯦ. ꯄꯤ. ꯑꯥꯏ. ꯁꯤꯠ ꯑꯁꯤꯅ ꯃꯊꯛꯇ ꯀꯔꯤ ꯎꯠꯂꯤ: ꯅꯍꯥꯛꯀꯤ ꯄꯕ ꯭ ꯂꯤꯛ ꯀꯤ, ꯕꯦꯂꯦꯟꯁ ꯑꯅꯤꯃꯛ, ꯀꯤ ꯀꯌꯥ ꯑꯦꯛꯇꯤꯕ ꯑꯣꯏꯕꯒꯦ (ꯂꯧꯊꯣꯛꯄ ꯅꯠꯇ ꯭ ꯔꯒ ꯃꯇꯝ ꯂꯣꯏꯗ ꯭ ꯔꯕꯗꯤ), ꯑꯃꯁꯨꯡ ꯑꯣꯇꯣꯃꯦꯇꯤꯛ ꯇꯣꯞ-ꯑꯞ সেটিং (settings), নত্রগা 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());

কী অসিদা মখল থম্লবা (Managing keys)

App gi key list ki maru oiba endpoints singgi. Makhoiba pumnamakki ahingba ahouba leigadaba amadi... signৈ তৌখিবী অনুরোধ. Key tunginba masi form asida pe, ISO 8601 ta time amasung sats ta amount pe:

ꯃꯔꯨꯑꯣꯏꯕ ꯄꯣꯠꯁꯤꯡ

{
  "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)নহৈদ্রেrevoked keys-শিং পাম্মীবা ইনক্লুড তৌবীয়ু। Default false.

ꯔꯤꯄ ꯭ ꯂꯥꯟꯁ

{ "data": [ { "id": "4f0c9a1be27d3856", "name": "laptop scripts", "hint": "sk-nymbot-Qm7x…c2Lw", "...": "..." } ] }

cURL

URL=https://nymbot.ai/api/v1/keys
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"

Python

import requests

url = "https://nymbot.ai/api/v1/keys"
for key in requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json()["data"]:
    print(key["id"], key["name"], key["period_used_sats"], key["limit_sats"])

JavaScript

const url = "https://nymbot.ai/api/v1/keys";
const { data } = await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json();
for (const key of data) console.log(key.id, key.name, key.period_used_sats, key.limit_sats);

চাবি শাবা

POST https://nymbot.ai/api/v1/keys - ꯈꯨꯠꯌꯦꯛ ꯄꯤꯔꯝꯃꯤ ꯫ ꯍꯜꯂꯛꯈꯤ ꯫ 201.

ꯐꯤꯜꯗꯃꯈꯜꯇꯉꯥꯏꯐꯗꯕꯑꯀꯨꯞꯄ ꯃꯔꯣꯜ
nameꯁ ꯭ ꯇ ꯭ ꯔꯤꯡꯍꯣꯏꯀꯦꯔꯦꯛꯇꯔ 1ꯗꯒꯤ 40 ꯐꯥꯎꯕ, ꯅꯍꯥꯛꯀꯤ ꯑꯇꯣꯞꯄ ꯑꯦꯛꯇꯤꯕ ꯀꯤꯁꯤꯡꯗꯒꯤ ꯈꯦꯠꯅꯩ (ꯀꯦꯁ ꯑꯗꯨ ꯌꯦꯡꯗꯅ) ꯫
limit_satsintejerনহৈদ্রেꯆꯥꯗꯤꯡ ꯇꯧꯕ ꯑꯁꯤ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ ꯆꯥꯗꯤꯡ ꯇꯧꯕꯗ ꯌꯥꯝꯗ ꯭ ꯔꯕꯗ 1
reset_periodꯁ ꯭ ꯇ ꯭ ꯔꯤꯡনহৈদ্রেdaily, weekly অর monthlyꯇꯉꯥꯏꯐꯗꯕꯁꯤꯡ ꯫ limit_satsReset touba naitaba cap amagi damak adu thaukhradi.
expire_atꯁ ꯭ ꯇ ꯭ ꯔꯤꯡ ꯅꯠꯇ ꯭ ꯔꯒ ꯏꯟꯇꯤꯖꯔনহৈদ্রেꯀꯤ ꯑꯗꯨꯅ ꯊꯕꯛ ꯇꯧꯕ ꯊꯤꯡꯕ ꯃꯇꯝꯗ: ꯑꯥꯏ. ꯑꯦꯁ. ꯑꯣ. 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অমুক nym না শেমবগী keys 60 মাদা ওকপা নত্রগা অমসুং অমুক ওইনা মখোয়গী address অসিদগী ১ Hour চাউনা ১২০ অমা (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);

Key অমা revoke তৌবা

DELETE https://nymbot.ai/api/v1/keys/{id} - ꯈꯨꯠꯌꯦꯛ ꯄꯤꯔꯝꯃꯤ ꯫

চাউরাকপা চানা চাউরাকপাগীদমক চোকপা। মদু লিস্টিংদা থাজিন্লি... revoked_at শেল্লবা, অমসুং থাউজিকপা ঙমবা include_revoked=trueꯀꯤ (key) ꯑꯃꯥ ꯀꯥꯡꯉাৎꯅꯕ ꯍꯟꯅꯥ ꯀꯥꯡꯉাৎꯅꯕꯁꯤ ꯃꯁꯤꯒꯤ ꯑꯥꯏꯕꯥ ꯑꯇꯣப்பꯨ ꯍꯪꯅꯕনি꯫ ꯀꯥꯡꯉাৎꯅꯕ ꯀꯤ (key) ꯑ Schmitz ꯃꯥꯏꯕꯥ ��{50} ꯈꯛꯍꯟꯕꯁꯤ ꯍꯦꯡꯝꯃꯤ; ꯑꯃꯗୁꯝ ꯀꯤ (key) ꯑꯃꯥ ꯀꯥꯡꯉাৎꯅꯕ ꯃꯇꯝদা ꯑꯔꯤꯕꯥ ꯀꯤ (key) ꯁꯤꯁୁ ꯍꯟꯅꯥ ꯂꯣꯏꯅꯍꯟꯅꯕনি꯫

ꯔꯤꯄ ꯭ ꯂꯥꯟꯁ

{ "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

ꯂꯥꯏꯠꯅꯤꯡ ꯋꯥꯂꯦꯠ ꯑꯃ ꯅꯣꯁ ꯭ ꯇꯔ ꯋꯥꯂꯦꯠ ꯀꯅꯦꯛꯀ ꯁꯝꯅꯩ ꯑꯗꯨꯒ ꯅꯤꯝꯕꯣꯠꯅ ꯑꯦ. ꯄꯤ. ꯑꯥꯏ. ꯒꯤ ꯆꯥꯗꯤꯡ ꯍꯟꯊꯔꯛꯄ ꯃꯇꯝꯗ ꯕꯦꯂꯦꯟꯁ ꯑꯃ ꯃꯁꯥ ꯃꯊꯟꯇ ꯁꯦꯝꯗꯣꯛꯏ ꯫ ꯑꯦꯞ ꯑꯁꯤꯒꯤ ꯑꯦ. ꯄꯤ. ꯑꯥꯏ. ꯁꯤꯠ ꯑꯁꯤ ꯆꯞ ꯃꯥꯟꯅꯕ ꯁꯦꯇꯤꯡꯁꯤꯡ ꯂꯩ; ꯍꯥꯏꯔꯤꯕꯁꯤꯡ ꯑꯁꯤꯅ ꯃꯁꯤꯒꯤ ꯇꯨꯡꯗ ꯂꯩꯕ ꯑꯔꯣꯏꯕ ꯄꯣꯏꯟ ꯭ ꯇꯁꯤꯡꯅꯤ ꯫ ꯃꯈꯣꯏ ꯄꯨꯝꯅꯃꯛꯅ ꯕꯦꯂꯦꯟꯁ ꯑꯃ ꯃꯊꯧ ꯇꯥꯏ ꯫ ꯈꯨꯠꯌꯦꯛ ꯄꯤꯅꯕ ꯍꯥꯏꯖꯔꯛꯄ.

মশানা ময়া মীনুংবা: API request অমদা নখোয়না লৈবা balance দা মীনুংবা হৌবা মতমদা, অদু balance অদু নখোয়না লৈবা threshold দা মীনুংলবা হৌরবদি, Nymbot না নখোয়না top-up তৌবা amount গীদমক invoice অমদা পীনদুনা, নখোয়গী wallet দা পীরি অমসুং credit অদু পুথোক্কনি। মসি nym অমসুং balance খুদিংমক মীনুং অমা মখাদা 5 minutes খুদিংগী অমা মখক্তা top up তৌই, মরম অদুনা requests কয়া অদু অখন্নবা চৎপা অমা Wallet দা মীনুং হন্দোকপা ঙমদে। App শিংবদা মীনুং হন্দোকপনা মসি চত্থগে। Last top-up গী মীতম অমসুং size, অমসুং last error অদু settings দা লৈরি; error অমদা পাঙথোকপদা, payment অদু পাঙথোকলবা মতমদা, মসিগী invoice অদু checking তৌবা... ꯇꯣꯞ-ꯑꯞ ꯁ ꯭ ꯇꯦꯠꯁ ক্রেডিট তৌখ্রে।

ꯅꯍꯥꯛꯅ ꯋꯥꯂꯦꯠ ꯑꯃ ꯀꯣꯟꯇꯦꯛ ꯇꯧꯗ ꯭ ꯔꯤꯉꯩ ꯃꯃꯥꯡꯗ

ꯀꯣꯟꯇꯦꯛꯁꯟ ꯁ ꯭ ꯇ ꯭ ꯔꯤꯡ ꯑꯃꯅ ꯃꯗꯨ ꯄꯥꯏꯔꯤꯕ ꯃꯤꯑꯣꯏ ꯑꯗꯨꯅ ꯅꯍꯥꯛꯀꯤ ꯋꯥꯂꯦꯠꯇ ꯁꯦꯜ ꯄꯤꯅꯕ ꯍꯥꯏꯖꯕ ꯌꯥꯍꯜꯂꯤ ꯫ ꯅꯤꯝꯕꯣꯠꯅ ꯃꯁꯤꯕꯨ ꯑꯦꯟꯀ ꯭ ꯔꯤꯞ ꯇꯧꯔꯒ ꯊꯝꯃꯤ ꯑꯃꯁꯨꯡ ꯃꯇꯝ ꯄꯨꯝꯅꯃꯛꯇ ꯃꯁꯥꯒꯤ ꯇꯣꯞ-ꯑꯞ ꯏꯟꯚꯣꯏꯁꯁꯤꯡ ꯄꯤꯅꯕꯈꯛꯇꯃꯛ ꯁꯤꯖꯤꯟꯅꯩ, ꯑꯗꯨꯕꯨ ꯃꯁꯤꯒꯤꯗꯃꯛ ꯀꯣꯟꯇꯦꯛ ꯑꯃ ꯁꯦꯝꯃꯨ, ꯅꯍꯥꯛꯀꯤ ꯋꯥꯂꯦꯠꯇ ꯆꯥꯗꯤꯡꯒꯤ ꯁꯦꯟꯐꯝ ꯑꯃ ꯊꯝꯗꯨꯅ, ꯃꯁꯤꯅ ꯃꯇꯝ ꯄꯨꯝꯅꯃꯛꯇ ꯈ ꯭ ꯋꯥꯏꯗꯒꯤ ꯍꯦꯟꯅ ꯁꯦꯜ ꯊꯤꯕ ꯌꯥꯕ ꯑꯁꯤ ꯅꯍꯥꯛꯅ ꯈꯟꯈꯤꯕ ꯅꯝꯕꯔ ꯑꯃꯅꯤ ꯫ ꯋꯥꯂꯦꯠꯇ ꯁꯦꯜ ꯊꯤꯕꯗ ꯃꯇꯦꯡ ꯄꯥꯡꯒꯗꯕꯅꯤ ꯫ pay_invoice.

ৱেল্লেট অমদা কানেক্ট তৌবা

POST https://nymbot.ai/api/v1/nwc-auto-topup/connect - ꯈꯨꯠꯌꯦꯛ ꯄꯤꯔꯝꯃꯤ ꯫

ꯐꯤꯜꯗꯃꯈꯜꯇꯉꯥꯏꯐꯗꯕꯑꯀꯨꯞꯄ ꯃꯔꯣꯜ
nwc_urlꯁ ꯭ ꯇ ꯭ ꯔꯤꯡꯍꯣꯏꯁꯝꯅꯕ ꯁ ꯭ ꯇ ꯭ ꯔꯤꯡ ꯑꯗꯨ ꯍꯧꯒꯠꯂꯛꯂꯤ nostr+walletconnect://. Nymbot না wallet দা মখাংশিনবগীদমক থৌরাং পীরি get_info ꯃꯁꯤ ꯁꯦꯕ ꯇꯧꯗ ꯭ ꯔꯤꯉꯩ ꯃꯃꯥꯡꯗ, ꯑꯃꯁꯨꯡ ꯃꯁꯤ ꯑꯦꯟꯀ ꯭ ꯔꯤꯞ ꯇꯧꯔꯒ ꯊꯝꯃꯤ ꯫
threshold_satsintejerꯍꯣꯏBalance অসি মমিংগী মখাদা চঙবা মতমদা top up তৌবি। ꯑরিবা ১,০০০ হেন্না।
topup_satsintejerꯍꯣꯏꯃꯇꯝ ꯈꯨꯗꯤꯡꯗ ꯀꯌꯥꯝ ꯍꯥꯞꯆꯤꯟꯕꯒꯦ ꯫ 1,000,000 ꯁꯦꯠꯁꯤꯡꯗ 1000 ꯍꯥꯞꯆꯤꯟꯕꯒꯦ ꯫
tierꯁ ꯭ ꯇ ꯭ ꯔꯤꯡনহৈদ্রেpro (default) নত্রগা 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); wallet অসিগী relay দা মসিদগী ময়াংশবা মখলদা মসি চৎনবা পাঙলক্লে (nwc_unreachable) ꯅꯠꯇ ꯭ ꯔꯒ ꯆꯦꯛ ꯑꯗꯨ ꯌꯥꯈꯤꯗꯦ (nwc_rejected); ꯁꯝꯅꯕ ꯑꯗꯨꯅ ꯏꯟꯚꯣꯏꯁꯁꯤꯡ ꯄꯤꯕ ꯉꯝꯗꯦ (nwc_missing_permission); নত্রগা limit অসিগী মনুংদা লৈবা লৈবা অঙাংশনবা অমা।
501মসিগী server অসিগীদমক automatic top-ups গেয়না ওনবা তৌদে (nwc_unavailable). অতোপ্পা endpoint অনিদা মাঙৈ মগুনগা লোয়ননা মদুতা মখাগী অদুদা মচু অদু মীনউ।

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 - ꯈꯨꯠꯌꯦꯛ ꯄꯤꯔꯝꯃꯤ ꯫

connecting অসিগা ওকপা অদুদি মচেং অদুনা মচেং অদুতা পীবী। 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 - ꯈꯨꯠꯌꯦꯛ ꯄꯤꯔꯝꯃꯤ ꯫

Stored connection string asi thadokle. Top-up touba amadi thidre. Pak-na, nanggi wallet ta connection asi revoke touba yai.

ꯔꯤꯄ ꯭ ꯂꯥꯟꯁ

{ "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());

Key অমদা মনুংদা request অমদা লৈবাক চুদবগী পুম্নমক থিবু।

ꯂꯦꯞꯊꯣꯛꯂꯕ ꯃꯃꯜꯒꯤ ꯑꯔꯣꯏꯕ ꯄꯣꯏꯟ ꯭ ꯇꯁꯤꯡ ꯑꯁꯤ, ꯀꯤ, ꯑꯦꯀꯥꯎꯟ ꯭ ꯇ ꯅꯠꯇ ꯭ ꯔꯒ ꯕꯦꯂꯦꯟꯁ ꯌꯥꯎꯗꯅ, ꯂꯥꯏꯠꯅꯤꯡꯒꯤ ꯃꯊꯛꯇ ꯃꯇꯝ ꯑꯃꯗ ꯍꯥꯏꯖꯕ ꯑꯃꯒꯤꯗꯃꯛ ꯄꯤꯕ ꯌꯥꯏ: POST /images/generations, POST /images/edits, POST /videos, POST /audio/speech, POST /audio/transcriptions, POST /audio/translations ꯑꯃꯁꯨꯡ POST /embeddingsꯆꯦꯠ, ꯔꯤꯄꯣꯟꯁꯁꯤꯡ ꯑꯃꯁꯨꯡ ꯃꯦꯁꯦꯖꯁꯤꯡꯗ ꯃꯇꯝ ꯄꯨꯝꯅꯃꯛꯇ ꯀꯤ ꯑꯃ ꯃꯊꯧ ꯇꯥꯏ ꯫ ꯀꯤ ꯑꯃ ꯌꯥꯎꯕ ꯔꯤꯀ ꯭ ꯋꯦꯁꯠ ꯑꯃ ꯃꯇꯝ ꯄꯨꯝꯅꯃꯛꯇ ꯇꯧꯕꯒꯨꯝꯅ ꯕꯦꯂꯦꯟꯁꯇ ꯕꯤꯜ ꯇꯧꯋꯤ; ꯄꯦꯃꯦꯟꯠ ꯐ ꯭ ꯂꯣ ꯑꯁꯤ ꯀꯤ ꯑꯃꯠꯇ ꯊꯥꯔꯛꯇꯕ ꯃꯇꯝ ꯈꯛꯇꯗ ꯍꯧꯏ ꯫

Nymbot না backend অমাদগী মসিগী মীনুং অমগী মচা অমা অমসুং অতোপ্পা মচা অমা খুরুংগী মতেংদা পীরি: Lightning Labs' ꯑꯦꯜ402 (ꯃপুং অখন্নগী মীং অদুতাও মাঙবা ꯑচumba ꯑাগান্নবা ꯌ pagsা, LSAT) ꯑꯃꯁꯨꯡ ꯑꯥꯏ. ꯏ. ꯇꯤ. ꯑꯦꯐ. ꯒꯤ ꯗ ꯭ ꯔꯥꯐꯠ ꯄꯦꯃꯦꯟꯠ ꯃꯁꯤꯒ ꯂꯣꯏꯅꯅ ꯑꯩꯆ. ꯇꯤ. ꯇꯤ. ꯄꯤ. ꯑꯣꯊꯦꯟꯇꯤꯀꯦꯁꯟ ꯁ ꯭ ꯀꯤꯝ lightning পদ্ধতি অমসুং charge ইন্তেন্‌ত। ঐহাক্কী ক্লায়েন্টনা অতোপ্পা ময়েক অমুক চত্থবা অদু খঙলবা মখল অদু হেন্না শিজিন্নবীয়ু।

নঙগী নিজস্ব সার্ভার লান্থোকপা

Key sinna shakpa ashi [condition] oiragidapda thakpani. API_L402_SECRET hex (characters 64) নত্রগা base64 (44) অদুতা য়াম্না লৈরবা 32 random bytes shing-nangba য়াই, অমুক হৌজিক মাদা অমদা মখাদা পাইখৎপা অমা শেমগৎলু openssl rand -hex 32. Value ɐ ꯑ>), ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ ɐ API_L402_SECRET_PREVIOUS ꯃঙး অমাগীদমক: credentials, status URLs অমসুং মদুগী মখাদা পীবীবা challengesশিংনা মখোয়গী expiration লৈবা লৈবতা মপাউদা মখাং চৎলি।

চ্যালেঞ্জ অসি

ꯍꯥꯏꯖꯔꯛꯄ ꯑꯗꯨ ꯁꯦꯜ ꯊꯤꯗꯅ ꯊꯥꯔꯛꯎ Authorization header. মদু মখল অদু ময়েক অমুক অমা লৈরবদি, মচা তৌদবা তৌগেদ, অমসুং নাঙোন্দা লৈগনি 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 ꯄꯦꯔꯥꯃꯤꯇꯔ ꯑꯁꯤ ꯕꯦꯖ64ꯨꯔꯜ ꯖꯦ. ꯑꯦꯁ. ꯑꯣ. ꯑꯦꯟ. ꯅꯤ: {"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.

ꯁꯤꯡꯅꯕ ꯑꯃꯅ ꯑꯔꯣꯏꯕ ꯄꯣꯏꯟ ꯭ ꯇ ꯑꯗꯨꯒ ꯃꯔꯤ ꯂꯩꯅꯩ, ꯃꯗꯨꯗ Content-Type (মসিগী media type অমসুং, multipart অদুবু boundary মশাগী) অমসুং নহাক্না পীরকপা body bytes চাউনা SHA-256 মশাগীদমক, অমসুং মিনিট ১৫ শেন্থোকপা ওই। পাম্বদগী, পীনু... অখন্নবা অমুক চাউনা তোকপা মখাদা অমুক লৌবা: অদু ই同样 Content-Type ꯑꯃꯁꯨꯡ ꯆꯞ ꯃꯥꯟꯅꯕ ꯖꯦ. ꯑꯦꯁ. ꯑꯣ. ꯑꯦꯟ. ꯕꯥꯏꯠꯁꯤꯡ, ꯅꯠꯇ ꯭ ꯔꯒ ꯃꯜꯇꯤꯄꯥꯔ ꯭ ꯠ ꯑꯦꯟꯗꯄꯣꯏꯟ ꯭ ꯇꯁꯤꯡꯒꯤꯗꯃꯛꯇ (/images/edits, /audio/transcriptions, /audio/translations) boundary amatta oina multipart body amatta oina. HTTP library khudingmakna form encode touba matam kadaigi boundary thumna thakhine, adubu amatta encode toubik-u amadi bytes adu aruba thaje.

ꯑꯦꯗ ꯭ ꯔꯦꯁ ꯈꯨꯗꯤꯡꯃꯛꯅ ꯃꯤꯅꯤꯠ ꯑꯃꯗ ꯆꯂꯦꯟꯖ 30 ꯍꯥꯏꯖꯕ ꯌꯥꯏ (ꯑꯥꯏ. ꯄꯤ. ꯚꯤ. 6 ꯑꯦꯗ ꯭ ꯔꯦꯁ ꯑꯃꯅ ꯃꯁꯤꯒꯤ ꯑꯄꯨꯟꯕ/64 ꯑꯣꯏꯅ ꯂꯧꯋꯤ) ꯫ ꯑꯦꯗ ꯭ ꯔꯦꯁ ꯑꯗꯨ ꯈꯪꯗꯕ ꯍꯥꯏꯖꯕꯁꯤꯡꯅ ꯃꯤꯅꯤꯠ ꯑꯃꯗ ꯍꯦꯟꯅ ꯀꯟꯅ 10 ꯁꯦꯌꯔ ꯇꯧꯋꯤ, ꯑꯃꯁꯨꯡ ꯑꯦꯗ ꯭ ꯔꯦꯁ ꯄꯨꯝꯅꯃꯛꯀꯤ ꯃꯅꯨꯡꯗ ꯅꯤꯝꯕꯣꯠꯅ ꯄꯤꯔꯤꯕ ꯁꯤꯡꯅꯕꯁꯤꯡꯗ ꯑꯄꯨꯟꯕ ꯀꯦꯞ ꯑꯃ ꯂꯩ; ꯆꯂꯦꯟꯖ ꯑꯃ ꯇꯧꯗ ꯭ ꯔꯤꯉꯩ ꯃꯃꯥꯡꯗ ꯌꯥꯗꯕ ꯍꯥꯏꯖꯕ ꯑꯃꯅ (ꯈꯨꯗꯝ ꯑꯣꯏꯅ ꯑꯆꯨꯝꯕ ꯖꯦ. ꯑꯦꯁ. ꯑꯣ. ꯑꯦꯟ. ꯑꯣꯏꯗꯕ ꯕꯣꯗꯤ ꯑꯃꯒ ꯂꯣꯏꯅꯅ) ꯃꯁꯤꯒꯤ ꯃꯥꯏꯀꯩꯗ ꯂꯧꯗꯦ ꯫ ꯃꯗꯨꯒꯤ ꯃꯊꯛꯇ पाउखुम ꯑꯁꯤ ꯑꯁꯤꯅꯤ ꯫ 429 ꯃꯁꯤꯒ ꯂꯣꯏꯅꯅ Retry-After, body amadi pathatpa matamda thiriba. Key maru oiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba looiba loo Content-Type অনিবাৎ application/json (ꯅꯠꯇ ꯭ ꯔꯒ) multipart/form-data uploads))))) nungsi naba nattre with 415 ꯑꯃꯁুম ꯑিনভয়েস (invoice) ঙাক্লে।

ꯏꯝꯕꯦꯗꯤꯡꯁꯤꯡ ꯑꯁꯤꯒꯤ ꯃꯃꯜ ꯑꯁꯤ ꯏꯟꯄꯨꯠꯇ ꯌꯥꯎꯕ ꯇꯣꯀꯦꯟꯁꯤꯡꯒꯤ ꯃꯃꯜ ꯂꯦꯞꯄꯗꯒꯤ, 1.5× ꯉꯝꯈꯩ ꯑꯃꯒ ꯂꯣꯏꯅꯅ ꯂꯦꯞꯊꯣꯛꯏ, ꯃꯔꯝꯗꯤ ꯑꯁꯦꯡꯕ ꯃꯁꯤꯡ ꯑꯗꯨ ꯃꯗꯨꯒꯤ ꯃꯇꯨꯡꯗꯈꯛꯇꯃꯛ ꯈꯪꯕ ꯉꯝꯃꯤ ꯫ ꯅꯍꯥꯛꯅ ꯍꯛꯊꯦꯡꯅꯅ ꯁꯤꯖꯤꯟꯅꯈꯤꯕ ꯇꯣꯀꯦꯟꯁꯤꯡꯒꯤꯗꯃꯛꯇ ꯁꯦꯜ ꯊꯤꯒꯅꯤ, ꯑꯃꯁꯨꯡ ꯄꯦꯃꯦꯟꯠ ꯑꯗꯨꯒꯤ ꯁꯤꯖꯤꯟꯅꯗꯕ ꯁꯔꯨꯛ ꯑꯗꯨ ꯁꯦꯟꯐꯝ ꯑꯃ ꯑꯣꯏꯅ ꯍꯜꯂꯛꯀꯅꯤ ꯫ ꯔꯤꯐꯟꯗ ꯇꯣꯀꯦꯟ.

পেমেন্ট সেন্দোং তৌরিবা

Lightning wallet অমুগী অতোপ্পা মখাদা পাম্বী ইনভয়েস (invoice) পী। Wallet অদুনা নীংথিনা পাম্বী preimage, hex characters 64 পীরগনি। মখা পাম্বী মখাদা পীবা অমা অসিগীদমক অদুনা ওইবা রিকুয়েস্ট (request) অমা থোকহনবা পীরকউ:

স্কীম (Scheme)ꯍꯦꯗꯔ
ꯑꯦꯜ402Authorization: L402 <macaroon>:<preimage> (LSAT খোঙতাং অমুক্কী অঙাংশোইনা মহুৎ অমুক্কী অমুক্কী ওইনা থম্লিবনি)
ꯄꯦꯃꯦꯟꯠAuthorization: Payment <base64url JSON>, JSON অসি ওখল্লবা অসিদগী মফমদি করি কৌনবা অসি? {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}}

Key অসিগা লোয়ননা পাম্বরিবা request অমা অসি paid request অমনি, অদুবু... nymbot object দা balance fieldশিং হেন্না লৈরে: {"payment": "l402", "tier": "pro", "paid_sats": 237, "charged_sats": 237}, ꯑꯃꯁꯨꯡ ꯂꯩꯔꯝꯗꯦ X-Nymbot-Balance-Sats header. A Payment scheme দা পেমেন্ট তৌবদা Request অসি মখাদা মচা অমা ফংই Payment-Receipt header (base64url challenge id লৈবা JSON, payment hash অদু অদুদা... reference, status ꯑꯃꯁꯨꯡ timestamp). ফি পীবীবা রিকুয়েস্তশিং অসি অতোপ্পা nym অমগা মরী থিবা লৈতে, মরম অদুনা মখোয় query history দা চ্যুত থোক্লিবী থোইদোকপা লৈতে।

থৌরমꯀꯔꯝꯕ ꯃꯇꯝꯗ
402 payment_already_usedꯄꯦꯃꯦꯟꯠ ꯈꯨꯗꯤꯡꯃꯛꯅ ꯍꯥꯏꯖꯕ ꯑꯃꯒꯤꯗꯃꯛ ꯁꯦꯜ ꯄꯤ ꯫ ꯔꯤꯄꯣꯟ ꯭ ꯁ ꯑꯁꯤ ꯍꯥꯏꯖꯕ ꯑꯁꯤꯒꯤꯗꯃꯛ ꯑꯅꯧꯕ ꯁꯤꯡꯅꯕ ꯑꯃꯅꯤ, ꯃꯔꯝ ꯑꯗꯨꯅ ꯀ ꯭ ꯂꯦꯟ ꯭ ꯇ ꯑꯃꯅ ꯃꯍꯥꯛꯀꯤ ꯑꯔꯣꯏꯕ ꯀ ꯭ ꯔꯦꯗꯦꯟꯁ ꯭ ꯌꯦꯜ ꯑꯗꯨ ꯀꯦꯆ ꯇꯧꯕꯅ (ꯑꯁꯨꯝꯅ) ꯫ lnget ) ꯑꯃꯨꯛ ꯍꯟꯅ ꯁꯦꯜ ꯊꯤꯕꯈꯛꯇꯅꯤ ꯫
402 payment_mismatchcredential অদু অতোপ্পা endpoint অমদা পীরিবা ওইরি, Content-Type or body, or pays less than this request now costs. A fresh challenge for this request comes with it; if the payment was too small, what you paid comes back as a ꯔꯤꯐꯟꯗ ꯇꯣꯀꯦꯟ (refund_token ꯑꯃꯁꯨꯡ refund_sats মশানা অমুক অমদা।
402 payment_expiredꯆꯂꯦꯟꯖ ꯑꯗꯨ ꯍꯧꯈ ꯭ ꯔꯕ ꯃꯇꯨꯡꯗ ꯃꯤꯅꯤꯠ 15 ꯍꯦꯟꯅ ꯂꯦꯟꯈ ꯭ ꯔꯦ ꯫ ꯃꯁꯤꯒ ꯂꯣꯏꯅꯅ ꯑꯅꯧꯕ ꯆꯂꯦꯟꯖ ꯑꯃꯥ ꯂꯥꯛꯏ ꯫ ꯀꯔꯤꯒꯨꯝꯕ ꯄ ꯭ ꯔꯤꯃꯤꯖ ꯑꯁꯤꯅ ꯅꯍꯥꯛꯅ ꯁꯦꯜ ꯄꯤꯈꯤꯕ ꯑꯗꯨ ꯎꯠꯂꯕꯗꯤ, ꯅꯍꯥꯛꯅ ꯁꯦꯜ ꯄꯤꯈꯤꯕ ꯑꯗꯨ ꯁꯦꯜ ꯑꯣꯏꯅ ꯍꯜꯂꯛꯏ ꯫ ꯔꯤꯐꯟꯗ ꯇꯣꯀꯦꯟ (refund_token ꯑꯃꯁꯨꯡ refund_sats body দা, হেন্না অঙাংশদা; ওইনা অমুক অমুক মতমদা চাউনা মখাদা চাউখৎলি।
401 invalid_preimagePreimage অদু invoice gi payment hash দা hash touri nate. Payment অদু usage thiba nate.
401 invalid_payment_credentialꯀ ꯭ ꯔꯦꯗꯦꯟꯁ ꯭ ꯌꯦꯜ ꯑꯁꯤ ꯑꯔꯥꯟꯕ ꯃꯑꯣꯡꯒꯤ ꯑꯣꯏ, ꯅꯤꯝꯕꯣꯠꯅ ꯄꯤꯈꯤꯕ ꯃꯇꯨꯡꯗ ꯍꯣꯡꯗꯣꯛꯈꯤ, ꯅꯠꯇ ꯭ ꯔꯒ ꯄꯦꯃꯦꯟꯠ ꯍꯦꯁ ꯅꯤꯝꯕꯣꯠꯅ ꯏꯟꯚꯣꯏꯁ ꯑꯃꯠꯇ ꯄꯤꯗ ꯭ ꯔꯤꯕ ꯑꯃꯒꯤ ꯃꯃꯤꯡ ꯀꯧꯈꯤ ꯫ ꯅꯤꯝꯕꯣꯠꯅ ꯈꯡꯗꯕ, ꯅꯠꯇ ꯭ ꯔꯒ ꯌꯦꯠꯅꯕ ꯑꯣꯏꯕ ꯆꯦꯛꯁꯤꯟꯋꯥꯁꯤꯡ ꯂꯩꯕ ꯃꯦꯀꯥꯔꯨꯟ ꯑꯃꯅ ꯌꯥꯗꯦ ꯫
429 rate_limit_exceededমিনিট অমদা মৈজিল (verify) তৌবা হেন্না খক্তা ৩০ চাউনা credentials নত্রগা keys singনা মসিগী address দা লৈখিদ্রে, নত্রগা মিনিট অমদা refund token অমদা শেমলিবগী মখল অমা ৬০ হেন্না মপোক্লবা লৈরে। পাউদম্লগা... Retry-After.

cURL

BODY='{"model":"nano-banana","prompt":"a lighthouse at dusk","response_format":"b64_json"}'
URL=https://nymbot.ai/api/v1/images/generations

# 1. Get the challenge
CH=$(curl -s -D - -o /dev/null "$URL" -H "Content-Type: application/json" -d "$BODY" | grep -i '^www-authenticate: L402')
MAC=$(echo "$CH" | sed -E 's/.*macaroon="([^"]+)".*/\1/')
INVOICE=$(echo "$CH" | sed -E 's/.*invoice="([^"]+)".*/\1/')

# 2. Pay $INVOICE with your wallet and copy the preimage
PREIMAGE=...

# 3. Send the identical request with the credential
curl "$URL" -H "Content-Type: application/json" -H "Authorization: L402 $MAC:$PREIMAGE" -d "$BODY"

lnget

# lnget (Lightning Labs) pays L402 challenges from your own lnd node and retries for you
lnget -X POST -H "Content-Type: application/json" \
  -d '{"model":"nano-banana","prompt":"a lighthouse at dusk","response_format":"b64_json"}' \
  https://nymbot.ai/api/v1/images/generations

Python

import base64, json, re
import requests

url = "https://nymbot.ai/api/v1/images/generations"
body = json.dumps({"model": "nano-banana", "prompt": "a lighthouse at dusk", "response_format": "b64_json"}).encode()
headers = {"Content-Type": "application/json"}

challenge = requests.post(url, data=body, headers=headers)
assert challenge.status_code == 402
info = challenge.json()
print("Pay", info["amount_sats"], "sats:", info["invoice"])

preimage = pay_with_your_wallet(info["invoice"])  # 64 hex characters

# L402
mac = re.search(r'L402 macaroon="([^"]+)"', challenge.headers["WWW-Authenticate"]).group(1)
res = requests.post(url, data=body, headers={**headers, "Authorization": f"L402 {mac}:{preimage}"})
print(res.json()["nymbot"])

JavaScript

const url = "https://nymbot.ai/api/v1/images/generations";
const body = JSON.stringify({ model: "nano-banana", prompt: "a lighthouse at dusk", response_format: "b64_json" });
const headers = { "Content-Type": "application/json" };

const challenge = await fetch(url, { method: "POST", headers, body });
const www = challenge.headers.get("www-authenticate");

// The Payment scheme: echo every challenge parameter back with the preimage
const start = www.indexOf("Payment ");
const params = Object.fromEntries([...www.slice(start + 8).matchAll(/(\w+)="((?:[^"\\]|\\.)*)"/g)].map((m) => [m[1], m[2]]));
const { invoice } = JSON.parse(Buffer.from(params.request, "base64url").toString()).methodDetails;
const preimage = await payWithYourWallet(invoice);

const credential = Buffer.from(JSON.stringify({ challenge: params, payload: { preimage } })).toString("base64url");
const res = await fetch(url, { method: "POST", headers: { ...headers, Authorization: `Payment ${credential}` }, body });
console.log((await res.json()).nymbot, res.headers.get("payment-receipt"));

ꯀ ꯭ ꯂꯦꯟ ꯭ ꯇꯁꯤꯡ ꯁꯦꯝꯒꯠꯈꯤ mppx Lightning method অমা শীংনা Payment challenge অসি মখোয়গীদমক মখোয়না থম্লকপা; endpoint অদুদা মখোয়বু পীনবা অমসুং মখোয়বু পেমেন্ট তৌবা পীরকউ।

ꯚꯤꯗꯤꯑꯣꯁꯤꯡ

ꯑꯃꯥ ꯇꯥꯛꯇ꯭ꯔꯤꯕ POST /videos অৱাপশিংশিং 202 ক keyed অমগীদমক লৈবা, অমসুং অমা ➕ 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 asi unbilled ta fail leitrabadi, payment asi adumakta thiba nakhitni. Status URL asina henna henna hangli refund_sats refund থাখবা job অমদা token টা খুদিংমক ফংদবা ঙমদবা ংগী মতাংদা, মরম অদুনা status URL শেয়ার তৌবনা refund অদু শেয়ার তৌবা ঙমদে। Token চেক তৌবনা পোল (poll) তৌদবা failed job অমসুং অদু সেটল (settle) তৌই।

ꯔꯤꯐꯟꯗꯁꯤꯡ

চেংবা রিকুয়েস্ট অমদা ফি লৈবা রিকুয়েস্ট অমা ফাউবা য়াইবা হেন্না মৈরা কপা অমসুং প্রোভাইদরনা মসিগী অতাংদমদা Nymbot দা বিল তৌবদি, পেমেন্ট অদু মখা তৌগনি অমসুং এরর (error) অদুনা মসিগুম্বা হায়গনি, 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 অক্সেক্ট অসিদগী মিসিং লৈবা ওনবা অদুগীদমক রিফান্ড টোকেন (refund token) অমদা পীবী; শেমলিবন (transcription) অমা অসিগী length অদু অহানবদা খঙবা ঙমদ্রবা অদুদি ফাইল অদুদি মপুং ফানা লৈবা length অদুগীদমক (মিনিট ৩০ খক্তা) মাদা মচাগী মখা মনুংদা মশিং পীবী, অদুবু মচেৎ অদুগী রিয়েল length (real length) অদুগীদমক লৈবা মফম অদুদি রিফান্ড টোকেন (refund token) অমা অসিদগী পীবী; মচেৎ অদুদি মিনিট ৩০ দগী খঙদবা অদুদি, মদু অসি মদু খুম্নবা মখাদা পীরি— 413 ꯑꯗꯨꯒ ꯄꯦꯃꯦꯟꯠ ꯄꯨꯝꯅꯃꯛ ꯍꯜꯂꯛꯏ ꯫ ꯑꯦꯝꯕꯦꯗꯤꯡꯁꯤꯡꯅ ꯑꯔꯦꯞꯄ ꯑꯗꯨ ꯂꯦꯞꯈꯤꯕꯗꯨ ꯍꯜꯂꯛꯏ ꯫ ꯃꯥꯏ ꯄꯥꯛꯄ ꯉꯝꯗ ꯭ ꯔꯕ ꯚꯤꯗꯤꯑꯣ ꯑꯃꯅ ꯃꯗꯨꯒꯤ ꯊꯥꯖꯤꯟꯈꯤꯕ ꯑꯗꯨ ꯇꯣꯀꯟ ꯑꯗꯨꯗ ꯍꯜꯂꯛꯏ ꯫

ꯔꯤꯐꯟꯗ ꯇꯣꯀꯦꯟ ꯑꯁꯤ ꯔꯦꯃꯥꯟꯗ 256-ꯕꯤꯠ ꯀꯣꯗ ꯑꯃꯅꯤ ꯫ ꯅꯤꯝꯕꯣꯠꯅ ꯃꯁꯤꯒꯤ ꯍꯦꯁ ꯈꯛꯇꯃꯛ ꯊꯝꯃꯤ, ꯑꯃꯁꯨꯡ ꯃꯁꯤ ꯅꯨꯃꯤꯠ 30ꯅꯤꯒꯤ ꯃꯇꯨꯡꯗ ꯂꯣꯏꯁꯤꯜꯂꯤ ꯫ ꯃꯁꯤꯅ ꯁꯦꯠ ꯕꯦꯂꯦꯟꯁ ꯑꯃ ꯊꯝꯃꯤ, ꯑꯃꯁꯨꯡ ꯅꯍꯥꯛꯅ:

  • ꯃꯗꯨꯒ ꯂꯣꯏꯅꯅ ꯁꯦꯜ ꯄꯤꯌꯨ ꯫ ꯊꯥꯔꯛꯎ Authorization: Bearer REFUND-… মথীগী মথক্তগী endpoint অমুগী অমা (OpenAI SDK না মসিদা API key ওইনা লৌই)। মখলগী মপ্রতা token খঙদবা অদুতা মখল লৈবা অমসুং মখল লৈবা অদু মদুদা লৈগনি (refund_token_sats ꯃꯐꯝ ꯑꯗꯨꯗ nymbot ꯑꯣꯕꯖꯦꯛꯠ) ꯫ ꯍꯥꯏꯖꯔꯛꯄꯗꯨꯗꯒꯤ ꯍꯟꯊꯕ ꯃꯃꯜꯒꯤ ꯇꯣꯀꯟ ꯑꯃꯅ पाउखुम ꯄꯤ ꯫ 402 refund_insufficient; unbilled failure অমা মায় পাকপা অসি ওইনা atom অদুদমক atom অদু মীয়ামদা পীনবা ওইগনি।
  • ꯆꯦꯛ ꯇꯧ ꯫ GET /api/v1/l402/refunds header অদু মখাদা লৈবা অমগা লোয়ননা RETURNS {"sats": 237, "status": "open", "expires_at": "..."}.
  • টোকেন অমুক মিনিটদা সর্বোচ্চ ৬০ হেন্না শকৎপা য়াই।
  • মখাদা মীয়ামগী ওইবা নুংঙাই মনুংদা থোংবা হৌহনবা। ꯃꯁꯤꯗ ꯄꯦꯁ ꯭ ꯠ ꯇꯧ গীফ্ট অমা redeem তৌবীয়ু Nymbot app-da, athubada call touba. POST /api/v1/l402/refunds/redeem ꯑꯃꯥꯒ ꯃꯔꯤꯅꯥ ꯈꯨꯠꯌꯦꯛ ꯄꯤꯅꯕ ꯍꯥꯏꯖꯔꯛꯄ ꯑꯃꯁꯨꯡ {"refund_token": "REFUND-...", "balance": "standard"} (ꯅꯠꯇ ꯭ ꯔꯒ) "pro"). Credit thiba thak thiba amadi balance ki da credit amada shakpa (standard ki damak sats 10, Pro ki damak sats 100); credit amada shakpa maru oiba sats sing API requests ki damak token ki da thounak tourakkani.

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 } }