Ipilẹ imo onibara
Oṣuwọn, Top-ups ati Key
Ṣayẹwo ohun ti o ni, ṣayẹwo lori Lightning, ṣayẹwo laifọwọyi lati rẹ owo, wo owo fun kọọkan ibeere, ati isakoso awọn key lati koodu.
Oju-iwe yii jẹ itumọ ẹrọ fun irọrun. Atilẹba Gẹẹsi jẹ ẹya ti o kan.
Ṣayẹwo awọn iṣakoso
Bi awọn iṣeduro rẹ, ati bi o ti o ni owo ti iṣeduro ti a ti lo.
GET https://nymbot.ai/api/v1/credits/balance — O nilo a API key. POST ṣiṣẹ, fun awọn onibara ti o tẹsiwaju.
balance ni awọn mejeeji iṣakoso ni dollars ni ojoojumọ Bitcoin owo, fun awọn ọja ti o ba fẹ a nikan nọmba (null awọn owo ko le wa ni ko le ṣẹlẹ). Awọn oṣuwọn jẹ ni iye ati iye, eyiti o jẹ bi awọn iye ti wa ni o wa ni o wa. key Ti o ba tẹsiwaju awọn aṣayan ti o ba tẹsiwaju awọn aṣayan ti o ba tẹsiwaju awọn aṣayan ti o tẹsiwaju.
àwárí
{
"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"
}
}
| olubasọrọ | akojọ |
|---|---|
401 | Ọrọìwòye jẹ ko tọ, ko mọ, ti wa ni ifọwọkan tabi ti wa ni ipamọ. |
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);
Iṣakoso iṣowo
Ṣugbọn ti o le ṣẹda, ati awọn agbegbe. Lightning jẹ ọna nikan.
GET https://nymbot.ai/api/v1/topup/payment-methods Nibẹ ni ko si awọn key nilo.
A top-up ni 10 to 1,000,000 sats; a Pro top-up ni lati ra ọkan ninu ọkan Pro iroyin, ki o si bẹrẹ ni 100 sats. bulk_bonus Ti o ba tẹsiwaju awọn gbigbe owo lori awọn top-ups ti o tobi, gẹgẹ bi ninu awọn app: 10%, 15% tabi 20% siwaju sii lori awọn top-ups ti o tobi lati 500, 1,000 tabi 5,000 sats, ati lori awọn top-ups Pro lati 5,000, 10,000 tabi 50,000 sats.
àwárí
{
"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);
Ti o ba tẹsiwaju lori Lightning
Ṣe a Lightning iroyin eyi ti o fi iroyin si awọn nym ti awọn key ni. Pay o lati eyikeyi Lightning wallet, ki o si Ṣayẹwo Ti o ba tẹsiwaju gbigbe gbigbe.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning — O nilo a API key.
| Orilẹ-ede | Àwọn ẹka | Wọle | Ọrọìwòye |
|---|---|---|---|
amount | nọmba | Bẹẹni | Ọpọlọpọ, ni currencyỌpọlọpọ awọn nọmba fun sats. |
currency | ọrọìwòye | miiran | SATS Ti o ba tẹsiwaju, USD Wọn BTCDollars ti wa ni yipada ni ojoojumọ Bitcoin price. |
tier | ọrọìwòye | miiran | pro (Ti o ba tẹsiwaju) tabi standard: ni iye owo ti o ba wa. |
A iṣakojọpọ Standard jẹ 10 sats ati a Pro iṣakojọpọ 100 sats, plus eyikeyi bulk ajeseku;
credits Ti o ba tẹsiwaju pe o yoo fi yi iroyin.
àwárí
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| olubasọrọ | akojọ |
|---|---|
400 | Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii (unsupported_method), a ti ko mọ owo (unsupported_currencyTi o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.amount_too_small), diẹ sii ju 1 000 000 sats (amount_too_largeTi o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.amount_out_of_range). |
429 | Ti o ba tẹsiwaju sii ju 60 iroyin fun yi nym, tabi 120 lati yi adirẹsi, ni wakati kan (rate_limit_exceededmiiran Retry-After). |
502 | Ti o ba tẹsiwaju lilọ kiri aaye (invoice_unavailablemiiran 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);
Ṣayẹwo awọn top-up
Ṣayẹwo ti o ba ti o ti wa ni owo ati, lẹhin ti o ni, fi awọn iroyin. Ṣayẹwo ni ohun ti o gbọdọ o, ki lẹhin ti o ti wa ni owo, ṣayẹwo nigba ti awọn iroyin creditedṢayẹwo siwaju sii lẹhin ti o jẹ ailewu: awọn gbigba gbigba kan, bi daradara ti o ba fẹ.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} — o nilo a key lati awọn nym ti ṣe awọn iroyin.
status O si pending (Tẹlẹ ko ṣayẹwo ṣee ṣe), paid (Tọkasi, ṣugbọn ko ṣugbọn ko siwaju sii; tẹsiwaju siwaju sii), credited (Ninu awọn aṣa rẹ) tabi expired Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.
àwárí
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| olubasọrọ | akojọ |
|---|---|
400 | Awọn id ko jẹ id 64-ọkan lati awọn gbigbọn. |
404 | Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.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);
Tẹle akọkọ
Ọkan akọkọ fun ibeere: ohun ti o jẹ, eyikeyi awoṣe, ọpọlọpọ awọn tokens ati eyikeyi iye o wa. Ko si ifọwọsi tabi awọn ifọwọsi ti wa ni a ṣe, ki o si ko ba wa ni ifọwọsi. Awọn akọkọ ti wa ni a ṣe fun 90 ọjọ, titun ni akọkọ. A key ti o ti ni ifọwọsi kan ti o ti wa ni ṣiṣe.
GET https://nymbot.ai/api/v1/queries/history — o nilo a API key, eyi ti o ri awọn ibeere rẹ, tabi a Ọrọìwòye Ti o ba tẹsiwaju lati rẹ nym, eyi ti o ri gbogbo awọn key.
| Orilẹ-ede | Àwọn ẹka | Wọle | Ọrọìwòye |
|---|---|---|---|
page | awọn ọja (query) | miiran | Default 1, ni o pọju 1,000; aaye ti o tobi jẹ 400 invalid_value. |
page_count | awọn ọja (query) | miiran | Rọba fun iwe. Default 20, ni o pọju 100. |
start_dateend_date | Ọrọigbaniwọle | miiran | ISO 8601 awọn ọjọ tabi akoko. |
model | Ọrọigbaniwọle | miiran | O jẹ nikan awoṣe yii. |
type | Ọrọigbaniwọle | miiran | chat, responses, messages, image, video, speech, transcription Wọn embedding. |
all_keys | awọn ọja (Query) | miiran | Nipa awọn key: true Ṣatunkọ awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara. Default false. |
key_id | Ọrọigbaniwọle | miiran | Ni ibamu pẹlu ifiranṣẹ, tabi pẹlu all_keys=true: nikan yii key. |
àwárí
{
"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);
Awọn ifiranṣẹ akọsilẹ
Ṣiṣe, yipada ati yipada awọn key, awọn iroyin iroyin ati awọn awotẹlẹ top-ups ko gba a API key. Nwọn gba a ifihan lati rẹ nym, ki o si a ti fi sori ẹrọ key le tẹsiwaju to rẹ cap ṣugbọn ko le ṣiṣe kan siwaju sii key tabi mu rẹ cap.
Awọn app ṣe eyi fun o: gbogbo ninu rẹ ọrọìwòye Ọrọìwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòw
Awọn iwe-aṣẹ jẹ iṣowo Nostr ti iru 27235 (NIP-98), ti a fi sori ẹrọ nipasẹ base64 ninu awọn iwe-aṣẹ
Authorization Header pẹlu awọn ọrọ Nostr Ti o tẹsiwaju:
akojọ
{
"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": "..."
}
uti wa ni kikun URL ti awọn ifiranṣẹ, ifiranṣẹ string pẹlu, nikan bi ti a fi sori ẹrọ.methodO jẹ ọna HTTP.payloadni SHA-256 ti awọn ohun elo iṣoro, ni hex. O ti wa ni gbọdọ loriPOSTatiPATCHTi o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.created_ato yẹ ki o wa ni laarin 60 iṣẹju ti awọn onibara akoko.- Gbogbo awọn iṣẹ ṣiṣẹ ọsẹ kan, a
GETni, ki a ko le ṣeto titun titun. Tẹ titun titun fun kọọkan ibeere. Fi anonceawọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara. - Awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara
Content-Type: application/json.
Ọrọigbaniwọle Aṣa 401 missing_nostr_auth; ọkan ti o ti wa ni iyanu, ti o ti wa ni iyanu, ti o wa ni iyanu, tabi fun orisirisi URL, ọna tabi iru awọn iroyin
invalid_nostr_authTi o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.
nostr_auth_replayed. A API key ti a fi sori ẹrọ si awọn ipo wọnyi ti wa ni fi sori ẹrọ. Iṣakoso ti wa ni tẹle ṣaaju ki o to awọn ibi ti wa ni kọ, ati kọọkan adirẹsi le fi sori ẹrọ 30 igba fun iṣẹju (a IPv6 adirẹsi tẹsiwaju bi awọn oniwe-ọna /64); lẹhin ti o gba 429 akojọ
Retry-After.
Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa (https://nymbot.ai,
https://nymchat.app Aaye lori eyikeyi aaye miiran yoo ko gba awọn titẹri CORS lẹhin, ki o si ko le ṣayẹwo ohun ti o gba. Scripts ati awọn apps native, eyi ti yoo ko fi
OriginTi o ba tẹsiwaju.
Ti o ba tẹsiwaju ti o ba wa ni nym's secret key (ti o nsec), eyi ti iṣakoso gbogbo nkan: awọn ẹya ara rẹ, awọn akọkọ rẹ ati awọn iṣakoso rẹ. O kan fi o ninu a script lori ẹrọ ti o gbọdọ, ṣayẹwo o lati awọn agbegbe ki o si fi o si fi o si awọn faili, ati ki o tẹsiwaju awọn app nigbati o le.
Awọn olumulo wọnyi ṣeto awọn titẹ. Awọn igbeyewo lẹhin lori iwe yi lo wọn. Awọn olumulo wọnyi ṣeto awọn titun titẹ ni hex lati NOSTR_SECRET_HEX; awọn cURL ọkan nlo awọn
akojọ awọn ọna asopọ, eyi ti o ni nsec tabi hex key, ati sha256sum Nipa awọn 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");
}
Iṣakoso Account
Ohun ti awọn app API sheet fihan ni oke: rẹ Public key, mejeeji owo, ọpọlọpọ awọn key ti wa ni ifọwọkan (ni ko ti wa ni ifọwọkan tabi ti o ti wa ni ifọwọkan), ati awọn Oṣuwọn Top-Up awọn iroyin, tabi
null Ti o ba tẹsiwaju pe server ko pese wọn.
GET https://nymbot.ai/api/v1/account O nilo a Ọrọìwòye.
àwárí
{
"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());
Iṣakoso awọn Key
Ti o ba tẹsiwaju awọn ipo ibi ti awọn app. Gbogbo wọn nilo a ỌrọìwòyeGbogbo awọn key ti wa ni ifowosowopo ni yi fọọmu, pẹlu awọn akoko ni ISO 8601 ati awọn iye ni sats:
awọn ọja
{
"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 Ti o ba tẹsiwaju lati mọ a kẹta ṣugbọn ko lo o. Awọn kẹta yii ti wa ni gba nikan, nigba ti o ba ti wa ni ṣe.
Ẹrọ Key
GET https://nymbot.ai/api/v1/keys O ṣeun.
| Orilẹ-ede | Àwọn ẹka | Wọle | Ọrọìwòye |
|---|---|---|---|
include_revoked | awọn ọja (Query) | miiran | Ṣatunkọ awọn ẹya ara ẹrọ. Default false. |
àwárí
{ "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);
Ṣiṣe awọn key
POST https://nymbot.ai/api/v1/keys Ti o ba tẹsiwaju 201.
| Orilẹ-ede | Àwọn ẹka | Wọle | Ọrọìwòye |
|---|---|---|---|
name | ọrọìwòye | Bẹẹni | 1 to 40 awọn ẹya ara, o yatọ si awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara (awọn iṣoro). |
limit_sats | Oṣuwọn | miiran | Ti o ba tẹsiwaju awọn iṣeduro ti o ba tẹsiwaju, o ba tẹsiwaju awọn iṣeduro ti o ba tẹsiwaju awọn iṣeduro. |
reset_period | ọrọìwòye | miiran | daily, weekly Wọn monthlyawọn ibeere limit_satsTi o ba tẹsiwaju fun a cap ti ko ba fi sori ẹrọ. |
expire_at | Ọrọigbaniwọle or integer | miiran | Ti o ba ṣiṣẹ: ISO 8601 akoko, tabi milliseconds niwon 1970. |
Ọrọìwòye (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"
}
}
| olubasọrọ | akojọ |
|---|---|
400 | Ọrọigbaniwọle ti o ba tẹsiwaju lati ṣayẹwo (duplicate_name); a cap ti ko jẹ nọmba eniyan ti o kere ju 1; a reset akoko laisi a cap; a gbigbe ni akọkọ; a agbegbe ti ko mọ (unknown_parameter); tabi 25 awọn ẹya ara ẹya ara (too_many_keys). |
429 | Ti o ba tẹsiwaju sii ju 60 awọn aṣayan ti a ṣe nipasẹ yi nym, tabi 120 lati yi adirẹsi, ni wakati kan (rate_limit_exceededmiiran 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);
Ṣayẹwo kan key
GET https://nymbot.ai/api/v1/keys/{id} O ṣeun.
awọn iroyin {"data": {…}} awọn ẹya ara ẹrọ, tabi 404
key_not_found Ti o ba ti ko si wa ni 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);
Ṣayẹwo awọn key
PATCH https://nymbot.ai/api/v1/keys/{id} O ṣeun.
Ṣiṣe eyikeyi name, limit_sats, reset_period ati
expire_atNi ibamu pẹlu awọn ẹya ara ẹrọ bi o ṣe awọn key. null Ti o ba tẹsiwaju pe o ba tẹsiwaju pe o ba tẹsiwaju pe o ba tẹsiwaju pe o tẹsiwaju pe o tẹsiwaju pe o tẹsiwaju pe o tẹsiwaju pe o tẹsiwaju (400 key_revokedaṣiṣe
{"data": {…}} Ṣatunkọ si awọn Key Object.
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);
Ṣayẹwo awọn key
DELETE https://nymbot.ai/api/v1/keys/{id} O ṣeun.
Ṣatunkọ awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara revoked_at Ṣatunkọ, ati ki o le ri pẹlu include_revoked=trueTi o ba wa ni 50 awọn titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun tit
àwárí
{ "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());
Awọn ọja NWC Auto-top-up
Ṣayẹwo a Lightning wallet pẹlu Nostr Wallet Connect ati Nymbot lọ si iṣeduro nikan nigba ti API iṣeduro ṣiṣe o ni kekere. Awọn apẹẹrẹ API ti awọn app ni o ni awọn iṣeduro kanna; awọn wọnyi ni awọn iṣeduro lẹhin o. Gbogbo wọn nilo Ọrọìwòye.
Bi o ṣiṣẹ: lẹhin ti a API ibeere ti wa ni gbọdọ si iye owo ti o fẹ lati wo, ti o ba ti iye owo ni isalẹ awọn iye owo rẹ, Nymbot ṣe iroyin fun iye owo rẹ, gbọdọ awọn owo rẹ lati fi o, ati fi awọn iroyin. O gbọdọ si ọpọlọpọ ọkan ninu 5 iṣẹju fun kọọkan nym ati iye owo, ki a gbọdọ awọn ibeere ko le fi oju awọn owo. Iye ni awọn apps ko ṣẹda o. Awọn akoko ati iwọn ti awọn ti akọkọ owo, ati awọn ti akọkọ iṣoro, wa ni ninu awọn ipo; ti o ba gbọdọ lọ si lẹhin iṣoro, tẹsiwaju iro Iwọn Top-Up O gbọdọ.
A ifowosowopo ifowosowopo le kọọkan ti o ni lati wo rẹ wallet lati fi owo. Nymbot iṣakoso o ni aifọwọyi ati nikan nlo o lati fi owo rẹ top-up ifowosowopo, ṣugbọn ṣe a ifowosowopo nikan fun yi, pẹlu a owo owo ni rẹ wallet, ki o si julọ ti o le ṣee ṣe owo jẹ nọmba ti o tọju. pay_invoice.
Ṣiṣakoso awọn wallet
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect O ṣeun.
| Orilẹ-ede | Àwọn ẹka | Wọle | Ọrọìwòye |
|---|---|---|---|
nwc_url | ọrọìwòye | Bẹẹni | awọn ọna asopọ, bẹrẹ nostr+walletconnect://Nymbot fẹ awọn wallet fun get_info Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa. |
threshold_sats | Oṣuwọn | Bẹẹni | Ti o ba tẹsiwaju ki o ba ti o ba tẹsiwaju owo ti o ba tẹsiwaju owo ti o ba tẹsiwaju owo ti o ba tẹsiwaju 1000. |
topup_sats | Oṣuwọn | Bẹẹni | Ti o ba tẹsiwaju ni owo kan. 1,000 to 1,000,000 sats. |
tier | ọrọìwòye | miiran | pro (Ti o ba tẹsiwaju) tabi standard: awọn iṣakoso lati wa ni ati top up. |
àwárí
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| olubasọrọ | akojọ |
|---|---|
400 | Ti o ba tẹsiwaju lilọ kiri (invalid_nwc_url); owo owo ko ni atilẹyin nipa relay rẹ (nwc_unreachable) tabi rejected awọn iṣakoso (nwc_rejected); awọn ibaraẹnisọrọ ko le ṣayẹwo owo (nwc_missing_permission); tabi owo diẹ sii ju awọn agbegbe. |
501 | Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa. (nwc_unavailableNi ibamu si awọn miiran meji ipo. |
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());
Ṣayẹwo awọn Settings
GET https://nymbot.ai/api/v1/nwc-auto-topup O ṣeun.
Gba awọn ẹya ara ẹya ara ẹya ara ẹya, pẹlu connected: false Awọn agbegbe miiran
null Ti o ba tẹsiwaju pe ko si wiwọle. Awọn wiwọle ti o ba wa ni ko si wiwọle.
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());
Iṣakoso
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection O ṣeun.
Ṣayẹwo awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹ
àwárí
{ "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());
Owo fun awọn ibeere laisi awọn key
The fixed-price endpoints le wa ni owo fun ọkan ibeere ni akoko nipa Lightning, pẹlu ko si key, ko si iroyin ati ko si owo: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations ati POST /embeddingsChat, Awọn ifiranṣẹ, ati Awọn ifiranṣẹ ni gbogbo nilo a kẹkẹ. A ifiranṣẹ ti o ni a kẹkẹ ti wa ni gbọdọ si awọn owo bi o ti wa ni iṣowo; awọn owo akọkọ nikan bẹrẹ nigba ti ko ba wa awọn kẹkẹ.
Nymbot fọwọsi meji ti awọn idena kanna, lati ọkan backend: Lightning Labs '
awọn ọja 402 (Tẹsiwaju lilọ kiri aaye ayelujara yii) LSAT) ati awọn IETF oniru
àwárí HTTP authentication eto pẹlu awọn lightning Ọna ati
charge Ti o ba tẹsiwaju ti o ba tẹsiwaju.
Ṣayẹwo laisi awọn key jẹ nikan ni akọkọ nigba ti API_L402_SECRET o ni o kere 32 awọn byte ti o wa, gẹgẹbi hex (64 awọn ẹya ara) tabi base64 (44). openssl rand -hex 32Ọpọlọpọ awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara API_L402_SECRET_PREVIOUS fun ọjọ kan: awọn iroyin, awọn URL iroyin ati awọn iṣoro ti a ṣe nipa o tun ṣiṣẹ nigba ti wọn ti wa ni ipamọ.
Ọrọìwòye
Ṣayẹwo awọn ibeere pẹlu No Authorization ojuami. Ti o ba wa ni gidi, ko siwaju, ati awọn ti o gba 402 Payment Required pẹlu ifowosowopo fun nikan ohun ti awọn ibeere owo: owo kanna a key yoo pese, ti a ṣe ni 10 sats a iye owo tabi 100 sats a Pro iye owo ati ki o gbigbe si kanna sat (ni o kere 1 sat, ati awọn o kere 0.05 iye owo kekere). WWW-Authenticate Ọrọigbaniwọle fun awọn wọnyi:
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 }
}
owo owo request awọn parameter ni base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
Ọrọigbaniwọle ni ibamu si awọn endpoint, si awọn Content-Type (ti awọn media ati, fun awọn multipart, awọn oniwe-ọna) ati si awọn SHA-256 ti awọn ẹya ara ti o ti fi sori ẹrọ, ati awọn ti o wa ni 15 iṣẹju. Lẹhin ti o gba, fi awọn Ọrọìwòye Ọrọìwòye: The same
Content-Type Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa./images/edits, /audio/transcriptions, /audio/translationsỌpọlọpọ awọn HTTP libraries gba a titun titun titun ni gbogbo igba ti won koodu a fọọmu, ki o si koodu o kan akọkọ ati fi awọn baiti wọnyi meji.
Gbogbo adirẹsi le fẹ lati 30 iṣoro fun iṣẹju kan (a IPv6 adirẹsi ni oye bi awọn oniwe-ọna /64). Iṣoro ti awọn adirẹsi ti o ko ba wa ni mọ ni o wa kan diẹ ẹ sii 10 fun iṣẹju, ati nibẹ ni o wa kan iyipada lori awọn iṣoro Nymbot awọn iṣoro lori gbogbo awọn adirẹsi; a gbiyanju ti a ti fi sẹyin ṣaaju ki o to a iṣoro (fun apẹẹrẹ pẹlu kan ti o ko wa ni JSON ti wa ni o wa). 429 akojọ Retry-AfterṢatunkọ awọn iṣeduro ti o ba ni ko ni aifọwọyi tabi iroyin ti o tun tẹsiwaju si atilẹyin 120 ti awọn iroyin ti ko ni aifọwọyi fun iṣẹju fun iroyin. A iroyin ti wa ni tẹsiwaju ṣaaju ki o to awọn iroyin ti o wa ni aifọwọyi, ati awọn iroyin ti o ti wa ni Content-Type Wọn ni application/json (Awọn
multipart/form-data Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa. 415 Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.
Embeddings ti wa ni owo nipasẹ a iye ti awọn tokens ni awọn input, pẹlu a 1.5× marun, bi awọn ti o ti wa ni mọ nikan lẹhin. O ba ti wa ni owo fun awọn tokens ti o ti ṣee lo, ati awọn ti o ti wa ni ko lo ti awọn owo ti wa ni a Tẹle tẹlifoonu.
Ṣayẹwo awọn owo
Ṣayẹwo awọn ifowosowopo pẹlu eyikeyi Lightning wallet. Awọn ifowosowopo nfun awọn preimage, 64 hex characters. Lẹhinna fi ọrọ kanna pẹlu ọkan ninu awọn wọnyi:
| awọn eto | Oṣuwọn |
|---|---|
| awọn ọja 402 | Authorization: L402 <macaroon>:<preimage> (LSAT O si ṣiṣẹ) |
| àwárí | Authorization: Payment <base64url JSON>Ti o ba wa ni JSON {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
A gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ nymbot
Obirin ko ni awọn agbegbe: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}O si nibẹ ni X-Nymbot-Balance-Sats aṣeyọri. Aṣeyọri ti o ṣe pẹlu aṣeyọri eto tun gba a Payment-Receipt akojọ (base64url JSON pẹlu id aṣayan, awọn owo hash bi reference, status ati
timestamp). Awọn ibeere owo ko ti wa ni ifojusi si eyikeyi nym, nitorina wọn ko ṣii ni akọsilẹ awọn ibeere.
| olubasọrọ | akojọ |
|---|---|
402 payment_already_used | Gbogbo iyipada owo fun ọkan ifiranṣẹ. Awọn ifiranṣẹ jẹ ifiranṣẹ titun fun ifiranṣẹ yii, nitorina awọn onibara ti o ti fi awọn ifiranṣẹ ti o ti tẹsiwaju (ni bi lnget Ti o ba tẹsiwaju tẹsiwaju tẹsiwaju. |
402 payment_mismatch | Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, Content-Type Orilẹ-ede, tabi o fẹ diẹ ẹ sii ju ibeere yii bayi owo. A titun iṣoro fun ibeere yii wa pẹlu o; ti o ba ti awọn owo ti o ti wa ni kekere, eyi ti o ti fi fun wa lọ bi a Tẹle tẹlifoonu (refund_token ati refund_sats O si ninu ara rẹ). |
402 payment_expired | Ọpọlọpọ awọn iṣẹju ti o wa ni diẹ sii ju 15 iṣẹju niwon awọn iṣoro. Ọpọlọpọ awọn iṣoro ti o ba wa pẹlu o. Ti o ba ti o ba fihan awọn iroyin ti o ti wa ni owo, eyi ti o ti wa ni owo ti o ba wa ni owo. Tẹle tẹlifoonu (refund_token ati refund_sats Ati awọn ti o ba tẹsiwaju; awọn ti o ba tẹsiwaju; awọn ti o ba tẹsiwaju. |
401 invalid_preimage | Awọn preimage ko hash si awọn owo owo hash. Awọn owo ko ti wa ni lilo. |
401 invalid_payment_credential | Awọn iroyin ti wa ni iṣeduro, ti a ti mu lẹhin ti Nymbot ṣe o, tabi awọn orukọ ti o ṣe ni owo ti Nymbot ko ṣe iṣeduro fun. A macaroon pẹlu a iṣeduro Nymbot ko mọ, tabi pẹlu awọn iṣeduro ti o wa ni iṣeduro, ti wa ni fẹ. |
429 rate_limit_exceeded | Diẹ ẹ sii ju 30 awọn ẹya ara ẹrọ tabi awọn ẹya ara ẹrọ ti o ti ko ṣe atilẹyin lati yi adirẹsi ni iṣẹju kan, tabi ọkan gbigbe tita ti a fi sori ẹrọ diẹ sii ju 60 igba fun iṣẹju kan. 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"));
Awọn onibara ti iṣeto ni mppx pẹlu a Lightning ọna lati ṣakoso awọn Payment challenge wọn; tẹ wọn si awọn ipo ibi ati ki o fi wọn owo.
awọn fidio
owo owo POST /videos àwárí 202 bi a kẹkẹkẹtẹ, plus a
status_url: GET Ti o ba ti ko ni eyikeyi kọọkan lati tẹsiwaju iṣẹ. O ti wa ni tẹsiwaju ati ṣiṣẹ fun 24 wakati, nigba ti o ba wa iṣẹ.
{
"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..."
}
}
Ṣayẹwo awọn refund_token Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.GET /api/v1/l402/refunds àwárí "status": "pending"); ṣugbọn ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba
refund_sats fun iṣẹ ti o ṣe atilẹyin, ṣugbọn ko si awọn token, ki o si ṣayẹwo awọn URL ti iṣowo ko ṣayẹwo awọn atilẹyin.
Oṣuwọn
Ti o ba wa ni aṣeyọri gbigbe ati awọn provider gbigbe Nymbot fun awọn igbeyewo, owo ti wa ni ti wa ni ti wa ni aṣeyọri ati awọn igbeyewo wí pé, pẹlu charged_sats, gẹgẹ bi fun a kẹkẹsẹ ifiranṣẹ. Ti o ba ti o ba ti wa ni ko ni gbọdọ, awọn iṣoro Tẹle tẹlifoonu Ti o ba tẹsiwaju owo ti o ṣe:
{
"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"
}
}
Awọn ẹya-ara ti a ti wa ni ko lo wa ni ọna kanna: ti o ba fẹ lati gba meji awọn fọto ati ọkan ti a ti fi sori ẹrọ, awọn ifiranṣẹ ti nymbot awọn ohun elo nlo a tẹtẹ tẹtẹ fun awọn ti o fẹ; a tẹtẹtẹ ti o ko le ṣee le ṣee le ṣee ṣe akọkọ ti o wa ni akoko kan ju awọn faili le wa ni (ni ko siwaju sii ju 30 iṣẹju), ati awọn iyipada si awọn ti o ti wa ni o wa ti wa ni tẹtẹ tẹtẹ tẹtẹ bi a tẹtẹtẹ tẹtẹtẹ; ti o ba fẹ lati wa siwaju sii ju 30 iṣẹju, o ti wa ni tẹtẹ pẹlu 413
Ti o ba tẹsiwaju si awọn aṣayan ti o ba tẹsiwaju si awọn aṣayan ti o ba tẹsiwaju si awọn aṣayan ti o tẹsiwaju.
A tẹsiwaju tẹsiwaju jẹ koodu iyanu 256-bit. Nymbot tẹsiwaju nikan awọn hash rẹ, ati awọn ti o ti wa ni ipamọ lẹhin 30 ọjọ. O ni o ni a sat iye, ati awọn ti o le:
- Ṣayẹwo pẹlu o. Ṣayẹwo
Authorization: Bearer REFUND-…Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.refund_token_satsNinu awọnnymbotObirin). A token ni o wa diẹ ẹ sii ju awọn ibeere yan402refund_insufficientAṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣi. - Ṣayẹwo o.
GET /api/v1/l402/refundsNi ibamu pẹlu awọn header yii{"sats": 237, "status": "open", "expires_at": "..."}. - Ọkan token le ṣee lo to 60 igba fun iṣẹju.
- Ṣayẹwo o si awọn nym. Ṣayẹwo o si Ṣayẹwo awọn ajeseku ni app Nymbot, tabi fi
POST /api/v1/l402/refunds/redeemNipa a Ọrọìwòye ati{"refund_token": "REFUND-...", "balance": "standard"}(Awọn"pro"Gbogbo awọn iroyin lọ si awọn iṣura (10 iroyin kọọkan lori iṣura, 100 lori Pro); iroyin ti ko ṣe a gbogbo iroyin gbọdọ lori awọn token fun API ibeere.
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"
àwárí
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }