Isisekelo solwazi Izinzuzo
I-Balance, i-top-ups ne-keys
Zibonisa ukuthi unayo, uphawu phezu Lightning, uphawu ngokuzenzakalelayo kusukela wallet yakho, ukubona ukuthi izindleko ngamunye isicelo, futhi ukulawula izibuyekezo kusuka ikhodi.
Leli khasi lihunyushwe ngomshini ukuze kube lula. IsiNgisi sangempela inguqulo esebenzayo.
Ukubuyekeza Isilinganiso
Zonke izilinganiso zakho, kanye nokuningi le-cap ye-keyili isetshenziswe.
GET https://nymbot.ai/api/v1/credits/balance — Ufuna API key. POST Ukusebenza futhi, kubathengi abalandeli.
balance is the two balances together in dollars at the current Bitcoin price, ngoba izixhobo ezidingekayo inani elilodwa (null Uma inkinobho ayikwazi ukucacisa). I-credits futhi i-sats, okuyinto yindlela yokuthintisana kwezilinganiso. key isifinyezo isifinyezo esifinyezo. A key that has reached its cap can still check the balance.
Ukuphendula
{
"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"
}
}
| Ukubuyekezwa | Kwangathi |
|---|---|
401 | Ikhoyili ifakwe, engaziwa, ifakwe noma ifakwe. |
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);
Izindlela zePayment
Ungayifaka kanjani, futhi izinzuzo. Lightning iyindlela eyodwa.
GET https://nymbot.ai/api/v1/topup/payment-methods - Akukho isikhwama esidingo.
A top-up kuyinto 10 kuya 1,000,000 sats; a Pro top-up kufanele ukuthenga okungenani enye credit Pro, ngakho kuqala ku-100 sats. I-dollar limits uye kulandela intengo ye-Bitcoin. bulk_bonus inikeza credit extra on top-ups ezinkulu, efanayo ne app: 10%, 15% noma 20% ngaphezulu on top-ups standard kusukela 500, 1,000 noma 5,000 sats, futhi on Pro top-ups kusukela 5,000, 10,000 noma 50,000 sats.
Ukuphendula
{
"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);
Ukuphakamisa phezu Lightning
Yenza i-Invoice ye-Lightning enikeza i-credit ye-nym ye-key enikezelwe. Yenza ku-Invoice ye-Lightning. Thola it Ukuze uthole credit eyengeziwe.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning — Ufuna API key.
| isikhunta | Uhlobo | Ukubalwa | Ukucaciswa |
|---|---|---|---|
amount | Inombolo | Yebo | Okuningi, ku currency. Inombolo ephelele ye-SAT. |
currency | Ukuhlobisa | Ngaphandle | SATS (Ukuhlukaniswa okuqhubekayo) USD noma BTC. I-Dollars iyahlukaniswa ngentengo se-Bitcoin yamanje. |
tier | Ukuhlobisa | Ngaphandle | pro (I-default) noma standard: Yintoni i-balance ye-credit iyatholakala. |
I-credit ye-standard yi-10 sats ne-Pro credit ye-100 sats, plus iyiphi i-bonus ye-bulk;
credits Ukubonisa ukuthi lokhu inkinobho uzothola.
Ukuphendula
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| Ukubuyekezwa | Kwangathi |
|---|---|
400 | Uhlobo lwekhompyutha (unsupported_method), i-currency engaziwa (unsupported_currency) noma tier, inani elithile, noma inani ngaphansi kwe-minimum (amount_too_small), ngaphezulu kwezigidi ezingu-1000 (amount_too_large) noma ifakwe ku-Blitz wallet (amount_out_of_range). |
429 | Ngaphezulu kwe-faktures ye-nym ye-60, noma i-120 kusuka kule idilesi, emahoreni (rate_limit_exceededNge Retry-After). |
502 | Akukho inkinobho kungenziwa ngoku (invoice_unavailableNge 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);
Ukubuyekeza Top-up
Qaphela ukuthi inkinobho iyahlawulwe futhi, uma iye, ukongeza i-credit. Ukubuyekeza ukuthi i-credits, ngakho-ke ngemuva kokukhokha, ukubuyekeza kuze kube nenkinga creditedUkubuyekeza okunye ngemva kunokwenzeka: i-credit iholide nje, nangokuthi izinsuku ezinguqulo.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - kufuneka ikhoyili kusuka ku-nym okwenza inkinobho.
status Yini pending (Uma akuyona akuyona) paid (Iphayili, kodwa akuyona akuyona; bheka okunye), credited (Ukuhlobisa ubuningi yakho) noma expired (hhayi akhululwe isikhathi). Izindlu ze-balance zihlanganisa izinga le-invoice.
Ukuphendula
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| Ukubuyekezwa | Kwangathi |
|---|---|
400 | I-id ayikho i-id ye-64-character kusuka ku-create call. |
404 | Ngaphandle kwe-ID ye-akhawunti yakho ye-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);
Ukubuyekeza History
I-one row per request: ukuthi, ukuthi imodeli, inani le-token kanye nemali. Akukho imibuzo noma imibuzo asekelwe, ngakho-ke akuyona. I-rows asekelwe iminyaka engu-90, okungenani lokuqala. I-key eyenziwe ngempumelelo inokukwazi ukucacisa imbali yayo.
GET https://nymbot.ai/api/v1/queries/history — unemibuzo ye-API, okuyinto ibonisa imibuzo yayo, noma a Isicelo sokubhalisa kusukela nym yakho, okuyinto uyazi zonke izici.
| isikhunta | Uhlobo | Ukubalwa | Ukucaciswa |
|---|---|---|---|
page | inguqulo (Query) | Ngaphandle | I-Default 1, ku-maximum ye-1000; ingxenye ephakeme 400 invalid_value. |
page_count | inguqulo (Query) | Ngaphandle | Izindwangu ngamaphepha. I-Default 20, kuya ku-100 kakhulu. |
start_dateend_date | isikhunta (Query) | Ngaphandle | ISO 8601 Izinsuku noma izinsuku. |
model | isikhunta (Query) | Ngaphandle | kuphela le model. |
type | isikhunta (Query) | Ngaphandle | chat, responses, messages, image, video, speech, transcription noma embedding. |
all_keys | Ukubuyekeza | Ngaphandle | Nge Key: true kuhlanganise zonke izibambo of the same nym. Default false. |
key_id | isikhunta (Query) | Ngaphandle | Nge isicelo esifundisiwe, noma nge all_keys=true: kuphela lokhu key. |
Ukuphendula
{
"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);
Isicelo sokubhalisa akhawunti
Ukwenza, ukuguqulwa nokuguqulwa ama-keys, isibuyekezo se-akhawunti kanye ne-automatic top-ups ayidinga i-API key. Zihlanganisa i-signature kusuka ku-nym yakho, ngakho-ke i-key ebuthakathwa ingathumela kuze kube nokuningi kodwa ayikwazi ukwenza isibuyekezo esilandelayo noma ukwandisa isibuyekezo esilandelayo.
I-app ikwenza lokhu ngenxa yenu: konke ku-sa ikhaya sheet usebenzisa le endpoints. Ufuna kuphela lokhu isigaba ukulawula i-keys kusuka ku-code yakho.
I-signature yinto ye-Nostr event ye-type 27235 (NIP-98), ifakwe ku-base64-encoded ku-Nostr.
Authorization Header nge-Word Nostr Ukusuka ku:
Ukusebenza
{
"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 ephelele ye-request, i-query string kuhlanganiswe, ngokuvamile efakwa.methodKuyinto indlela ye-HTTP.payloadi-SHA-256 ye-body ye-request raw, ku-hex. It is required onPOSTfuthiPATCH, futhi umzimba owavumela kufuneka yi-byte ye-byte owavumela.created_atkufuneka kufinyeleleke ngaphakathi kwe-60 amahora we-server.- Zonke imiphumela isebenza once, a
GETkuhlanganiswe, ukuze isikhwama esithathwe ayikwazi ukudlala. Hlola isikhwama esitsha ngalinye isicelo. Engeza isikhwama esithathwenonceI-tag yi-value ye-random ukuze amabhizinisi amabili abalandeli ngegama elilodwa angahluka. - I-body ye-request ebhaliwe ingaba ku-maximum ye-64 KB, futhi i-body inesidingo
Content-Type: application/json.
Ukukhangisa Izincwajana Izincwajana 401 missing_nostr_auth; okuhlobene, okuhlobene, okuhlobene, okuhlobene, noma i-URL, i-methode noma i-body eyahlukile
invalid_nostr_auth, nge isizathu ku-message; a reused one returns
nostr_auth_replayed. I-API key eyakhelwe ku-endpoints ezisetshenziselwa. I-signature iyahlekile ngaphambi kokufunda umzimba, futhi wonke idilesi angakwazi ukufinyelela ku-30 izikhathi imizuzu (i-address ye-IPv6 ihamba njenge /64); emva kwalokho ithatha 429 Nge
Retry-After.
Izibuyekezo zokusebenza kuphela kusuka kumasayithi we-Nymbot (https://nymbot.ai,
https://nymchat.app Iphasiwedi ze-CORS ziye zithunyelwe kwebhizinisi elinye. Iphasiwedi ze-CORS ziye zithunyelwe kwebhizinisi. I-scripts ne-native apps, okuyinto ziye zithunyelwe.
OriginNgaba akuyona.
Ukuhlasela kufanele u-nym yakho yekhwalithi yekhwalithi (the nsec), okuyinto ukulawula konke: idivayisi yakho, idivayisi yakho kanye nesilinganiso yakho. Hlola nje ku-script ku-machine ungatholela, ukufunda kusuka ku-environment ngaphandle kokubhala ku-file, futhi ukhetho isicelo lapho ungatholela.
Izinzuzo ziye zibonise i-header. Izibonelo ezidlulileyo kulesi sayithi zisebenzisa. Zibonisa isifinyezo se-secret ku-hex NOSTR_SECRET_HEX; I-cURL one isebenzisa i-
ikhaya isixhobo se-command-line, okuyinto ithatha nsec noma hex key, futhi sha256sum (Uma 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");
}
Umhlahlandlela
Yini i-API sheet ye-app ibonisa phezulu: key yakho yebhizinisi, ama-balances, inani le-keys asebenzayo (hhayi asebenzayo noma asebenzayo), futhi Okuzenzakalelayo Top-up izakhiwo, noma
null lapho i-server ayikho.
GET https://nymbot.ai/api/v1/account Ukulungele A Isicelo sokubhalisa.
Ukuphendula
{
"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());
Ukuphathwa Key
I-endpoints emzimbeni ye-app key list. Zonke zihlanganisa Isicelo sokubhalisaKonke ikhoyili ivumela lokhu ifomu, nge amahora ku-ISO 8601 futhi inani ku-sats:
Umphumela Key
{
"id": "4f0c9a1be27d3856",
"name": "laptop scripts",
"hint": "sk-nymbot-Qm7x…c2Lw",
"limit_sats": 20000,
"reset_period": "monthly",
"reset_at": "2026-10-01T00:00:00Z",
"expire_at": null,
"period_used_sats": 3412,
"total_used_sats": 18230,
"created_at": "2026-08-14T09:21:07Z",
"updated_at": "2026-09-02T17:40:55Z",
"last_used_at": "2026-09-30T08:12:00Z",
"revoked_at": null
}
hint Kuyinto efanelekayo ukujabulela isikhwama, kodwa kungekho ukusetshenziswa. Isikhwama okuvela nje, lapho kusungulwa.
Ukubuyekezwa Key
GET https://nymbot.ai/api/v1/keys Ngena ngemvume
| isikhunta | Uhlobo | Ukubalwa | Ukucaciswa |
|---|---|---|---|
include_revoked | Ukubuyekeza | Ngaphandle | Zihlanganisa i-keys eyakhelwe. I-Default false. |
Ukuphendula
{ "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);
Ukwenza Key
POST https://nymbot.ai/api/v1/keys Ukubuyekezwa 201.
| isikhunta | Uhlobo | Ukubalwa | Ukucaciswa |
|---|---|---|---|
name | Ukuhlobisa | Yebo | I-1 kuya ku-40 ama-characters, eyahlukile kunezinye izifundo zakho ezisebenzayo (ukungcweliswa kwe-case). |
limit_sats | Ngena ngemvume | Ngaphandle | I-spending cap ku-sats, okungenani 1. Hlola it ngaphandle kwe-cap. |
reset_period | Ukuhlobisa | Ngaphandle | daily, weekly noma monthlyImininingwane limit_sats. Hlola nje for a cap that never resets. |
expire_at | String noma integer | Ngaphandle | Uma isifinyezo isizukulwane ukusebenza: ISO 8601 isikhathi, noma milliseconds kusukela 1970. |
Ukuphendula (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"
}
}
| Ukubuyekezwa | Kwangathi |
|---|---|
400 | Iphasiwedi esithile noma eside kakhulu; isibonelo esebenzayo (duplicate_name); cap okuyinto inombolo enhle engaphansi kwe-1; isikhathi sokuguqulwa ngaphandle kwe-cap; isizukulwane esidlulile; indawo engaziwa (unknown_parameter); noma 25 izibambo ezisebenzayo (too_many_keys). |
429 | Ngaphezulu kwe-60 ama-key eyenziwe ngesi-nym, noma i-120 kusuka kule idilesi, emahoreni (rate_limit_exceededNge 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);
Ukubuyekeza One Key
GET https://nymbot.ai/api/v1/keys/{id} Ngena ngemvume
Waze {"data": {…}} nge-object key, noma 404
key_not_found Uma akukho key yakho has id.
cURL
URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
print(requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json()["data"])
JavaScript
const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
console.log((await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json()).data);
Ukuguqulwa kwe-key
PATCH https://nymbot.ai/api/v1/keys/{id} Ngena ngemvume
Thumela Noma name, limit_sats, reset_period futhi
expire_at, ngokufanayo nezinsizakalo efanayo ekwenzeni i-key. null Ukuhlobisa isigaba: akukho cap, akukho reset, akukho ukuhlaziywa. Ukuguqulwa kwe-reset isikhathi kuqala isigaba esitsha ku-zero. I-key eyenziwe ayikwazi ukuguqulwa (400 key_revokedUkulungiswa
{"data": {…}} nge-object key eyakhiwe.
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);
Ukubuyekeza Key
DELETE https://nymbot.ai/api/v1/keys/{id} Ngena ngemvume
Hlola ikhoyili ngokushesha, for good. It is in the list with revoked_at isixazululo, futhi kungatholakala nge include_revoked=trueUkubuyekeza isifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo.
Ukuphendula
{ "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 Ukusebenza
Ukuxhumanisa i-Lightning wallet nge-Nostr Wallet Connect futhi i-Nymbot inikeza isilinganiso ngokuvamile uma izindleko ze-API zitholela aphansi. I-API sheet ye-app inesibopho elifanayo; lezi zihlanganisi zangaphakathi. Zonke zihlanganisa Isicelo sokubhalisa.
Indlela yokusebenza: Ngemva kokufaka isicelo se-API ku-balance oyifunayo ukubuyekeza, uma isilinganiso esithathwe ngaphansi kwelanga lakho, i-Nymbot ivumela i-invoice ye-top-up amount yakho, ibiza i-wallet yakho ukufakela, futhi ivumela i-credit. I-invoice iyahluka okungenani ngamaminithi angu-5 ngamaminithi ngalinye i-nym kanye ne-balance, ukuze isilinganiso sokuphuma i-wallet. Ukuhambisa ku-apps akufanele. I-time ne-size ye-ultimate top-up, ne-ultimate error, zihlanganisa ku-settings; Uma ukuguqulwa kwangena emva kwe-error, ukubuyekeza i-invoice yayo nge I-Top-Up Status Imininingwane It
I-connector string ivumela umuntu owavuma i-wallet yakho ukhokhe. I-Nymbot ibhekwa ngokubethelwa futhi usebenzisa kuphela ukufaka ama-invoices yayo yayo yayo, kodwa ukwenza ukuxhumanisa nje ngoba lokhu, nge-budget yokuthengisa e-wallet yakho, ngakho-ke engcono kunokuthumela kuyinto inombolo eyenziwe nawe. I-wallet kufanele ukweseka pay_invoice.
Ukuxhumana I-Wallet
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect Ngena ngemvume
| isikhunta | Uhlobo | Ukubalwa | Ukucaciswa |
|---|---|---|---|
nwc_url | Ukuhlobisa | Yebo | I-connection string, ekuqaleni nostr+walletconnect://. I-Nymbot inikeza i-wallet ukuze get_info ngaphambi kokugcina, futhi ibhekwa encrypted. |
threshold_sats | Ngena ngemvume | Yebo | Top up lapho isilinganiso isaphakathi ngaphansi kuka many sats. Okungenani 1,000. |
topup_sats | Ngena ngemvume | Yebo | Ngingi ukongeza ngalinye. 1,000 ukuya ku-1,000,000 sats. |
tier | Ukuhlobisa | Ngaphandle | pro (I-default) noma standard: isilinganiso ukubona futhi top up. |
Ukuphendula
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| Ukubuyekezwa | Kwangathi |
|---|---|
400 | Imininingwane yokuxhumana (invalid_nwc_url); I-wallet ayikho impendulo ye-relay yayo (nwc_unreachable) noma ukunceda ukubuyekeza (nwc_rejected); isixhumanisi ayikwazi ukulayisha izindleko (nwc_missing_permission); noma inani ngaphandle kwezimali. |
501 | Okuzenzakalelayo Top-ups ayikho ku-server (nwc_unavailable) Sama kusebenza kumazwe amabili endpoints. |
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());
Ukungena ngemvume
GET https://nymbot.ai/api/v1/nwc-auto-topup Ngena ngemvume
Ukuguqulwa kwe-object efanayo ne-connect, nge connected: false Futhi ezinye izindawo
null lapho akukho wallet ifakwe. I-connection string ngokuvamile akuyona.
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());
Ukuhlobisa
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection Ngena ngemvume
Ukususa ikheli le-connection eyakhiwe. Akukho okuphakeme ezingaphezu. Ukuze sicela, ungakwazi futhi ukuguqulwa ukuxhuma kwebhizinisi lakho.
Ukuphendula
{ "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());
Ukudlulisela ngokuchofoza ngaphandle kwe-key
I-Fixed-price endpoints ingathengiswa ngamunye isicelo ngexesha nge-Lightning, ngaphandle kwe-key, ngaphandle kwe-akhawunti, ngaphandle kwe-balance: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations futhi POST /embeddingsI-Chat, i-Response ne-Messages iyadingeka njalo. Isicelo esebenzayo isifinyezo esithathwe ku-balance ngokuvamile; inqubo ye-payment iyahlaziywa kuphela lapho ayikho isifinyezo esithathwe.
I-Nymbot ibonisa izinguquko ezimbili ye-idea efanayo, kusuka ku-backend eyodwa: i-Lightning Labs'
Ukubuyekezwa (Watholakala futhi ngaphansi kwegama lakho elandelayo, LSAT) kanye nenkqubo ye-IETF
Ukubhalisa I-HTTP authentication scheme nge- lightning Uhlobo I
charge Intent. Sebenzisa ukuthi amakhasimende yakho uyazi.
Ukubhalisa ngaphandle kwe-key kunokwenzeka kuphela lapho API_L402_SECRET ukugcina okungenani ama-byte angu-32, njenge-hex (i-64 ama-karakter) noma i-base64 (44). openssl rand -hex 32I-value enhle noma enhle ekubuyiselwa i-function ekubuyekeza futhi i-log why. Ukubuyekeza, ubuyekeza i-value enhle ku- API_L402_SECRET_PREVIOUS ngosuku: I-credentials, i-URL ye-status kanye ne-challenges eyenziwe ngaphansi kwelinye izinsuku ezisebenza kuze kube lokugqibela.
Ukuphendula
Thumela isicelo nge-no Authorization header. Uma iyahambisana, akukho isebenza, futhi unayo 402 Payment Required nge-akhawunti ngenxa yintoni okungenani okungenani: ixabiso elifanayo i-key akuyona, ifayilishwe ku-10 sats i-credit ye-standard noma 100 sats i-Credit ye-Pro futhi ifakwe kuya ku-set ephelele (ngaphansi kwe-1 sat, futhi angaphansi kwe-0.05 credit minimum). Ukuphendula inikeza amabili angu-3 WWW-Authenticate Izinzuzo nge-akhawunti efanayo:
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 }
}
Ukubuyekezwa request isibuyekezo base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
I-challenge iyatholakala ku-endpoint, ku- Content-Type (umgangatho we-media kanye, ngenxa ye-multipart, i-limit yayo) futhi ku-SHA-256 ye-body exact ye-byte oyithunyelwe, futhi ivame i-15 imizuzu. Ngemva kokukhokha, sicela ushiye i-byte ikhaya Request again: sama
Content-Type Nge-JSON bytes efanayo, noma ama-endpoints e-multipart (/images/edits, /audio/transcriptions, /audio/translationsI-HTTP ibhayisikili amaningi ibhayisikili omusha ngalinye ama-coding ye-form, ngakho-ke u-coding nje futhi ukunikela ama-byte amabili.
Konke idilesi inokufunda izinzuzo ze-30 ngamaminithi (ama-address ye-IPv6 ibekwe njengesithombe /64). Izinzuzo ezinokuthi i-address engaziwa zihlanganisa i-10 ngamaminithi, futhi kunezinto ze-Nymbot zihlanganisa izinzuzo emhlabeni wonke ama-address; isixazululo esithathwe ngaphambi kokuphendula (isib. nge-body engaziwa yi-JSON) ayikwazanga kulabo. Ngaphezu kwalokho, isibuyekezo se-Nymbot 429 Nge Retry-AfterI-Endpoints ye-Payed Called ngaphandle kwe-key noma i-credential ifakwe ku-limit ye-120 ye-unauthenticated requests ngaminithi ngalinye. I-credential ifakwe ngaphambi kwe-body ifakwe, kanye ne-request eyenziwe ngalinye. Content-Type Yini application/json (Uma
multipart/form-data for uploads) is a refused with 415 futhi akuyona ikhasi.
I-embeddings iyahlaziywa kusuka ku-estimation ye-tokens e-input, nge-margin ye-1.5×, njengoko inani lokwenene lithunyelwe kuphela ngemuva. Uyakubhalisa ama-tokens asebenzayo, futhi ingxenye engathengiswa yebhizinisi lithunyelwe njenge-akhawunti Ukubuyekezwa.
Ukubhalisa Ukudluliselwa
Ukubhalisa inkinobho nge-Lightning wallet. I-wallet inikeza i-preimage, i-64 i-hex characters. Ngemuva kwalokho ushiye isicelo esifanayo nge-one of these:
| Ukulungiswa | Ikhaya |
|---|---|
| Ukubuyekezwa | Authorization: L402 <macaroon>:<preimage> (LSAT Ukusebenza futhi) |
| Ukubhalisa | Authorization: Payment <base64url JSON>, lapho i-JSON {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
I-Request ye-Payment isibuyekeza nje njenge-Request eyenziwe nge-key, ngaphandle kokubili ukuthi nymbot
I-object ayikho izindawo ze-balance: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}, futhi akukho X-Nymbot-Balance-Sats isikhwama. Isicelo esithathwe nge-Payment Scheme kunazo Payment-Receipt header (base64url JSON nge challenge id, ukulayishwa hash as reference, status futhi
timestampImininingwane ezifuywayo ayihlaziywa ku-nym ye-nym, ngakho-ke akuyona ku-history ye-query.
| Ukubuyekezwa | Kwangathi |
|---|---|
402 payment_already_used | Konke ukulayishwa kulungile nge-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti. lnget Yiba) ngokuphathelene ngokushesha. |
402 payment_mismatch | I-credential yasungulwa ngenxa ye-endpoint enye, Content-Type noma umzimba, noma akhawunti engaphansi kuncike lokhu isicelo manje. Umthamo omtsha ngoba lokhu isicelo kuhlanganisa; uma ukuguqulwa kwangaphakathi kakhulu, okufakiwe kuyatholakala njenge Ukubuyekezwa (refund_token futhi refund_sats Ukusuka kwelanga |
402 payment_expired | Ngaphezu kwama-15 imizuzu etholakalayo ukususwa kwe-challenge. I-challenge entsha ifakwe. Uma i-preimage ibonisa ukuthi uthumele, into etholakalayo itholakala njenge-preview. Ukubuyekezwa (refund_token futhi refund_sats umzimba), uma; isithombe esithathwe emva kwalokho. |
401 invalid_preimage | I-preimage ayikho ku-hash ye-payment ye-invoice. I-payment ayikho. |
401 invalid_payment_credential | I-credential ifakwe, ifakwe ngemva kwe-Nymbot ifakwe, noma ama-hash ye-payment ye-Nymbot eyenza inkinobho. I-macaroon ye-caveat eyenza i-Nymbot, noma ne-caveats eyenza. |
429 rate_limit_exceeded | Ngaphezulu kwe-30 ama-credentials noma ama-keys ukuthi awukwazi ukuguqulwa kwangapheli le-address, noma i-refund token eyodwa yayithunyelwa ezingaphezu kwama-60 amaminithi. 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"));
I-Customer eyenziwe ku mppx Nge-Method Lightning, ukulawula i-Payment Challenge ngokuvamile; ukubonisa kwabo ku-endpoint futhi zithole.
Ividiyo
Imininingwane POST /videos Ukuphendula 202 like a keyed one, plus a
status_url: GET it ngaphandle kokubili ukuyifaka umsebenzi. It is a signed and works for 24 hours, ngexesha lapho umsebenzi isihlalo.
{
"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..."
}
}
Hlola refund_token Ukusabela okuhlobene (Ukuhlobisa okuhlobene)GET /api/v1/l402/refunds Ukuphendula "status": "pending"); uma ukuguqulwa kwangapheli, ukuguqulwa kwangapheli. I-URL ye-status ibonisa
refund_sats for a refunded job but never the token, ngakho-ke ukunikela i-URL yokusebenza akufanele ukuguqulwa. Ukubuyekeza i-token futhi ukuguqulwa ingozi ebuthile okuyinto ayikho.
Ukubuyiselwa
Uma isixazululo se-payment isixazululo futhi umphakeli ufakeli i-Nymbot ekusebenzeni, ukulayishwa ku-akhawunti yakhelwe futhi isixazululo se-error ivame. charged_sats, ngokufanayo ne-keyword request. Uma ifakwe ngaphandle kokubhalwa, isizukulwane se-error Ukubuyekezwa Ukubuyekeza ukuthi ushiye:
{
"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"
}
}
Okuzenzakalelayo: If you asked for two pictures and one failed unchecked nymbot I-object inikeza i-refund token ye-omphumela eyenziwe; i-transcription ebonakalayo ekugqibeleni okungenani i-precized for the longest the file could be (never more than 30 minutes), ne-different to the real length iboniswe njenge-refund token; uma iboniswa ukuba engaphezu kwama-30 amaminithi, iboniswa ne-refund token. 413
Ukubuyekezwa ku-Embeddings. Ukubuyekezwa ku-Embeddings. Ukubuyekezwa kwevidiyo ku-Token ye-submission.
I-refund token iyisisombululo se-256-bit code. I-Nymbot ibhekwa kuphela yayo ye-hash, futhi ivuliwe ngemuva kwezinsuku ezingu-30. I-Sat Balance ibhekwa, futhi ungakwazi:
- Thenga nge-imeyili Thumela
Authorization: Bearer REFUND-…Okungenani kunazo zonke izindawo ezidlulileyo (i-OpenAI SDK ithatha njenge-API key yayo). I-price ifakwe kwi-token futhi okufakiwe (refund_token_satsUkusukanymbotObject). I-Token enezingeni engaphansi kwe-request answer402refund_insufficientI-Unbiled Failure yenza i-Sat back ku-token efanayo. - Thola it
GET /api/v1/l402/refundsNge-header efanayo iyahluka{"sats": 237, "status": "open", "expires_at": "..."}. - I-Token ingasetshenziswa ku-maximum ye-60 amaminithi ngenyanga.
- Hlola ku nym. Hlola ku Thola i-cadeau ku-Nymbot app, noma ukubiza
POST /api/v1/l402/refunds/redeemNge A Isicelo sokubhalisa futhi{"refund_token": "REFUND-...", "balance": "standard"}(Uma"pro"). I-credits ephelele iye ku-balance (10 i-sats ngamunye ku-standard, i-100 ku-Pro); i-sats eyenza i-credit ephelele ku-token ye-API requests.
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"
Ukuphendula
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }