Tlula eka leswi nga endzeni
Vuyela eka Nymbot

Xiseketelo xa vutivi Vaakuli wa swiendli

Mundla, ku pfuxisa na tiyini

Lantla leswi u nga na swona, pfuxa hi Lightning, pfuxa hi ndlela leyi tshamaka u huma eka wallet ya wena, vona leswaku xihlongolahalo xin’wana na xin’wana xi xarifile mani, naswona lawula ti-keys u huma eka code.

Ku xupaxupa mitsheketo

Switlhala swa wena swimbirhi, na leswi xikongomelo xa xihloko lexi xi tirisiweke.

GET https://nymbot.ai/api/v1/credits/balance — e hlayiwa hi API key. POST Swi tirha na, exikarhi ka vaklenti lava tshamaka va lava sweswo.

balance swivoni swivumba swimbirhi swi ku kombisa hi madola hi xiyimo xa Bitcoin xa sweswi, eka switirhisiwa leswi tshamaka swi langutaka namba yin'we (null loko xigevhenge xi nga pfuki ku dyondziwa). Swin’wana swi ri eka credits ni sats, leswi i ndlela leyi mitsheketo yi nga hlayisiwaka hi yona. key ku hlamusela xaka lexi kombetelaka. Xaka lexi fikelele eka xinyunyu xi nga ha kota ku xupaxupa mavuya.

Mpfuxeto

{
  "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"
  }
}
XiyimoLoko hi nga ri<|thought|>
401Khunci i ra vukati, a yi tiviwi, ya herisiwa kumbe ya fika endzhaku.

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);

Swindlevo nyana swi kombisiwa

Xana u nga pfuxa njhani, na mindzila ya ku pfuxa. Lightning i ndlela n'we فحسب.

GET https://nymbot.ai/api/v1/topup/payment-methods — a ku lava xivi.

Ku veka mali i 10 ku ya eka 1,000,000 sats; ku veka mali ka Pro swi fanele ku xava credit yin’we ya Pro exikarhi ka yo tala, ndʒe swi sungula eka 100 sats. Milawu ya dolaru yi landzela xihlawulelo xa Bitcoin. bulk_bonus swi kombela nchumu lowu ekulu hi ku pfuxa hi ku engetela ka swikongomisi leswi fihlelekeke, hi ku fana na le ka app: 10%, 15% kumbe 20% ekulu eka swikongomisi swa xiyero swa 500, 1,000 kumbe 5,000 sats, naswona eka swikongomisi swa Pro swa 5,000, 10,000 kumbe 50,000 sats.

Mpfuxeto

{
  "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);

Ku tswakanya eka Lightning

Endla invoice ya Lightning leyi engetaka credit eka nym leyi xikongomelo xa yona yi nga ni xinyunywana. Yi riyirile eka wallet yo anyi ya Lightning, swi landza, Hlola ku ta engetelwa xikongomelo.

POST https://nymbot.ai/api/v1/topup/create/btc-lightning — e hlayiwa hi API key.

NdlelaBhalaLavikekakaXichavo
amountnhlayoInaXana i mali ya ka rihi, eka currency. Nhlokomhanyelo wa xiyero kha sats.
currencyvutshila bya mbulavuloA hi iSATS (swinyana), USD kumbe BTCDolares ti hundzululeri hi xiyenge xa Bitcoin xa swindikati.
tiervutshila bya mbulavuloA hi ipro (xikombiso xa xivumbhulu) kumbe standardKureti yi ya eka xibala xihi?

Kuhlunisiwa hi 10 sats hi standard credit naswona Pro credit i 100 sats, ku kombisa ni yena nchumu wanyingi wa bonus; credits swi vula leswaku xitibihi lexi xi ta engetela yini.

Mpfuxeto

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "payment_request": "lnbc100u1p5...",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": "2026-09-30T09:27:00Z",
  "status": "pending"
}
XiyimoLoko hi nga ri<|thought|>
400Ndzunduri yo nge n'alahu eka ndlela (unsupported_method), xihundzuluxi xa mali (unsupported_currency) kumbe xiyenge, xihundla lexi nga riki, kumbe xihundla lexi tsandzekaka ku ri tlula xinene (amount_too_small), eka 1,000,000 sats ehenhla (amount_too_large) kumbe ku tshimbilelwa hi Lightning wallet (amount_out_of_range).
429Ku tlula mivandla ya 60 hi nym leyi, kumbe 120 ku huma eka xihlanganiso lexi, hi xihora xin'we (rate_limit_exceeded, na Retry-After).
502Kuinvoice_unavailable, na 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);

Ku xiya ku engetelwa

U vutisa leswaku invoyisi yi ri karhi yi ripfuriwe na, loko yi ri pfuriwe, u engetela kirediti. Ku hlola i leswi nga engetelaka kirediti, hi leswi loko wu pfuriwe, hlola ku fika xiyimo xi riki na credited. Ku verisa hi ku tlula hi yena i ku tsundzuka: nchumu lowu wu ya eka wena hi ku tlhela, nakambe loko u kombela hi ku tlula hi ku tala.

GET https://nymbot.ai/api/v1/topup/status/{invoice_id} — u lava xikongomelo eka nym leyi nga endle invoice.

status i pending (a nga ri pfumisiwanga yena woko), paid (ri xaxile, kambe a ku dzundzukanga; lulamisa hi ku hlokoleta hi ku tlhela), credited (e ka mitsheketo ya wena) kumbe expired (a nga ri pfuriwanga hi nkarhi). Swikamu swa mbalavala swi ri eka xigwapa lexi invoice yi topxaka xona.

Mpfuxeto

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "status": "credited",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": null,
  "balance_credits": 523.33,
  "balance_sats": 52333
}
XiyimoLoko hi nga ri<|thought|>
400Id ayi i id ya madyaka ya 64 e ku endla ku kumiwa ka ku tshamela.
404Ku nga ri na xibala-nxavo hi nhlamuselo leyi eka vito ra wena (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);

Xikombiso xa rikarata ra ku kombisa

Xitsendziso xin'we hi xirito: xona a xi yini, lexi hi model lexi mani, matikere (tokens) yaaki, na xikongomelo xa xona. Swivutiso kumbe maandla a ku hakwiwi, hi ku ri na swo ri tivisiwa. Xirito xin'we xin'we xin'we xi hakwa hi malembe ya 90, leswi vulahlekeke swo tala swo veka hi le hetelelo. Xikongomelo lexi fikeleke ematšen'weni xa xona xi nga ha kota ku hlaya xikombiso xa xona.

GET https://nymbot.ai/api/v1/queries/history — swi lava API key, leyi vonaka swikwembu swa yona, kumbe a xikwembu le xi nghenileke hi xihandla e kuva n'weti wa wena, lowu vonaka ya xikungoni xin'wana na xin'wana.

NdlelaBhalaLavikekakaXichavo
pagexihundzuluxi (query)A hi iXikombiso 1, ku fika 1,000; xiphemu xin'wana lexi pfahla i 400 invalid_value.
page_countxihundzuluxi (query)A hi iSwikakha hi page. Hi xiya 20, hi ntshikile 100.
start_date
end_date
xitsonga (query)A hi iSwinkatelo swa ISO 8601 swa nkarhi kumbe masiku.
modelxitsonga (query)A hi iXihlanganiso lexi xanxiwileke lexi.
typexitsonga (query)A hi ichat, responses, messages, image, video, speech, transcription kumbe embedding.
all_keysboolean (query)A hi iHi xitsamblamavo: true swi kombela xinyakana xin'we xa nchumu lowu fanaka. Default false.
key_idxitsonga (query)A hi iHi nkhonono leyi tsariwileke, kumbe hi all_keys=true: khondi leyi xana.

Mpfuxeto

{
  "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);

Ku tsindza mavuku ya ku kombela akaunti

Ku endla, ku cinca ni ku tihlula tikhishi, xiyenge xa akaunti ni ku tivula hi mpfumo wa mali hi xitshuri a swi nga kambiseli hi API key. Swi kambela makuva (signature) eka nym ya wena, hi ku ri leswaku key leyi tihlaka yi nga kona ku xedza mali ku fika eka xikongomelo xa yona, kambe a yi kona ku endla key yin'wana kumbe ku tlhela ku engetela xikongomelo xa yona.

Application yi endla leswi ku i wena: xin’wana-xin’wana eka xona API sheet yi tirhisa tindhawula leti. U lava ntsena xiyenge lexi leswaku u lava ku lawula tikhapu eka xikombiso xa wena.

Xirhandzu i Nostr event ya kind 27235 (NIP-98), leyi enetiweke hi base64-encoded eka Authorization xikongomelo hi rito Nostr eximbileni:

Xikambelo

{
  "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": "..."
}
  • u i URL ya ku kombela hinkwayo, ku katsa na query string, hi ku fana na leyi nghenileyo.
  • method i nkhama ya HTTP.
  • payload i SHA-256 ya body ya request leyi nga hundhutluki, hi xihlamarisi xa hex. Yi lavakiwa eka POST na PATCH, naswona xitirho lexi u tsindzelaka xi fanele ku va xiyimo-bya-byte lexi u nga xi hashile.
  • created_at swi fanele ku va eka nkambelo wa nkotaolo wa nkusu wa 60 seconds ku fana na xiyimbiwa xa server.
  • Xinkulumo xin'wana xin'wana xi tirha ka nkarhi xin'we, a GET ku engeteriwile, leswaku header leyi kumakawe yi nga ha vuyisela. Tsindza lexin'wana lexin'wana hi xiyelo xin'wana na xin'wana. Engetela... nonce tag hi xihlamukiso lexi nga riki na nkarhi leswaku mavuniki lawambirhi lawa ma nga tsaliwaka hi nkarhi lomunwe ma tshama ma hlayisana.
  • Xitlhokovetselo xa xigumberselo lexi tsariwileke xi nga ri va na 64 KB laha laha, naswona xitlhokovetselo xi lava Content-Type: application/json.

Xikongomelo lexi nga riki xi khutlumeta 401 missing_nostr_auth; leyi nga riki hinkwaleni, leyi nga tsariwanga kahle, leyi nga na makuva yo tanihi, kumbe leyi nga riki ya URL, ndlela kumbe xitirho lexi fanaka lexi vangaka ku pfumala invalid_nostr_auth, hi xivilo eka xiyimbi; lexi tirhisiweke hi ku tlula ku humelela nostr_auth_replayed. API key leyi enziwe eka ti-endpoint ta yi n'wi engeteli. Xitshatshatsha xi hi lulamisiwa pele ku karhi ku hlariwa ka mavele, naswona xiyero xin'wana xin'wana xi nga ha xi pfumala 30 ka yin'we minutu (address ya IPv6 yi hlamusela xiyero xa yona xa /64); endzhaku ka leswi, yi yi kuma 429 na Retry-After.

Ti-browser ti nga kota ku vula ti endpoints ti only hi ku huma eka ti site ta Nymbot ta xitsonga (https://nymbot.ai, https://nymchat.app (na swikemi swa vona). Xiphemu eka xiyenge xin'wana na xin'wana xi nga ri kona xi nga kumisi hi swivandla swa CORS, hi leswaku xi nga kota ku hlaya leswi va nga swi engetela. Swivandlaka na tindhawuba ta xiyimo, leti nga nga engetisiki xin'wana na xin'wana Origin, a va pfumali ku kumeka.

Xikongomelo xa wena

Ku hlamulaka swi lava xikombiso xa xihlamuleri xa nime ya wena (the nsec), leyi lawulaka swilo hinkwaswo: vumunhu byaku, rikirhelelo ra wena na xibulavuri xa wena. Fa fela eka xitirisi xa khompyuta lexi u tshembaka, u yi hlaya eka environment exikarhi ka ku yi tsala eka faya, naswona u xavela xihlamulamuri loko u nga kota.

Vakha-va-ndzhaku va aka ntsheketo. Swikombiso swa endzhaku eka xiphemu lexi swi tiyisela hi vona. Swi hlaya xikombiso xa xihundla xa hex exi... NOSTR_SECRET_HEX; ya cURL yi tirhisa ya nak swivi ya command-line, leyi amukaka nsec kumbe hex key, naswona sha256sum (e ka 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");
}

Xinghenhloko xa akaunti

Xana xihlamuselo xa API xa app xi kombisa yini ehenhla: key ya wena ya public, xikombiso xa mali ya swivumbuloni byimbirhi, leswaku ku ni swihembu (keys) swi riki mani (leswi nga riki swi herisiwe kumbe swa ku fela), na... ku tswakanya hi xinkulungwane swiyinganyiso, kumbe null loko server a nga va nyiki.

GET https://nymbot.ai/api/v1/account — lava xikwembu le xi nghenileke hi xihandla.

Mpfuxeto

{
  "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());

Ku lawula tiakhivi

Ti-endpoints leti ngaంhimbeleke eka xikongomelo xa xihlamuselo xa xikomba xa app. Hinkwaswo swi lava a xitsamalo xikwembu. Swikunwana hinkwaswo swi humiselwa eka xiyimo lexi, hi nkarhi wa ISO 8601 na swilo swi nga le ka sats:

Xiphepha xa ntiyiso

{
  "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 swi pfuna ku tlangela xaka kambe a swi pfuni ku xi tirhisa. Xaka xinene xi humiselwa ka nkarhi mutito, loko xi endliwaka.

Ku kombisa tikhokelo

GET https://nymbot.ai/api/v1/keys — swindziwe.

NdlelaBhalaLavikekakaXichavo
include_revokedboolean (query)A hi iKumanyisi ti-key leti herisiweke. Default false.

Mpfuxeto

{ "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);

Ku endla xitofula

POST https://nymbot.ai/api/v1/keys — tsariwe. Ku tsutsumisa 201.

NdlelaBhalaLavikekakaXichavo
namevutshila bya mbulavuloInaSwikari hi mbulavulo wa 1 ku ya ka 40, swi fambana na tikhatana ta wena leti tirhisiwaka (u nga veki xiyimo ka xindzalo).
limit_satsxinyongovaloA hi iXikongomelo xa ku tshwaya hi sats, h mindestens 1. Xi tshama xi ri karhi nkarhi lowu nga ri na xikongomelo.
reset_periodvutshila bya mbulavuloA hi idaily, weekly kumbe monthly. Swi lava limit_sats. Xi xiyelele hi xikambelo lexi nga riki na ku tsandzeka.
expire_atstring kumbe integerA hi iLoko nkomba ya henhla yi nga seseki: nkarhi wa ISO 8601, kumbe miliseconde ku sukela hi 1970.

Ndzi ku pfuxeta (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"
  }
}
XiyimoLoko hi nga ri<|thought|>
400Vito le yi nga riki kona kumbe le yi lengeke ngopfu; vito le yi tirhisiwaka khale (duplicate_name); limita leyi nga riki nhlayo wa nkomba wa hansi ka 1; nkarhi wo tsandzuxa lowu nga riki na limita; nkarhi wo fela lowu nga hundzekile; xihundla lexi nga tiviwikiwiki (unknown_parameter); kumbe 25 ti-key leti tirhaka khale (too_many_keys).
429Swilo hi ku tlula 60 swikoldi leswi endliwe hi nkanu lowu, kumbe 120 eka xihlanganiso lexi, eka va hi xienga xin'we (rate_limit_exceeded, na 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);

Ku hlaya nchumu un'we wa nkoka

GET https://nymbot.ai/api/v1/keys/{id} — swindziwe.

Ku vuyela {"data": {…}} hi xiyimo xa ntshunxwarelo, kumbe 404 key_not_found Loko ku nga ri na khavulo xa wena lexi nga na id leyo.

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);

Ku cinca xikongomelo

PATCH https://nymbot.ai/api/v1/keys/{id} — swindziwe.

Tsindzela xin'wana na xin'wana ka name, limit_sats, reset_period na expire_at, hi milawu leyi fanaka na leyi a nga tirhiswaka ka leyi endzhaku ka ku endla xitshungulo. null swaka xitlhokovetselo: a ku na nkarhi lowu nga fiki, a ku na ku tsundzuka, a ku na nkarhi lowu wu faneleke. Ku cinca nkarhi wa ku tsundzuka swi sungula nkarhi wova wa zero. Xikombiso lexi nga hlayisiwiki xi nga cinci (400 key_revoked). Dzurnisa {"data": {…}} hi ku pfuxisiwa ka xitirho xa xikombiso xa xihlovo.

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);

Ku hlayisa xikeyisi

DELETE https://nymbot.ai/api/v1/keys/{id} — swindziwe.

Yi vangela ku vala xitsandzu hi nkarhi lowu, hi ku ya siku. Yi tshama eka xiluva hi na revoked_at kumisa, naswona swi nga vhonakala na include_revoked=trueKu herisa xitshungulo xa xito leri sunguluxiweke eka xito ni ku hlamula hi ndlela yin’we. Swito swa 50 swa le ka xito leswi sunguluxiweke swa vula swa nkarhi wa le ka swi hlayisiwa; swito leswi tswa swi deleriwa loko xito xin’wana xi sunguliwa.

Mpfuxeto

{ "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 ku tswakanya hi timina hi swin'we

Hakanya Lightning wallet hi Nostr Wallet Connect naswona Nymbot yi tlangela ntsako hi xinxenhi hi ku tlangela mbulavulo loko API yi ri karhi yi dya xihandla xa xona. Xiphepha xa API xa app i swiyimo leswi fanaka; leswi i mindhavuko leyi nga ta ntsena. Hinkwaswo swi lava a xikwembu le xi nghenileke hi xihandla.

Ku sekerja hayi: hi mhanguwo wa nkarhi lowu u pfumanyetaka ku xavisiwa hi API request leyi u katshekeke ku xavisiwa hi mitsheketo leyi u karhi u yi tshiketa, loko mitsheketo leyi yi hetlele tlhelo ra wena, Nymbot yi endla mitsheketo ya ximaleketelo ya mali leyi u lavaka ku yi engetela, yi lava wallet ya wena ku yi ri paya, kutani ya engetela mali leyi. Yi engetela mali hi ku pikisela ku fika ka nkarhi wu ri nkarhi wu ri 5 miniti hi nkarhi ta ntiyiso eka nym na mitsheketo, hi ku ri nkarhi wu nga ri na ku hlayisela mali eka wallet. Ku xavisiwa eka apps a swi vangi nchumu lowu. Nkarhi na nkulu wa ximaleketelo xa mhanguwo wa mhanguwo, na nchumu lowu nga endleka emuva ka xiphiqo, ku ri eka settings; loko ximaleketelo xi fambile hi ku landza xiphiqo, ku hlola ximaleketelo xa xona hi swiyimo swa ku pfuxisa swi tlangela swona.

Loko u nga kahle u tshungula wallet

Xikongetelo xa xihlanganiso xi enza leswaku un’wana na un’wana loyi a nga na xona a kota ku kombela wallet ya wena ku xirhima. Nymbot i xiga ku ri hi xikongetelo lexi xi rhandzisiwe hi ndlela leyi fihlakekeke naswona yi xi tirhisa ntsena ku xirhima mafambiselo ya xona ya ku pfuxa mali, kambe endla xihlanganiso lexi xitsonga ntsena, hi xik budget xa ku xirhima eka wallet ya wena, leswaku xin’wana xa xin’wana xa lexi xi nga xi xirhima i ntsundzuka lowu u wu katsaka. Wallet yi fanele yi tshama yi tshimbilela pay_invoice.

Ku kumanyana na wallet

POST https://nymbot.ai/api/v1/nwc-auto-topup/connect — swindziwe.

NdlelaBhalaLavikekakaXichavo
nwc_urlvutshila bya mbulavuloInaXingheni ya xivumandzanisi, yi sungula nostr+walletconnect://. Nymbot u kombela wallet leswaku u nyika get_info tswenisela ku yi veka, naswona ku yi hlayisa hi ndlela leyi fihliweke hi yona.
threshold_satsxinyongovaloInaFaka mali loko xikambelo xi tshama xi ri nxi tlhelo wa sats loko xi ri yaంka ya le pasi ka leyi. Kan’we 1,000.
topup_satsxinyongovaloInaXana ku fanele ku engetwa mali ya engano mali ya engano ka nkarhi wosingwe? 1,000 ku ya ka 1,000,000 sats.
tiervutshila bya mbulavuloA hi ipro (xikombiso xa xivumbhulu) kumbe standard: mali leyi katsaka yo lava na ku engetela.

Mpfuxeto

{
  "data": {
    "connected": true,
    "threshold_sats": 5000,
    "topup_sats": 20000,
    "tier": "pro",
    "last_topup_at": null,
    "last_topup_sats": null,
    "last_error": null
  }
}
XiyimoLoko hi nga ri<|thought|>
400A hi xinghenisi xa xikombiso (invalid_nwc_url); wallet yi nga hlamulanga eka relay ya yona (nwc_unreachable) kumbe va tshikola ku hlola (nwc_rejected); khonexheni a ri kona ku antshelatela nakuva (nwc_missing_permission); kumbe xikauko lexi nga riki eka mindzhavuko.
501Ku pfuxisiwa hi swikarhi swi nga ri kumeki eka server leyi (nwc_unavailable). Swi fana na swiendlu swimbirhi swa le hetelelo.

cURL

URL=https://nymbot.ai/api/v1/nwc-auto-topup/connect
BODY='{"nwc_url":"nostr+walletconnect://...","threshold_sats":5000,"topup_sats":20000,"tier":"pro"}'
curl "$URL" \
  -H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
  -H "Content-Type: application/json" \
  -d "$BODY"

Python

import json, os
import requests

url = "https://nymbot.ai/api/v1/nwc-auto-topup/connect"
body = json.dumps({
    "nwc_url": os.environ["NWC_URL"],
    "threshold_sats": 5000,
    "topup_sats": 20000,
    "tier": "pro",
}).encode()
res = requests.post(
    url,
    data=body,
    headers={"Authorization": nostr_auth("POST", url, body), "Content-Type": "application/json"},
)
print(res.json())

JavaScript

const url = "https://nymbot.ai/api/v1/nwc-auto-topup/connect";
const body = JSON.stringify({
  nwc_url: process.env.NWC_URL,
  threshold_sats: 5000,
  topup_sats: 20000,
  tier: "pro",
});
const res = await fetch(url, {
  method: "POST",
  headers: { "Authorization": nostrAuth("POST", url, body), "Content-Type": "application/json" },
  body,
});
console.log(await res.json());

Ku hlaya swi设置 swa xichavo

GET https://nymbot.ai/api/v1/nwc-auto-topup — swindziwe.

Yi khutisa xihlamuleri xin’we na xona lexi hi ku khambisela, na connected: false na swin'wana swihlala swa makota null loko ku nga ri na wallet leyi tumbulukeke. Ndlela ya ku tumbuluka hi yona yi nga vuyedzwi ri na nkarhi.

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());

Ku khutisa

DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection — swindziwe.

U tlhenya xikongomelo xa ku khoma (connection string) le xilelekeke. Ku nga ha ku pfumala swikongomelo swo vekisa mali (top-ups). Leswaku u tiyisela, u nga ha ha xaxela (revoke) ku khoma leva ku nga eka wallet ya wena.

Mpfuxeto

{ "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());

Ku riwa hi xikombiso xin'wana na xin'wana ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena ntsena nts

Swiendlu swa mitsheketo swa ximalekete swi nga rihweriwa hi xicelo xin'we hi xitlhokovetselo hi Lightning, ku nga ri na khave, akaunti kumbe xihundla: POST /images/generations, POST /images/edits, POST /videos, POST /audio/speech, POST /audio/transcriptions, POST /audio/translations na POST /embeddings. Ku xavulana, timhava na timesasya swi hloka khave nkarhi na nkarhi. Xiphiqo lexi nwetaka khave xi hlamuselwa mali eka ntsandzu hi ndlela ya xivandla; mfambelo wa mali wu sungula nkarhi lowu nga riki na khave leyi humeriwaka.

Nymbot u vulavula titoho ta nkarhi wu ri karhi u ri na madyondyondlo ya nkarhi wu ri karhi u huma eka backend yin’we: Lightning Labs' L402 (kambe na hi vito ra xiyenge xa yena le ka xikokoteli, LSAT) na IETF draft Mivalo ya mali Xinghenisiwa xa ku tiyisela ka HTTP na ka lightning ndlela na charge nhlangano. Tirisa xin’wana na xin’wana lexi muxavisi wa wena a xi tivaka.

Ku tirhisa xiseva xa wena loyi u xi tsakelaka

Ku riha bila xikongomelo swi ri hi nkarhi lowu riki laha u faneleke kona فحسب API_L402_SECRET ri khensatana swikulu swa 32 random bytes, hi xuxeni (64 characters) kumbe base64 (44). Endla xin'wana hi openssl rand -hex 32Xikombiso lexi koma kumbe lexi nga tiviwiki hi ku kusuva xi tswika feature yi tswile naswona xi tsala leswaku hi yini. Ku ta cinca xona, yisela xikombiso lexi khale eka API_L402_SECRET_PREVIOUS hi ku n’ondlovo ya siku: xinolo, ma-URL ya xiyimo na swikwembu leswi endliweke hi tanu swi tshama swi tirha ku fika loko swi fika nkarhi wa ku fela.

Xikuvhense

Humisa xikwembu hi ku nga riki nothing Authorization header. Loko swi pfumama, a ku ri na xin’wana lexi tirhaka, naswona u kuma 402 Payment Required hi xiakumani lexi kombaka mali yo karhihi leyi xikombelo xin lavaka kona: mhala yin'weleyo leyi khavhe yi nga yi riha yona, ehemulweni wa 10 sats eka credit ya standard kumbe 100 sats eka credit ya Pro, naswona u hundlulaka eka sat yin'we (expletive: expletive: na 1 sat, naswona na 0.05 credit minimum). Mpfuxelelo yi ni xin'wele ta... WWW-Authenticate switsandzaka swa invoice yin'we:

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 }
}

Mpfumawu wa Mali request parameter i base64url JSON: {"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.

Xinyangisi xi pfumanyetiwa eka endpoint, eka e... Content-Type (swilo swa mianwana ya media ni, eka multipart, mianwana ya yona ya boundary) ni eka SHA-256 ya swilo swa mianwana ya body leswi u tsandzeke, naswona swa tisa 15 ta manejeni. Emva ka ku rihlavula, tsandzeka... swi fanaka tswa lava fanaka: xin'we hi lexi Content-Type ni ma-bytes ya JSON yo fanaka, kumbe eka ma-endpoints ya multipart (/images/edits, /audio/transcriptions, /audio/translations) ntibu yo tala hi ntshuri lomunwe hi boundary yin’we. Library ta HTTP to tala ti khesa boundary yin’we hi nkarhi wo karhi loko ti encode-a fomu, hi byin’wana encode i nkarhi wu’we u tsandza ti bytes ta le ka ku tsandza ka swilo hinkwaswo hi ku tlangi.

Address yin'wana yin'wana yi nga kombela swikombiso swi 30 ka minute (address ya IPv6 yi engetelwa hi ku ya hi /64 ya yona). Swikombiso leswi address ya swona yi nga tiviwiki swi engetelwa ku koka swi 10 ka minute, naswona ku ni ntshikilelo wa xin'wana xa swikombiso leswi Nymbot yi swi engetaka eka address hinkwaswo; khombiso leyi nyikiweke ku n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi n'wi 429 na Retry-After, e tsentiwe ku fika nchumu wu nga ri baleriwa. Swivandluku swo rihlamusela swa swikongomisi leswi vuriwaka swi nga ri na xikombiso kumbe xihlamuselo swi tekela eka ntirho wa 120 wa swikongomisi swa mavele kumbe mavele ya ntirho hi minute eka xinyaki xin'wana xin'wana. Xihlamuselo xi verisiwa ku ringana nchumu wu nga ri baleriwanga, naswona xikongomisi lexi... Content-Type a riki application/json (kumbe multipart/form-data hi ku hlawula swilo) swi tseketiwa hi 415 kambe a nga ri kumeni nkhombo wa mali.

Swinkatana swi hlawuriwa hi ku xupaxupa ka ti-tokens eka xin서, hi ku endla nkarhi wa 1.5&times;, hikuva ku xupaxuwa ka nkarhi wa ntiyiso wu tiviwa hi ku tsutsuma. U rihiya hi ti-tokens leti tirhisiweke hakunene, naswona xiphemu lexi nga tirhisiwiki eka mali leyi riyiweke xi ta tlhela xi ta ndzhaka hi ku va a tihlamuleri ta tansi.

Ku humesa mfumawulo

Tsindza nkhuleti hi wallet yo karhi na yo karhi ya Lightning. Wallet leyo yi ku nyika preimage, swihlamarisi swa hex swa 64. Hi ku landza tsindza xikwembu lexi fanaka hi xin'wana xa leswi:

XikongomisoXihlahlo
L402Authorization: L402 <macaroon>:<preimage> (LSAT swi tirha na)
Mivalo ya maliAuthorization: Payment <base64url JSON>, hakona laha JSON yi nga kona {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}}

Xikweto lexi ri ri mali ri hlamula hi ku ri fanana hi lexi xi endliwe hi xikombiso xa xikombiso, handle ka leswaku... nymbot xiyenge a xi na swikamu swa mbalavala: {"payment": "l402", "tier": "pro", "paid_sats": 237, "charged_sats": 237}, naswona ku nga ri na X-Nymbot-Balance-Sats header. A xikombiso lexi xirhandzu hi xiyimo xa Payment scheme xi kuma xana Payment-Receipt header (base64url JSON yo va ni challenge id, xihlongobiso xa mali (payment hash) hi reference, status na timestamp). Swikwembu leswi rihenhlawuliye swi nga ri tshinyeleki eka nchumu nti nti hi nchumu lowu vuriwaka nym, hi leswaku swi nga kombisiwi eka nchumu lowu kombisiwaka eka query history.

XiyimoLoko hi nga ri<|thought|>
402 payment_already_usedXikongomelo xin'wana na xin'wana xi ri xikongomelo xa xitlhokovetselo xin'we. Xiphendulo i xinyamalala lexi tsavaneke eka xikongomelo lexi, hi ku ri mufambisi lowu hlayisaka xiyimisi xa yena xa mhaka ya vukonzi xa xesuvula (hi ku... lnget hi nga xinkarhi xa ku ri: u ri mali hi ku antswa.
402 payment_mismatchXikongomelo xi nyikiwe eka ndhawu yo panganaka leyi yin'wana. Content-Type kumbe mianakanyo, kumbe swi riha kusu Swi riha kusu ndzhaku ka xiphefhe lexi sweswi swi ri kwala mali. Xichavo xin'wana xin'wana xa xiphefhe lexi xi ta fika na xona; loko mali yo riwa yi ri nkombo, leswi u xirhandzaka swi ta ta ndzhaku hi xikan'wana a tihlamuleri ta tansi (refund_token na refund_sats eka mianwani).
402 payment_expiredMineminetu ya le ka 15 yi hundze ku sukela hi nkhuva lowu. Nkhuva wo marunha wu ta ni wona. Loko preimage yi kombisa leswaku u pfumule, leswi u pfumuleke swi ta ta ndzeni ka... tihlamuleri ta tansi (refund_token na refund_sats eka mianakanyo), xin’we; xikongomisi xi ta tirhisiwa ku fika ku fela.
401 invalid_preimagePreimage a yi hanyi hi hash ya xikwembu xa invoice. Xikwembu axisiya swi nga herisiwi.
401 invalid_payment_credentialXikongomelo i xihomakali, xi hundzuluxiwe hi le ku landza ka ku humiselwa ka xona hi Nymbot, kumbe xi vula nalaharisi ya mali leyi Nymbot a yi kombisetanga hi xikongomelo. Macaroon leyi nga na xiyimo lexi Nymbot a xi tiviki, kumbe leyi nga na xiyimo lexi tihlanganisaka, yi rhenxiwa.
429 rate_limit_exceededKu tlula swikongomana kumbe tikhapu ta 30 leti nga riki ku veriseka swi humelele eka xihloko lexi eka nkarhi wa nkarhu, kumbe tikhon’i ya ku pfumula (refund token) yi hundisiwe ku tlula ka masiku ya 60 eka nkarhu wa nkarhu. Lahlaka... 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"));

Vakweti lava hakweke eka mppx hi ndlela ya Lightning va tlangula xikombiso xa mali hi vonanga; va vutlumbheta eka endpoint va va tshame va ri.

Viidiyo

Ku riwe ntsengo POST /videos mihlamulo 202 ku fana ni loyi a nga ni xikungoni, ku kombisa na a status_url: GET hi nga nchavi yo landzela ntirho lowu. Yi tsariwile ni yi tirha hi masiku ya 24, loko ntirho lowu nga ri titsongahteri.

{
  "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..."
  }
}

Ti tshame hi refund_token e ku hlamuleni leyi: swi kombisiwa lexi laha فح only. Swi empty loko video yi vumbeka (GET /api/v1/l402/refunds mihlamulo "status": "pending"); loko render yi nga pfuki ku nga ri ni mbulavulo wa mali, mali yi ya eka yona. URL ya xiyimo yi kombisa refund_sats hi ku pfumbheta ntirho lowu pfumbhetiweke kambe ku nga kombisiwei token, hi ku vula leswaku ku tivisa ka URL ya xiyimo (status URL) a ku kombisi hi pfumbheto. Ku hlokoletela token na yena swi lulamisa ntirho lowu nga tlangiweke lowu a ku nga ri na munhu loyi a nga wu hlamulaka.

Ku pfumala mali

Loko xiphetho xa mali xi hungama hi ku pfumala na ku tihlanganisa ni ntsengo lowu nyikiweke Nymbot hi ku ya nge xiphetho xin’wana, mali yo fambisa yi tshama eka ntsengo lowu naswona xihingeti xi vula sweswo, hi ku na charged_sats, hi ku fana na xikombiso xa xicelo lexi nga ni xikwembu. Loko xi tshama xi nga ri na xikwembu, xihingeke xi tshama xi ri na tihlamuleri ta tansi swi fanele swilo leswi u nga xi xavile:

{
  "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"
  }
}

Swilo leswi nga riki swinene swi ta tlhela swi ta swa ndlela leyi fantšhaka hi yona: loko u kombire swifaniso swimbirhi naswona xin’we xi nga bi nga ri ni ntsengo, mhaka ya ku tsundzuka ya ku pfumelela i... nymbot xihloko xi khawuleta tikhonani ta ku pfumala xikwembu; transcription yo lexi nkarhi wa xona wu nga kombiwi u n'wi tlangi u nga ri na xikombiso, xi xavisiwa hi nkarhi wo tala swinene lexi xiyilesi (ku nga ri wu tala vun'we na 30 minutes), naswona xivandlaka ku fana na nkarhi wa ntiyiso xi vuya xikwembu; loko swi kombisa leswaku xi tala vun'we na 30 minutes, xi riweti hi 413 kambe mali yo tala yo dzumbuka. Embeddings ti dzundzuxa leswi xihlamuselo xin swi hlayisaka. Xihlamuselo xa video lexi nga riki xi pfumeta xitokeni lexi xona xin nga dzundzuxile xin'wana.

Xitshungulo xa xingheniso i khodi ya 256-bit leyi nga riki na xiyimo. Nymbot yi hlaya fela hash ya yona, naswona yi fela hi ku hundza malembe 30. Yi tshungula mbilu ya sat, naswona u nga:

  • Khoma hi yena. Humesa Authorization: Bearer REFUND-… e kuva eka e xin'wana xa tindhawu ta end-point lexi henhle (OpenAI SDK yi xi teka xihlamuselo xa API key xa yona). Xihlamuselo xi huma eka token naswona leswi hanyeke swi tshama eka yona (refund_token_sats e ka nymbot xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlamululo lexi nga riki na xihlam 402 refund_insufficient; ku hhendleka khombona ku nga ri na mitsalo swi vuyisela sats eka xikombiso xin’we xin’we.
  • Xi xupaxupa GET /api/v1/l402/refunds hi xingheni xin'we ku humisa {"sats": 237, "status": "open", "expires_at": "..."}.
  • Token yin’we yi nga tirhisiwa ka nkarhi lowu riki minutu 60 ntsena.
  • Yihlanganisa eka nym. Tshayela eka Kumisa xipfano e app ya Nymbot, kumbe u fona POST /api/v1/l402/refunds/redeem hi na xikwembu le xi nghenileke hi xihandla na {"refund_token": "REFUND-...", "balance": "standard"} (kumbe "pro"). Swikulu swa credits swi ya eka balance (10 sats eka standard, 100 eka Pro); sats leti ti nga riki credit leyi heleleke ti tshama eka token e ta tirhisiwa e ka 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"

Mpfuxeto

{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }