Saldhig aqoon Haku
Qalabka, top-ups iyo keys
Waayo, waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah.
Boggaan waxaa loo turjumay mashiinka si ay ugu habboonaato. Asalka Ingiriisigu waa nooca khuseeya.
Qalabka Balance
Sida loo isticmaali karaa, waxaa loo isticmaali karaa mid ka mid ah mid ka mid ah mid ka mid ah.
GET https://nymbot.ai/api/v1/credits/balance Waayo, waxaa loo isticmaali karaa API key. POST Markaad ka mid ah, macaamiisha waa in aad u hesho.
balance Marka aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan yahay (null Qalabka waa in credit iyo sats, oo waa mid ka mid ah wax soo saarka ah. key Inta badan oo ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah.
QEEBE
{
"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"
}
}
| QEEBE | Marka |
|---|---|
401 | Waqtiga waa ka mid ah in la mid ah in la mid ah in la mid ah in la mid ah in la mid ah in la mid ah in la mid ah in la mid ah in la mid ah in la mid ah in la mid ah in la mid ah in la mid ah. |
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);
Qalabka Payment
Sidee waxaa laga yaabaa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah.
GET https://nymbot.ai/api/v1/topup/payment-methods Waayo, waxaan u baahan tahay key.
A top-up waa 10 ilaa 1,000,000 sats; a Pro top-up waa in la iibsato in ka mid ah 1 credit Pro, sidaas waxaa laga yaabaa at 100 sats. bulk_bonus Qalabka dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha, dhismaha iyo dhismaha.
QEEBE
{
"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);
Qalabka ugu horeysay ee Lightning
Ma rabtaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. Haku Ku saabsan credit Added.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning Waayo, waxaa loo isticmaali karaa API key.
| Qalabka | Haku | QEEBE | Haku |
|---|---|---|---|
amount | Haku | Haa | Sidaa, in currencyQalabka caadiga ah ee SATA. |
currency | Haku | Haku | SATS (Diiwaanka waxaa laga yaabaa) USD Marka BTCDollari waxay ku habboonaysaa qiimaha Bitcoin ah. |
tier | Haku | Haku | pro (Laga yaabaa) ama standardQalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka |
A credit standard waa 10 sats iyo a Pro credit 100 sats, si kastaba ha ahaado bonus bulk;
credits Waxa uu ku saabsan in la soo xiriir this invoice.
QEEBE
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| QEEBE | Marka |
|---|---|
400 | Waxaa laga yaabaa in ay ka mid ah mid ka mid ah (unsupported_method(Coolka ugu horeysay ee ku yaalaa)unsupported_currencyMa rabtaa in aad Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudaradaada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudarada Cudaradaamount_too_smallMarkaad ka mid ah mid ka mid ah 500,000 (amount_too_large(Waa'iid ka mid ah wax soo saarka ah)amount_out_of_range). |
429 | Marka aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan yahay.rate_limit_exceededKu saabsan Retry-After). |
502 | Waxaa laga yaabaa in la soo xiriir (invoice_unavailableKu saabsan 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);
Qalabka Top-up
Ma rabtaa in ay ku salaysan in ay ku salaysan iyo, ka dib markii ay ku salaysan, si ay ku salaysan credit. Checking waa in ay ku salaysan in, sidaas ka dib markii ay salaysan, si ay u salaysan creditedShirkadda uu ka dib markii ay ku salaysan: credit lands ka mid ah oo ka mid ah ka mid ah ka mid ah ka mid ah ka mid ah ka mid ah ka mid ah.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - waxaa loo isticmaali karaa in ay ka mid ah NIM-ka oo loo isticmaali karaa.
status Haku pending (wax yar oo dhan) paid (wax yar, laakiin sidoo kale si ay u hesho; check again), credited (wax yar) ama expired Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka
QEEBE
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| QEEBE | Marka |
|---|---|
400 | ID-ka waa mid ka mid ah id-ka 64-ka ah ee loo soo saarka. |
404 | Ma rabtaa in aad Cudarada Cudarada Cudarada Cudaradainvoice_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);
Qalabka History
One row per request: oo waa, oo model, oo ka mid ah tokens iyo oo ay ku yaalaa. No prompts ama jilicsan waxaa ku salaysan, sidaas oo ka mid ah ay ku salaysan. Rows waxaa ku salaysan 90 maalmood, ugu horeysay. A key that has reached its cap can still read its history.
GET https://nymbot.ai/api/v1/queries/history — waxaa loo isticmaali karaa API key, oo loo isticmaali karaa requests, ama a Qalabka dhismaha Nidaamka oo ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah.
| Qalabka | Haku | QEEBE | Haku |
|---|---|---|---|
page | Qalabka (Query) | Haku | Xafiisyada 1 waxaa ka mid ah 1,000; sida ugu horeysay waa 400 invalid_value. |
page_count | Qalabka (Query) | Haku | Rows per page. Default 20, oo ka badan 100. |
start_dateend_date | Qalabka (Query) | Haku | ISO 8601 dhismaha iyo waqti. |
model | Qalabka (Query) | Haku | Markaad ka mid ah model |
type | Qalabka (Query) | Haku | chat, responses, messages, image, video, speech, transcription Marka embedding. |
all_keys | Qalabka (Query) | Haku | Marka aad key: true Inta badan oo ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah. false. |
key_id | Qalabka (Query) | Haku | Sida loo isticmaali karaa, ama all_keys=trueWaayo, waxa uu ka mid ah key. |
QEEBE
{
"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);
Qalabka Qalabka
Waayo, soo dejisan iyo soo dejisan key, account summary iyo automatic top-ups waxay ka heli karaa API key. Waxaad ka heli karaa dhismaha ka mid ah nym, sidaas a key leaked waxaa laga yaabaa ka mid ah ka mid ah ka mid ah ka mid ah, laakiin sidoo kale sidoo kale sidoo kale sidoo kale sidoo kale ka mid ah ka mid ah ka mid ah ka mid ah.
Taageerada waxaa loo isticmaali karaa in ay ku saabsan: All in its Haku Sheet waxaa loo isticmaali karaa qiyaasta ugu horeysay. Waxaad u baahan tahay in aad u baahan tahay in aad u isticmaali karaa codka.
Dhammaan waxaa loo yaqaan 'Nostr event of kind 27235' (NIP-98), oo ku yaqaan 'base64-coded' ee loo yaqaan 'Nostr event'.
Authorization Header oo ka mid ah Nostr Haku:
Haku
{
"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": "..."
}
uis URL full of the request, string query ka mid ah, si aad u soo xiriir.methodHTTP waa mid ka mid ah.payloadSHA-256 waa mid ka mid ah dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha.POSTiyoPATCHMarkaas ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah.created_atWaxaa jira 60 saacadood oo ka mid ah horumarka server.- Qalabka ugu horeysay oo dhan, a
GETHaku waa in la soo xiriir oo ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah.nonceMarkaad ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah. - Cortex of a signed request can be at a maximum of 64 KB, iyo cortex waa in aad u baahan tahay.
Content-Type: application/json.
Haddii loo yaqaan "Lost Event Returns" 401 missing_nostr_auth; mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah
invalid_nostr_authSida loo isticmaali karaa, waxaa loo isticmaali karaa in ay u isticmaali karaa.
nostr_auth_replayedSida loo isticmaali karaa IPv6 iyo IPv6 iyo IPv6 iyo IPv6 iyo IPv6 iyo IPv6 iyo IPv6 iyo IPv6 iyo IPv6 iyo IPv6 iyo IPv6 429 Haku
Retry-After.
Waayo, sidoo kale waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah.https://nymbot.ai,
https://nymchat.app Sidee waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah.
OriginWaxay ku habboonahay.
Shuruudaha waxaa loo isticmaali karaa in aad NIM (Your NIM's Secret Key). nsecMarka aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay.
Waayo, waxaa loo isticmaali karaa mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah. NOSTR_SECRET_HEXQalabka Qalabka Qalabka Qalabka Qalabka
Haku Qalabka dhismaha ugu horeysay ee dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha dhismaha sha256sum ee 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");
}
Qalabka Account
Marka loo yaqaan API sheet ah ee app waxaa ka mid ah: key your public, both balances, how many keys are active (not revoked or expired), iyo Qalabka Top-up Qalabka, ama
null Waayo, server waa in la soo saarka.
GET https://nymbot.ai/api/v1/account Waxaan u baahan a Qalabka dhismaha.
QEEBE
{
"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());
Qalabka Key
Qalabka ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha ugu horeysay ee dhismaha. Qalabka dhismahaQalabka ugu horeysay ee ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah:
Qalabka Key
{
"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 Waxaad ka mid ah ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah.
Qalabka Key
GET https://nymbot.ai/api/v1/keys Haku.
| Qalabka | Haku | QEEBE | Haku |
|---|---|---|---|
include_revoked | Qalabka (Query) | Haku | Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka false. |
QEEBE
{ "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);
Qalabka Key
POST https://nymbot.ai/api/v1/keys Haku: Haku 201.
| Qalabka | Haku | QEEBE | Haku |
|---|---|---|---|
name | Haku | Haa | 1 ilaa 40 kala duwan oo ka mid ah macluumaadka ugu horeysay ee aad (wax yar). |
limit_sats | Haku | Haku | Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka |
reset_period | Haku | Haku | daily, weekly Marka monthlyQEEBE limit_satsWaayo, waxa uu ka mid ah ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. |
expire_at | String iyo integer | Haku | Ka dib markii keylow la shaqeeyaan: waqti ISO 8601, ama milliseconds ka dibna 1970. |
Haku (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"
}
}
| QEEBE | Marka |
|---|---|
400 | Ma rabtaa in aad Cudarada ama in aad Cudarada in aad Cudarada (duplicate_nameMarka aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u baahan yahay (unknown_parameter); ama 25 xafiisyada oo ku yaalaa (too_many_keys). |
429 | Ka badan 60 keys ka mid ah this nym, ama 120 ka mid ah this address, ee saaxiib ah (rate_limit_exceededKu saabsan 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);
Qalabka 1 Key
GET https://nymbot.ai/api/v1/keys/{id} Haku.
Haku {"data": {…}} ku saabsan objective, ama 404
key_not_found Waxaad ka mid ka mid ah in aad ka mid ah id.
cURL
URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
print(requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json()["data"])
JavaScript
const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
console.log((await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json()).data);
Qalabka Key
PATCH https://nymbot.ai/api/v1/keys/{id} Haku.
Waayo, ka mid ah name, limit_sats, reset_period iyo
expire_atSida loo isticmaali karaa in ay ka mid ah wax soo saarka. null Xirfadeed oo ka mid ah wax soo saarka ah oo ka mid ah wax soo saarka iyo wax soo saarka ah oo ka mid ah wax soo saarka.400 key_revokedc) Qalabka
{"data": {…}} Xafiiska ah oo ku saabsan key objects.
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);
Qalabka Key
DELETE https://nymbot.ai/api/v1/keys/{id} Haku.
Waayo, waxaa lagu soo bandhigi karaa in la soo bandhigi karaa. revoked_at Qalabka iyo waxaa laga yaabaa in ay ku saabsan include_revoked=trueWaayo, waxaa loo yaabaa in ay ku yaalaa in ay ku yaalaa in ay ku yaalaa in ay ku yaalaa in ay ku yaalaa in ay ku yaalaa in ay ku yaalaa in ay ku yaalaa in ay ku yaalaa.
QEEBE
{ "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());
Qalabka NWC Auto-top-up
Shuruudaha dhismaha Lightning ee Nostr Wallet Connect iyo Nymbot waxaa laga yaabaa in ka mid ah wax soo saarka ah oo ka mid ah wax soo saarka ah ee API. Sheet API ah ee app waa mid ka mid ah macluumaadka; waa mid ka mid ah macluumaadka ka dib. Qalabka dhismaha.
Sida loo isticmaali karaa: ka dib markii loo isticmaali karaa API-ka waxaa loo isticmaali karaa in ay u aragtiyo in ay u aragtiyaan, si ay u aragtiyaan in ay u aragtiyaan, Nymbot ayaa loo isticmaali karaa in ay u aragtiyaan in ay u aragtiyaan in ay u aragtiyaan in ay u aragtiyaan in ay u aragtiyaan in ay u aragtiyaan in ay u aragtiyaan in ay u aragtiyaan in ay u aragtiyaan. Qalabka Top-Up credit la.
Nymbot ku salaysan in ka mid ah in ka mid ah macluumaadka, laakiin waxaa loo isticmaali karaa in ka mid ah macluumaadka, oo ka mid ah macluumaadka iyo macluumaadka. pay_invoice.
Qalabka wallet
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect Haku.
| Qalabka | Haku | QEEBE | Haku |
|---|---|---|---|
nwc_url | Haku | Haa | Qalabka Qalabka, Qalabka Qalabka nostr+walletconnect://Nymbot wuxuu ku saabsan wallet. get_info Waayo, waxaan ka mid ahaysaa in ay ka mid ah ka mid ah wax soo saarka. |
threshold_sats | Haku | Haa | Markaas ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah. |
topup_sats | Haku | Haa | Sida loo isticmaali karaa in ay ka mid ah 1,000 ilaa 1,000,000 sats. |
tier | Haku | Haku | pro (Laga yaabaa) ama standard: balance si ay u aragto iyo top up. |
QEEBE
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| QEEBE | Marka |
|---|---|
400 | Waxaa laga yaabaa in la soo xiriir (invalid_nwc_url(Diiwaanka waxaa laga yaabaa in la soo bandhigay in la soo bandhigay)nwc_unreachable) ama ka mid ah wax soo saarka (nwc_rejected); xawaaraha waxaa laga yaabaa in la xiriyaan in la xiriyaan (nwc_missing_permission); ama wax soo saarka oo ka mid ah xawaaraha. |
501 | Marka aad u baahan tahay in aad u baahan tahay in aad u baahan tahay in aad u hesho (nwc_unavailableSidaas waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. |
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());
Ku saabsan settings
GET https://nymbot.ai/api/v1/nwc-auto-topup Haku.
Ma ahaatee, waxaa laga yaabaa in la soo bandhigiisa in la soo bandhigiisa. connected: false Qalabka kale
null Sida loo isticmaali karaa, waxaa loo isticmaali karaa in ka mid ah macluumaadka macluumaadka.
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());
Qalabka
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection Haku.
Ma ahaatee, waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah.
QEEBE
{ "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());
Qalabka Qalabka Qalabka Qalabka Qalabka
Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations iyo POST /embeddingsChat, Reply iyo Messages waxaa laga yaabaa in aad qaadi karto. A request that carries a key is billed to the balance as usual; the payment flow only starts when no key is sent.
Nymbot wuxuu ku saabsan mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah.
Qalabka 402 (wax yar oo ka mid ah xafiisyada, LSAT) iyo draft IETF
QEEBE HTTP Authentication System waxaa loo isticmaali karaa lightning Metoda iyo
charge Qalabka: Qalabka: Qalabka: Qalabka: Qalabka: Qalabka: Qalabka: Qalabka: Qalabka
Waayo, waxa uu ku yaalaa in ay ku yaalaa in la soo saarka. API_L402_SECRET Waxaa la heli karaa 32 byte ka badan, sida hex (64 characters) ama base64 (44). openssl rand -hex 32Waqtiga ugu horumariyo ama ugu horumariyo waxaa loo yaabaa in ay ku yaalaa in ay ku yaalaa in ay ka horumariyo. API_L402_SECRET_PREVIOUS Waayo, waxaa laga yaabaa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah.
Haweenka
Nala soo xiriir No Authorization Qalabka waa mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. 402 Payment Required Marka aad u baahan tahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay. WWW-Authenticate Qalabka ugu horeysay ee soo saarka:
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 }
}
Qalabka request Parametri waa base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
Qalabka waxaa laga yaabaa in la yaab leh, in la Content-Type (ka midabka media iyo, for multipart, xawaaraha) iyo SHA-256 ka mid ah body bytes aad si ay u soo xiriir, oo ku yaalaa 15 min. Haku Qalabka ugu horeysay: same
Content-Type Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka/images/edits, /audio/transcriptions, /audio/translationsHTTP-ka dhismaha ugu horeysay oo ka mid ah dhismaha ugu horeysay ee HTTP-ka dhismaha ugu horeysay ee HTTP-ka dhismaha ugu horeysay ee HTTP-ka dhismaha ugu horeysay ee HTTP-ka dhismaha ugu horeysay ee HTTP-ka dhismaha ugu horeysay ee HTTP-ka.
Qalabka dhismaha ugu caawin ah ee aadlka Nymbot waa mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid 429 Haku Retry-AfterQalabka dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha. Content-Type Waxaa la application/json (Eee
multipart/form-data Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka 415 Waxaad ka mid ah wax soo saarka ah oo ka mid ah wax soo saarka ah.
Shuruudaha waxaa laga yaabaa in ka mid ah shuruudaha ka mid ah shuruudaha, oo ka mid ah shuruudaha 1.5× marxada, sida quruudaha ah waxaa ka mid ah ka mid ah mid ah shuruudaha. Qalabka token.
Ku saabsan Payment
Waayo, waxaa loo isticmaali karaa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah:
| Shirkadda | Haku |
|---|---|
| Qalabka 402 | Authorization: L402 <macaroon>:<preimage> (LSAT Markaas oo dhan) |
| QEEBE | Authorization: Payment <base64url JSON>Ku saabsan JSON {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
Qalabka dhismaha waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. nymbot
Objects waxaa laga yaqaan 'Balance fields': {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}Waxaa jira no X-Nymbot-Balance-Sats Qalabka dhismaha iyo dhismaha dhismaha iyo dhismaha dhismaha Payment-Receipt Header (base64url JSON with the challenge id, dhismaha dhismaha dhismaha as reference, status iyo
timestampSaxiix oo ku yaalaa in ay ka mid ah dhismaha iyo dhismaha iyo dhismaha iyo dhismaha iyo dhismaha.
| QEEBE | Marka |
|---|---|
402 payment_already_used | Qalabka ugu horeysay ee loo yaqaan "Cash" waa mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. lnget Sidaas, waxaa laga yaabaa in ay ku yaalaa in ay ku yaalaa. |
402 payment_mismatch | Shuruudaha waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah. Content-Type Sida loo yaabaa, waxaa loo yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. Qalabka token (refund_token iyo refund_sats ku saabsan body). |
402 payment_expired | Waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah. Qalabka token (refund_token iyo refund_sats Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka |
401 invalid_preimage | Shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay. |
401 invalid_payment_credential | Shuruudaha waxaa laga yaabaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah. |
429 rate_limit_exceeded | 30 ka badan oo ka mid ah macluumaadka ama macluumaadka oo ka mid ah wax soo saarka oo ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah. 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"));
Customer waxaa la aasaasay mppx Sida loo yaqaan Lightning, dhismaha Payment waxaa laga yaqaan 'Payment Challenge' iyo 'Payment Challenge' iyo 'Payment Challenge' iyo 'Payment Challenge' iyo 'Payment Challenge' iyo 'Payment Challenge'.
Haku
Qalabka POST /videos Haku 202 Sida loo yaabaa, plus a
status_url: GET Marka aad u baahan tahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay.
{
"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..."
}
}
Haku refund_token Sida loo yaabaa, waxaa laga yaabaa in la soo bandhigi karaa in la soo bandhigi karaa. (GET /api/v1/l402/refunds Haku "status": "pending"Haddii aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay.
refund_sats Marka aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay in aad u baahan yahay.
QEEBE
If a paid request faahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaahfaah charged_satsSida loo isticmaali karaa, waxaa loo isticmaali karaa in ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah. Qalabka token Waayo, waxaa loo isticmaali karaa:
{
"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"
}
}
Shuruudaha wax soo saarka ah waxaa laga yaabaa in la soo xiriir: haddii aad soo xiriir in la soo xiriir in la soo xiriir oo la soo xiriir in la soo xiriir. nymbot Shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu horeysay ee Shuruudaha ugu hore 413
Markaas ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah.
A token kharashka waa codka 256-bit ah. Nymbot waxay ku caawinayaa kaliya oo hash-ka, oo ay ku yaalaa ka dib markii 30 maalmood.
- Waayo, pay with this. Haku
Authorization: Bearer REFUND-…Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabka Qalabkarefund_token_satsWaxaa lanymbotShuruudaha ugu horeysay ee loo yaabaa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah.402refund_insufficientShuruudaha ugu horeeyo waa in ay ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ka mid ah mid ah mid ah mid ka mid ah. - Waqtiga ah.
GET /api/v1/l402/refundsSida loo yaqaan "Header Returns"{"sats": 237, "status": "open", "expires_at": "..."}. - 1 token waxaa loo isticmaali karaa ka badan 60 maalmood ka hor.
- Ku saabsan Nym. Qalabka ah Qalabka dhismaha Nymbot app, ama call
POST /api/v1/l402/refunds/redeemSidaa A Qalabka dhismaha iyo{"refund_token": "REFUND-...", "balance": "standard"}(Eee"pro"Shuruudaha ugu badan waxaa laga yaabaa in ay ka mid ah wax soo saarka ah oo ka mid ah wax soo saarka ah oo ka mid ah wax soo saarka ah.
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"
QEEBE
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }