Yachaypa sapin Qhapaq ñan kamachikuqkunas
Qhipaq kaq, aswan churanaykuna, kallpachaykuna
Imataq kashan chayta rikuriy, Lightning nisqapi qarpay, qhipayniykiki hina pacha qarpay, imayna chaksikun chayta rikuriy, hinaspa k'umuykunata qillqasqawan upravanay.
Kay p'anqaqa makinawan tikrasqa kachkan, allin kananpaq. Inglés simipi original nisqataqmi chaypaq hina.
Qolqe qhipantata riqsispa
Imaymana qolqeyiykikuna, chaywanpas kay killa p'unchaynin imaynam usqhaykun.
GET https://nymbot.ai/api/v1/credits/balance — API key nisqata munan. POST llamantañam llankan, chayta munaq patreynakuypaq.
balance kay iskay qollqe qispisqakuqqa dollar nisqapi kachkanปัจจุบัน Bitcoin ukhup ari,
kay yachaykunapaqmi hukllachasqa ñiqinpaq (null hinapasmi chay hukkunaqa manam ñawinchayta atikunchu). Hukkunapas
krediwan satwanmi, chaymi chay quipaykunaqa kaqtin. key tukuyta qillqan
huk kachi kaspapas, chay kachi qhipayninman chayasqaqa, chaypi kachayta rikuchiyta atin.
Tarpuy
{
"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"
}
}
| Kaynin | Hayk'aq |
|---|---|
401 | Chawpiqa mana kanchu, manan riqsisqachu, chhaynataq qhiparkusqa kachkan chaymanta tukuchkusqa kachkan. |
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);
Qaripay ñaninkuna
Imaynatam qolqeta churayta atinki, hinaspa anchaqa aswanqa. Lightning hinallapam chay imayna.
GET https://nymbot.ai/api/v1/topup/payment-methods — manam k’anchayta munanchu.
Qullqita wañuyqa 10 watanmanta 1,000,000 sats-manmi; Pro qullqi wañuyqa huk Pro qullqita atipananchis, chaymi 100 sats-manta qallarin. Dollar limitukunapas Bitcoin qullqi chaskunmanta purin. bulk_bonus hatun ruraykunapi qayta qoynin hina
paqarin chayta qillqan: 500, 1,000 icha 5,000 sats nisqakunapi 10%, 15% icha 20% wamqata,
hinallataq Pro ruraykunapi 5,000, 10,000 icha 50,000 sats nisqakunapi.
Tarpuy
{
"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);
Lightning nispa kachkanpi qullqita qusqay
Lightning nisqa qelqasqata ruray, chay llaveqa chay nymmanmi qullqita qusqay. Maypapas Lightning qullqi wasimantapas chayta chapichiy, chaymantataq... qillqasqaykita qaynanaypaq chayriypas riqsinaypaq riqsimuy kuyay k'anchayta quchikunanchikpaq.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning — API key nisqata munan.
| Hampi | Qillqay | Kaypaq kashan | Willakuy |
|---|---|---|---|
amount | número | Arí | Hayk'aq, qispichisqa currencySats-paq huk yupay. |
currency | k'umpi | Mana | SATS (kay kachkan), USD dois BTC. Dollarykunqa yachaykunapi Bitcoin chaskaywanmi kutichikun. |
tier | k'umpi | Mana | pro (tukuytaq) imaymana standard¿hayk'aq yupaymanmi chay qullqiqa chayan?</thought> |
Sapa killaqa 10 satsmi, Pro killaqa 100 satsmi, chaymantapas aswan yanapaykunawan;
credits kay qelqayqa imatapas ñawpaqman apamunqa nisqata niniypun.
Tarpuy
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| Kaynin | Hayk'aq |
|---|---|
400 | Huk ñan pacha hukmi ñawpaqkunapas (unsupported_method), mana riqsisqa qullqi (unsupported_currency) chaymantapas, mana kaq qolqe, chaymantaq manaraq chakasqa qolqe (amount_too_small),mi 1,000,000 sats ñanniqta (amount_too_large) chaymantaqa Lightning wallet nisqapi qarpasqa (amount_out_of_range). |
429 | Kay ñiqimantaqa aswanqa 60 qelqasqa ruraykunam, icha chay pacha ñawpaqmanmantaqa 120, huk kaq pachapi (rate_limit_exceeded,wan Retry-After). |
502 | Kunanpacha kontrapta manaq rurachisqa kanchu (invoice_unavailable,wan 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);
Qarpayta riqsinaypaq
Tapunmi factura chapaykusqachu nispa, chaymantataq k'anchayta qun. Tapuyqa imaynatataq k'anchaykun, chaymi chapaykuspaq, chaymantataq tukuyta tapuy chay chaypi riqsisqa kachkaptinraq. credited. Kutimanta riqchayqa
chaymantapacham allinmi: creditqa huk kutillam chayamun, hayk'apas mañakunkipapas.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} — Pagaluy qillqata ruwarisqa sutimanta huk llapi hayq'in.
status kaymi pending (mana qelqasqachu kachkan), paid (llanqasqa, chaymantaqa manam
chayamunanchu; kutim qillqiy), credited (qhipaq unanchayniykipi) icha expired (manan pacha kutichisqachu). Payuq ñan inkasunaqa chay pacha ayllupa qhipaq kanmi.
Tarpuy
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| Kaynin | Hayk'aq |
|---|---|
400 | ID-qa "create" nispa rurasqa kutichikuymanta 64 kirku runasqa ID-qa manam kanchu. |
404 | Manam chay idwan sutiyki hina invoice kanchu (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);
Tapukuykunapa willakuykuna
Huk patata huk sut'iywan: imas kasqan, mayqan modelo, hayka tokens hinallataq hayka qanraykun. Manam sut'iykunata icha kutichikunatakutaqtaq qatichikuypaqtaqchu kanchik, chaymi manan kutichikunachu. Patakuna 90 punchaypaqtaq qatichikun, ñawpaqtaq kachkan. Huk k'umuy k'aspaqtaq manan sapaqchu qatichikun, chaymi ñawpaq kaqkunata rikun can.
GET https://nymbot.ai/api/v1/queries/history — API key hinallataq yanapakunapaq, chayqa k'umuykunata riqsin, ichaqa ñawpaqta qillqasqa mañakuy qanpa sutimanta,miqay imaymana rukuqkunaqta riqsisqayku.
| Hampi | Qillqay | Kaypaq kashan | Willakuy |
|---|---|---|---|
page | integru (tapukuypaq) | Mana | Default 1, chaymantaqa upaqsallapi 1,000; huk aswan patakunqa 400 invalid_value. |
page_count | integru (tapukuypaq) | Mana | Huk p'acha nisqakun. Sumaqtaqa 20, chaymantaqa 100 kashan. |
start_dateend_date | qispichiy (tapuy) | Mana | ISO 8601 pacha sut'ikuna icha huk wata pacha sut'ikuna. |
model | qispichiy (tapuy) | Mana | Kay modelochu. |
type | qispichiy (tapuy) | Mana | chat, responses, messages, image, video, speech, transcription dois embedding. |
all_keys | boolean (tapuku) | Mana | Llapiwan: true hinallatapas chay ñiqinchasqan sutinpi kachqan. Default false. |
key_id | qispichiy (tapuy) | Mana | Qillqasqa mañakuywan, ichaqa... all_keys=trueKay k'uñilla. |
Tarpuy
{
"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);
Chakuna mañakuykunata qillqay
Kuyay, tusuy, hinaspa chinkachiy kikin ruraykunata, akaunt nisqata, hinaspa automatic top-ups nisqataqa API key manan kanchu. Nym-manta huk signature nisqata munan, chaymi huk ruray chinkasqaqa kikin wankunman chayan, ichaqa manan huk rurayta ruwachinmanchu icha kikin wankunmanta qallariwchanchu.
Kay hampiqqa kayta qanpaq ruwan: imaymana runapaq kachkanmi API qillqa kaykunata rurichin. Qanqa kaypi hinallapam kaykunata qhipakunapaq yanapakuq kananki.
Qillqasqaqa Nostr sapaqkuna 27235 (NIP-98) hina, base64-encoded nisqapi apamun...
Authorization simiwan qallariypaq Nostr qhipapi:
Kay sapa ruway
{
"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": "..."
}
utukuy URLmi hampasqay, query string nisqawan, manañam sapaqtaq.methodHTTP nisqam kachkan.payloadhampiypa sunqunpa SHA-256-nin, hex nisqapi. Kayqa ... kachkan.POSTchaymantaPATCH, chaymanta qoyllantapuni qhaliptinallanmi kachkan qhaliypaqtaqmi qhawachkuyki.created_atserverpa pacha pataywan 60 sicundu nisqapi kachkanan.- Tukuy sapa pasakuyqa huk tapuyllapi wankallanmi kachkan, a
GETqaqachaq, chaymi qaqachaq k’uñikuypaqqa manan tullichisqa kanchu. Musuq k’uñikuypaqtaq qillqay. Añadiytaq anonceHuk mana yachaq llamk'aywan markay, chaynaqa iskay hampiqkuna huk ch'aska pacha qillqasqa kaspanku hina, hukkuna pasankichu. - Ñawpaq t'aqasqa mañakuy nisqanpa umaqa atipañanmi chayqa 64 KB kachun, hinallataq huk umaqa yanapanqa
Content-Type: application/json.
Mana riqsisqallan sapaqkuna kutimunqa 401 missing_nostr_auth; mana allin ruwasqa, mana allin t'ikrasqa, ancha hanaq, icha huk huk URL, atiy o mawka nisqapaqmi kutichin
invalid_nostr_auth, willayninwan kutichisqa; ñawpaqta rurasaqmi kutimunqa
nostr_auth_replayed. Kaykunman apachasqa API keyqa llik’achkan.
Kuska kachkanmi imaynataq qelqasqa kanmanmi kay ruraymanta qallariptin, chaymanta imaynatasmi kachkanmi chay pacha; chaymantapasmi chaypi... 429 wanan
Retry-After.
Browsers-kuna kay endpoint-kunaqa Nymbotpa websayruqkunamanta kutillapuni llamachin (“https://nymbot.ai,
https://nymchat.app hinaspa hukkuna subdominonkuypas). Hukkuna pasqallan hukpiqa mana CORS
headersmi kutichin, chaymi ima kutichisqankutaqa manam ñawpariyanmanchu. Scriptswan native apps-wanmi, mana kaqtaq...
Origin, mana imaymanas kanchu.
Qillqaykunapaq nym-yki ima sapaq kimsanmi (the nsec), chaymiqa lliwpis ruranchik: qanpaq kawsayniykita, qanpaq kawsayniykita, hinaspa qanpaq qullqiyleqta. Payllataqmi trust nisqayki masikipi machaypi qillqay, chaymanta environment nisqamanta ñawinchiy chayqa archivo nisqapi qillqay chayraqchu, hinaspa app nisqata munaqchisun chayqa allin kaspan.
Kay yanapaqkunam umayta ruwan. Kay pachaqmi kuyanmi. Hex nisqapi chupan kachkanmi NOSTR_SECRET_HEX; cURL nisqataqa chayta utilizan
nak command-line lulun, nsec icha hex killa nisqata apaspa, chaytaqa and sha256sum (macOS-pi, 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");
}
Qhipakunapaq willaynin
App nisqapaq API qillqasqanqa upanmanqa imatataq riqsichin: qampa allin riqsichisqa k'uñichiyki, iskay qolqeykuna, hayk'aq k'uñichiykunataq kawsachkasqata (mana qarpasqa kanchu icha mana tukuchasqa kanchu), hinallataq... allin pacha qullqi churanapaq tukuykunata, o
null tukuykunata mana qun chaypi.
GET https://nymbot.ai/api/v1/account munan ñawpaqta qillqasqa mañakuy.
Tarpuy
{
"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());
Llaqtaykunata allichay
Apppa killa p’unchayninpa qallariyninkuna. Chaykunapas hinallataq... qillqasqa munaqkay. Chaymanta, imaymana llaqtakunapas ñawpaqta kaspapas, imaymana llaqtakunapas ñawpaqta kaspapas, tukuy llaqtakunapi kachkan chay pacha, ISO 8601 nisqapi pacha kachkan, satis nisqapi ima chaskisqapas:
Sapa ruraq llaqta
{
"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 Mawk'ata riqsispaqa hinan, manam usahapaqchu. Mawk'aqqa huk kutillam kutinchan, rurasqa kaspan.
Killa k'intuypaq ñawinchay
GET https://nymbot.ai/api/v1/keys — qillqasqa.
| Hampi | Qillqay | Kaypaq kashan | Willakuy |
|---|---|---|---|
include_revoked | boolean (tapuku) | Mana | Qichasqa k'uchiykunata qhichuy.
Kayna. false. |
Tarpuy
{ "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);
Huk k'irki ruray
POST https://nymbot.ai/api/v1/keys — qillqasqa. Kutimuyku 201.
| Hampi | Qillqay | Kaypaq kashan | Willakuy |
|---|---|---|---|
name | k'umpi | Arí | 40 k'umuyuq kachun, huk ñan kachun qhali llaqtaykichikpaq (kayta manan qallarinchu). |
limit_sats | allin qallu | Mana | Sats nisqapi qali rurana kachkan, hukniyuqpas. Mana kanchaqpaqtaqtaq qatiypay. |
reset_period | k'umpi | Mana | daily, weekly dois monthly. Munaynin/Munayninpa yanapan. limit_satsMana kutim paqarimuq takaypi qichata ukhunapaqtaqa, saqiy. |
expire_at | qillqasqa icha yupay | Mana | Llave mana llamk'aqtinqa: ISO 8601 pacha, ichá 1970-manta millisekunta kaq. |
Tarpuykay (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"
}
}
| Kaynin | Hayk'aq |
|---|---|
400 | Suti mana kaqnin icha manan sumaq kaqnin; sutiqa usqhaylla kaqnin (duplicate_name); huk anqas mana huk p'unchaychu atipaqmi 1-manta; huk kanchay pacha mana anqasniyuq; huk pacha kikin pacha warkay; huk riqsichisqachu riqsisqachu ñawpaq []unknown_parameter); chayqa 25 lliwtam kachkan (too_many_keys). |
429 | Kay nym-wan rurasqa chunka soqta llavikunamanta aswan, ichaqa kay pacha-manta iskay pachak chunka iskay chunka nisqamanta aswan, huk uraypi (rate_limit_exceeded,wan 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);
Huk killa ñawinchay
GET https://nymbot.ai/api/v1/keys/{id} — qillqasqa.
Tukuykuna {"data": {…}} llapi ukhunpi, ichaqa 404
key_not_found manam qanpaqmi chay id-ta kawsichiqniyuq.
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);
Llaveta suqay
PATCH https://nymbot.ai/api/v1/keys/{id} — qillqasqa.
Kaykunamanta pikhaykuway name, limit_sats, reset_period chaymanta
expire_at, chaymanta kaspas, killa rurana hina. null huk qatunata qichuypun: manam limitun kanchu, manam kutichisqachu, manam tukuchisqachu. Kutichiy pacha llimp'iyqa, huk musuq pachata ch'usaq nisqapi qallarin. Qasichisqa k'iqiqa manam allichanmanchu (*400 key_revoked). Kutichin
{"data": {…}} kunapaq allichasqa k'uypaq rikch'aywan.
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);
Huk kiyata qichuy
DELETE https://nymbot.ai/api/v1/keys/{id} — qillqasqa.
Llapan pacha qallarinmi, tukuyta. Kaypi kashan listapi watawan revoked_at tukuy, chaymanta rikurimun kachkan chaywan nispa include_revoked=true. Tukuyasqa kachkan chayta tukuy kusichiyqa
hukmi kutichin. Allin kachkanqa 50 nisqan tukuyasqa kachkan; ñawpaq kachkankuqa huk ñaqay
tukuyasqa kachkaspanmi qarqunku.
Tarpuy
{ "data": { "id": "4f0c9a1be27d3856", "revoked": true } }
cURL
URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
curl -X DELETE "$URL" -H "Authorization: $(nostr_auth DELETE "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
print(requests.delete(url, headers={"Authorization": nostr_auth("DELETE", url)}).json())
JavaScript
const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
const res = await fetch(url, { method: "DELETE", headers: { "Authorization": nostrAuth("DELETE", url) } });
console.log(await res.json());
NWC auto-top-up
Lightning wallet nisqata Nostr Wallet Connectwan kuskanchikuy, chaymanta Nymbotmi qolqeta sut'inmantan qhawarun API qolqen tukuchisqanpi. App nisqapa API p'achañinpas chaylla ñawpaq settings-kunatapas kachkan; kaykunaqa chaypi kachqan endpoint-kunami. Paykunapach allinmi kaq... ñawpaqta qillqasqa mañakuy.
Imaynatas llamkaynin: API mañakuyniyki qillqasqa kay rurayta qhawayananpaq akllasqaykiman, chay qillqasqayki qhawayanapaq llimp'iyki nisqamanta kichayman chayraq, Nymbotmi qhawayanapaq qaytuypaq qillqata ruwan, qelqaykichikmanta mañakun chayta paganapaq, chaymantapas qillqasqata añon. Payqa pisi limp'iyuqllapachatam 5 minutupi huk kutichanmi chay nym nisqapaq hinaspa qillqasqapaq, chaymi ñawpaqtaqa mañakuyniykunaqaqa qelqaykichiktaqa manan usuchinchu. App-kunapi qaytuypaq qullanqayqa manan ruranchu. Chay chayqa, chay huk kutichiypa pacha hinaspa llimp'iynin, hinaspa ñawpaq error nisqapas, settings-pi kashan; chayqa pagakuyninmi error nisqamanta qhipataqa chayta qhawayasqa, qillqayninwan llamkaynin nisqa kachkan paguynin kachkan.
Huk k'umuy k'umuy (connection string) chayta qhasqanqa qolqeta pagachinaykipaq qolq'a q'uquykik (wallet) nisqata mañanipaqmi. Nymbot
payta k'umuy k'umuy (encrypted) kachasqa waqaychasqa kachkan, chaymantapas payqa paypaqmi payayninpaqmi uyarinkun, chaymanta
kaypaq pacha huk k'umuy (connection) ruray, qolq'a q'uquykipi huk ch'aqayuq (budget), chaynaqa payqa chhaynapuni pagapaqmi huk qolq'ata qichariykuyki. Qolq'a q'uquykiqa chayta qallariñan: pay_invoice.
Wañayta kutichiy
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect — qillqasqa.
| Hampi | Qillqay | Kaypaq kashan | Willakuy |
|---|---|---|---|
nwc_url | k'umpi | Arí | Tinkuy qillqasqa, qallarispa nostr+walletconnect://. Nymbotqa qarpayta tapun get_info Hayñachiykuspaqpas, hinataq hiphipachasqa kachkaspa hayñachin. |
threshold_sats | allin qallu | Arí | Kay qali pacha nisqapi qallariy riqsinaykipaq. Huk atausqa 1,000. |
topup_sats | allin qallu | Arí | Imaynatataq qhipataq añisun? Huk waranqa hayta huk millon sats. |
tier | k'umpi | Mana | pro (tukuytaq) imaymana standard: qhipan kayta qhawaq, chaymanta qallariy. |
Tarpuy
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| Kaynin | Hayk'aq |
|---|---|
400 | Mana tinkuy qillqasqachu (invalid_nwc_url); qullqi chakuqa paypa rurayninmantaqa kutimurqanchu (nwc_unreachable) chaymantaq qhipaykurqan chay riqsichiyta (nwc_rejected); tikrayqa qullqita chalanakunata chalanata atinanchu (nwc_missing_permission); icha limitukunapaqtaqpas manan kashan. |
501 | Kay server nisqapaq qayna-quyay qullqi yaykun mana kanchu (nwc_unavailable). Chaymiqa paykunapas tukuykuqmi. |
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());
Llaqtapi kaqkunata ñawinchamuspa
GET https://nymbot.ai/api/v1/nwc-auto-topup — qillqasqa.
Tinkuchispa hina hinallataq sapaqta kutichin, wan... connected: false hinallataqmi huk imaymana lliw lliwkunapas
null Mana wallet tinkuchkaptinqa, chay tinkunapaq qillqataqa manataq kutichin.
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());
Tukuchkanim
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection — qillqasqa.
Qhipakpi kaq t'aqasqan pacha kawsayta qichwan. Manañam qolqeta aparikunichu. Allin riqsinapaq, qolqechaykipim t'aqasqaykita kutichiyta atinkichu.
Tarpuy
{ "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());
Kunan killa qali p'iqiypaq, llave manapas kashpa
Chay fixed-price endpoints-kunaqa Lightning nisqapi huk kutichiyllapaq huk kutichiyllapuni pagariyta atisun, mana key, mana account, hukkunaq balance kaspapas: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations chaymanta POST /embeddings. Chat, Kutichikuykuna imaymana
Willaykunaqpas imaymana k’enkunaqa kachkanchan. K’enkuna apanqa
pacha qullqiykita usqhayllata chakra mana kachkaptin;
pacha qullqi chaskiyqa chaynallata mana k’en kachkaptinmi qallarimun.
Nymbotqa huk backendmanta, huk yuyaytammi iskay ñawpaqta riman: Lightning Labs'
L402 (ñawpa sutinwanpas qinkasqa,) LSAT) hinaspa IETF qillqasqa
Qullqi chalanuy HTTP authentication schemewan hina lightning ñawpaqtaqa chaymanta
charge muyu. Qali pacha ruriyta usqhayllam ruray.
Llullu manam kanchu chayta kanchu hinallataq chay wankata manaraqtaq chayqa. API_L402_SECRET huch'uy kachkan atipañanmi 32 random
bytes, hex nisqapi (64 characters) icha base64 (44). Huk ruray riqsimuy yanapanaykipaq openssl rand -hex 32.
Chayqa ñan chikäsqa manaraq chaytaqa, chay imaymana kaqtaqa qonqayta hinaspa imaynatataq chayta qillqan. Chayta kutichinapaqqa, chay ñawpa
kaqtaqa kutichimuy API_L402_SECRET_PREVIOUS huk p'unchaypaq: ruraykunapas, status URLsmi chaymanta rurasqa lliwtapas tukuy kawsanpaqtaqa kawsanmi tukukunankama.
Inqasqa
Mana imapaqpas mañakuyta apachiy Authorization qallari. chayqa allin kaspan, manañam imatapas ruwanchu, chaymantapas
qanqa riqsisqa kanki 402 Payment Required huk keymi chaynallapi paganqa, 10 sats huk standard credit nisqapi icha 100 sats huk Pro credit nisqapi tukuykuspa
hinataq huk sat nispa (atinpas huk sat, hinallataq 0.05 credit nisqapi qallariq).
tinkuyqa kimsa kaqta</h3> WWW-Authenticate huk qhipa ruraykunapaq chaskiypaq:
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 }
}
Qelqayqa request parameterqa base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
Huk mañakuy tukuytawan kachkan, tukuy...-man. Content-Type (payaspa media typonwan,
multipart nisqapiqa, nisqan boundary-ninwan) chaymanta qamta apasqayki exact body bytes-pa SHA-256-ninwan, chayqa 15
minututa qhipan. Ñiqin kashaspa, qhipanta apachiy Huk hina ñawpaqtaqmi tukuyta qayta mañakuni: chaymi kachkan
Content-Type hinallataqmi JSON bytes-kuna, chaymantaq multipart endpoints-paq
(/images/edits, /audio/transcriptions, /audio/translations)
huklaqllata hinallataq mikhuna qatirinapaq tukuyta (boundary) hina hina. Hinatapas HTTP kawsaykunapaqa huk chaskiyta (boundary) huk kutimmi ruranku
huk qillqasqata (form) rurankuypaq, chaymi huk kutillata ruriy, chaymanta chay rurimasqaykikunata (bytes) iskay kutim apamay.
Chay p'unchay wasichakuypaqqa pichqa chunka (30) tapuykunata kuyuykunawan minutu hukllapi tapuyta atin;
Address nisqapas riqsisqachu manam chayqa chunka (10) tapuykunata minutu hukllapi qichariypaqmi, hinaspa
Nymbot nisqapas wasichakuypaqkunallapi chay tapuykunata tapuyta allin munan; tapuy manaraqtaqa
tukuchaspa (uspanchikmi, JSON manam allinchu) chanin chaskiy mananmi; chaymantapas chay
kunansqaqa 429 wanan Retry-After, kikinniykuna qallarinanpaqta, ñawpaqta purin.
Imaymana yupaychaykunapas (endpoints) manam kikinniykuyuqllam kanchaykuna, chaymantapas pacha 120
manan kikinniykuyuq kaytin pacha huk address nisqapi purin. Kikinniykuna qallarinanpaqta ñawpaqta qillqasqata rikurinchay, chaymantataq
huk hampuyta... Content-Type mana kanchu application/json (mana
multipart/form-data (anqaspiykunaqa) nisqa qarqunmi 415 hinataqpas mana chaytaqa
chaskinkuchu.
Embeddings nisqakunqa qhapaq ruray hina qayllapim chāllimasqa kashan, qallariypi kashan tukuy ruranapaq qhapaq rurayta, 1.5× chāllaywan, imayrayku astawan qhapaq ruranapaqqa chay hinallataq yachakunku, qaqaykiqa kashan chay ruranapaq nisqataq rurakuq ruranapaqmi, chaymanta manaraq rurakuq nisqataqa kutichikun [] hina. Token kutichiy.
Qullqita apimuchkani
Llank'ayqa payqa imaymana Lightning walletwanmi. Walletqa qammanmi preimage ruraykun chaskichin, 64 hex characters. Chaymantaqmi kaykunamanta hukwanmi imaymana requestta apasunki:
| Qhipanpa ruraynin | Umaq ñawpaqta |
|---|---|
| L402 | Authorization: L402 <macaroon>:<preimage> (LSAT llamantaq llamanchin) |
| Qullqi chalanuy | Authorization: Payment <base64url JSON>, chaypi chay JSON kaqtin {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
Qhapaq yanapaq suyakuypaqmi ancha allinmi, chaymantaqa nymbot
Objetoqa mana qullqi qelqanakunachu kachkan: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}, hinaspa mana kanchu X-Nymbot-Balance-Sats header. A
qelqayqa qelqaywan chalan akllaywan qelqasqa kachkan Payment-Receipt header (base64url
JSON challenge idwan, payment hashwan as reference, status chaymanta
timestamp). Qali mañakuykunaqa manam nymwan tapt'ankuchu, chaymi hampuy yuyaypi mana rikurinchu.
| Kaynin | Hayk'aq |
|---|---|
402 payment_already_used | Imaymana pagakuypas huk sut'iyuqmi. Kutichiyqa kay sut'iyupaq musuq lliwmanta yarqaymi, chayrayku huk qatiqmi astawan musuq rurayta qhichariq (as lnget mananqa payllatapas kutim yanqan. |
402 payment_mismatch | Kay rurayqa huk huk ñawpaq endpoint-paqmi rurarqasqa karqan, Content-Type cuerpo, ichaqa kay mañakuypaqqa aswan pacha qarpayta manan quwanchu. Kay mañakuypaq huk musuq llikllaymi chaywan kachkan; chay qarpayqa aswan chinkaymi kasqa, chay qarpaykiqa kutimun huk... Token kutichiy (refund_token chaymanta refund_sats kurpichapi. |
402 payment_expired | Challengamanta chunka pichqa minutu kashaymanta aswanmi lluqmurqan. Chaywan wataq huk musuq challenga chaykamun. Preimage-qa qanqa pagasqa kanki nisqata rikuchisqan hinaqa, pagasqa kaysqaqa a hina kutimunqa. Token kutichiy (refund_token chaymanta refund_sats kurkupi), huk kutilla; chaymantataq rimaykunaqa usuchisqa kan. |
401 invalid_preimage | Preimageqaqa invoice-pa payment hash-ninamanqa manammi purinchu. Paymentqa mana tukuchasqachu. |
401 invalid_payment_credential | Qillqasqayuqqa allin mana kanqachu, Nymbot quwaykachisqanwan pacha t'apsichisqa kashan, ichaqa Nymbotqa manañam chay qullqi chaskiyta (payment hash) quwaykachirqanchu sutichan. Nymbotqa manan yachanqu tapuy (caveat) nisqayuq macaroon, ichaqa tapuykunaqa p'akisqam, chayrayku mana chayachikun. |
429 rate_limit_exceeded | Aswanqa 30 ñawpaq kuyanapaq ruraykuna icha kiykuna mana allin kutikuqpas kay pacha nisqamanta huk minutu ukhupi kasharqan, icha huk kutipaq kiykuna huk minutu ukhupi aswanqa 60 watasqanmi. Allichayta huray. 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"));
Millayquriqkunam ...pachaq rurashqa mppx Lightning kikinmi Llank’aywan pagapu chalayta ruran; chay endpointman kachariy, chaymantataq pagachiy.
Wiqis
Qapay kusaqa POST /videos llamk'aykunap kutichikun kaynින් 202 kallpachasqa hina, chaymantapas a
status_url: GET mananmi kanchaq p'unchaypi llamk'ayta ruranapaq mayt'a kanchaq, qillqasqa kashan
hinallataq chunka p'unchayllamllamk'aq kaspapasmi llamk'an.
{
"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..."
}
}
Qhapaqchay refund_token kay kutichiymanta: chayqa kaypi kachkan allinllapi. Mana imapas kanchu
videokuna rurakushaptin (GET /api/v1/l402/refunds llamk'aykunap kutichikun kaynින් "status": "pending");
unanqa unquy kachkaspanmi kutichiyqa manan chiqunku, chaymantapas p'anqaqa chayamun. Status URL nisqapi riqsikun
refund_sats devolusiones nisqapi llamkaypaq칸, ichaqa tokenqa manam chayamunchu, chaymi status URL nisqata qowaspaqa devoluciunta mana qowanchu. Tokenta riqsispaqa, manam pipas qatichisqachu llaqtachisqan llamkayta allichan.
Qullqi kutichiykuna
Manan qullqi pagasqa mañakuypas mana allinllachu chayta, hinallataq pagaqqa Nymbotman chay yuyaypaqqa qullqita pakasqaqtin, chay qullqiqa qhipaqtaqa qatunmi,
hinallataq chay pachaqtaqa chayta ninchikmi, chaywan: charged_sats, chay kachkanmi mikhuy nisqata ruraypaq hina. Mana qullqi chaskispaqa, chay allin mana kayqa huk... Token kutichiy qullqi rurayniykipa kallpanta:
{
"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"
}
}
Mananta usuchisqa kawsaykunami chay imaynatam kutimun muchakun: chaytaqa rimaykusqaykiqa iskay rikch'akuna mañakusqayki, hinaspa hukmi qullqi chaskispaq mana ruray kashan,
allin ruraypa kutimuyninmi nymbot llantaypaq qullqi kutichiykunata apan;
manaraqmi chaypa sutinqa riqsikanchu transcription nisqapi, chaypas chaypa sutinpaqqa chaypaqa manan chayraqmi rurakun, chaymi chaypiqa chhaykuytaq rurakun (30 minutu rimaqkunapas manan), chaymantaqa chaypaqa huk kutichiykunataq kachkan; chayqa 30 minutu rimaqkunapasqa manan, chaymantapas chayqa qanrakuypaqtaq kachkan 413
hinallataq chay chakiypaq qullqiqa kutimun. Embeddingsmi chay chayasqa qullqita kutichin. Huk mana allinchaq videoqa tukuy qullqitapas kutichin.
Qarq'uy tukuy mikhuy qullqi (refund token)qa ancha sapaq 256-bit kachkan. Nymbotqa hash-ninllatami waqaychaykun, hinaspa 30 p'unchayta riqllakun. Payqa sat balance-ta charin, chaymantapas qanqa:
- chaywan paguariypay. Qhaywarimuy
Authorization: Bearer REFUND-…yachay ruranaqcunaqkunamanta, qallariypi kaqkunamanta (OpenAI SDK-qa chayta API key nispa apin) . Chay patapiqa ancha chaninmi, chaymanta qhipaq kaqtaq chaypi chayachkan (refund_token_satspi kaqnymbotallin kachkan). Kay suyakuypaqqa aswan nanay kachkan chay munasqaykiman hina.402refund_insufficient; mana qelqasqa chay pacha kutimun satsmi hukmi tokenman. - Kayta qillqay.
GET /api/v1/l402/refundshinllaq qallariyninwan kutichin{"sats": 237, "status": "open", "expires_at": "..."}. - Huk tokenmi huk minutu ukhupi atipallan 60 watasqata usqhayta apan.
- Chayta huk nimbusmanta kutichiy. Chayta ukhuman churay Huk kuyayta chaskiy Nymbot app nisqapi, icha llamkay
call
POST /api/v1/l402/refunds/redeemhukwan ñawpaqta qillqasqa mañakuy chaymanta{"refund_token": "REFUND-...", "balance": "standard"}(mana"pro"). Tukuy k'anchaykuna pacha qelqanman riku (standard nisqapi 10 sats, Pro nisqapi 100 sats); qelqanman mana chayanan satskunaqa API rikuykunapi tokenpi kashan.
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"
Tarpuy
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }