Maziko a chidziwitso Opanga mapulogalamu
Malaulo, kuwonjezera ndi makiyi
Onani zomwe muli nazo, onjezani ndalama kudzera ku Lightning, onjezani ndalama nthawi zonse kuchokera ku wallet yanu, onani mtengo wa pempho lililonse, ndipo upangirane mafoni (keys) kuchokera m'makodi.
Tsambali lamasuliridwa pamakina kuti zikhale zosavuta. Chingelezi choyambirira ndi chomwe chimagwira ntchito.
Kuyang'ana ndalama zomwe zalipo
Magelezi anu onse awiri, komanso kuchuluka kwa cap ya kiyi iyi yogwiritsidwa ntchito.
GET https://nymbot.ai/api/v1/credits/balance — akusowa API key. POST Zimagwira ntchito komanso, kwa makasitomala omwe amayembekezera zimenezi.
balance kodi misonkhano ya ndalama ziwiri yonse ndi madola pa mtengo wa Bitcoin womwe uli pano, kwa
zipangizo zomwe zimayembekezera nambala imodzi (null ngati mtengo sungatheka kuwerengedwa). Zotsalira zili mu
makrediti ndi sats, zomwe ndi mmene mabanzi amasungidwira yeniyeni. key ikumfunsa kiyi wofunika. Kiyi womwe wafika pa malire ake akhoza kupitirizanso kuunika mulingo wa ndalama.
Yankho
{
"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"
}
}
| Mkhalidwe | Liti |
|---|---|
401 | Kiyi watsalaikhalapo, sudziwika, wachotsedwa kapena watha. |
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);
Njira zolipirira
Mmene mungapindulire ndipo malire ake. Lightning ndiyo njira yokha.
GET https://nymbot.ai/api/v1/topup/payment-methods — palibe kiyi ofunika.
Kuonjezera ndiko 10 mpaka 1,000,000 sats; kuonjezera kwa Pro kumafunika kugula kadi imodzi ya Pro pak至少, choncho kumayamba
pakhali 100 sats. Malimita a dolala amatsatira mtengo wa Bitcoin. bulk_bonus imalimbikitsa
ndalama zogawidwa pa top-ups zazikulu, monga momwe ziliri m'app: 10%, 15% kapena 20% zowonjezera pa standard top-ups
kuchokera pa 500, 1,000 kapena 5,000 sats, ndiponso pa Pro top-ups kuchokera pa 5,000, 10,000 kapena 50,000 sats.
Yankho
{
"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);
Kuonjezera ndalama kudzera ku Lightning
Imapanga invoice ya Lightning yomwe imawonjezera ndalama ku nym yomwe kiyi ili nayo. Lipirani kuchokera ku iliyonse ya Lightning wallet, kenako dziyangani zolemba izi kuti ndalama zigawidwe.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning — akusowa API key.
| Tsika | Lemba | Zofunika | Mafotokozedwe |
|---|---|---|---|
amount | chiwerengero | Inde | Zingati, mu currencyNambala yozara ya sats. |
currency | tsitsi | Ayi | SATS (zoyambira), USD kapena BTCMa Dollars amasintha malinga ndi mtengo wa Bitcoin womwe ulipo panthawiyi. |
tier | tsitsi | Ayi | pro (zoyambira) kapena standard: kodi ndalama zimapita pa balance iti. |
Kachipangizo kachidindo kamene kakhala kachidindo ka 10 sats ndipo kachipangizo ka Pro ndi 100 sats, pamodzi ndi bonasi lililonse la malonda ambiri;
credits imanena kuti chidindo ichi chidzaonjezera chiyani.
Yankho
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| Mkhalidwe | Liti |
|---|---|
400 | Njira ina m'njira (unsupported_method), ndalama yosadziwika (unsupported_currency) kapena tier, ndalama zomwe zikusowapo, kapena ndalama zomwe zili pansi pa zomwe zikuyenera kukhala (amount_too_small), kupitirira 1,000,000 sats (amount_too_large) kapena kanakana ndi Lightning wallet (amount_out_of_range). |
429 | Magevu owonjezereka kupitirira 60 a nambala ya invoice ya nime yemuyi, kapena 120 kuchokera ku fotokozedwe lino la malo, m'imalo imodzi (rate_limit_exceeded, ndi Retry-After). |
502 | Palibe invoice yomwe ingapangidwe pakali pano (invoice_unavailable, ndi 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);
Kuyang'ana ndalama yowonjezera
Mafunso amakodi ngati invoice yalipiridwa ndipo, atayipiridwa, amawonjezera credit. Kuunika ndiko komwe kumapereka
credit, choncho pambuyo polipira, unika mpaka mmene mkhalidwe uliri creditedKuyesa kachiwiri pambuyo pake ndiko kuli bwino: ndalama imadza kamodzi yekha, mosatengera kuti mufunsa kangati.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} — akufunika kiyi kuchokera kwa nym yemwe anapanga invoice.
status ili pending (sinalipidwaIno), paid (walipiridwa, koma sinalengezedwe; onetsetsani kachiwiri,) credited (pa mbalanso yanu) kapena expired (sinalipiridwa
pambali). Ma field a balance ndi a mlingo (tier) imene invoice ikukonza.
Yankho
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| Mkhalidwe | Liti |
|---|---|
400 | Iduyo si id ya mipitimikiti 64 yomwe inachokera ku kuitchula create. |
404 | Palibe invoice ndi id imeneyo kwa nime yanu (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);
Mbiri ya mafunso
Mizu imodzi pa pempho lililonse: chomwe chinali, mtundu wa model, kuchuluka kwa tokens ndiponso mtengo wake. Palibe zolembedwa za mapuloti kapena mayankho, choncho palibe omwe amabwereretsedwa. Mizu imasungidwa kwa masiku 90, yatsopano yatsogolo. Kiyi yomwe yafika pachimake ikhoza kuwerenga mbiri yake.
GET https://nymbot.ai/api/v1/queries/history — ikufunika API key, yomwe imaona mapempho ake odzipereka, kapena a pempho losainidwa kuchokera ku dzina lanu la chinyanja, lomwe limo onse a makiyi.
| Tsika | Lemba | Zofunika | Mafotokozedwe |
|---|---|---|---|
page | nambala yozara (kufunsa) | Ayi | Zoyambira 1, osati kupitirira 1,000; tsamba lopitirira limali 400 invalid_value. |
page_count | nambala yozara (kufunsa) | Ayi | Mizere pa tsamba. Choyamba ndi 20, pamayendedwe owombera 100. |
start_dateend_date | string (kufunza) | Ayi | Nthawi kapena masiku a ISO 8601. |
model | string (kufunza) | Ayi | Mtundu umene uliwu. |
type | string (kufunza) | Ayi | chat, responses, messages, image, video, speech, transcription kapena embedding. |
all_keys | boolean (kufunza) | Ayi | Ndi kiyi: true ikuphatikiza kiyi iliyonse ya dzina limodzi. Default false. |
key_id | string (kufunza) | Ayi | Ndi pempho losainidwa, kapena ndi all_keys=true: kiyi imeneyi yokha. |
Yankho
{
"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);
Zopempha zosaina akaunti
Kupanga, kusintha komanso kuletsa makiyi, chidule cha akaunti komanso kuonjezera ndalama pokhodza (automatic top-ups) sizifuna API key. Zimafuna chizindikiro (signature) kuchokera pa nym yanu, choncho key itatuluka ikhoza kugwiritsidwa ntchito mpaka kumathera kwa mtengoyi koma sitinghoza kupanga key ina kapena kukweza mtenguyo.
Pulogalamu imachita izi kwa inu: chilichonse m'malo mwake API tsamba imagwiritsa ntchito mapulogalamu awa. Mumafunika gawo ili kokha kuti muyendetsere makiyi kuchokera ku kodi yanu.
Saini ndi chochitika cha Nostr cha mtundu wa 27235 (NIP-98), chomwe chatumizidwa mwa ndondomeko ya base64 mu
Authorization mutu ndi mawu oti Nostr pamaso:
Chochitikacho
{
"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": "..."
}
ukodi URL yonse ya pempho, kuphatikiza query string, ndi yemwe inatumizidwa ndendende.methodndim ndiye njira ya HTTP.payloadkodi SHA-256 ya raw request body, m'ndandanda wa hex. Ikufunika paPOSTndiPATCH, ndipo thupi lomwe mumatumiza kuyenera kukhala imodzi monga yomwe munayisindikiza (hashed).created_atkuyenera kukhala m’malo mwa ndondomeko ya ma ndandanda 60 ozungulira a server.- Chochitika chilichonse chimagwira ntchito kamodzi, a
GETzalidwa, choncho mutu yomwe yadzinunulidwa sikutha kubwereza. Saini mutu watsopano pa chilichonse chopempha. Onjezani anoncetagirani ndi chiwerengero chosankhidwa mwachisawawa kuti zopempha zawiri zosainidwa m'sekondi imodzi zidzakhalabe zosiyana. - Mawu amene ali m'ndandanda wa pempho losainidwa akhoza kukhala okati 64 KB, ndipo ndandanda ikufunika
Content-Type: application/json.
Chochitika chomwe chasowa chibwerera 401 missing_nostr_auth; yomwe yakonzedwa bwino, yosainidwa bwino, yakalamba kwambiri, kapena ya URL, njira kapena thupi lina limene imabweretsa
invalid_nostr_auth, ndi chifukwa chake m'uthenga; chomwe chogwiritsidwa ntchito kachiwiri chimabwerera
nostr_auth_replayed. API key yotumizidwa ku mapulotu awa imakanidwa.
Saincha imayezedwa musanawerenge thupi la uthenga, ndipo malo aliyense akhoza kulephera kumasulira nthawi 30 pa mphindi imodzi (address ya IPv6 imayeredwa ngati /64 yonse); pambuyo pake imalandira 429 ndi
Retry-After.
Mabatilasi akhoza kutsimikizira ma endpoint awa kuchokera pa ma site a Nymbot okha فحسب (https://nymbot.ai,
https://nymchat.app (ndi ma subdomains awo). Tsamba pa webusayiti ina iliyonse silipatsidwa ma CORS
headers, choncho sikutha kuwerenga zomwe amabweretsa. Ma script ndi ma app amene amagwiritsa ntchito mafoni, omwe satumiza
Origin, sakhudzidwa.
Kusaina kuli kufunika kiyi ya chinsinsi ya nym yanu (the nsec), chomwe chimayang'anira
chilichonse: umwini wanu, mbiri yanu komanso ndalama zanu. Ikani m'ndandanda (script) pa
makina omwe mumakhulupirira okha, werengani kuchokera ku environment m'malo moti mulembe m'file, komanso
gwiritsani ntchito app ngati mungathe.
Othandizira awa amapanga mutu. Zitsanzo zakubwerako pa tsamba lino zimawagwiritsa ntchito. Amawerenga kiyi wabodzi
wa hex kuchokera ku NOSTR_SECRET_HEX; yemwe ya cURL imagwiritsa ntchito
nak chida cha command-line, chomwe chimatenga nsec kapena hex
key, ndipo sha256sum (pa 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");
}
Chidule cha akaunti
Zomwe pepala la API la pulogalamuyi limasonyeza pamwamba: kiyi yanu ya poyera, misonkho yonse awiri, kiyi zingati ali okwanira (zomwe sizachotsedwa kapena kutha), ndipo... kukonza kudzitchatsa kokha zofunika, kapena
null pamene seva tidakupereka iwo.
GET https://nymbot.ai/api/v1/account — akufuna pempho losainidwa.
Yankho
{
"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());
Kusamalira makiyi
Malo amene amayambira mndandanda wa makiyi a pulogalamu. Onse akufunika a pamasindikidwa pempho. Kila kiyi imabwereretsedwa munjira imeneyi, ndi nthawi mu ISO 8601 komanso ndalama mwa sats:
Chinthu chofunika kwambiri
{
"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 ndizokwanira kuzindikira kiyi koma osati kuugwiritsa ntchito. Kiyi mwini umabwereretsedwa
kon Solo, pamene wapangidwa.
Kuwerengera makiyi
GET https://nymbot.ai/api/v1/keys — wasayinidwa.
| Tsika | Lemba | Zofunika | Mafotokozedwe |
|---|---|---|---|
include_revoked | boolean (kufunza) | Ayi | Loletserani makiyi omwe achotsedwa. Default false. |
Yankho
{ "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);
Kupanga kiyi
POST https://nymbot.ai/api/v1/keys — sadzindikiridwa. Kubwerera 201.
| Tsika | Lemba | Zofunika | Mafotokozedwe |
|---|---|---|---|
name | tsitsi | Inde | Zolemba 1 mpaka 40, zosiyana ndi mafoni anu ena akugwira ntchito (mosasamala za m'mene mawu alembedwera). |
limit_sats | chiwerengero chachindunji | Ayi | Chiviringo cha ndalama zogwiritsira ntchito mu sats, osachepera 1. Siirani kuti pasakhale chiviringo. |
reset_period | tsitsi | Ayi | daily, weekly kapena monthlyZofunika limit_sats. Siwisani kuti mukhale ndi mtengu yemwe samayambanso kukhala watsopano. |
expire_at | mawu kapena nambala | Ayi | Pamene kiyi ikusiya kugwira ntchito: nthawi ya ISO 8601, kapena miliyisecondi kuyambira 1970. |
Mayankho (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"
}
}
| Mkhalidwe | Liti |
|---|---|
400 | Dzina lolegeza kapena laitali kwambiri; dzina lomwe lagwiritsidwa ntchito kale (duplicate_name); chinthu chopitirira chomwe si nambala yozara ya osachepera 1; nthawi yodziwitsanso popanda chapitirira; nthawi yotentha yomwe inali kale; gawo losadziwa (unknown_parameter); kapena 25 ma keys akugwira ntchito kale (too_many_keys). |
429 | Kupitirira makiyi 60 anapangidwa ndi nambala imeneyi, kapena 120 kuchokera ku fotokozedwe ili, m'tulo limodzi la ola limodzi (rate_limit_exceeded, ndi 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);
Kuwerenga kiyi imodzi
GET https://nymbot.ai/api/v1/keys/{id} — wasayinidwa.
Zobwezera {"data": {…}} pogwiritsa ntchito chinthu cha kiyi, kapena 404
key_not_found ngati palibe kiyi yanu yomwe ili ndi id imeneyi.
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);
Kusintha maki
PATCH https://nymbot.ai/api/v1/keys/{id} — wasayinidwa.
Tumizani chilichonse cha name, limit_sats, reset_period ndi
expire_at, ndi malamulo amodzi ngati pamene mukupanga kiyi. null limasula
munda: palibe malire, palibe kuchotsa, palibe kutha. Kusintha nthawi yochotsera kumayambitsa nthawi yatsopano kuchokera pa zero.
Kiyi yachotsedwa sitingathe kuisintha (400 key_revoked). Kubwerera
{"data": {…}} ndi key object yomwe yasinthidwa.
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);
Kukangana kiyi
DELETE https://nymbot.ai/api/v1/keys/{id} — wasayinidwa.
Imatseketsa kiyi nthawi yomweyo, kwamuyaya. Imakhala m'ndandanda ndi revoked_at akhazikitsidwa, ndipo angathe
kuoneka ndi include_revoked=true. Kuchotsa kiyi yomwe kale inachotsedwa kumayankha
m'njira imodzi. Ma kiyi 50 akutsopano okachotsedwa amamasungidwa okha; amene ali akale amachotsedwa pamene kiyi ina
ichotsedwa.
Yankho
{ "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 kuonjezera ndalama modzigulira
Limbikitsani Lightning wallet ndi Nostr Wallet Connect ndipo Nymbot imonjezerako ndalama ndokha pamene API spending ikupangitsa kuti ndalamazo zichepe. Chikalata cha API cha pulogalamu chili ndi zosintha zomwe zili zofanana; izi ndi mapunijiti omwe ali m'mbuyo mwake. Zonsezi zikufunika a pempho losainidwa.
Momwe zimagwirira ntchito: pambuyo poti pempho la API lajatidwa pa mlimi (balance) womwe munasankha kuti muwone, ngati limenelo latha kupitirira mlingo womwe munayenera, Nymbot imapanga invoice ya ndalama zomwe mukufuna kuwonjezera, imapempha wallet yanu kuti ipereke ndalamazo, ndipo ionjezera ndalamazo. Imatha kuwonjezera ndalama pang'ono pa pang'ono nthawi imodzi pakati pa mphindi 5 kwa nym iliyonse ndi mlimi uliwonse, choncho mangingomulundikiza pempho simungathe kuthetsa ndalama zonse mu wallet. Kagwiritsidwe ntchito ka apps sikuchititsa zimenezi. Nthawi ndi kuchuluka kwa ndalama zomwe zinawonjezeredwa posachedwapa, komanso cholakwika chachitidwa, zimapezeka m'zofunika (settings); ngati malipiro anafika pambuyo pa cholakwika, kuunika invoice yake ndi mmene ndalama zinaonekera imapatsa ulemu.
Mawu olemba maulendo (connection string) amalola aliyense amene ali nawo kupeza ndalama m’chikhalidwe chanu cha wallet. Nymbot
amatisunga mwachinsinsi ndipo amagwiritsa ntchito ndalamazo polipirira ma invoice ake okha, koma pangani
maulendo apadera chifukwa cha izi, ndi ndalama zochepa zomwe mungavomereze m'wallet yanu, kuti ndalama zomwe angagwiritse ntchito ndizochepa ngati zimene inu munasankha. Wallet iyenera kuthandiza pay_invoice.
Kulumikiza wallet
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect — wasayinidwa.
| Tsika | Lemba | Zofunika | Mafotokozedwe |
|---|---|---|---|
nwc_url | tsitsi | Inde | Ndondomeko yokulumikizira, kuyamba nostr+walletconnect://. Nymbot amaufunsa wallet kuti get_info asanamve, ndipo amachisunga mwachinsinsi. |
threshold_sats | chiwerengero chachindunji | Inde | Onjezani ndalama pamene balance ikathera kukhala pansi pa sats zingati izi. Osachepera 1,000. |
topup_sats | chiwerengero chachindunji | Inde | Zowonjezera zingati pa nthawi iliyonse. 1,000 mpaka 1,000,000 sats. |
tier | tsitsi | Ayi | pro (zoyambira) kapena standard: ndondomeko yoyang'anira ndi kuonjezera ndalama. |
Yankho
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| Mkhalidwe | Liti |
|---|---|
400 | Si connection string (invalid_nwc_url); waleti sinayankha kudzera pa relay yake (nwc_unreachable) kapena anakana kuunika (nwc_rejected); kulumikizidwa kuli sapaweza kulipira ma invoice (nwc_missing_permission); kapena ndalama zomwe zalampitira malire. |
501 | Kudzaonjezera ndalama okha sikunakhazikitsidwa pa server iyi (nwc_unavailable). Zimenezi zili chomwecho kwa malonda awiri enawo. |
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());
Kuwerenga zofunikira
GET https://nymbot.ai/api/v1/nwc-auto-topup — wasayinidwa.
Imabweretsa chinthu chomwe chinali chomwe chomwe chinali chofuna kulumikiza, ndi connected: false ndipo mafoni ena onse
null pamene palibe wallet yokonzeksera. Chitsazika cha ulendetsedwe (connection string) sichidzatulutsidwa n'komwe.
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());
Kudumpha kukhala osakhudzana
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection — wasayinidwa.
Imachotsa mawu oseŵetsera ogwiritsira ntchito ogwirizana omwe asungidwa. Kupereka ndalama zina sikuchitika. Kuti mukhale oonetoka, mutha kuchotsanso mgwirizanowo m'waleti yanu.
Yankho
{ "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());
Kulipira pa chilichonse chomwe chapemphedwa popanda kukhala ndi kiyi
Malunza a mtengo ofika akhoza kulipiridwa pemphu limodzi pa nthawi imodzi kudzera ku Lightning, popanda kiyi,
popanda akaunti komanso popanda kukhala ndalama: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations ndi POST /embeddings. Chat, Mayankho ndi
Mauthenga nthawi zonse amayenera kukhala kiyi. Pempho lomwe limabweretsa kiyi limalipiridwa kuchokera ku m'badala monga mwanzeru;
ndendende ndondomeko ya malipiro imayamba pokhapokha pamene palibe kiyi womwe watumizidwa.
Nymbot amalankhula njira ziwiri za mfundo imodzi, kuchokera ku backend imodzi: Lightning Labs'
L402 (komanso cholandiridwa pansi pa dzina lake lakale, LSAT) ndipo draft ya IETF
Malipiro Njira yotsimikizira HTTP ndi ya lightning njira ndi
charge cholinga. Gwiritsani ntchito chilichonse chomwe makasitomala anu amamvetsetsa.
Kulipira popanda kiyi kumachitika kokha pamene API_L402_SECRET imakhala ndi osachepahala ndi byte 32 za nthawi zonse, monga hex (makarakata 64) kapena base64 (44). Pangani imodzi ndi openssl rand -hex 32.
Kufupi kapena mtundu wa value womwe ungathe kuzindikika kumatiitsa ntchito yomweyo ndipo kumalembetsa chomwe chinachitika. Kuti musinthe, amikani value yakale ku API_L402_SECRET_PREVIOUS kwadzulo la tsiku limodzi: zolemba, ma URL a mmene zinthu zilili ndi
zovuta zomwe zapangidwa pansi pake zikupitiriza kugwira ntchito mpaka kutha kwake.
Chovuta
Tumizani pempho popanda Authorization header. Ngati ndi loyenera, palibe chomwe chimagwira ntchito, ndipo
mukupeza 402 Payment Required ndokhali ndi invoice ya mtengo weniweni wa pempholi limeneli: mtengo ofanana womwe key ingalipire, kusinthidwa kwa 10 sats pa standard credit kapena 100 sats pa Pro credit ndipo kuwonjezeredwa kuti akhale sat imodzi yonse (osachepera sat 1, komanso osachepera 0.05 credit minimum). Yankho limanyamula zitatu WWW-Authenticate mavuto a invoice yomweyi:
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 }
}
Malipiro request parameter ndi base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
Chovuta chili chogwirizana ndi endpoint, ku Content-Type (mtundu wake wa media ndipo, kwa
multipart, malire ake) ndipo kwa SHA-256 ya byte zenipo zomwe mwatumiza, ndipo imakhala
minimu 15. Mukalipira, tumizani zofanana pemphero lina: chomwecho
Content-Type ndipo ma JSON bytes omwe ali amodzi, kapena kwa ma multipart endpoints
(/images/edits, /audio/transcriptions, /audio/translations) thupi la multipart lomwe lili ndi malire amodzi. Makütülibu ambiri a HTTP amasankha malire atsopano nthawi iliyonse yomwe amapanga fomu, choncho encode-ini kaye ndipo tumizani ma bytes ameneŵa kapiri.
Adilesi iliyonse ikhoza kupempha zovuta 30 pa mphindi imodzi (adesi ya IPv6 imatengedwa ngati /64 yake yonse).
Zipembozo zomwe adelesi yake siidziwika zimagawana chiwonetsero chowamvetsera cha 10 pa mphindi, ndipo pali malire onse
a zovuta zimene Nymbot imapereka pa adilesi zonse; pempho limene lakandawidwa musanaperekedwe chovuta
(mwachitsanzo ndi uthenga wosakhala JSON yeniyeni) siliwerengedwa monga mmodzi wa izo. Kupitirira apo yankho ndi 429 ndi Retry-After, kutumizidwa musanawerenge mbali ya uthenga. Endpoint za malonda zomwe zimagwiritsidwa ntchito popanda kiyi kapena chidindo amaphatikizidwanso mu malire a ma pempho 120 osatsimikizika pa mphindi imodzi pa address imodzi. Chidindo chimachezedwa musanawerenge mbali ya uthenga, ndipo pempho lomwe... Content-Type si si application/json (kapena
multipart/form-data kuti ayike zinthu) zakana ndi 415 ndipo sakupezanso
fomu ya malipiro.
Embeddings zimalipiridwa malinga ndi ndondomeko ya tokens zomwe zilipo m'chinthu chomwe chaperekedwa, ndi mwayi wosiyanitsa wa 1.5×, chifukwa chiwerengero chenicheni chimadziwika pambuyo pake. Mumalipira tokens zomwe wagwiritsa ntchito yeniyeni, ndipo gawo la malipiro lomwe linasachedwa limabwerera ngati... chuma chobwezeretsa.
Ndikutumiza malipiro
Malipiro invoice ndi wallet iliyonse ya Lightning. Wallet imakupatsani preimage, yemwe ndi ma hex characters 64. Kenako tumizani pempholi lomweyo ndi imodzi mwa izi:
| Ndondomeko | Mutu |
|---|---|
| L402 | Authorization: L402 <macaroon>:<preimage> (LSAT zimagwira ntchito komanso) |
| Malipiro | Authorization: Payment <base64url JSON>, kumene JSON ili {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
Pempho yolipiridwa yankha mofanana ndendende ndi yomwe yapangidwa ndi key, koma kuti nymbot
object ilibe mbali za balance: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}, ndipo palibe X-Nymbot-Balance-Sats header. A
pemphotso yolipiridwa pogwiritsa ntchito ndondomeko ya Malipiro imalandiranso Payment-Receipt header (base64url
JSON ndi challenge id, payment hash monga reference, status ndi
timestamp). Pempho lililonse lofuna malipiro silikuphatikizidwa ndi nym iliyonse, choncho sizikuonekera mu
mbiri ya mafunso.
| Mkhalidwe | Liti |
|---|---|
402 payment_already_used | Malipiro aliyense amalipira pemphu limodzi. Mayankho ndi ntchito yatsopano pa pemphu ili, choncho makasitomala amene amasunga chidindo chawo chomaliza (monga lnget amangobweranso kulipira. |
402 payment_mismatch | Zida za uvomerezi zinaperekedwa kuti zigwiritsidwe ntchito pa malo ena, Content-Type kapena thupi, kapena amalipira pang'ono kuposa mtengo wa pemphu limene likugwiritsidwa ntchito panopa. Njira yatsopano ya pemphu limeneli ikubwera nazo; ngati malipiro anali ochepa kwambiri, zomwe mwalipira zidzabwerera kwa inu monga chuma chobwezeretsa (refund_token ndi refund_sats m'thupi). |
402 payment_expired | Mphindi zopitirira 15 zapita kuchokera pa mayeso. Mayeso atsopano amabwera naye. Ngati preimage ikusonyeza kuti walipira, zomwe walipira zimabwerera ngati chuma chobwezeretsa (refund_token ndi refund_sats m'thupi), pomwe; zolemba zimapita. |
401 invalid_preimage | Preimage siikuyenda monga hash ya malipiro a invoice. Malipiro sanagwiritsidwe ntchito mpaka kumapeto. |
401 invalid_payment_credential | Zolemba zilipo m'njira yosayenera, zinasintha pambuyo poti Nymbot zinazipereka, kapena zitchula payment hash yomwe Nymbot sinapangire invoice. Macaroon yomwe ili ndi caveat yomwe Nymbot simadziwa, kapena yomwe ili ndi caveat zosagwirizana, imakanidwa. |
429 rate_limit_exceeded | Zambiri kupitirira 30 za zizindikiro kapena makiyi omwe zinalephera kuunika zinachokera ku dzina lino m'mphindi imodzi, kapena token ya kubwezeretsa ndalama inatumizidwa kupitirira nthawi 60 m'mphindi imodzi. Dudzani 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"));
Makasitomala amene apangidwa pa mppx mwa njira ya Lightning, thandizaniwo kuthana ndi vuto la malipiro; awatsatseni ku endpoint ndipo awalole kulipira.
Mavidiyo
Wolipiridwa POST /videos mayankho 202 ngati yemwe ali ndi kiyi, komanso a
status_url: GET popanda kiyi aliyense wotsatira ntchitoyi. Idzasainidwa
ndipo idzagwira ntchito kwa maola 24, malinga ngati ntchitoyo ikusungidwa.
{
"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..."
}
}
Sungataye refund_token kuchokera ku yankho ili: zikuoneka apa kokha. Zili zilibe chilichonse pamene
vidiyo ikukonzedwa (GET /api/v1/l402/refunds mayankho "status": "pending");
ngati kusonyeza kulephera kosamakani ndalama, malipiro amagwera pa izo. URL ya mkhalidwe ikusonyeza
refund_sats pa ntchito yomwe ndayibwe koma token isanaperekedwe, choncho kutumiza URL ya mmene zinthu zilili sikutumiza mbiri ya kubwezera ndalama. Kuunika token kumatsatira ntchito yofooka yomwe palibe amene adzaunika.
Kubwezeretsa ndalama
Ngati pemphuyo lapadera lili m'mavuto ndipo wopereka wofuna chinthu walipiritsa Nymbot chifukwa cha mayeserowo, malipiro amasungidwa ndipo
ndendo ya vutolo imati choncho, ndi charged_sats, monga mmene ziliri pa pempho la kiyi. Ngati zalephera
popanda kulipiridwa, cholakwika chimakhala ndi chuma chobwezeretsa kufanana ndi ndalama zomwe walipira:
{
"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"
}
}
Zinthu zomwe sizagwiritsidwa ntchito zimabweranso m'njira imodzi: ngati munapempha zithunzi ziwiri ndipo chimodzi chinalephera popanda kuli mndandanda wa malipiro,
yankho loyenera limakhala nymbot chinthu chimadza ndi chikalata choweretsera ndalama chosowa chake; kumasulira mawu amene kutalika kwake kusanakwanitsidwe kusonyezedwa poyamba kumalipiridwa pambiri komwe chinthucho chingakhale (osapitirira mphindi 30), ndipo kusiyana pakati pa kutalika kwenikweni ndi komwe kwasankhidwa kumabwerera monga chikalata choweretsera ndalama; ngati ikuoneka kuti ndi yaitali kupitirira mphindi 30, imakanidwa ndi 413
ndipo malipiro onse amabwereranso. Embeddings amabweretsa zomwe ndondomeko inasunga. Vidiyo yofooka imabweza token yomwe inalipiridwa pofuna kuika.
Token yozisoti ndiye kodi ya 256-bit yomwe sinakhazikike. Nymbot amasunga hash yake yokha, ndipo imatha pambuyo pa masiku 30. Imatha kukhala balance ya sat, ndipo mutha:
- Liphirani nalo. Tumiza
Authorization: Bearer REFUND-…pa iliyonse ya ma endpoints amene ali pamwamba amene (OpenAI SDK imatenga ngati API key yake). Mtengo umachokera pa token ndipo chomwe chidzasala chimakhala pa iye (refund_token_satsmunymbotobject). Chizindikiro chomwe chili ndi mtengo wochepa kuposa mayankho a pempho402refund_insufficient; kulephera kosonyezedwa m'malamulo kumabweretsa sats kubwerera pa token yomweyo. - Yang'anani.
GET /api/v1/l402/refundsndi mutu ofanana kubweza{"sats": 237, "status": "open", "expires_at": "..."}. - Token imodzi ikhoza kugwiritsidwa ntchito pasadakhale nthawi 60 pa mphindi imodzi.
- Chisamutseni ku nym. Inganizani m'kati mwa Landirani mphatso mu
Nymbot app, kapena foni
POST /api/v1/l402/refunds/redeemndi a pempho losainidwa ndi{"refund_token": "REFUND-...", "balance": "standard"}(kapena"pro"). Ndalama zonse zimapita ku balance (10 sats aliyense pa standard, 100 pa Pro); sats zomwe sizifikira credit yonse zimatsala pa token kuti API requests zigwiritidwe ntchito.
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"
Yankho
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }