Pitani ku zomwe zili
Kubwerera ku Nymbot

Maziko a chidziwitso Opanga mapulogalamu

Malaulo, kuwonjezera ndi makiyi

Onani zomwe muli nazo, onjezani ndalama kudzera ku Lightning, onjezani ndalama nthawi zonse kuchokera ku wallet yanu, onani mtengo wa pempho lililonse, ndipo upangirane mafoni (keys) kuchokera m'makodi.

Kuyang'ana ndalama zomwe zalipo

Magelezi anu onse awiri, komanso kuchuluka kwa cap ya kiyi iyi yogwiritsidwa ntchito.

GET https://nymbot.ai/api/v1/credits/balance — akusowa API key. POST Zimagwira ntchito komanso, kwa makasitomala omwe amayembekezera zimenezi.

balance kodi misonkhano ya ndalama ziwiri yonse ndi madola pa mtengo wa Bitcoin womwe uli pano, kwa zipangizo zomwe zimayembekezera nambala imodzi (null ngati mtengo sungatheka kuwerengedwa). Zotsalira zili mu makrediti ndi sats, zomwe ndi mmene mabanzi amasungidwira yeniyeni. key ikumfunsa kiyi wofunika. Kiyi womwe wafika pa malire ake akhoza kupitirizanso kuunika mulingo wa ndalama.

Yankho

{
  "balance": 49.18,
  "balance_sats": 42037,
  "standard": { "credits": 120.4, "sats": 1204 },
  "pro": { "credits": 408.33, "sats": 40833 },
  "key": {
    "id": "4f0c9a1be27d3856",
    "name": "laptop scripts",
    "limit_sats": 20000,
    "period_used_sats": 3412,
    "total_used_sats": 18230,
    "reset_period": "monthly",
    "reset_at": "2026-10-01T00:00:00Z"
  }
}
MkhalidweLiti
401Kiyi watsalaikhalapo, sudziwika, wachotsedwa kapena watha.

cURL

curl https://nymbot.ai/api/v1/credits/balance \
  -H "Authorization: Bearer $NYMBOT_API_KEY"

Python

import os
import requests

res = requests.get(
    "https://nymbot.ai/api/v1/credits/balance",
    headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
)
balance = res.json()
print(balance["standard"]["sats"], balance["pro"]["sats"])

JavaScript

const res = await fetch("https://nymbot.ai/api/v1/credits/balance", {
  headers: { "Authorization": "Bearer " + process.env.NYMBOT_API_KEY },
});
const balance = await res.json();
console.log(balance.standard.sats, balance.pro.sats);

Njira zolipirira

Mmene mungapindulire ndipo malire ake. Lightning ndiyo njira yokha.

GET https://nymbot.ai/api/v1/topup/payment-methods — palibe kiyi ofunika.

Kuonjezera ndiko 10 mpaka 1,000,000 sats; kuonjezera kwa Pro kumafunika kugula kadi imodzi ya Pro pak至少, choncho kumayamba pakhali 100 sats. Malimita a dolala amatsatira mtengo wa Bitcoin. bulk_bonus imalimbikitsa ndalama zogawidwa pa top-ups zazikulu, monga momwe ziliri m'app: 10%, 15% kapena 20% zowonjezera pa standard top-ups kuchokera pa 500, 1,000 kapena 5,000 sats, ndiponso pa Pro top-ups kuchokera pa 5,000, 10,000 kapena 50,000 sats.

Yankho

{
  "supported_methods": [
    {
      "method": "btc-lightning",
      "display_name": "Bitcoin Lightning",
      "supported_currencies": ["SATS", "USD", "BTC"],
      "limits": {
        "SATS": { "min": 10, "max": 1000000 },
        "USD": { "min": 0.02, "max": 1170 },
        "BTC": { "min": 1e-7, "max": 0.01 }
      },
      "tiers": ["standard", "pro"],
      "default_tier": "pro",
      "tier_min_sats": { "standard": 10, "pro": 100 },
      "sats_per_credit": { "standard": 10, "pro": 100 },
      "bulk_bonus": [
        { "bonus": 0.1, "standard_sats": 500, "pro_sats": 5000 },
        { "bonus": 0.15, "standard_sats": 1000, "pro_sats": 10000 },
        { "bonus": 0.2, "standard_sats": 5000, "pro_sats": 50000 }
      ]
    }
  ]
}

cURL

curl https://nymbot.ai/api/v1/topup/payment-methods

Python

import requests

methods = requests.get("https://nymbot.ai/api/v1/topup/payment-methods").json()
print(methods["supported_methods"][0]["limits"])

JavaScript

const methods = await (await fetch("https://nymbot.ai/api/v1/topup/payment-methods")).json();
console.log(methods.supported_methods[0].limits);

Kuonjezera ndalama kudzera ku Lightning

Imapanga invoice ya Lightning yomwe imawonjezera ndalama ku nym yomwe kiyi ili nayo. Lipirani kuchokera ku iliyonse ya Lightning wallet, kenako dziyangani zolemba izi kuti ndalama zigawidwe.

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

TsikaLembaZofunikaMafotokozedwe
amountchiwerengeroIndeZingati, mu currencyNambala yozara ya sats.
currencytsitsiAyiSATS (zoyambira), USD kapena BTCMa Dollars amasintha malinga ndi mtengo wa Bitcoin womwe ulipo panthawiyi.
tiertsitsiAyipro (zoyambira) kapena standard: kodi ndalama zimapita pa balance iti.

Kachipangizo kachidindo kamene kakhala kachidindo ka 10 sats ndipo kachipangizo ka Pro ndi 100 sats, pamodzi ndi bonasi lililonse la malonda ambiri; credits imanena kuti chidindo ichi chidzaonjezera chiyani.

Yankho

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "payment_request": "lnbc100u1p5...",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": "2026-09-30T09:27:00Z",
  "status": "pending"
}
MkhalidweLiti
400Njira ina m'njira (unsupported_method), ndalama yosadziwika (unsupported_currency) kapena tier, ndalama zomwe zikusowapo, kapena ndalama zomwe zili pansi pa zomwe zikuyenera kukhala (amount_too_small), kupitirira 1,000,000 sats (amount_too_large) kapena kanakana ndi Lightning wallet (amount_out_of_range).
429Magevu owonjezereka kupitirira 60 a nambala ya invoice ya nime yemuyi, kapena 120 kuchokera ku fotokozedwe lino la malo, m'imalo imodzi (rate_limit_exceeded, ndi Retry-After).
502Palibe invoice yomwe ingapangidwe pakali pano (invoice_unavailable, ndi Retry-After).

cURL

curl https://nymbot.ai/api/v1/topup/create/btc-lightning \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount": 10000, "currency": "SATS", "tier": "pro"}'

Python

import os
import requests

res = requests.post(
    "https://nymbot.ai/api/v1/topup/create/btc-lightning",
    headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
    json={"amount": 10000, "currency": "SATS", "tier": "pro"},
)
invoice = res.json()
print(invoice["payment_request"])

JavaScript

const res = await fetch("https://nymbot.ai/api/v1/topup/create/btc-lightning", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ amount: 10000, currency: "SATS", tier: "pro" }),
});
const invoice = await res.json();
console.log(invoice.payment_request);

Kuyang'ana ndalama yowonjezera

Mafunso amakodi ngati invoice yalipiridwa ndipo, atayipiridwa, amawonjezera credit. Kuunika ndiko komwe kumapereka credit, choncho pambuyo polipira, unika mpaka mmene mkhalidwe uliri creditedKuyesa kachiwiri pambuyo pake ndiko kuli bwino: ndalama imadza kamodzi yekha, mosatengera kuti mufunsa kangati.

GET https://nymbot.ai/api/v1/topup/status/{invoice_id} — akufunika kiyi kuchokera kwa nym yemwe anapanga invoice.

status ili pending (sinalipidwaIno), paid (walipiridwa, koma sinalengezedwe; onetsetsani kachiwiri,) credited (pa mbalanso yanu) kapena expired (sinalipiridwa pambali). Ma field a balance ndi a mlingo (tier) imene invoice ikukonza.

Yankho

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "status": "credited",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": null,
  "balance_credits": 523.33,
  "balance_sats": 52333
}
MkhalidweLiti
400Iduyo si id ya mipitimikiti 64 yomwe inachokera ku kuitchula create.
404Palibe invoice ndi id imeneyo kwa nime yanu (invoice_not_found).

cURL

curl https://nymbot.ai/api/v1/topup/status/$INVOICE_ID \
  -H "Authorization: Bearer $NYMBOT_API_KEY"

Python

import os, time
import requests

headers = {"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]}
url = "https://nymbot.ai/api/v1/topup/status/" + invoice["invoice_id"]

while True:
    status = requests.get(url, headers=headers).json()["status"]
    if status in ("credited", "expired"):
        break
    time.sleep(3)
print(status)

JavaScript

const headers = { "Authorization": "Bearer " + process.env.NYMBOT_API_KEY };
const url = "https://nymbot.ai/api/v1/topup/status/" + invoice.invoice_id;

let status;
do {
  await new Promise((r) => setTimeout(r, 3000));
  status = (await (await fetch(url, { headers })).json()).status;
} while (status !== "credited" && status !== "expired");
console.log(status);

Mbiri ya mafunso

Mizu imodzi pa pempho lililonse: chomwe chinali, mtundu wa model, kuchuluka kwa tokens ndiponso mtengo wake. Palibe zolembedwa za mapuloti kapena mayankho, choncho palibe omwe amabwereretsedwa. Mizu imasungidwa kwa masiku 90, yatsopano yatsogolo. Kiyi yomwe yafika pachimake ikhoza kuwerenga mbiri yake.

GET https://nymbot.ai/api/v1/queries/history — ikufunika API key, yomwe imaona mapempho ake odzipereka, kapena a pempho losainidwa kuchokera ku dzina lanu la chinyanja, lomwe limo onse a makiyi.

TsikaLembaZofunikaMafotokozedwe
pagenambala yozara (kufunsa)AyiZoyambira 1, osati kupitirira 1,000; tsamba lopitirira limali 400 invalid_value.
page_countnambala yozara (kufunsa)AyiMizere pa tsamba. Choyamba ndi 20, pamayendedwe owombera 100.
start_date
end_date
string (kufunza)AyiNthawi kapena masiku a ISO 8601.
modelstring (kufunza)AyiMtundu umene uliwu.
typestring (kufunza)Ayichat, responses, messages, image, video, speech, transcription kapena embedding.
all_keysboolean (kufunza)AyiNdi kiyi: true ikuphatikiza kiyi iliyonse ya dzina limodzi. Default false.
key_idstring (kufunza)AyiNdi pempho losainidwa, kapena ndi all_keys=true: kiyi imeneyi yokha.

Yankho

{
  "data": [
    {
      "id": "q_71c4e9a0",
      "timestamp": "2026-09-30T08:12:00Z",
      "model": "anthropic/claude-sonnet-5",
      "type": "chat",
      "input_tokens": 1240,
      "output_tokens": 380,
      "cached_tokens": 0,
      "cost_sats": 16.2,
      "cost_usd": 0.01895,
      "balance": "pro",
      "key_id": "4f0c9a1be27d3856",
      "web_search": false,
      "status": "ok"
    }
  ],
  "pagination": { "page": 1, "page_count": 20, "total": 311, "total_pages": 16 }
}

cURL

curl "https://nymbot.ai/api/v1/queries/history?page_count=50&type=chat" \
  -H "Authorization: Bearer $NYMBOT_API_KEY"

Python

import os
import requests

res = requests.get(
    "https://nymbot.ai/api/v1/queries/history",
    headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
    params={"page_count": 50, "type": "chat"},
)
for row in res.json()["data"]:
    print(row["timestamp"], row["model"], row["cost_sats"])

JavaScript

const res = await fetch("https://nymbot.ai/api/v1/queries/history?page_count=50&type=chat", {
  headers: { "Authorization": "Bearer " + process.env.NYMBOT_API_KEY },
});
for (const row of (await res.json()).data) console.log(row.timestamp, row.model, row.cost_sats);

Zopempha zosaina akaunti

Kupanga, kusintha komanso kuletsa makiyi, chidule cha akaunti komanso kuonjezera ndalama pokhodza (automatic top-ups) sizifuna API key. Zimafuna chizindikiro (signature) kuchokera pa nym yanu, choncho key itatuluka ikhoza kugwiritsidwa ntchito mpaka kumathera kwa mtengoyi koma sitinghoza kupanga key ina kapena kukweza mtenguyo.

Pulogalamu imachita izi kwa inu: chilichonse m'malo mwake API tsamba imagwiritsa ntchito mapulogalamu awa. Mumafunika gawo ili kokha kuti muyendetsere makiyi kuchokera ku kodi yanu.

Saini ndi chochitika cha Nostr cha mtundu wa 27235 (NIP-98), chomwe chatumizidwa mwa ndondomeko ya base64 mu Authorization mutu ndi mawu oti Nostr pamaso:

Chochitikacho

{
  "kind": 27235,
  "created_at": 1790726400,
  "tags": [
    ["u", "https://nymbot.ai/api/v1/keys"],
    ["method", "POST"],
    ["nonce", "9c4e21f07a3b...16 random bytes in hex"],
    ["payload", "3f1a0d7c8e2b...sha256 of the exact request body in hex"]
  ],
  "content": "",
  "pubkey": "your public key in hex",
  "id": "...",
  "sig": "..."
}
  • u kodi URL yonse ya pempho, kuphatikiza query string, ndi yemwe inatumizidwa ndendende.
  • method ndim ndiye njira ya HTTP.
  • payload kodi SHA-256 ya raw request body, m'ndandanda wa hex. Ikufunika pa POST ndi PATCH, ndipo thupi lomwe mumatumiza kuyenera kukhala imodzi monga yomwe munayisindikiza (hashed).
  • created_at kuyenera kukhala m’malo mwa ndondomeko ya ma ndandanda 60 ozungulira a server.
  • Chochitika chilichonse chimagwira ntchito kamodzi, a GET zalidwa, choncho mutu yomwe yadzinunulidwa sikutha kubwereza. Saini mutu watsopano pa chilichonse chopempha. Onjezani a nonce tagirani ndi chiwerengero chosankhidwa mwachisawawa kuti zopempha zawiri zosainidwa m'sekondi imodzi zidzakhalabe zosiyana.
  • Mawu amene ali m'ndandanda wa pempho losainidwa akhoza kukhala okati 64 KB, ndipo ndandanda ikufunika Content-Type: application/json.

Chochitika chomwe chasowa chibwerera 401 missing_nostr_auth; yomwe yakonzedwa bwino, yosainidwa bwino, yakalamba kwambiri, kapena ya URL, njira kapena thupi lina limene imabweretsa invalid_nostr_auth, ndi chifukwa chake m'uthenga; chomwe chogwiritsidwa ntchito kachiwiri chimabwerera nostr_auth_replayed. API key yotumizidwa ku mapulotu awa imakanidwa. Saincha imayezedwa musanawerenge thupi la uthenga, ndipo malo aliyense akhoza kulephera kumasulira nthawi 30 pa mphindi imodzi (address ya IPv6 imayeredwa ngati /64 yonse); pambuyo pake imalandira 429 ndi Retry-After.

Mabatilasi akhoza kutsimikizira ma endpoint awa kuchokera pa ma site a Nymbot okha فحسب (https://nymbot.ai, https://nymchat.app (ndi ma subdomains awo). Tsamba pa webusayiti ina iliyonse silipatsidwa ma CORS headers, choncho sikutha kuwerenga zomwe amabweretsa. Ma script ndi ma app amene amagwiritsa ntchito mafoni, omwe satumiza Origin, sakhudzidwa.

Kiyi yanu ya chinsinsi

Kusaina kuli kufunika kiyi ya chinsinsi ya nym yanu (the nsec), chomwe chimayang'anira chilichonse: umwini wanu, mbiri yanu komanso ndalama zanu. Ikani m'ndandanda (script) pa makina omwe mumakhulupirira okha, werengani kuchokera ku environment m'malo moti mulembe m'file, komanso gwiritsani ntchito app ngati mungathe.

Othandizira awa amapanga mutu. Zitsanzo zakubwerako pa tsamba lino zimawagwiritsa ntchito. Amawerenga kiyi wabodzi wa hex kuchokera ku NOSTR_SECRET_HEX; yemwe ya cURL imagwiritsa ntchito nak chida cha command-line, chomwe chimatenga nsec kapena hex key, ndipo sha256sum (pa macOS, shasum -a 256).

cURL

nostr_auth() {
  method="$1"; url="$2"; body="$3"
  nonce=$(openssl rand -hex 16)
  if [ -n "$body" ]; then
    hash=$(printf '%s' "$body" | sha256sum | cut -d' ' -f1)
    event=$(nak event --sec "$NOSTR_SECRET_HEX" -k 27235 -t "u=$url" -t "method=$method" -t "nonce=$nonce" -t "payload=$hash")
  else
    event=$(nak event --sec "$NOSTR_SECRET_HEX" -k 27235 -t "u=$url" -t "method=$method" -t "nonce=$nonce")
  fi
  printf 'Nostr %s' "$(printf '%s' "$event" | base64 | tr -d '\n')"
}

Python

# pip install coincurve requests
import base64, hashlib, json, os, time
from coincurve import PrivateKey, PublicKeyXOnly

SECRET = bytes.fromhex(os.environ["NOSTR_SECRET_HEX"])

def nostr_auth(method, url, body=b""):
    pubkey = PublicKeyXOnly.from_secret(SECRET).format().hex()
    tags = [["u", url], ["method", method], ["nonce", os.urandom(16).hex()]]
    if body:
        tags.append(["payload", hashlib.sha256(body).hexdigest()])
    created_at = int(time.time())
    serialized = json.dumps([0, pubkey, created_at, 27235, tags, ""], separators=(",", ":"), ensure_ascii=False)
    event_id = hashlib.sha256(serialized.encode()).digest()
    event = {
        "id": event_id.hex(),
        "pubkey": pubkey,
        "created_at": created_at,
        "kind": 27235,
        "tags": tags,
        "content": "",
        "sig": PrivateKey(SECRET).sign_schnorr(event_id).hex(),
    }
    return "Nostr " + base64.b64encode(json.dumps(event).encode()).decode()

JavaScript

// npm install nostr-tools
import { createHash, randomBytes } from "node:crypto";
import { finalizeEvent } from "nostr-tools/pure";

const secret = Buffer.from(process.env.NOSTR_SECRET_HEX, "hex");

export function nostrAuth(method, url, body = "") {
  const tags = [["u", url], ["method", method], ["nonce", randomBytes(16).toString("hex")]];
  if (body) tags.push(["payload", createHash("sha256").update(body).digest("hex")]);
  const event = finalizeEvent(
    { kind: 27235, created_at: Math.floor(Date.now() / 1000), tags, content: "" },
    secret,
  );
  return "Nostr " + Buffer.from(JSON.stringify(event)).toString("base64");
}

Chidule cha akaunti

Zomwe pepala la API la pulogalamuyi limasonyeza pamwamba: kiyi yanu ya poyera, misonkho yonse awiri, kiyi zingati ali okwanira (zomwe sizachotsedwa kapena kutha), ndipo... kukonza kudzitchatsa kokha zofunika, kapena null pamene seva tidakupereka iwo.

GET https://nymbot.ai/api/v1/account — akufuna pempho losainidwa.

Yankho

{
  "data": {
    "pubkey": "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d",
    "balances": {
      "standard": { "credits": 120.4, "sats": 1204 },
      "pro": { "credits": 408.33, "sats": 40833 }
    },
    "keys_active": 3,
    "nwc_auto_topup": {
      "connected": true, "threshold_sats": 5000, "topup_sats": 20000, "tier": "pro",
      "last_topup_at": null, "last_topup_sats": null, "last_error": null
    }
  }
}

cURL

URL=https://nymbot.ai/api/v1/account
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"

Python

import requests

url = "https://nymbot.ai/api/v1/account"
print(requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json())

JavaScript

const url = "https://nymbot.ai/api/v1/account";
const res = await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } });
console.log(await res.json());

Kusamalira makiyi

Malo amene amayambira mndandanda wa makiyi a pulogalamu. Onse akufunika a pamasindikidwa pempho. Kila kiyi imabwereretsedwa munjira imeneyi, ndi nthawi mu ISO 8601 komanso ndalama mwa sats:

Chinthu chofunika kwambiri

{
  "id": "4f0c9a1be27d3856",
  "name": "laptop scripts",
  "hint": "sk-nymbot-Qm7x…c2Lw",
  "limit_sats": 20000,
  "reset_period": "monthly",
  "reset_at": "2026-10-01T00:00:00Z",
  "expire_at": null,
  "period_used_sats": 3412,
  "total_used_sats": 18230,
  "created_at": "2026-08-14T09:21:07Z",
  "updated_at": "2026-09-02T17:40:55Z",
  "last_used_at": "2026-09-30T08:12:00Z",
  "revoked_at": null
}

hint ndizokwanira kuzindikira kiyi koma osati kuugwiritsa ntchito. Kiyi mwini umabwereretsedwa kon Solo, pamene wapangidwa.

Kuwerengera makiyi

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

TsikaLembaZofunikaMafotokozedwe
include_revokedboolean (kufunza)AyiLoletserani makiyi omwe achotsedwa. Default false.

Yankho

{ "data": [ { "id": "4f0c9a1be27d3856", "name": "laptop scripts", "hint": "sk-nymbot-Qm7x…c2Lw", "...": "..." } ] }

cURL

URL=https://nymbot.ai/api/v1/keys
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"

Python

import requests

url = "https://nymbot.ai/api/v1/keys"
for key in requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json()["data"]:
    print(key["id"], key["name"], key["period_used_sats"], key["limit_sats"])

JavaScript

const url = "https://nymbot.ai/api/v1/keys";
const { data } = await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json();
for (const key of data) console.log(key.id, key.name, key.period_used_sats, key.limit_sats);

Kupanga kiyi

POST https://nymbot.ai/api/v1/keys — sadzindikiridwa. Kubwerera 201.

