Svetuka kune zviri mukati
Dzoka kuna Nymbot

Nheyo yezivo Vanakovaka micheto

Mari yakasara, kuwedzera mari nemaki

Ongorora zvawana, uchinja mari kuburikidza neLightning, uchinja mari zvakare zvakajaira kubva kune wallet yako, ona kuti chikumbiro chimwe nechimwe chakadhura zvakadii, uye uchinobata makiya kubva kune code.

Kutarisa mari yakasara

Michera yenyu yese, uye kuti ndosvitsa zvakadini pakugumira kwechichengetedzo chechiungwa ichi.

GET https://nymbot.ai/api/v1/credits/balance — inoda API key. POST zvinoitodzikirawo, kune vatengi vanozvinotarisira.

balance mari madorora maviri ari pamwe chete muDhorobha panguva yemitengo yeBitcoin yezvino, kuvadzimba dzinotarisira nhamba imwe chete (null kana mutengo usiri kukwanisa kuverengwa). Zvakarera ndezve makrediti ne sats, izvo ndizvo zvinoita kuti mabhālance anzwisise. key anotsanangura kiyi yakabvunza. Kiyi yakasvika pamugumo inogona kugona kuongorora mivara.

Mhinduro

{
  "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"
  }
}
ChimiroNguva ipi
401Kiyi haina kuwanikwa, haizivikanwi, yakadhindwa kana kuti yakapfuura nguva yayo.

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

Nzira dzekubhadhara

Ungaita sei kupa mari, nezvazvose zvinoitwa. Lightning ndiyo nzira imwe chete.

GET https://nymbot.ai/api/v1/topup/payment-methods — hapana jesi rinodiwa.

Kuwonjezera kwemari kuri kubva pa 10 kusvika pa 1,000,000 sats; kuwonjezera kwePro kunofanira kutenga kurekodhi imwe chete yePro, saka kunotanga pa 100 sats. Migreni yemadhora inotevedzera mutengo weBitcoin. bulk_bonus anotaura mari yepasi pano inowedzerwa pakuzadza mari yakawanda, sezvakaita mubhuku reapp: 10%, 15% kana 20% yakawanda pakuzadza mari zvakajairika kubva pa500, 1,000 kana 5,000 sats, uye pakuzadza mari yePro kubva pa5,000, 10,000 kana 50,000 sats.

Mhinduro

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

Kuwedzera mari nekushandisa Lightning

Inogadzira Lightning invoice inoisia credit kunym iyo key inobata nayo. Ipirai kubva kune imwe imwe Lightning wallet, wobva ongotarisa kuti credit iwedzerwe.

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

MundaNyoraZvinodiwaTsananguro
amountnhambaEheKwakadini, mu currencyNhamba yakazara ye sats.
currencytamboKweteSATS (zvakagadzirwa), USD kana BTCDhodhi yakashandurwa pamutengo weBitcoin wezuva rino.
tiertamboKwetepro (zvinotambirwa) kana kuti standard: i nhamo inopinda pakuipi?

Chikwereti chakafanana ndicho sats 10 uye chikwereti chePro ndicho sats 100, pamwe chete nemubhau webulk; credits inotaura kuti invoice iyi ichawonjezera chii.

Mhinduro

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "payment_request": "lnbc100u1p5...",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": "2026-09-30T09:27:00Z",
  "status": "pending"
}
ChimiroNguva ipi
400Imwe nzira muna path (unsupported_method), mari isisingazivikanwi (unsupported_currency) kana nhanho, mari isipo, kana mari iri pasi peminimu (amount_too_small), pamusoro pe 1,000,000 sats (amount_too_large) kana kuti kwakasvosorerwa neLightning wallet (amount_out_of_range).
429Invoices anopfuura makumi matanhatu e nym iyi, kana kuti 120 kubva pane address iyi, mumaawa amwe (rate_limit_exceeded, ne Retry-After).
502Hapana invoice inogona kugadzirwa iyezvino (invoice_unavailable, ne 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);

Kutarisa kudzimutsa kwemari

Anobvunza kana invoice yakabhadharwa uye, kana zvakaitwa, anowedzera credit. Kuongorora ndiko kunoita kuti iwedzere credit, saka mushure mekubhadhara, ongorora kusvikira status yave creditedKutarisa zvakare ushakwa huve zvakanaka: mari inopinda kamwe chete, pasinei nekukumbira kakawanda zvakadii.

GET https://nymbot.ai/api/v1/topup/status/{invoice_id} — anoda kiyi kubva kunym yakagadzira invoice iyoyo.

status ndiko pending (isati ibhadharwa zvachose), paid (babhadharwa, asi isati yapindiswa; tarisa zvakare), credited (pama balance ako) kana kuti expired (havana kubhadhara nguva). Ma fields emari akagadzirirwa nzvimbo inenge ichipindurwa ne invoice.

Mhinduro

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "status": "credited",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": null,
  "balance_credits": 523.33,
  "balance_sats": 52333
}
ChimiroNguva ipi
400Id iyi haisi id yemabazi anomwe nemakumi mana (64-character id) yakabva pakukumbira create call.
404Hapana invoice neidzo idzo yeimwe idanho yemazita ako (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);

Nhoroondo yemibvunzo

Mutsara umwe chete peradziro: kuti zvakange zvakadii, imhando ipi yemodeli, nhamba yemashoko (tokens) uye mutengo waro. Hapana zvimhangura (prompts) kana mhinduro zvinochengetwa, saka hapana chinodzorwa. Mitsara inochengetwa kwemazuva makumi okapfuura 90, zvitsva zviri mberi. Chii chinenge chasvika pakugumira kwaro chinokwanisa kuverenga nhoroondo yaracho.

GET https://nymbot.ai/api/v1/queries/history — inoda kiyi ye API, iyo inoziva zvikumbiro zvayo, kana kuti kusaina kwekumbirwa kubva pane zita rako, rinoona chekutanga kwechinhu chega chega.

MundaNyoraZvinodiwaTsananguro
pagenhamba (mubvunzo)KweteDefault 1, pakupfuura 1,000; peji rakakwirira ndiro 400 invalid_value.
page_countnhamba (mubvunzo)KweteMitsara per page. Default 20, pakanyanya 100.
start_date
end_date
string (query)KweteZuva kana nguva dzeISO 8601.
modelstring (query)KweteMhando iyi chete.
typestring (query)Kwetechat, responses, messages, image, video, speech, transcription kana embedding.
all_keysboolean (query)KweteNekiyi: true inosanganisira maki chese ane zita rimwe chete. Default false.
key_idstring (query)KweteNekuda kwekuti pane chikumbiro chakanyorwa nezvayo, kana kuti nekuda kwe all_keys=true: chete chikiyi ichi.

Mhinduro

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

Kusaina zvimanyorero zvekukumbira akaunganidzwa

Kugadzira, kuchinja uye kubvisa maki, pfupiso yeakaunti uye kudzidzorera mari zvakazvimirira hazvidei API key. Chinodiwa chipinciso kubva pa 'nym' yako, saka key yakaboorwa inogona kushandisa kusvika pamugrenge yayo (cap) asi haizogoni kugadzira imwe key kana kukwidza mugrenge yayo pachayacho.

App iyi inokuitira izvi: zvinhu zvose zvakachengeteka API pepa inoshandisa maendpoints aya. Unongoda chikamu chino chekuita kuti uchengetedze ma клюches kubva kumu code wako.

Sainire yakanyorwa seNostr event yemhando 27235 (NIP-98), yakatumirwa ichinyorwa mu-base64 mu Authorization musoro une shoko Nostr pamberi:

Chikanganwa

{
  "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 ndiyo URL yakazara yemubvunzo, ichikwira query string, sezvakatumirwa chaizvo.
  • method ndiyo nzira yeHTTP.
  • payload ndicho SHA-256 ye raw request body, mu hex. Inodiwa pa POST uye PATCH, uye muviri waunosendesa unofanira kunge uri umo wawakashandisa hashing.
  • created_at zvinoenderana nemaminitsi 60 wependande reserver.
  • Chiitiko chimwe nechimwe chinofamba kamwe chete, a GET zvakaiswa, kuitira kuti header yakabata isakwanise kushandiswa zvakare. Saina imwe idzva pane chimwe nechimwe chikumbiro. Wedzera a nonce tag nechimero chisingazivikanwi kuti zvikumbiro zviri mbiri zvakanyorwa pakodzwa sekondo chimwe chete zvichiri kusiyana.
  • Muviri wekucherechedza kwakanyorwa unogona kuva makiraliya anoziva 64 KB zvakanyanya, uye muviri unoda Content-Type: application/json.

Chiitiko chakashaikwa chinodzokera 401 missing_nostr_auth; imwe inenge yakanganiswa, yakasaina nenzira isiri iyo, yakwegura zvakanyanya, kana kuti yeURL, nzira kana muviri wakasiyana inodzoka ne invalid_nostr_auth, nezvikonzero zviri mumashoko; rimwe rakashandiswa zvakare rinodzoka nostr_auth_replayed. API key yakatumirwa kune ma endpoints aya inorambidzwa. Signature inonzi kutarisa usati watoda kuverenga body, uye kune chimwe nechimwe address inogona kukundikana kashanu makumi matatu paminitsi (IPv6 address inoonekwa semubatanidzwa wake we /64); mushure meizvozvo inenge ya 429 ne Retry-After.

MaBrowser anogona kudzvanya maendpoint aya kubva pamaungano aNymbot chete (https://nymbot.ai, https://nymchat.app (uye madunihakidza avo). Peji pane imwe site ipi zvake haripiwe ma CORS headers, saka harikwanisi kuverenga zvinodzoka nazvo. MaScripts nemapurogiramu ekunze, ari asina kutumira Origin, havashandikidzwe.

Chirivharo chako chepfumo

Kusaina kunoda kiyi yakavanzika ye nym yako (the nsec), inopaudzwa zvese: kuzivikanwa kwako, nhoroondo yako uye mari yako. Isai mumascript chete pamuchina wamunovimba nawo, verengai kubva kuenvironment pane kunyora mumafambiro emuchina, uye shandisai app kana muchikwanisa.

Vabatsiri ava vanovaka header. Mienzaniso inotevera parasajini iyi inoshandisa ivavo. Vanoverenga secret key muhex kubva ku NOSTR_SECRET_HEX; iye wecURL anoshandisa nak chishandiso checommand-line, chinotora nsec kana hex key, uye 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");
}

Pfupiso yeakaunti

Zvinoratidza pamusoro pepepa reAPI yeapp: public key yako, mabhareki ose maviri, kuti machiwedza akawanda sei akashanda (asina kutorwa kana kupfuura nguva), uye kuzvizadza zvakare zvoga mip设置, kana null apo server isingapa izvo.

GET https://nymbot.ai/api/v1/account — anoda kusaina kwekumbirwa.

Mhinduro

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

Kuchengetedza maki kurovedza

Mapfuroi ari kumashure ekunyorwa kwechìdzitiro cheapp. Ese anoda yakatsaiwa kumbira. Mutsara wekugadziridza wekuguma mune mafomati aya, nenguva dziri muISO 8601 nezvikamu muSats:

Chinhu chakakosha

{
  "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 zvakakwana kuziva kiyi asi kusaishandisa. Kiyi yacho pachayo inopiwa kare kare, kana yakagadzirwa.

Kuratidza maki

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

MundaNyoraZvinodiwaTsananguro
include_revokedboolean (query)KweteIsanganisai maki asi akadhururwa. Default false.

Mhinduro

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

Kugadzira jecha

POST https://nymbot.ai/api/v1/keys — yakasainidzwa. Dzokera 201.

MundaNyoraZvinodiwaTsananguro
nametamboEheMashandiro emazwi anoti 1 kusvika ku40, akasiyana nemamwe mavambo ako akashanda (vasina kutarisa hurukuro).
limit_satsnhamba yakakwanaKweteChikawanyira chekusarudza mumats, zvimwe kana kuti 1. Siyai pasina chikawanyira.
reset_periodtamboKwetedaily, weekly kana monthlyZvinodiwa limit_satsSiisi izvose kuti pane mugove usatingozosimudze zvakare.
expire_atstring kana integerKweteKana kiyi ikarega kushanda: ISO 8601 nguva, kana millisecond dzakabva kubva 1970.

Mhinduro (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"
  }
}
ChimiroNguva ipi
400Zita risipo kana kuti rakareba zvakanyanya; zita riri kushandiswawo (duplicate_name); iguzu risingava nhamba yakazara inenge pakarekodhi 1; nguva yekusimutsidzira isina iguzu; nguva yekugumira yakapfuura; bhondi isingazivikanwi (unknown_parameter); kana kuti maki 25 ari kushanda dzatove (too_many_keys).
429Zvinopfuura ma 60 ma ключи akagadzirwa neiyi nym, kana ma 120 kubva pane iri adiresi, muimwe bhurasi (rate_limit_exceeded, ne 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);

Kuverenga kiyi imwe

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

Kudzokidzwa {"data": {…}} nechinhu chekey, kana kuti 404 key_not_found kana hapana yechimwe chezvako ine idiyo iyoyo.

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

Kuchinja konji

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

Tumira chero chimwe che name, limit_sats, reset_period uye expire_at, nemitemo yakafanana nepaya paitwa nekuita kiyi. null anobvisa nhamba: hapana magumo, hapana kugadzirisa zvakare, hapana kuregera. Kuchinja nguva yekugadzirisa kunotanga nguva itsva kubva pazv zero. Kiyi yakabatwa haigoneki kuchinjwa (400 key_revoked). Dzoka {"data": {…}} nechivakwa chekey yakavandudzwa.

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

Kubvisa kiyi

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

Inombedza kiyi nekukasvika, nekusingaperi. Inogara muri panzepe ne revoked_at akagadzirwa, uye anogona kuonekwa ne include_revoked=trueKuderera kwechikoshi chakatovadererwa kunopa mhinduro imwe chete. Chikoshi zvitsva zvakadererwa makumi mashanu chete ndizvo zvochengetedzwa; zvakare zvakadererwa zvobviswa kana chimwe chikoshi chichadererwa.

Mhinduro

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

cURL

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

Python

import requests

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

JavaScript

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

NWC auto-top-up

Batanidza Lightning wallet neNostr Wallet Connect uye Nymbot inozvikudziridza mari pakaipa kana API spending ikaita kuti pashoma. Shona yeAPI yeapp ine ma settings akafanana; aya ndiyo endpoints dziri kumashure kwazvo. Dzose idzi dzinoda a kusaina kwekumbirwa.

Zvinoshanda sei: mushure mekuti chikwereti cheAPI chakabhadharwa kubva pane chikwereti chawakasarudza kutarisa, kana chikwereti ichocho chakapfuura pasi pepurogiramu yako yekunzwisisa, Nymbot inogadzira invoice yechokwadi chekuwedzera chikwereti, inokumbira wallet yako kuti ibhadhare, uye inowedzera chikwereti ichocho. Inowedzera chikwereti kamwe chete pakupfuura maminitsi mashanu ega ega kune imwe imwe nym uye chikwereti, kuitira kuti kupfumbura kwemubvunzo kusingagumi kusakudza wallet. Kushandisa mune zvizhinji hakuna kukonzera izvi. Nguva uye kukura kwekuwedzera chikwereti kwerapedzisira, pamwe nekukanganisa kwerapedzisira, zviri mune zvizhinji (settings); kana kubhadharwa kwakabudirira mushure mekuungana, kutarisa invoice yacho ne kwazvo kwakabatwa kwekuwedzera mari zvakaitwa nayo.

Asati yekubatanidza wallet

Connection string inobvumira chero ani nani anozvigadza kukumbira wallet yako kubhadhara. Nymbot inochengetedza ichinyorwa nenzira yakavharika uye inongoishandisa kubhadhara mafactura ake ekuzadza mari, asi gadzirai hukama huri izvi chete, nebhajeti yekushandisa mur wallet yenyu, kuitira kuti mari yakawanda zvakanyanya inogona kubhadhara i nhamba yamakasarudzira. Wallet inofanira kutsigira pay_invoice.

Kubatanidza wallet

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

MundaNyoraZvinodiwaTsananguro
nwc_urltamboEheMutsara wekubatanidza, kutanga nostr+walletconnect://. Nymbot inokumbira wallet kuti ipe get_info asati kuichengetedza, uye chinoichengetedza yakavigwa nemanyorerwo akavharika.
threshold_satsnhamba yakakwanaEheZvikwanise kana mari yakasara ichipfuura sats idzi. Pamusoro pe1,000.
topup_satsnhamba yakakwanaEheNdeipi mari yekuwana nguva dzose. 1,000 kusvika pa1,000,000 sats.
tiertamboKwetepro (zvinotambirwa) kana kuti standard: mari yakasara yekutarisa nekuzadza.

Mhinduro

{
  "data": {
    "connected": true,
    "threshold_sats": 5000,
    "topup_sats": 20000,
    "tier": "pro",
    "last_topup_at": null,
    "last_topup_sats": null,
    "last_error": null
  }
}
ChimiroNguva ipi
400Haisi mutsara wekubatanidza (invalid_nwc_url); wallet haikuna kupindura kuburikidza ne relay yayo (nwc_unreachable) kana akasimba kuita chekuongorora (nwc_rejected); hukama hunogona kushaya kukwanisa kubhadhara mabhazi (nwc_missing_permission); kana kuti mari iri kunze kwemiganhu.
501Kuzadzisa mari zvoga hakuziviswa paserivha rino (nwc_unavailable). Zvakare zvakafanana nemagumo maviri ariupari.

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

Kuverenga zviziviso

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

Inodzorera chinhu chimwe chete sezvo zvakaita nekubatanidza, ne connected: false uye mamwe mapeji null panguva iyo hapana wallet yakabatanidzwa. Connection string yacho haizomboburitswi.

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

Kuchizvura hukama

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

Anobvisa string yekubatanidza yakachengetwa. Hapachazove nekudzorera mari zvakare. Kuti uve nechokwadi, unogonawo kubvisa kubatana ikoko muma wallet ako.

Mhinduro

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

Kubhadhara pakuita chikumbiro pasina kiyi

Mapinda ane mutengo wakatarwa anogona kubhadharwa rimwe rimwe rekukumbira panguva imwe chete kuburikidza neLightning, pasina 'key', pasina akaunti uye pasina mari yakasara: POST /images/generations, POST /images/edits, POST /videos, POST /audio/speech, POST /audio/transcriptions, POST /audio/translations uye POST /embeddings. Chat, Mhinduro ne Meseji dzose dzinoda kiyi. Chido chinotakura kiyi chinobhadharwa kubva pane mupfundo sezvinotambisika; kufambiswa kwemubhadharo kunotanga chete kana kiyi isingatumirwa.

Nymbot inotaura mhando mbiri dzemufungwa mumwe chete, kubva ku backend imwe chete: Lightning Labs' L402 (zvinotambirwawo nezita racho rakare, LSAT) uye draft yeIETF Kubhadhara Chirongwa chekuvimbisa cheHTTP ne lightning nzira uye charge chinangwa. Shandisa chero chimwe chacho muganhu wako anounzwisisa.

Kushandisa server yako pachako

Kubhadhara usina kiyi kunoitwa chete kana API_L402_SECRET kuine ma bytes 32 akatsamira, se hex (mitsetse 64) kana base64 (44). Iva neimwe uyo wakagadzirwa ne openssl rand -hex 32. Kuderedza kana kukwanisa kuwana mutsauko kunodzima chiyambiro icho uye kunoita kurekodhwa kwezvikonzero. Kuti uchinjire, ishe mutsauko wekare ku API_L402_SECRET_PREVIOUS Kwemazuva amwe: zvinyorwa zvekupindira, maURL emamiriro uye miedzo yakaitwa pasi payo inoramba ichishanda kusvika dzapera.

Dambudziko

Tumira chikumbiro pasina Authorization header. Kana zvichibudirira, hapana chinenge chichishanda, uye unowana 402 Payment Required ne invoice inobhadhara chaizvo zvinodhura chikumbiro ichoichi: mutengo wekuti key ingabhadharawo, yakashandurwa kuva 10 sats pakukredhita kwakadai (standard) kana 100 sats pakukredhita kwePro uye yakakwazurwa kusvika pashanu (pambadzi yekuti kwekuregedza 1 sat, uye kuregedza 0.05 credit minimum). Mhinduro inopa zvimwe zvishanu WWW-Authenticate matambudziko einvoice imwe chete:

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

Kubhadharwa request parameter iBase64url JSON: {"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.

Chirambidzo chakabatanidzwa nekupera kwacho, ku Content-Type (mhando yemanyorerwo ayo uye, kana iri multipart, boundary yayo) uye ku SHA-256 yemabhodhi akanyatsoenderana nema bheyiti awa atumira, uye inogara 15 maminiṭi. Mushure mekubhadhara, tumira yakafanana pinda zvakare: zvakafanana Content-Type uye ma JSON bytes aya anozvadzo, kana kuti kumapoints e-multipart (/images/edits, /audio/transcriptions, /audio/translations) mugove wemultipart wefanana nemutaundi wefanana. MaHTTP libraries akawanda anosarudza mutaundi mutsva nguva dzese dzavanobata fomu, saka unogona kuencode kamwe chete woitumira maBytes acho kaviri.

AdhirESI rimwe nerimwe rinogona kukumbira zvimhingamupinyi makumi matatu pamunitsi (adirési reIPv6 rinotorwa se /64 yacho yese). Mikumbiro iyo adhirési rayo risingazivikanwi inogovana mashanu emunitsi anopinza zvakanyanya, uye pane muganhu wakati kuti pazvimhingamupinyi zvose zvinopiwa neNymbot kune adhirési dzese; chikumbiro chakatsigirwa usati wapiwa chimhingamupinyi (semuenzaniso nebody isiri JSON yakajeka) hachisi kutarisa muganhu uyu. Kupfuura izvozvo mhinduro ndeyekuti 429 ne Retry-After, yasendwa musati mabhodhi averengwa. Mapoinzi aunoshandiswa asina kiyi kana chimangamira anobatwa seanobata muganhurudzo yepakati nepakati ye 120 zvikumbiro zvisina kuzivikanwa pamunyu weyimiti imwe chete pamaminitsi ekuvhara. Chimangamira chinochengetwa musati mabhodhi averengwa, uye chikumbiro chine Content-Type haasi application/json (kana multipart/form-data yekukwenya) inorambidzwa ne 415 uye hachambozvitsvaga invoice.

Mari yemashoko (embeddings) inobhadharwa zvichienderana nekufungidzira mashoko ari mukupinda, ichishandisa 1.5× margin, nekuti chaiyo inenge yawanikwa chete mushure mekunge zvaitika. Mubhadharo wauri kubhadhara unobhadharwa pamashoko anoshandiswa chaiwo, uye chikamu chemari isina kushandiswa inodzokerera kwauri se mudzorodzo yemari yemudhara.

Ndichitumira mari yekubhadhara

Ripa i-invoice uchiita ne Lightning wallet chero ipi. Wallet iyoyo inokupa preimage, makuya emakumi matanhatu nemashanu e-hex. Zvino tumira request imwe chete iyoyo neimwe pazviri izvi:

ChirongwaMusoro
L402Authorization: L402 <macaroon>:<preimage> (LSAT inoitikawo)
KubhadharaAuthorization: Payment <base64url JSON>, uko JSON iripo {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}}

Chikumbiro chakabhadharwa chinopindura zvakafanana nemuchikumbiro wakaitwa nechivharo, kunze kwekuti nymbot object haina mafambisirwo emari: {"payment": "l402", "tier": "pro", "paid_sats": 237, "charged_sats": 237}, uye hapana X-Nymbot-Balance-Sats mukoshi. A chiratidzo chekubhadhara chashandiswa nePayment scheme chinowanawo Payment-Receipt header (base64url JSON nemhangura yechallenge id, payment hash se reference, status uye timestamp). Kubhadharwa kwezvikumbiro hakuna kubatanidzwa nechimwe zita rinoshandiswa nemunhu, saka hazviitirwi kuonekwa muna query history.

ChimiroNguva ipi
402 payment_already_usedKubhadharwa kune chekutanga kune chikumbiro chimwe chete. Mhinduro ndicho chinhu chitsva chinotyisa pane chikumbiro ichi, saka mukushandisa kwekuchengetedza chimwe chete chekupedzisira (sezvo lnget anobhadhara zvakare chete.
402 payment_mismatchChitendero chakapiwa kune imwe nzvimbo yekugamuchira, Content-Type kana muviri, kana kubhadhara zvishoma pane mari inodiwa neizvi iye zvino. Hutari hutsva hwechikumbiro ichi hunouya nacho; kana kubhadhara kwaiva kushoma zvakanyanya, zvaunobhadhara zvinodzoka semubayiro mudzorodzo yemari yemudhara (refund_token uye refund_sats muchiruzivo.
402 payment_expiredZvinodarika maminitsi gumi nemashanu zvapfuura kubva pachimhanho. Chimhanho chitsva chinouya nacho. Kana preimage ikakuudza kuti wakaripa, zvaunenge wakaripa zvinodzoka semu mudzorodzo yemari yemudhara (refund_token uye refund_sats mune muviri), kamwe chete; zvimwe zvizere zvinobva zvashandiswa.
401 invalid_preimagePreimage haishanduri kuita payment hash yeinvoice. Mubhadharo hauna kushandiswa zvachose.
401 invalid_payment_credentialZvikwereti zvakanganiswa, zvakachinjwa mushure mekuti Nymbot yakazvigadzira, kana kuti zvichitaura nezve payment hash yaNymbot isina kumboisa invoice. Macaroon ine caveat yaNymbot isingazivi, kana kuti ine caveats dzinopikisanidzana, inorambidzwa.
429 rate_limit_exceededKudarika maivharidzi kana maki akataura anopfuura makumi matatu akashaya kuzivikanwa kubva pane chiziviso ichi mumaminitsi imwe chete, kana kuti token yedambudziko rimwe chete yakatumirwa kudarika makumi matanhatu mumaminitsi imwe chete. Mirira 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"));

Vatengi vakavakirwa pa mppx vashandise Lightning method kuitira kuita dambudziko rePayment vachivazivisa endpoint yacho vozoita kubhadhara.

Mavhidhiyo

Kubhadharwa POST /videos mhinduro 202 sezvakaita kune rinozivikanwa, pamwe chete nea status_url: GET pasina chichidza chekutevera basa racho. Rakanyorwa uye rinoshanda kwemasvomhu makumi maviri, chero basa racho riripo.

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

Chengetedzai refund_token kubva pane mhinduro iyi: zvinoratidza pano chete. Zvinenge zvakasiwa pavari kuita video (GET /api/v1/l402/refunds mhinduro "status": "pending"); kana render ikafunga isina kubhadharwa, mari inowira panyaya iyoyo. URL ye status inoratidza refund_sats kubátwa kwemari yemabasa akadzoka asi token isati yauya, saka kugovana URL yezvakabuda hakusi kugovana mari yakadzoka. Kutarisa token zvakare kunobvisa basa rakakundikana rakasanyadzwa nemunhu.

Rudziro dzeMari

Kana chikumbiro chekubhadharwa chikafamba zvisina kubudirira uye mushandisi akabhadharisa Nymbot nekuedza ikoko, mari yacho inochengetwa uye error inozivisa izvozvo, ne charged_sats, sezvo zvakafanana nekukumbira kune kiyi. Kana zvikakundikana pasina kubhadharwa, kukanganisa kune a mudzorodzo yemari yemudhara zvinokosha sezvawabvira:

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

Zvikamu zvisashandiswa zvinodzoka zvakafanana: kana kuti wakakumbira mifananidzo miviri uye imwe ikafailer isina kubhadharwa, mhinduro yebudiriro yayo nymbot chinhu chinotakura tiketi rekudzorera mari rechinhu rakashaikwa; ndokuburitswa kwemashoko kwaive kusina kukwanisa kuverengwa pamberi kuitira mutengo wakati kureba kwefayera ringaibva (zisati pakupfuura maminitsi makumi matatu), uye musiyano wekereke yechokwadi unodzoka semari yekudzorwa; kana zvikawanikwa kuti rwakareba kupfuura maminitsi makumi matatu, rorambwa nekuti 413 uye kubhadharwa kwese kunodzoka. Maembeddings anodzorera zvaunyorongwa kwaiva nezvinhu zvakaraswa. Video yakakundikana inodzorerera token yayo yaive yakabuda pakunyorwa kwayo.

Token yekudzosa mari i-code isina kurongeka ye256-bit. Nymbot inochengetedza hash yacho chete, uye inoguma mushure memazuva 30. Inochengetedza balance ye-sat, uye unogona:

  • Shambisa nayo. Tumira Authorization: Bearer REFUND-… pazvose zvemapfundo ari pamusoro (OpenAI SDK inozviita semuchidimbu cheAPI yayo). Mutengo unobva pane token uye zvinosara zvinogara pamusoro payo (refund_token_sats mu nymbot chinhu). Token ine mutengo uri pasi pemhinduro dzekukumbira 402 refund_insufficient; kukundikana kusina kubhadharwa kunodzosa sats dzakare pachitoken chimwe chete.
  • Edza kuona. GET /api/v1/l402/refunds ne header imwe chete inodzorera {"sats": 237, "status": "open", "expires_at": "..."}.
  • Token imwe chete inogona kushandiswa kashoma kashanu makumi (60) pamunhu wemaminitsi amwe.
  • Isaisai pane zita risingazivikanwi. Isaisai mukati me Shandisa chipo muchina yeNymbot app, kana kufonera POST /api/v1/l402/refunds/redeem ne kusaina kwekumbirwa uye {"refund_token": "REFUND-...", "balance": "standard"} (kana "pro"). Ma kiredhi akazara anopinda pabhansi (sats 10 pamwe chete pa standard, 100 pa Pro); sats dzisingasviki kuva kiredhi rakazara dzinogara patoken kuitira ma 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"

Mhinduro

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