Omusingi gw’okumanya Kino
Tuba, Tuba, Tuba
Kuki nini na, top-up ku Lightning, top-up otomatikmu si wallet yakho, n'akhawulana ku kuki kuki kuki kuki, n'akhawulana keys si koodu.
Omuko guno guvvuunuddwa mu kyuma okusobola okugunguyira. Enkyusa y’Olungereza original y’enkyusa ekwata ku nsonga eno.
Buli Buli
Yawo, yawo, yawo, yawo, yawo, yawo.
GET https://nymbot.ai/api/v1/credits/balance -Okuya API Key. POST ekolide, ekolide, ekolide, ekolide
balance owo owo owo owo owo owo owo owo owo owo (null b) Buli, Buli, Buli, Buli, Buli, Buli, Buli key ekubalya ekubalya. Ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya.
Kino
{
"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"
}
}
| Buli | Kino |
|---|---|
401 | Kuki-kuki: Kuki-kuki, Kuki-kuki, Kuki-kuki, Kuki-kuki |
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);
Kino
Kino, Kino, Kino, Kino, Kino, Kino, Kino
GET https://nymbot.ai/api/v1/topup/payment-methods Buli, Buli
A top-up ni 10 to 1,000,000 sats; a Pro-top-up kufuneka ibula okoba 1 Pro-krediti, yaani ibula ku 100 sats. bulk_bonus ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala
Kino
{
"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);
Tuba Buba Buba
Oya Buli Buli Buli Buli Buli Buli Buli Buli Buli Kukiya Kukiya
POST https://nymbot.ai/api/v1/topup/create/btc-lightning -Okuya API Key.
| Kino | Kino | Kino | Kino |
|---|---|---|---|
amount | Kino | Yee | Oko, Oko currency2. Tuba Tuba Tuba |
currency | Kino | Buli | SATS (Enyele) USD O.O BTC. Dollars yawo ku bitcoin price. |
tier | Kino | Buli | pro (Enyele) O standard: ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibi. |
Standard-krediti 10 sats, Pro-krediti 100 sats, plus bonusa bulk;
credits busa busa busa busa busa
Kino
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| Buli | Kino |
|---|---|
400 | Kino (unsupported_method(Enyele) (Enyele) (Enyele) (Enyele) (Enyele)unsupported_currency) okanye tier, ibikibala ebibala, okanye ibikibala ebibala (amount_too_small( ) 100 000 EUR (amount_too_large) ya bula bula bula bula bula (amount_out_of_range). |
429 | Okinawe - Okinawe (rate_limit_exceededKino Retry-After). |
502 | Buli (Buli) (invoice_unavailableKino 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);
Kino - Top-Up
Buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli creditedKukiwa kukiwa kukiwa kukiwa kukiwa kukiwa kukiwa kukiwa kukiwa kukiwa.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - akubali akubali akubali akubali akubali akubali
status Kino pending (Enye ebibala ebibala), paid (Enyimele, kodwa ebibala ebibala; kuki kukiwa), credited (Okuya) O expired (akhawuntiwa). Ekubali ekubali ekubali ekubali ekubali ekubali ekubali ekubali ekubali
Kino
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| Buli | Kino |
|---|---|
400 | ID-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B-B |
404 | No invoice yi id ya nym (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);
Kino
Oko n’ebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebisebis
GET https://nymbot.ai/api/v1/queries/history — kufuneka ku API key, ebibengisa omoyo, okanye a Kino Nime, ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibi.
| Kino | Kino | Kino | Kino |
|---|---|---|---|
page | Tuba (Tuba) | Buli | 4.1.1.1.1.1.1.1.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2. 400 invalid_value. |
page_count | Tuba (Tuba) | Buli | Rows kwa page. 20 default, 100 max. |
start_dateend_date | Kino (Query) | Buli | ISO 8601 (ISO 8601) |
model | Kino (Query) | Buli | Kino |
type | Kino (Query) | Buli | chat, responses, messages, image, video, speech, transcription O.O embedding. |
all_keys | Buli (Buli) | Buli | Kuki: true ebibala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala ebubala false. |
key_id | Kino (Query) | Buli | Kuki-ku, Kuki-ku all_keys=true: Yalnız ya Key. |
Kino
{
"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);
Kino
Making, ukuguza, ukuguza keys, akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti. Akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti. Akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti. Akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti.
App-ka n'ee: N'ee n'ee Kino sheet et al. Lezian. You only need this section to manage keys from your own code.
NIP-98 (NOTR 27235): NIP-98 (NOTR 27235)
Authorization Header na Buli Nostr Kino:
Kino
{
"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": "..."
}
ui-URL, ekubuto ekubuto ekubuto ekubuto ekubuto ekubuto ekubuto ekubuto ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubatomethodKino: HTTP Methodpayloadon SHA-256 of the raw request body, ku hex. OkutiPOSTnePATCH, na igolide ya bauti ya bauti ya bauti ya bauti ya bauti ya bauti.created_at60 sekundi ya n'akhawunti ya server.- Kino: A
GETekhaya. Ekhaya ekhaya. Ekhaya ekhaya. Ekhaya ekhaya. Ekhaya ekhaya.noncebusa busa busa busa busa busa busa busa busa busa busa busa busa busa busa - Kino ya n’ebisebisebisebisebisebisebisebisebisebisebisebisi
Content-Type: application/json.
Kino / Kino 401 missing_nostr_auth; kuki kuki, kuki, kuki, kuki, kuki, kuki, kuki, kuki, kuki
invalid_nostr_auth, ya ntso ntso ntso ntso ntso ntso ntso ntso ntso ntso ntso
nostr_auth_replayed. Kuki API ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri ekiri 429 Kino
Retry-After.
Browsers unako n'akhawunti ezala n'akhawunti ezala n'akhawunti ya Nymbot (https://nymbot.ai,
https://nymchat.app kuki. Kuki. Kuki. Kuki. Kuki. Kuki. Kuki. Kuki. Kuki. Kuki. Kuki. Kuki.
OriginBuli Buli Buli
Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo Nimo nsec), ebibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibikibik
Ezala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala eb NOSTR_SECRET_HEX; cURL 1
Kino ekolide ekolide ekolide ekolide ekolide ekolide ekolide ekolide ekolide ekolide ekolide ekolide sha256sum (Okuyo) 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");
}
Kino
Eyo app API sheet ya busa: Key Public yakho, ekubalaba, ekubalaba ekubalaba ekubalaba ekubalaba ekubalaba ekubalaba ekubalaba ekubalaba TOP-UP iimeko, i
null ebibala ebibala ebibala.
GET https://nymbot.ai/api/v1/account Kino Kino.
Kino
{
"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());
Kino
Kuki-ku-ku-ku-ku Kino. Kiliwa keyword yawoo ku ISO 8601 yawoo yawoo yawoo:
Kino
{
"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 ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebubala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebubala ebibala ebibala ebibala
Kino
GET https://nymbot.ai/api/v1/keys Kino
| Kino | Kino | Kino | Kino |
|---|---|---|---|
include_revoked | Buli (Buli) | Buli | W. W. W. W. W. W. W. false. |
Kino
{ "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);
Kino
POST https://nymbot.ai/api/v1/keys - Tuba Buba 201.
| Kino | Kino | Kino | Kino |
|---|---|---|---|
name | Kino | Yee | 1 – 40 yaani, ebili abala abala abala abalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabalaabala |
limit_sats | Kino | Buli | Kukiya, Kukiya, Kukiya, Kukiya |
reset_period | Kino | Buli | daily, weekly O.O monthlyKino limit_sats. Busa busa busa busa busa busa busa. |
expire_at | String / Integra | Buli | 8601 ya ISO, ya millisecond ya 1970. |
Kino (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"
}
}
| Buli | Kino |
|---|---|
400 | (Enyele) Enyele (Enyele) Enyele (Enyele) Enyele (Enyele)duplicate_name); cap ki o si n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi n'ebisi (unknown_parameter); okanye 25 keys ebimera (too_many_keys). |
429 | Oko 60 keys ebimera ya nym, ebimera 120, ebimera 120, ebimera (rate_limit_exceededKino 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);
Kino 1 Key
GET https://nymbot.ai/api/v1/keys/{id} Kino
Kino {"data": {…}} busa busa busa busa 404
key_not_found e. e. e. e. e.
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);
Kino
PATCH https://nymbot.ai/api/v1/keys/{id} Kino
Mo-Do name, limit_sats, reset_period ne
expire_at, n'okwamba ebile ebile ebile ebile ebile ebile ebile ebile ebile ebile. null ebibala: akukho ebibala, akukho ebibala, akukho ebibala. Ekubala ebibala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala ekubala (400 key_revokedb) Buli
{"data": {…}} ekolide ekolide ekolide ekolide
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);
Kuki Kuki
DELETE https://nymbot.ai/api/v1/keys/{id} Kino
Kuki-ku, Kuki-ku, Kuki-ku revoked_at kuki, kuki, kuki include_revoked=true. Khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula. Khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula.
Kino
{ "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
Khawula khawula Lightning ku Nostr Wallet Connect, Nymbot khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula. Khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula. Khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula. Kino.
Nymbot akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti Top-Up Status Kino
Nymbot ibhokisi ya encrypted kwaye peeji ya n’ebisibirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo ekubirayo pay_invoice.
Kino
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect Kino
| Kino | Kino | Kino | Kino |
|---|---|---|---|
nwc_url | Kino | Yee | ekiri ekiri ekiri ekiri nostr+walletconnect://. Nymbot ibula wallet get_info Previous Previous post: Buli Buli Buli Buli Buli |
threshold_sats | Kino | Yee | Top-up xa ibala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala ebala. |
topup_sats | Kino | Yee | Okay, okay, okay, okay, okay, okay, okay! |
tier | Kino | Buli | pro (Enyele) O standard: ekuilibera ku n'akhawula na top up. |
Kino
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| Buli | Kino |
|---|---|
400 | Buli (invalid_nwc_url); wallet akubali akubali (nwc_unreachable(Enyele) Enyele (nwc_rejected); okujula abula abula (nwc_missing_permission); okanye inani emi emi emi emi emi |
501 | (Okuya waya waya waya waya waya)nwc_unavailable(B) Ekele ebili ebili ebili ebili ebili ebili ebili ebili ebili ebili ebili ebili. |
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());
Kino
GET https://nymbot.ai/api/v1/nwc-auto-topup Kino
Ekubuto ekubuto ekubuto ekubuto ekubuto ekubuto ekubuto ekubuto ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato ekubato connected: false Kino
null ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebubala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebubala ebibala ebibala ebibala
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());
Kino
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection Kino
Kukiya-kukiya. Kukiya-kukiya. Kukiya-kukiya. Kukiya-kukiya. Kukiya-kukiya. Kukiya-kukiya.
Kino
{ "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());
Payment on Demand
The fixed-price endpoints na-khawula khawula khawula khawula khawula khawula khawula khawula khawula, khawula khawula khawula khawula khawula khawula: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations ne POST /embeddings. Chat, Answers, Messages.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com.com
Nymbot waya waya waya waya waya waya waya waya waya waya waya waya waya waya waya
Kino 402 (Ebula ebula ebula ebula ebula ebula ebula ebula ebula ebula ebula ebula) LSAT) na IETF omoyo
Kino HTTP authentication scheme lightning Kino
charge Nyo. Nyo. Nyo. Nyo. Nyo.
Payment ngaphandle keyword akwa akwa API_L402_SECRET ekhaya 32 ekhaya ekhaya ekhaya ekhaya ekhaya ekhaya ekhaya ekhaya ekhaya ekhaya ekhaya ekhaya openssl rand -hex 32. Ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya API_L402_SECRET_PREVIOUS ugani: akhawunti, akhawunti, akhawunti, akhawunti, akhawunti, akhawunti, akhawunti, akhawunti.
Kino
Na na na na na na Authorization header. If it’s valid, none runs, and you get 402 Payment Required na-akhawunti ya kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa kiliwa WWW-Authenticate busa busa busa busa:
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 }
}
Kino request base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
ekolide ekolide ekolide ekolide ekolide ekolide ekolide ekolide ekolide Content-Type (midi-midi-midi-midi-midi-midi-midi-midi-midi-midi-midi-midi-midi) Kino Oko Lezian
Content-Type kuki, kuki, kuki, kuki/images/edits, /audio/transcriptions, /audio/translations(HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP) (HTTP)
Kila adiriso oyaani 30 ezitolo ku minni (isa adiriso IPv6 yaani ya /64). Ezitolo oyaani oyaani oyaani ayibala 10 ezitolo ku minni, yaani oyaani kiliwa kiliwa kiliwa na ezitolo ya Nymbot ku zonke ezitolo; ezitolo yawaani ku yawawaani ku yawawaani (bekiwa ku yawawanni ebibala JSON) ayibala ku ya. 429 Kino Retry-Afterb) Buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli Content-Type Buli application/json (Ou)
multipart/form-data ebibala) ebibala 415 Kukiya (Kukiya)
Embedings akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa akwa. TOKEN.
Kino
Kino: Kino: Kino: Kino: Kino: Kino: Kino: Kino: Kino: Kino
| Kino | Kino |
|---|---|
| Kino 402 | Authorization: L402 <macaroon>:<preimage> (LSAT Buli) |
| Kino | Authorization: Payment <base64url JSON>, ya JSON {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
Khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula khawula nymbot
Objection: Objection: Objection: Objection: Objection: Objection: Objection: Objection: Objection: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}Na na na na na na X-Nymbot-Balance-Sats header. Ukubala ekubali ekubali ekubali ekubali ekubali Payment-Receipt header (base64url JSON na challenge id, pay hash kama reference, status ne
timestamp(B) (B) (B) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C) (C)
| Buli | Kino |
|---|---|
402 payment_already_used | Kino: Kino: Kino: Kino: Kino: Kino: Kino: Kino: Kino lnget a) Bula bula bula bula |
402 payment_mismatch | ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo Content-Type kuki, kuki, kuki, kuki, kuki, kuki, kuki TOKEN (refund_token ne refund_sats Kino) |
402 payment_expired | Tuba ya 15 min. Tuba ya 15 min. Tuba ya 15 min. Tuba ya 15 min. Tuba ya 15 min. Tuba ya 20 min. Tuba ya 20 min. Tuba ya 20 min. Tuba ya 20 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. Tuba ya 30 min. TOKEN (refund_token ne refund_sats ekhaya), yawo; ekhaya ekhaya ekhaya ekhaya. |
401 invalid_preimage | Buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli. |
401 invalid_payment_credential | Makaraani ya makaraani ya makaraani ya Nymbot a bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula bula |
429 rate_limit_exceeded | Oko 30 owo owo owo owo owo owo owo owo owo owo owo owo owo owo owo. 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"));
Kino mppx a Lightning Method ekubalya Payment ekubalya, ekubalya ekubalya ekubalya ekubalya ekubalya ekubalya.
Kino
Kino POST /videos Kino 202 a, a, a, a, a, a
status_url: GET ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala
{
"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..."
}
}
Kino refund_token b) Buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buliGET /api/v1/l402/refunds Kino "status": "pending"( ); if the render fails unfibred, the payment lands on it. The status URL displays
refund_sats ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo ekolimo
Kino
If a paid request fails and the provider invoiced Nymbot for the attempt, owo owo, owo, owo, owo, owo, owo charged_satskuki, kuki, kuki, kuki, kuki, kuki TOKEN Na na na na na na na na:
{
"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"
}
}
Buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli buli nymbot Object akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti akhawunti 413
Kino: Kino: Kino: Kino: Kino: Kino: Kino: Kino: Kino: Kino
Token-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku-ku
- Kino Kino
Authorization: Bearer REFUND-…Kukiya (kukiya) Kukiya (kukiya) Kukiya (kukiya) Kukiya (kukiya)refund_token_satsKinonymbotObject). Token ebibala ebibala ebibala ebibala402refund_insufficient; ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibala ebibi. - Buli
GET /api/v1/l402/refundsekiri ekiri ekiri ekiri{"sats": 237, "status": "open", "expires_at": "..."}. - 1 token-ku na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na-na
- Na na na na na na na Kino Kino ku app Nymbot, noma call
POST /api/v1/l402/refunds/redeemKino Kino ne{"refund_token": "REFUND-...", "balance": "standard"}(Ou)"pro"). Kiliwa-kiliwa-kiliwa-kiliwa (kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa-kiliwa)
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"
Kino
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }