Yeqela kokuqukethwe
Kuhlolwe ku Nymbot

Isisekelo solwazi Izinzuzo

I-Balance, i-top-ups ne-keys

Zibonisa ukuthi unayo, uphawu phezu Lightning, uphawu ngokuzenzakalelayo kusukela wallet yakho, ukubona ukuthi izindleko ngamunye isicelo, futhi ukulawula izibuyekezo kusuka ikhodi.

Ukubuyekeza Isilinganiso

Zonke izilinganiso zakho, kanye nokuningi le-cap ye-keyili isetshenziswe.

GET https://nymbot.ai/api/v1/credits/balance — Ufuna API key. POST Ukusebenza futhi, kubathengi abalandeli.

balance is the two balances together in dollars at the current Bitcoin price, ngoba izixhobo ezidingekayo inani elilodwa (null Uma inkinobho ayikwazi ukucacisa). I-credits futhi i-sats, okuyinto yindlela yokuthintisana kwezilinganiso. key isifinyezo isifinyezo esifinyezo. A key that has reached its cap can still check the balance.

Ukuphendula

{
  "balance": 49.18,
  "balance_sats": 42037,
  "standard": { "credits": 120.4, "sats": 1204 },
  "pro": { "credits": 408.33, "sats": 40833 },
  "key": {
    "id": "4f0c9a1be27d3856",
    "name": "laptop scripts",
    "limit_sats": 20000,
    "period_used_sats": 3412,
    "total_used_sats": 18230,
    "reset_period": "monthly",
    "reset_at": "2026-10-01T00:00:00Z"
  }
}
UkubuyekezwaKwangathi
401Ikhoyili ifakwe, engaziwa, ifakwe noma ifakwe.

cURL

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

Python

import os
import requests

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

JavaScript

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

Izindlela zePayment

Ungayifaka kanjani, futhi izinzuzo. Lightning iyindlela eyodwa.

GET https://nymbot.ai/api/v1/topup/payment-methods - Akukho isikhwama esidingo.

A top-up kuyinto 10 kuya 1,000,000 sats; a Pro top-up kufanele ukuthenga okungenani enye credit Pro, ngakho kuqala ku-100 sats. I-dollar limits uye kulandela intengo ye-Bitcoin. bulk_bonus inikeza credit extra on top-ups ezinkulu, efanayo ne app: 10%, 15% noma 20% ngaphezulu on top-ups standard kusukela 500, 1,000 noma 5,000 sats, futhi on Pro top-ups kusukela 5,000, 10,000 noma 50,000 sats.

Ukuphendula

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

cURL

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

Python

import requests

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

JavaScript

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

Ukuphakamisa phezu Lightning

Yenza i-Invoice ye-Lightning enikeza i-credit ye-nym ye-key enikezelwe. Yenza ku-Invoice ye-Lightning. Thola it Ukuze uthole credit eyengeziwe.

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

isikhuntaUhloboUkubalwaUkucaciswa
amountInomboloYeboOkuningi, ku currency. Inombolo ephelele ye-SAT.
currencyUkuhlobisaNgaphandleSATS (Ukuhlukaniswa okuqhubekayo) USD noma BTC. I-Dollars iyahlukaniswa ngentengo se-Bitcoin yamanje.
tierUkuhlobisaNgaphandlepro (I-default) noma standard: Yintoni i-balance ye-credit iyatholakala.

I-credit ye-standard yi-10 sats ne-Pro credit ye-100 sats, plus iyiphi i-bonus ye-bulk; credits Ukubonisa ukuthi lokhu inkinobho uzothola.

Ukuphendula

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "payment_request": "lnbc100u1p5...",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": "2026-09-30T09:27:00Z",
  "status": "pending"
}
UkubuyekezwaKwangathi
400Uhlobo lwekhompyutha (unsupported_method), i-currency engaziwa (unsupported_currency) noma tier, inani elithile, noma inani ngaphansi kwe-minimum (amount_too_small), ngaphezulu kwezigidi ezingu-1000 (amount_too_large) noma ifakwe ku-Blitz wallet (amount_out_of_range).
429Ngaphezulu kwe-faktures ye-nym ye-60, noma i-120 kusuka kule idilesi, emahoreni (rate_limit_exceededNge Retry-After).
502Akukho inkinobho kungenziwa ngoku (invoice_unavailableNge Retry-After).

cURL

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

Python

import os
import requests

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

JavaScript

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

Ukubuyekeza Top-up

Qaphela ukuthi inkinobho iyahlawulwe futhi, uma iye, ukongeza i-credit. Ukubuyekeza ukuthi i-credits, ngakho-ke ngemuva kokukhokha, ukubuyekeza kuze kube nenkinga creditedUkubuyekeza okunye ngemva kunokwenzeka: i-credit iholide nje, nangokuthi izinsuku ezinguqulo.

GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - kufuneka ikhoyili kusuka ku-nym okwenza inkinobho.

status Yini pending (Uma akuyona akuyona) paid (Iphayili, kodwa akuyona akuyona; bheka okunye), credited (Ukuhlobisa ubuningi yakho) noma expired (hhayi akhululwe isikhathi). Izindlu ze-balance zihlanganisa izinga le-invoice.

Ukuphendula

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "status": "credited",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": null,
  "balance_credits": 523.33,
  "balance_sats": 52333
}
UkubuyekezwaKwangathi
400I-id ayikho i-id ye-64-character kusuka ku-create call.
404Ngaphandle kwe-ID ye-akhawunti yakho ye-nym (invoice_not_found).

cURL

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

Python

import os, time
import requests

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

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

JavaScript

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

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

Ukubuyekeza History

I-one row per request: ukuthi, ukuthi imodeli, inani le-token kanye nemali. Akukho imibuzo noma imibuzo asekelwe, ngakho-ke akuyona. I-rows asekelwe iminyaka engu-90, okungenani lokuqala. I-key eyenziwe ngempumelelo inokukwazi ukucacisa imbali yayo.

GET https://nymbot.ai/api/v1/queries/history — unemibuzo ye-API, okuyinto ibonisa imibuzo yayo, noma a Isicelo sokubhalisa kusukela nym yakho, okuyinto uyazi zonke izici.

isikhuntaUhloboUkubalwaUkucaciswa
pageinguqulo (Query)NgaphandleI-Default 1, ku-maximum ye-1000; ingxenye ephakeme 400 invalid_value.
page_countinguqulo (Query)NgaphandleIzindwangu ngamaphepha. I-Default 20, kuya ku-100 kakhulu.
start_date
end_date
isikhunta (Query)NgaphandleISO 8601 Izinsuku noma izinsuku.
modelisikhunta (Query)Ngaphandlekuphela le model.
typeisikhunta (Query)Ngaphandlechat, responses, messages, image, video, speech, transcription noma embedding.
all_keysUkubuyekezaNgaphandleNge Key: true kuhlanganise zonke izibambo of the same nym. Default false.
key_idisikhunta (Query)NgaphandleNge isicelo esifundisiwe, noma nge all_keys=true: kuphela lokhu key.

Ukuphendula

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

cURL

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

Python

import os
import requests

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

JavaScript

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

Isicelo sokubhalisa akhawunti

Ukwenza, ukuguqulwa nokuguqulwa ama-keys, isibuyekezo se-akhawunti kanye ne-automatic top-ups ayidinga i-API key. Zihlanganisa i-signature kusuka ku-nym yakho, ngakho-ke i-key ebuthakathwa ingathumela kuze kube nokuningi kodwa ayikwazi ukwenza isibuyekezo esilandelayo noma ukwandisa isibuyekezo esilandelayo.

I-app ikwenza lokhu ngenxa yenu: konke ku-sa ikhaya sheet usebenzisa le endpoints. Ufuna kuphela lokhu isigaba ukulawula i-keys kusuka ku-code yakho.

I-signature yinto ye-Nostr event ye-type 27235 (NIP-98), ifakwe ku-base64-encoded ku-Nostr. Authorization Header nge-Word Nostr Ukusuka ku:

Ukusebenza

{
  "kind": 27235,
  "created_at": 1790726400,
  "tags": [
    ["u", "https://nymbot.ai/api/v1/keys"],
    ["method", "POST"],
    ["nonce", "9c4e21f07a3b...16 random bytes in hex"],
    ["payload", "3f1a0d7c8e2b...sha256 of the exact request body in hex"]
  ],
  "content": "",
  "pubkey": "your public key in hex",
  "id": "...",
  "sig": "..."
}
  • u I-URL ephelele ye-request, i-query string kuhlanganiswe, ngokuvamile efakwa.
  • method Kuyinto indlela ye-HTTP.
  • payload i-SHA-256 ye-body ye-request raw, ku-hex. It is required on POST futhi PATCH, futhi umzimba owavumela kufuneka yi-byte ye-byte owavumela.
  • created_at kufuneka kufinyeleleke ngaphakathi kwe-60 amahora we-server.
  • Zonke imiphumela isebenza once, a GET kuhlanganiswe, ukuze isikhwama esithathwe ayikwazi ukudlala. Hlola isikhwama esitsha ngalinye isicelo. Engeza isikhwama esithathwe nonce I-tag yi-value ye-random ukuze amabhizinisi amabili abalandeli ngegama elilodwa angahluka.
  • I-body ye-request ebhaliwe ingaba ku-maximum ye-64 KB, futhi i-body inesidingo Content-Type: application/json.

Ukukhangisa Izincwajana Izincwajana 401 missing_nostr_auth; okuhlobene, okuhlobene, okuhlobene, okuhlobene, noma i-URL, i-methode noma i-body eyahlukile invalid_nostr_auth, nge isizathu ku-message; a reused one returns nostr_auth_replayed. I-API key eyakhelwe ku-endpoints ezisetshenziselwa. I-signature iyahlekile ngaphambi kokufunda umzimba, futhi wonke idilesi angakwazi ukufinyelela ku-30 izikhathi imizuzu (i-address ye-IPv6 ihamba njenge /64); emva kwalokho ithatha 429 Nge Retry-After.