TsikaLembaZofunikaMafotokozedwe
nametsitsiIndeZolemba 1 mpaka 40, zosiyana ndi mafoni anu ena akugwira ntchito (mosasamala za m'mene mawu alembedwera).
limit_satschiwerengero chachindunjiAyiChiviringo cha ndalama zogwiritsira ntchito mu sats, osachepera 1. Siirani kuti pasakhale chiviringo.
reset_periodtsitsiAyidaily, weekly kapena monthlyZofunika limit_sats. Siwisani kuti mukhale ndi mtengu yemwe samayambanso kukhala watsopano.
expire_atmawu kapena nambalaAyiPamene kiyi ikusiya kugwira ntchito: nthawi ya ISO 8601, kapena miliyisecondi kuyambira 1970.

Mayankho (201)

{
  "data": {
    "id": "4f0c9a1be27d3856",
    "name": "laptop scripts",
    "hint": "sk-nymbot-Qm7x…c2Lw",
    "limit_sats": 20000,
    "reset_period": "monthly",
    "key": "sk-nymbot-Qm7x...c2Lw",
    "...": "the rest of the key object"
  }
}
MkhalidweLiti
400Dzina lolegeza kapena laitali kwambiri; dzina lomwe lagwiritsidwa ntchito kale (duplicate_name); chinthu chopitirira chomwe si nambala yozara ya osachepera 1; nthawi yodziwitsanso popanda chapitirira; nthawi yotentha yomwe inali kale; gawo losadziwa (unknown_parameter); kapena 25 ma keys akugwira ntchito kale (too_many_keys).
429Kupitirira makiyi 60 anapangidwa ndi nambala imeneyi, kapena 120 kuchokera ku fotokozedwe ili, m'tulo limodzi la ola limodzi (rate_limit_exceeded, ndi Retry-After).

cURL

URL=https://nymbot.ai/api/v1/keys
BODY='{"name":"laptop scripts","limit_sats":20000,"reset_period":"monthly"}'
curl "$URL" \
  -H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
  -H "Content-Type: application/json" \
  -d "$BODY"

Python

import json
import requests

url = "https://nymbot.ai/api/v1/keys"
body = json.dumps({"name": "laptop scripts", "limit_sats": 20000, "reset_period": "monthly"}).encode()
res = requests.post(
    url,
    data=body,
    headers={"Authorization": nostr_auth("POST", url, body), "Content-Type": "application/json"},
)
print(res.json()["data"]["key"])

JavaScript

const url = "https://nymbot.ai/api/v1/keys";
const body = JSON.stringify({ name: "laptop scripts", limit_sats: 20000, reset_period: "monthly" });
const res = await fetch(url, {
  method: "POST",
  headers: { "Authorization": nostrAuth("POST", url, body), "Content-Type": "application/json" },
  body,
});
console.log((await res.json()).data.key);

Kuwerenga kiyi imodzi

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

Zobwezera {"data": {…}} pogwiritsa ntchito chinthu cha kiyi, kapena 404 key_not_found ngati palibe kiyi yanu yomwe ili ndi id imeneyi.

cURL

URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"

Python

import requests

url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
print(requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json()["data"])

JavaScript

const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
console.log((await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json()).data);

Kusintha maki

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

Tumizani chilichonse cha name, limit_sats, reset_period ndi expire_at, ndi malamulo amodzi ngati pamene mukupanga kiyi. null limasula munda: palibe malire, palibe kuchotsa, palibe kutha. Kusintha nthawi yochotsera kumayambitsa nthawi yatsopano kuchokera pa zero. Kiyi yachotsedwa sitingathe kuisintha (400 key_revoked). Kubwerera {"data": {…}} ndi key object yomwe yasinthidwa.

cURL

URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
BODY='{"limit_sats":50000,"expire_at":null}'
curl -X PATCH "$URL" \
  -H "Authorization: $(nostr_auth PATCH "$URL" "$BODY")" \
  -H "Content-Type: application/json" \
  -d "$BODY"

Python

import json
import requests

url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
body = json.dumps({"limit_sats": 50000, "expire_at": None}).encode()
res = requests.patch(
    url,
    data=body,
    headers={"Authorization": nostr_auth("PATCH", url, body), "Content-Type": "application/json"},
)
print(res.json()["data"])

JavaScript

const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
const body = JSON.stringify({ limit_sats: 50000, expire_at: null });
const res = await fetch(url, {
  method: "PATCH",
  headers: { "Authorization": nostrAuth("PATCH", url, body), "Content-Type": "application/json" },
  body,
});
console.log((await res.json()).data);

Kukangana kiyi

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

Imatseketsa kiyi nthawi yomweyo, kwamuyaya. Imakhala m'ndandanda ndi revoked_at akhazikitsidwa, ndipo angathe kuoneka ndi include_revoked=true. Kuchotsa kiyi yomwe kale inachotsedwa kumayankha m'njira imodzi. Ma kiyi 50 akutsopano okachotsedwa amamasungidwa okha; amene ali akale amachotsedwa pamene kiyi ina ichotsedwa.

Yankho

{ "data": { "id": "4f0c9a1be27d3856", "revoked": true } }

cURL

URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
curl -X DELETE "$URL" -H "Authorization: $(nostr_auth DELETE "$URL")"

Python

import requests

url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
print(requests.delete(url, headers={"Authorization": nostr_auth("DELETE", url)}).json())

JavaScript

const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
const res = await fetch(url, { method: "DELETE", headers: { "Authorization": nostrAuth("DELETE", url) } });
console.log(await res.json());

NWC kuonjezera ndalama modzigulira

Limbikitsani Lightning wallet ndi Nostr Wallet Connect ndipo Nymbot imonjezerako ndalama ndokha pamene API spending ikupangitsa kuti ndalamazo zichepe. Chikalata cha API cha pulogalamu chili ndi zosintha zomwe zili zofanana; izi ndi mapunijiti omwe ali m'mbuyo mwake. Zonsezi zikufunika a pempho losainidwa.

Momwe zimagwirira ntchito: pambuyo poti pempho la API lajatidwa pa mlimi (balance) womwe munasankha kuti muwone, ngati limenelo latha kupitirira mlingo womwe munayenera, Nymbot imapanga invoice ya ndalama zomwe mukufuna kuwonjezera, imapempha wallet yanu kuti ipereke ndalamazo, ndipo ionjezera ndalamazo. Imatha kuwonjezera ndalama pang'ono pa pang'ono nthawi imodzi pakati pa mphindi 5 kwa nym iliyonse ndi mlimi uliwonse, choncho mangingomulundikiza pempho simungathe kuthetsa ndalama zonse mu wallet. Kagwiritsidwe ntchito ka apps sikuchititsa zimenezi. Nthawi ndi kuchuluka kwa ndalama zomwe zinawonjezeredwa posachedwapa, komanso cholakwika chachitidwa, zimapezeka m'zofunika (settings); ngati malipiro anafika pambuyo pa cholakwika, kuunika invoice yake ndi mmene ndalama zinaonekera imapatsa ulemu.

Musanagwiritsane ntchito wallet

Mawu olemba maulendo (connection string) amalola aliyense amene ali nawo kupeza ndalama m’chikhalidwe chanu cha wallet. Nymbot amatisunga mwachinsinsi ndipo amagwiritsa ntchito ndalamazo polipirira ma invoice ake okha, koma pangani maulendo apadera chifukwa cha izi, ndi ndalama zochepa zomwe mungavomereze m'wallet yanu, kuti ndalama zomwe angagwiritse ntchito ndizochepa ngati zimene inu munasankha. Wallet iyenera kuthandiza pay_invoice.

Kulumikiza wallet

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

TsikaLembaZofunikaMafotokozedwe
nwc_urltsitsiIndeNdondomeko yokulumikizira, kuyamba nostr+walletconnect://. Nymbot amaufunsa wallet kuti get_info asanamve, ndipo amachisunga mwachinsinsi.
threshold_satschiwerengero chachindunjiIndeOnjezani ndalama pamene balance ikathera kukhala pansi pa sats zingati izi. Osachepera 1,000.
topup_satschiwerengero chachindunjiIndeZowonjezera zingati pa nthawi iliyonse. 1,000 mpaka 1,000,000 sats.
tiertsitsiAyipro (zoyambira) kapena standard: ndondomeko yoyang'anira ndi kuonjezera ndalama.

Yankho

{
  "data": {
    "connected": true,
    "threshold_sats": 5000,
    "topup_sats": 20000,
    "tier": "pro",
    "last_topup_at": null,
    "last_topup_sats": null,
    "last_error": null
  }
}
MkhalidweLiti
400Si connection string (invalid_nwc_url); waleti sinayankha kudzera pa relay yake (nwc_unreachable) kapena anakana kuunika (nwc_rejected); kulumikizidwa kuli sapaweza kulipira ma invoice (nwc_missing_permission); kapena ndalama zomwe zalampitira malire.
501Kudzaonjezera ndalama okha sikunakhazikitsidwa pa server iyi (nwc_unavailable). Zimenezi zili chomwecho kwa malonda awiri enawo.

cURL

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

Python

import json, os
import requests

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

JavaScript

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

Kuwerenga zofunikira

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

Imabweretsa chinthu chomwe chinali chomwe chomwe chinali chofuna kulumikiza, ndi connected: false ndipo mafoni ena onse null pamene palibe wallet yokonzeksera. Chitsazika cha ulendetsedwe (connection string) sichidzatulutsidwa n'komwe.

cURL

URL=https://nymbot.ai/api/v1/nwc-auto-topup
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"

Python

import requests

url = "https://nymbot.ai/api/v1/nwc-auto-topup"
print(requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json())

JavaScript

const url = "https://nymbot.ai/api/v1/nwc-auto-topup";
console.log(await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json());

Kudumpha kukhala osakhudzana

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

Imachotsa mawu oseŵetsera ogwiritsira ntchito ogwirizana omwe asungidwa. Kupereka ndalama zina sikuchitika. Kuti mukhale oonetoka, mutha kuchotsanso mgwirizanowo m'waleti yanu.

Yankho

{ "data": { "connected": false, "threshold_sats": null, "topup_sats": null, "tier": null, "last_topup_at": null, "last_topup_sats": null, "last_error": null } }

cURL

URL=https://nymbot.ai/api/v1/nwc-auto-topup/connection
curl -X DELETE "$URL" -H "Authorization: $(nostr_auth DELETE "$URL")"

Python

import requests

url = "https://nymbot.ai/api/v1/nwc-auto-topup/connection"
print(requests.delete(url, headers={"Authorization": nostr_auth("DELETE", url)}).json())

JavaScript

const url = "https://nymbot.ai/api/v1/nwc-auto-topup/connection";
const res = await fetch(url, { method: "DELETE", headers: { "Authorization": nostrAuth("DELETE", url) } });
console.log(await res.json());

Kulipira pa chilichonse chomwe chapemphedwa popanda kukhala ndi kiyi

Malunza a mtengo ofika akhoza kulipiridwa pemphu limodzi pa nthawi imodzi kudzera ku Lightning, popanda kiyi, popanda akaunti komanso popanda kukhala ndalama: POST /images/generations, POST /images/edits, POST /videos, POST /audio/speech, POST /audio/transcriptions, POST /audio/translations ndi POST /embeddings. Chat, Mayankho ndi Mauthenga nthawi zonse amayenera kukhala kiyi. Pempho lomwe limabweretsa kiyi limalipiridwa kuchokera ku m'badala monga mwanzeru; ndendende ndondomeko ya malipiro imayamba pokhapokha pamene palibe kiyi womwe watumizidwa.

Nymbot amalankhula njira ziwiri za mfundo imodzi, kuchokera ku backend imodzi: Lightning Labs' L402 (komanso cholandiridwa pansi pa dzina lake lakale, LSAT) ndipo draft ya IETF Malipiro Njira yotsimikizira HTTP ndi ya lightning njira ndi charge cholinga. Gwiritsani ntchito chilichonse chomwe makasitomala anu amamvetsetsa.

Kuyendetsa server yanu nokha

Kulipira popanda kiyi kumachitika kokha pamene API_L402_SECRET imakhala ndi osachepahala ndi byte 32 za nthawi zonse, monga hex (makarakata 64) kapena base64 (44). Pangani imodzi ndi openssl rand -hex 32. Kufupi kapena mtundu wa value womwe ungathe kuzindikika kumatiitsa ntchito yomweyo ndipo kumalembetsa chomwe chinachitika. Kuti musinthe, amikani value yakale ku API_L402_SECRET_PREVIOUS kwadzulo la tsiku limodzi: zolemba, ma URL a mmene zinthu zilili ndi zovuta zomwe zapangidwa pansi pake zikupitiriza kugwira ntchito mpaka kutha kwake.

Chovuta

Tumizani pempho popanda Authorization header. Ngati ndi loyenera, palibe chomwe chimagwira ntchito, ndipo mukupeza 402 Payment Required ndokhali ndi invoice ya mtengo weniweni wa pempholi limeneli: mtengo ofanana womwe key ingalipire, kusinthidwa kwa 10 sats pa standard credit kapena 100 sats pa Pro credit ndipo kuwonjezeredwa kuti akhale sat imodzi yonse (osachepera sat 1, komanso osachepera 0.05 credit minimum). Yankho limanyamula zitatu WWW-Authenticate mavuto a invoice yomweyi:

HTTP/1.1 402 Payment Required
Content-Type: application/problem+json; charset=utf-8
Cache-Control: no-store
WWW-Authenticate: L402 macaroon="AgJC...", invoice="lnbc2370n1..."
WWW-Authenticate: LSAT macaroon="AgJC...", invoice="lnbc2370n1..."
WWW-Authenticate: Payment id="kM9x...", realm="nymbot", method="lightning", intent="charge",
    request="eyJhbW91bnQiOiIyMzciLC...", description="Nymbot API POST /images/generations (237 sats)",
    digest="sha-256=:X48E9qOokqqrvdts8nOJRJN3OWDUoyWxBf7kbu9DBPE=:", expires="2026-09-30T12:15:00.000Z",
    opaque="eyJlbmRwb2ludCI6IlBPU1QgL2ltYWdlcy9nZW5lcmF0aW9ucyJ9"

{
  "type": "https://paymentauth.org/problems/payment-required",
  "title": "Payment Required",
  "status": 402,
  "detail": "This request costs 237 sats. Pay the Lightning invoice, then send the identical request again ...",
  "challengeId": "kM9x...",
  "amount_sats": 237,
  "invoice": "lnbc2370n1...",
  "payment_hash": "9db1370f...",
  "expires_at": "2026-09-30T12:15:00.000Z",
  "error": { "message": "This request costs 237 sats. ...", "type": "payment_required", "code": "payment_required", "param": null }
}

Malipiro request parameter ndi base64url JSON: {"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.

Chovuta chili chogwirizana ndi endpoint, ku Content-Type (mtundu wake wa media ndipo, kwa multipart, malire ake) ndipo kwa SHA-256 ya byte zenipo zomwe mwatumiza, ndipo imakhala minimu 15. Mukalipira, tumizani zofanana pemphero lina: chomwecho Content-Type ndipo ma JSON bytes omwe ali amodzi, kapena kwa ma multipart endpoints (/images/edits, /audio/transcriptions, /audio/translations) thupi la multipart lomwe lili ndi malire amodzi. Makütülibu ambiri a HTTP amasankha malire atsopano nthawi iliyonse yomwe amapanga fomu, choncho encode-ini kaye ndipo tumizani ma bytes ameneŵa kapiri.

Adilesi iliyonse ikhoza kupempha zovuta 30 pa mphindi imodzi (adesi ya IPv6 imatengedwa ngati /64 yake yonse). Zipembozo zomwe adelesi yake siidziwika zimagawana chiwonetsero chowamvetsera cha 10 pa mphindi, ndipo pali malire onse a zovuta zimene Nymbot imapereka pa adilesi zonse; pempho limene lakandawidwa musanaperekedwe chovuta (mwachitsanzo ndi uthenga wosakhala JSON yeniyeni) siliwerengedwa monga mmodzi wa izo. Kupitirira apo yankho ndi 429 ndi Retry-After, kutumizidwa musanawerenge mbali ya uthenga. Endpoint za malonda zomwe zimagwiritsidwa ntchito popanda kiyi kapena chidindo amaphatikizidwanso mu malire a ma pempho 120 osatsimikizika pa mphindi imodzi pa address imodzi. Chidindo chimachezedwa musanawerenge mbali ya uthenga, ndipo pempho lomwe... Content-Type si si application/json (kapena multipart/form-data kuti ayike zinthu) zakana ndi 415 ndipo sakupezanso fomu ya malipiro.

Embeddings zimalipiridwa malinga ndi ndondomeko ya tokens zomwe zilipo m'chinthu chomwe chaperekedwa, ndi mwayi wosiyanitsa wa 1.5×, chifukwa chiwerengero chenicheni chimadziwika pambuyo pake. Mumalipira tokens zomwe wagwiritsa ntchito yeniyeni, ndipo gawo la malipiro lomwe linasachedwa limabwerera ngati... chuma chobwezeretsa.

Ndikutumiza malipiro

Malipiro invoice ndi wallet iliyonse ya Lightning. Wallet imakupatsani preimage, yemwe ndi ma hex characters 64. Kenako tumizani pempholi lomweyo ndi imodzi mwa izi:

NdondomekoMutu
L402Authorization: L402 <macaroon>:<preimage> (LSAT zimagwira ntchito komanso)
MalipiroAuthorization: Payment <base64url JSON>, kumene JSON ili {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}}

Pempho yolipiridwa yankha mofanana ndendende ndi yomwe yapangidwa ndi key, koma kuti nymbot object ilibe mbali za balance: {"payment": "l402", "tier": "pro", "paid_sats": 237, "charged_sats": 237}, ndipo palibe X-Nymbot-Balance-Sats header. A pemphotso yolipiridwa pogwiritsa ntchito ndondomeko ya Malipiro imalandiranso Payment-Receipt header (base64url JSON ndi challenge id, payment hash monga reference, status ndi timestamp). Pempho lililonse lofuna malipiro silikuphatikizidwa ndi nym iliyonse, choncho sizikuonekera mu mbiri ya mafunso.

MkhalidweLiti
402 payment_already_usedMalipiro aliyense amalipira pemphu limodzi. Mayankho ndi ntchito yatsopano pa pemphu ili, choncho makasitomala amene amasunga chidindo chawo chomaliza (monga lnget amangobweranso kulipira.
402 payment_mismatchZida za uvomerezi zinaperekedwa kuti zigwiritsidwe ntchito pa malo ena, Content-Type kapena thupi, kapena amalipira pang'ono kuposa mtengo wa pemphu limene likugwiritsidwa ntchito panopa. Njira yatsopano ya pemphu limeneli ikubwera nazo; ngati malipiro anali ochepa kwambiri, zomwe mwalipira zidzabwerera kwa inu monga chuma chobwezeretsa (refund_token ndi refund_sats m'thupi).
402 payment_expiredMphindi zopitirira 15 zapita kuchokera pa mayeso. Mayeso atsopano amabwera naye. Ngati preimage ikusonyeza kuti walipira, zomwe walipira zimabwerera ngati chuma chobwezeretsa (refund_token ndi refund_sats m'thupi), pomwe; zolemba zimapita.
401 invalid_preimagePreimage siikuyenda monga hash ya malipiro a invoice. Malipiro sanagwiritsidwe ntchito mpaka kumapeto.
401 invalid_payment_credentialZolemba zilipo m'njira yosayenera, zinasintha pambuyo poti Nymbot zinazipereka, kapena zitchula payment hash yomwe Nymbot sinapangire invoice. Macaroon yomwe ili ndi caveat yomwe Nymbot simadziwa, kapena yomwe ili ndi caveat zosagwirizana, imakanidwa.
429 rate_limit_exceededZambiri kupitirira 30 za zizindikiro kapena makiyi omwe zinalephera kuunika zinachokera ku dzina lino m'mphindi imodzi, kapena token ya kubwezeretsa ndalama inatumizidwa kupitirira nthawi 60 m'mphindi imodzi. Dudzani Retry-After.

cURL

BODY='{"model":"nano-banana","prompt":"a lighthouse at dusk","response_format":"b64_json"}'
URL=https://nymbot.ai/api/v1/images/generations

# 1. Get the challenge
CH=$(curl -s -D - -o /dev/null "$URL" -H "Content-Type: application/json" -d "$BODY" | grep -i '^www-authenticate: L402')
MAC=$(echo "$CH" | sed -E 's/.*macaroon="([^"]+)".*/\1/')
INVOICE=$(echo "$CH" | sed -E 's/.*invoice="([^"]+)".*/\1/')

# 2. Pay $INVOICE with your wallet and copy the preimage
PREIMAGE=...

# 3. Send the identical request with the credential
curl "$URL" -H "Content-Type: application/json" -H "Authorization: L402 $MAC:$PREIMAGE" -d "$BODY"

lnget

# lnget (Lightning Labs) pays L402 challenges from your own lnd node and retries for you
lnget -X POST -H "Content-Type: application/json" \
  -d '{"model":"nano-banana","prompt":"a lighthouse at dusk","response_format":"b64_json"}' \
  https://nymbot.ai/api/v1/images/generations

Python

import base64, json, re
import requests

url = "https://nymbot.ai/api/v1/images/generations"
body = json.dumps({"model": "nano-banana", "prompt": "a lighthouse at dusk", "response_format": "b64_json"}).encode()
headers = {"Content-Type": "application/json"}

challenge = requests.post(url, data=body, headers=headers)
assert challenge.status_code == 402
info = challenge.json()
print("Pay", info["amount_sats"], "sats:", info["invoice"])

preimage = pay_with_your_wallet(info["invoice"])  # 64 hex characters

# L402
mac = re.search(r'L402 macaroon="([^"]+)"', challenge.headers["WWW-Authenticate"]).group(1)
res = requests.post(url, data=body, headers={**headers, "Authorization": f"L402 {mac}:{preimage}"})
print(res.json()["nymbot"])

JavaScript

const url = "https://nymbot.ai/api/v1/images/generations";
const body = JSON.stringify({ model: "nano-banana", prompt: "a lighthouse at dusk", response_format: "b64_json" });
const headers = { "Content-Type": "application/json" };

const challenge = await fetch(url, { method: "POST", headers, body });
const www = challenge.headers.get("www-authenticate");

// The Payment scheme: echo every challenge parameter back with the preimage
const start = www.indexOf("Payment ");
const params = Object.fromEntries([...www.slice(start + 8).matchAll(/(\w+)="((?:[^"\\]|\\.)*)"/g)].map((m) => [m[1], m[2]]));
const { invoice } = JSON.parse(Buffer.from(params.request, "base64url").toString()).methodDetails;
const preimage = await payWithYourWallet(invoice);

const credential = Buffer.from(JSON.stringify({ challenge: params, payload: { preimage } })).toString("base64url");
const res = await fetch(url, { method: "POST", headers: { ...headers, Authorization: `Payment ${credential}` }, body });
console.log((await res.json()).nymbot, res.headers.get("payment-receipt"));

Makasitomala amene apangidwa pa mppx mwa njira ya Lightning, thandizaniwo kuthana ndi vuto la malipiro; awatsatseni ku endpoint ndipo awalole kulipira.

Mavidiyo

Wolipiridwa POST /videos mayankho 202 ngati yemwe ali ndi kiyi, komanso a status_url: GET popanda kiyi aliyense wotsatira ntchitoyi. Idzasainidwa ndipo idzagwira ntchito kwa maola 24, malinga ngati ntchitoyo ikusungidwa.

{
  "id": "vid_...",
  "status": "in_progress",
  "status_url": "https://nymbot.ai/api/v1/videos/vid_...?exp=1790000000&sig=...",
  "nymbot": {
    "payment": "l402", "tier": "pro", "paid_sats": 4800, "charged_sats": 4800,
    "refund_token": "REFUND-5E0B..."
  }
}

Sungataye refund_token kuchokera ku yankho ili: zikuoneka apa kokha. Zili zilibe chilichonse pamene vidiyo ikukonzedwa (GET /api/v1/l402/refunds mayankho "status": "pending"); ngati kusonyeza kulephera kosamakani ndalama, malipiro amagwera pa izo. URL ya mkhalidwe ikusonyeza refund_sats pa ntchito yomwe ndayibwe koma token isanaperekedwe, choncho kutumiza URL ya mmene zinthu zilili sikutumiza mbiri ya kubwezera ndalama. Kuunika token kumatsatira ntchito yofooka yomwe palibe amene adzaunika.

Kubwezeretsa ndalama

Ngati pemphuyo lapadera lili m'mavuto ndipo wopereka wofuna chinthu walipiritsa Nymbot chifukwa cha mayeserowo, malipiro amasungidwa ndipo ndendo ya vutolo imati choncho, ndi charged_sats, monga mmene ziliri pa pempho la kiyi. Ngati zalephera popanda kulipiridwa, cholakwika chimakhala ndi chuma chobwezeretsa kufanana ndi ndalama zomwe walipira:

{
  "error": {
    "message": "The image generator failed. Nothing was charged. Please try again. The 237 sats you paid are on refund token REFUND-...",
    "type": "api_error",
    "code": "upstream_error",
    "refund_token": "REFUND-0C15DBED145D59131BA70298A413ADEB3D9B9AB082C476EA70A5BD38FCA5DE6D",
    "refund_sats": 237,
    "refund_expires_at": "2026-10-30T12:00:00.000Z"
  }
}

Zinthu zomwe sizagwiritsidwa ntchito zimabweranso m'njira imodzi: ngati munapempha zithunzi ziwiri ndipo chimodzi chinalephera popanda kuli mndandanda wa malipiro, yankho loyenera limakhala nymbot chinthu chimadza ndi chikalata choweretsera ndalama chosowa chake; kumasulira mawu amene kutalika kwake kusanakwanitsidwe kusonyezedwa poyamba kumalipiridwa pambiri komwe chinthucho chingakhale (osapitirira mphindi 30), ndipo kusiyana pakati pa kutalika kwenikweni ndi komwe kwasankhidwa kumabwerera monga chikalata choweretsera ndalama; ngati ikuoneka kuti ndi yaitali kupitirira mphindi 30, imakanidwa ndi 413 ndipo malipiro onse amabwereranso. Embeddings amabweretsa zomwe ndondomeko inasunga. Vidiyo yofooka imabweza token yomwe inalipiridwa pofuna kuika.

Token yozisoti ndiye kodi ya 256-bit yomwe sinakhazikike. Nymbot amasunga hash yake yokha, ndipo imatha pambuyo pa masiku 30. Imatha kukhala balance ya sat, ndipo mutha:

  • Liphirani nalo. Tumiza Authorization: Bearer REFUND-… pa iliyonse ya ma endpoints amene ali pamwamba amene (OpenAI SDK imatenga ngati API key yake). Mtengo umachokera pa token ndipo chomwe chidzasala chimakhala pa iye (refund_token_sats mu nymbot object). Chizindikiro chomwe chili ndi mtengo wochepa kuposa mayankho a pempho 402 refund_insufficient; kulephera kosonyezedwa m'malamulo kumabweretsa sats kubwerera pa token yomweyo.
  • Yang'anani. GET /api/v1/l402/refunds ndi mutu ofanana kubweza {"sats": 237, "status": "open", "expires_at": "..."}.
  • Token imodzi ikhoza kugwiritsidwa ntchito pasadakhale nthawi 60 pa mphindi imodzi.
  • Chisamutseni ku nym. Inganizani m'kati mwa Landirani mphatso mu Nymbot app, kapena foni POST /api/v1/l402/refunds/redeem ndi a pempho losainidwa ndi {"refund_token": "REFUND-...", "balance": "standard"} (kapena "pro"). Ndalama zonse zimapita ku balance (10 sats aliyense pa standard, 100 pa Pro); sats zomwe sizifikira credit yonse zimatsala pa token kuti API requests zigwiritidwe ntchito.

cURL

URL=https://nymbot.ai/api/v1/l402/refunds/redeem
BODY='{"refund_token":"REFUND-...","balance":"standard"}'
curl "$URL" \
  -H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
  -H "Content-Type: application/json" \
  -d "$BODY"

Yankho

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