Izibuyekezo zokusebenza kuphela kusuka kumasayithi we-Nymbot (https://nymbot.ai, https://nymchat.app Iphasiwedi ze-CORS ziye zithunyelwe kwebhizinisi elinye. Iphasiwedi ze-CORS ziye zithunyelwe kwebhizinisi. I-scripts ne-native apps, okuyinto ziye zithunyelwe. OriginNgaba akuyona.

ikhoyili yakho

Ukuhlasela kufanele u-nym yakho yekhwalithi yekhwalithi (the nsec), okuyinto ukulawula konke: idivayisi yakho, idivayisi yakho kanye nesilinganiso yakho. Hlola nje ku-script ku-machine ungatholela, ukufunda kusuka ku-environment ngaphandle kokubhala ku-file, futhi ukhetho isicelo lapho ungatholela.

Izinzuzo ziye zibonise i-header. Izibonelo ezidlulileyo kulesi sayithi zisebenzisa. Zibonisa isifinyezo se-secret ku-hex NOSTR_SECRET_HEX; I-cURL one isebenzisa i- ikhaya isixhobo se-command-line, okuyinto ithatha nsec noma hex key, futhi sha256sum (Uma macOS, shasum -a 256).

cURL

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

Python

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

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

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

JavaScript

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

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

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

Umhlahlandlela

Yini i-API sheet ye-app ibonisa phezulu: key yakho yebhizinisi, ama-balances, inani le-keys asebenzayo (hhayi asebenzayo noma asebenzayo), futhi Okuzenzakalelayo Top-up izakhiwo, noma null lapho i-server ayikho.

GET https://nymbot.ai/api/v1/account Ukulungele A Isicelo sokubhalisa.

Ukuphendula

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

cURL

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

Python

import requests

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

JavaScript

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

Ukuphathwa Key

I-endpoints emzimbeni ye-app key list. Zonke zihlanganisa Isicelo sokubhalisaKonke ikhoyili ivumela lokhu ifomu, nge amahora ku-ISO 8601 futhi inani ku-sats:

Umphumela Key

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

hint Kuyinto efanelekayo ukujabulela isikhwama, kodwa kungekho ukusetshenziswa. Isikhwama okuvela nje, lapho kusungulwa.

Ukubuyekezwa Key

GET https://nymbot.ai/api/v1/keys Ngena ngemvume

isikhuntaUhloboUkubalwaUkucaciswa
include_revokedUkubuyekezaNgaphandleZihlanganisa i-keys eyakhelwe. I-Default false.

Ukuphendula

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

cURL

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

Python

import requests

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

JavaScript

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

Ukwenza Key

POST https://nymbot.ai/api/v1/keys Ukubuyekezwa 201.

isikhuntaUhloboUkubalwaUkucaciswa
nameUkuhlobisaYeboI-1 kuya ku-40 ama-characters, eyahlukile kunezinye izifundo zakho ezisebenzayo (ukungcweliswa kwe-case).
limit_satsNgena ngemvumeNgaphandleI-spending cap ku-sats, okungenani 1. Hlola it ngaphandle kwe-cap.
reset_periodUkuhlobisaNgaphandledaily, weekly noma monthlyImininingwane limit_sats. Hlola nje for a cap that never resets.
expire_atString noma integerNgaphandleUma isifinyezo isizukulwane ukusebenza: ISO 8601 isikhathi, noma milliseconds kusukela 1970.

Ukuphendula (201)

{
  "data": {
    "id": "4f0c9a1be27d3856",
    "name": "laptop scripts",
    "hint": "sk-nymbot-Qm7x…c2Lw",
    "limit_sats": 20000,
    "reset_period": "monthly",
    "key": "sk-nymbot-Qm7x...c2Lw",
    "...": "the rest of the key object"
  }
}
UkubuyekezwaKwangathi
400Iphasiwedi esithile noma eside kakhulu; isibonelo esebenzayo (duplicate_name); cap okuyinto inombolo enhle engaphansi kwe-1; isikhathi sokuguqulwa ngaphandle kwe-cap; isizukulwane esidlulile; indawo engaziwa (unknown_parameter); noma 25 izibambo ezisebenzayo (too_many_keys).
429Ngaphezulu kwe-60 ama-key eyenziwe ngesi-nym, noma i-120 kusuka kule idilesi, emahoreni (rate_limit_exceededNge Retry-After).

cURL

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

Python

import json
import requests

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

JavaScript

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

Ukubuyekeza One Key

GET https://nymbot.ai/api/v1/keys/{id} Ngena ngemvume

Waze {"data": {…}} nge-object key, noma 404 key_not_found Uma akukho key yakho has id.

cURL

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

Python

import requests

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

JavaScript

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

Ukuguqulwa kwe-key

PATCH https://nymbot.ai/api/v1/keys/{id} Ngena ngemvume

Thumela Noma name, limit_sats, reset_period futhi expire_at, ngokufanayo nezinsizakalo efanayo ekwenzeni i-key. null Ukuhlobisa isigaba: akukho cap, akukho reset, akukho ukuhlaziywa. Ukuguqulwa kwe-reset isikhathi kuqala isigaba esitsha ku-zero. I-key eyenziwe ayikwazi ukuguqulwa (400 key_revokedUkulungiswa {"data": {…}} nge-object key eyakhiwe.

cURL

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

Python

import json
import requests

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

JavaScript

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

Ukubuyekeza Key

DELETE https://nymbot.ai/api/v1/keys/{id} Ngena ngemvume

Hlola ikhoyili ngokushesha, for good. It is in the list with revoked_at isixazululo, futhi kungatholakala nge include_revoked=trueUkubuyekeza isifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo esifinyezo.

Ukuphendula

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

cURL

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

Python

import requests

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

JavaScript

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

NWC Auto-top-up Ukusebenza

Ukuxhumanisa i-Lightning wallet nge-Nostr Wallet Connect futhi i-Nymbot inikeza isilinganiso ngokuvamile uma izindleko ze-API zitholela aphansi. I-API sheet ye-app inesibopho elifanayo; lezi zihlanganisi zangaphakathi. Zonke zihlanganisa Isicelo sokubhalisa.

Indlela yokusebenza: Ngemva kokufaka isicelo se-API ku-balance oyifunayo ukubuyekeza, uma isilinganiso esithathwe ngaphansi kwelanga lakho, i-Nymbot ivumela i-invoice ye-top-up amount yakho, ibiza i-wallet yakho ukufakela, futhi ivumela i-credit. I-invoice iyahluka okungenani ngamaminithi angu-5 ngamaminithi ngalinye i-nym kanye ne-balance, ukuze isilinganiso sokuphuma i-wallet. Ukuhambisa ku-apps akufanele. I-time ne-size ye-ultimate top-up, ne-ultimate error, zihlanganisa ku-settings; Uma ukuguqulwa kwangena emva kwe-error, ukubuyekeza i-invoice yayo nge I-Top-Up Status Imininingwane It

Ngaphambi kokufaka i-wallet

I-connector string ivumela umuntu owavuma i-wallet yakho ukhokhe. I-Nymbot ibhekwa ngokubethelwa futhi usebenzisa kuphela ukufaka ama-invoices yayo yayo yayo, kodwa ukwenza ukuxhumanisa nje ngoba lokhu, nge-budget yokuthengisa e-wallet yakho, ngakho-ke engcono kunokuthumela kuyinto inombolo eyenziwe nawe. I-wallet kufanele ukweseka pay_invoice.

Ukuxhumana I-Wallet

POST https://nymbot.ai/api/v1/nwc-auto-topup/connect Ngena ngemvume

isikhuntaUhloboUkubalwaUkucaciswa
nwc_urlUkuhlobisaYeboI-connection string, ekuqaleni nostr+walletconnect://. I-Nymbot inikeza i-wallet ukuze get_info ngaphambi kokugcina, futhi ibhekwa encrypted.
threshold_satsNgena ngemvumeYeboTop up lapho isilinganiso isaphakathi ngaphansi kuka many sats. Okungenani 1,000.
topup_satsNgena ngemvumeYeboNgingi ukongeza ngalinye. 1,000 ukuya ku-1,000,000 sats.
tierUkuhlobisaNgaphandlepro (I-default) noma standard: isilinganiso ukubona futhi top up.

Ukuphendula

{
  "data": {
    "connected": true,
    "threshold_sats": 5000,
    "topup_sats": 20000,
    "tier": "pro",
    "last_topup_at": null,
    "last_topup_sats": null,
    "last_error": null
  }
}
UkubuyekezwaKwangathi
400Imininingwane yokuxhumana (invalid_nwc_url); I-wallet ayikho impendulo ye-relay yayo (nwc_unreachable) noma ukunceda ukubuyekeza (nwc_rejected); isixhumanisi ayikwazi ukulayisha izindleko (nwc_missing_permission); noma inani ngaphandle kwezimali.
501Okuzenzakalelayo Top-ups ayikho ku-server (nwc_unavailable) Sama kusebenza kumazwe amabili endpoints.

cURL

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

Python

import json, os
import requests

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

JavaScript

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

Ukungena ngemvume

GET https://nymbot.ai/api/v1/nwc-auto-topup Ngena ngemvume

Ukuguqulwa kwe-object efanayo ne-connect, nge connected: false Futhi ezinye izindawo null lapho akukho wallet ifakwe. I-connection string ngokuvamile akuyona.

cURL

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

Python

import requests

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

JavaScript

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

Ukuhlobisa

DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection Ngena ngemvume

Ukususa ikheli le-connection eyakhiwe. Akukho okuphakeme ezingaphezu. Ukuze sicela, ungakwazi futhi ukuguqulwa ukuxhuma kwebhizinisi lakho.

Ukuphendula

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

cURL

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

Python

import requests

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

JavaScript

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

Ukudlulisela ngokuchofoza ngaphandle kwe-key

I-Fixed-price endpoints ingathengiswa ngamunye isicelo ngexesha nge-Lightning, ngaphandle kwe-key, ngaphandle kwe-akhawunti, ngaphandle kwe-balance: POST /images/generations, POST /images/edits, POST /videos, POST /audio/speech, POST /audio/transcriptions, POST /audio/translations futhi POST /embeddingsI-Chat, i-Response ne-Messages iyadingeka njalo. Isicelo esebenzayo isifinyezo esithathwe ku-balance ngokuvamile; inqubo ye-payment iyahlaziywa kuphela lapho ayikho isifinyezo esithathwe.

I-Nymbot ibonisa izinguquko ezimbili ye-idea efanayo, kusuka ku-backend eyodwa: i-Lightning Labs' Ukubuyekezwa (Watholakala futhi ngaphansi kwegama lakho elandelayo, LSAT) kanye nenkqubo ye-IETF Ukubhalisa I-HTTP authentication scheme nge- lightning Uhlobo I charge Intent. Sebenzisa ukuthi amakhasimende yakho uyazi.

Ukusebenza kwe-server yakho

Ukubhalisa ngaphandle kwe-key kunokwenzeka kuphela lapho API_L402_SECRET ukugcina okungenani ama-byte angu-32, njenge-hex (i-64 ama-karakter) noma i-base64 (44). openssl rand -hex 32I-value enhle noma enhle ekubuyiselwa i-function ekubuyekeza futhi i-log why. Ukubuyekeza, ubuyekeza i-value enhle ku- API_L402_SECRET_PREVIOUS ngosuku: I-credentials, i-URL ye-status kanye ne-challenges eyenziwe ngaphansi kwelinye izinsuku ezisebenza kuze kube lokugqibela.

Ukuphendula

Thumela isicelo nge-no Authorization header. Uma iyahambisana, akukho isebenza, futhi unayo 402 Payment Required nge-akhawunti ngenxa yintoni okungenani okungenani: ixabiso elifanayo i-key akuyona, ifayilishwe ku-10 sats i-credit ye-standard noma 100 sats i-Credit ye-Pro futhi ifakwe kuya ku-set ephelele (ngaphansi kwe-1 sat, futhi angaphansi kwe-0.05 credit minimum). Ukuphendula inikeza amabili angu-3 WWW-Authenticate Izinzuzo nge-akhawunti efanayo:

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

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

Ukubuyekezwa request isibuyekezo base64url JSON: {"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.

I-challenge iyatholakala ku-endpoint, ku- Content-Type (umgangatho we-media kanye, ngenxa ye-multipart, i-limit yayo) futhi ku-SHA-256 ye-body exact ye-byte oyithunyelwe, futhi ivame i-15 imizuzu. Ngemva kokukhokha, sicela ushiye i-byte ikhaya Request again: sama Content-Type Nge-JSON bytes efanayo, noma ama-endpoints e-multipart (/images/edits, /audio/transcriptions, /audio/translationsI-HTTP ibhayisikili amaningi ibhayisikili omusha ngalinye ama-coding ye-form, ngakho-ke u-coding nje futhi ukunikela ama-byte amabili.

Konke idilesi inokufunda izinzuzo ze-30 ngamaminithi (ama-address ye-IPv6 ibekwe njengesithombe /64). Izinzuzo ezinokuthi i-address engaziwa zihlanganisa i-10 ngamaminithi, futhi kunezinto ze-Nymbot zihlanganisa izinzuzo emhlabeni wonke ama-address; isixazululo esithathwe ngaphambi kokuphendula (isib. nge-body engaziwa yi-JSON) ayikwazanga kulabo. Ngaphezu kwalokho, isibuyekezo se-Nymbot 429 Nge Retry-AfterI-Endpoints ye-Payed Called ngaphandle kwe-key noma i-credential ifakwe ku-limit ye-120 ye-unauthenticated requests ngaminithi ngalinye. I-credential ifakwe ngaphambi kwe-body ifakwe, kanye ne-request eyenziwe ngalinye. Content-Type Yini application/json (Uma multipart/form-data for uploads) is a refused with 415 futhi akuyona ikhasi.

I-embeddings iyahlaziywa kusuka ku-estimation ye-tokens e-input, nge-margin ye-1.5×, njengoko inani lokwenene lithunyelwe kuphela ngemuva. Uyakubhalisa ama-tokens asebenzayo, futhi ingxenye engathengiswa yebhizinisi lithunyelwe njenge-akhawunti Ukubuyekezwa.

Ukubhalisa Ukudluliselwa

Ukubhalisa inkinobho nge-Lightning wallet. I-wallet inikeza i-preimage, i-64 i-hex characters. Ngemuva kwalokho ushiye isicelo esifanayo nge-one of these:

UkulungiswaIkhaya
UkubuyekezwaAuthorization: L402 <macaroon>:<preimage> (LSAT Ukusebenza futhi)
UkubhalisaAuthorization: Payment <base64url JSON>, lapho i-JSON {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}}

I-Request ye-Payment isibuyekeza nje njenge-Request eyenziwe nge-key, ngaphandle kokubili ukuthi nymbot I-object ayikho izindawo ze-balance: {"payment": "l402", "tier": "pro", "paid_sats": 237, "charged_sats": 237}, futhi akukho X-Nymbot-Balance-Sats isikhwama. Isicelo esithathwe nge-Payment Scheme kunazo Payment-Receipt header (base64url JSON nge challenge id, ukulayishwa hash as reference, status futhi timestampImininingwane ezifuywayo ayihlaziywa ku-nym ye-nym, ngakho-ke akuyona ku-history ye-query.

UkubuyekezwaKwangathi
402 payment_already_usedKonke ukulayishwa kulungile nge-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti ye-akhawunti. lnget Yiba) ngokuphathelene ngokushesha.
402 payment_mismatchI-credential yasungulwa ngenxa ye-endpoint enye, Content-Type noma umzimba, noma akhawunti engaphansi kuncike lokhu isicelo manje. Umthamo omtsha ngoba lokhu isicelo kuhlanganisa; uma ukuguqulwa kwangaphakathi kakhulu, okufakiwe kuyatholakala njenge Ukubuyekezwa (refund_token futhi refund_sats Ukusuka kwelanga
402 payment_expiredNgaphezu kwama-15 imizuzu etholakalayo ukususwa kwe-challenge. I-challenge entsha ifakwe. Uma i-preimage ibonisa ukuthi uthumele, into etholakalayo itholakala njenge-preview. Ukubuyekezwa (refund_token futhi refund_sats umzimba), uma; isithombe esithathwe emva kwalokho.
401 invalid_preimageI-preimage ayikho ku-hash ye-payment ye-invoice. I-payment ayikho.
401 invalid_payment_credentialI-credential ifakwe, ifakwe ngemva kwe-Nymbot ifakwe, noma ama-hash ye-payment ye-Nymbot eyenza inkinobho. I-macaroon ye-caveat eyenza i-Nymbot, noma ne-caveats eyenza.
429 rate_limit_exceededNgaphezulu kwe-30 ama-credentials noma ama-keys ukuthi awukwazi ukuguqulwa kwangapheli le-address, noma i-refund token eyodwa yayithunyelwa ezingaphezu kwama-60 amaminithi. Retry-After.

cURL

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

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

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

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

lnget

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

Python

import base64, json, re
import requests

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

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

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

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

JavaScript

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

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

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

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

I-Customer eyenziwe ku mppx Nge-Method Lightning, ukulawula i-Payment Challenge ngokuvamile; ukubonisa kwabo ku-endpoint futhi zithole.

Ividiyo

Imininingwane POST /videos Ukuphendula 202 like a keyed one, plus a status_url: GET it ngaphandle kokubili ukuyifaka umsebenzi. It is a signed and works for 24 hours, ngexesha lapho umsebenzi isihlalo.

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

Hlola refund_token Ukusabela okuhlobene (Ukuhlobisa okuhlobene)GET /api/v1/l402/refunds Ukuphendula "status": "pending"); uma ukuguqulwa kwangapheli, ukuguqulwa kwangapheli. I-URL ye-status ibonisa refund_sats for a refunded job but never the token, ngakho-ke ukunikela i-URL yokusebenza akufanele ukuguqulwa. Ukubuyekeza i-token futhi ukuguqulwa ingozi ebuthile okuyinto ayikho.

Ukubuyiselwa

Uma isixazululo se-payment isixazululo futhi umphakeli ufakeli i-Nymbot ekusebenzeni, ukulayishwa ku-akhawunti yakhelwe futhi isixazululo se-error ivame. charged_sats, ngokufanayo ne-keyword request. Uma ifakwe ngaphandle kokubhalwa, isizukulwane se-error Ukubuyekezwa Ukubuyekeza ukuthi ushiye:

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

Okuzenzakalelayo: If you asked for two pictures and one failed unchecked nymbot I-object inikeza i-refund token ye-omphumela eyenziwe; i-transcription ebonakalayo ekugqibeleni okungenani i-precized for the longest the file could be (never more than 30 minutes), ne-different to the real length iboniswe njenge-refund token; uma iboniswa ukuba engaphezu kwama-30 amaminithi, iboniswa ne-refund token. 413 Ukubuyekezwa ku-Embeddings. Ukubuyekezwa ku-Embeddings. Ukubuyekezwa kwevidiyo ku-Token ye-submission.

I-refund token iyisisombululo se-256-bit code. I-Nymbot ibhekwa kuphela yayo ye-hash, futhi ivuliwe ngemuva kwezinsuku ezingu-30. I-Sat Balance ibhekwa, futhi ungakwazi:

  • Thenga nge-imeyili Thumela Authorization: Bearer REFUND-… Okungenani kunazo zonke izindawo ezidlulileyo (i-OpenAI SDK ithatha njenge-API key yayo). I-price ifakwe kwi-token futhi okufakiwe (refund_token_sats Ukusuka nymbot Object). I-Token enezingeni engaphansi kwe-request answer 402 refund_insufficientI-Unbiled Failure yenza i-Sat back ku-token efanayo.
  • Thola it GET /api/v1/l402/refunds Nge-header efanayo iyahluka {"sats": 237, "status": "open", "expires_at": "..."}.
  • I-Token ingasetshenziswa ku-maximum ye-60 amaminithi ngenyanga.
  • Hlola ku nym. Hlola ku Thola i-cadeau ku-Nymbot app, noma ukubiza POST /api/v1/l402/refunds/redeem Nge A Isicelo sokubhalisa futhi {"refund_token": "REFUND-...", "balance": "standard"} (Uma "pro"). I-credits ephelele iye ku-balance (10 i-sats ngamunye ku-standard, i-100 ku-Pro); i-sats eyenza i-credit ephelele ku-token ye-API requests.

cURL

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

Ukuphendula

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