Isi ihe ọmụma Ndị na-arụ ọrụ
Ọdịdị, top-ups na keys
Nyocha ihe ị nwere, na-agba ọsọ Lightning, na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.
A sụgharịrị ibe a n'igwe maka ịdị mma. The English mbụ bụ ụdị nke na-emetụta.
Nyocha ego
Ndị abụọ gị ego, na ihe ọ bụla nke a keys cap na-eji.
GET https://nymbot.ai/api/v1/credits/balance Ị chọrọ a API Key. POST na-arụ ọrụ, maka ndị ahịa na-atụ aro ya.
balance bụ ndị abụọ ego na-agụnye na dollars na ugbu a Bitcoin price, maka ngwá ọrụ na-atụle otu nọmba (null Ọ dịghị ka price nwere ike ịhụ). The ọzọ bụ na credits na sats, nke bụ otú ego na-eme kachasị. key Ọ bụrụ na ị na-agba ọsọ ya, a na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.
nzọụkwụ
{
"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"
}
}
| ọnọdụ | mgbe |
|---|---|
401 | The key bụ na-adịghị, unknown, revoked ma ọ bụ tupu. |
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);
Ịkwụ Ụgwọ Methods
How you can top up, na ụkpụrụ. Lightning bụ otu usoro.
GET https://nymbot.ai/api/v1/topup/payment-methods Ọ dịghị mkpa.
A top-up bụ 10 ka 1,000,000 sats; a Pro top-up kwesịrị ịzụta ọ dịkarịa ala otu Pro credit, otú ọ na-amalite na 100 sats. bulk_bonus na-agụnye ego ọzọ na nnukwu top-ups, otu dị ka na ngwa: 10%, 15% ma ọ bụ 20% ọzọ na standard top-ups site na 500, 1,000 ma ọ bụ 5,000 sats, na na Pro top-ups site na 5,000, 10,000 ma ọ bụ 50,000 sats.
nzọụkwụ
{
"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);
Topping Up N'elu Lightning
Na-eme ka a Lightning akaụntụ nke na-agbakwunye ego na nym nke isi bụ. Pay ya site na ọ bụla Lightning wallet, mgbe ahụ Tinye ya iji nweta credit.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning Ị chọrọ a API Key.
| Ọnọdụ | ụdị | Nlekọta | Nkọwa |
|---|---|---|---|
amount | nọmba | Ee | Ọnụ ọsọ, na currencyỌnụ ọnụ ọgụgụ niile maka sats. |
currency | Ọnwa | Ọ dịghị | SATS (Ọ na-adịghị mma) USD ọ BTCDollars na-agbanwe na ugbu a Bitcoin price. |
tier | Ọnwa | Ọ dịghị | pro (ụzọ dịghị) ma ọ bụ standard: nke ego na-akwụ ụgwọ na-aga n'ihu. |
A Standard Credit bụ 10 sats na a Pro Credit 100 sats, plus ihe ọ bụla bulk bonus;
credits na-ekwu na ihe a na-agụnye.
nzọụkwụ
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| ọnọdụ | mgbe |
|---|---|
400 | Otu n'ime ụzọ ọzọ (unsupported_method), a unknown ego (unsupported_currency) ma ọ bụ tier, a na-adịghị ọnụ ọgụgụ, ma ọ bụ ọnụ ọgụgụ n'okpuru ala (amount_too_small), ihe karịrị 1 000 000 tupu (amount_too_large) ma ọ bụ na-agba ọsọ site na Lightning wallet (amount_out_of_range). |
429 | Ihe karịrị 60 akaụntụ maka a nym, ma ọ bụ 120 site na adreesị a, na awa (rate_limit_exceededN'ihi na Retry-After). |
502 | Ọ dịghị akaụntụ nwere ike ime ugbu a (invoice_unavailableN'ihi na Retry-After). |
cURL
curl https://nymbot.ai/api/v1/topup/create/btc-lightning \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"amount": 10000, "currency": "SATS", "tier": "pro"}'
Python
import os
import requests
res = requests.post(
"https://nymbot.ai/api/v1/topup/create/btc-lightning",
headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
json={"amount": 10000, "currency": "SATS", "tier": "pro"},
)
invoice = res.json()
print(invoice["payment_request"])
JavaScript
const res = await fetch("https://nymbot.ai/api/v1/topup/create/btc-lightning", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ amount: 10000, currency: "SATS", tier: "pro" }),
});
const invoice = await res.json();
console.log(invoice.payment_request);
Ịchọpụta a top-up
Ọ na-akpọ ma ọ bụrụ na akaụntụ a na-akwụ ụgwọ na, mgbe ọ nwere, na-agụnye ego. Checking bụ ihe na-akwụ ụgwọ ya, ya mere mgbe ị na-akwụ ụgwọ, na-akwụ ụgwọ ruo status creditedChecking ọzọ mgbe ahụ bụ mma: na-akwụ ụgwọ otu oge, ma ọ bụrụ na ọtụtụ ugboro ị na-achọ.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - na-achọ a kpọmkwem si nym na-eme aka.
status Ọ bụ pending (N'ihi na ị na-adịghị ịkwụ ụgwọ), paid (Tinye, ma ọ bụghị na-akwụ ụgwọ; kpọtụrụ ugbu a), credited (na gị ego) ma ọ bụ expired (Ọ dịghị ịkwụ ụgwọ na oge). Ọdịdị ụlọ bụ maka nzọụkwụ na akaụntụ n'elu.
nzọụkwụ
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| ọnọdụ | mgbe |
|---|---|
400 | The id bụghị 64-karịta id si create na-akpọ. |
404 | Ọ dịghị akaụntụ site na id maka 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);
Ịhụnanya History
Otu akara per request: ihe ọ bụ, nke ụdị, ọtụtụ tokens na ihe ọ na-eri. Ọ dịghị nkwurịta okwu ma ọ bụ jụrụ, otú ọ dịghị na-atụ anya. A na-achịkwa akara maka 90 ụbọchị, ọhụrụ mbụ. A na-agba ọsọ ya nwere ike nweta akụkọ ihe mere eme ya.
GET https://nymbot.ai/api/v1/queries/history — mkpa a API key, nke na-ahụ ya onwe ya chọrọ, ma ọ bụ a Nkọwa ajụjụ site na nym gị, nke na-ahụ ihe niile nke key.
| Ọnọdụ | ụdị | Nlekọta | Nkọwa |
|---|---|---|---|
page | Ọnụ ọgụgụ (query) | Ọ dịghị | Default 1, na ihe karịrị 1,000; a elu page bụ 400 invalid_value. |
page_count | Ọnụ ọgụgụ (query) | Ọ dịghị | Rows per page. Default 20, na ihe karịrị 100. |
start_dateend_date | ọkọlọtọ (Query) | Ọ dịghị | ISO 8601 ụbọchị ma ọ bụ oge. |
model | ọkọlọtọ (Query) | Ọ dịghị | Ọ bụ naanị ụdị a. |
type | ọkọlọtọ (Query) | Ọ dịghị | chat, responses, messages, image, video, speech, transcription ọ embedding. |
all_keys | Ọnụ ọgụgụ (Query) | Ọ dịghị | Na a Key: true na-agụnye ihe niile nke otu nym. Default false. |
key_id | ọkọlọtọ (Query) | Ọ dịghị | Na a na-akwụ ụgwọ, ma ọ bụ na all_keys=true: naanị nke a key. |
nzọụkwụ
{
"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);
Nkọwa akaụntụ chọrọ
Ịmepụta, ịmepụta na ịmepụta keys, akaụntụ nchịkọta na akpaka top-ups na-adịghị na-enweta API key. Ha na-enweta akara site na nym gị, otú a na-enweta keys nwere ike na-eme ka ya cap ma ọ dịghị ike ime ka a ọzọ keys ma ọ bụ na-eme ka ya cap.
The ngwa na-eme nke a maka gị: ihe niile na ya ọkụ Sheet na-eji ndị a na-agba ọsọ. Ị na-adịghị mkpa na akụkụ a iji gbasara keys si njikọ gị.
The akara bụ ihe Nostr nke ụdị 27235 (NIP-98), na-esonụ base64 na-akpali akpali akpali akpali
Authorization header na okwu Nostr na n'elu:
Ọnọdụ
{
"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": "..."
}
ubụ URL zuru ezu nke ajụjụ, ajụjụ string gụnyere, n'ụzọ zuru ezu.methodHTTP usoro.payloadbụ SHA-256 nke ihe na-atụ aro, na hex. Ọ dị mkpa naPOSTnaPATCH, na body ị na-esonụ ga-abụ byte maka byte nke ị hashed.created_atdị n'ime 60 sekọnd nke na-akwụ ụgwọ nke na-akwụ ụgwọ.- Ihe ọ bụla na-arụ ọrụ otu oge, a
GETna-agụnye, otú a na-egbochi header nwere ike na-egbochi. Na-egbochi a ọhụrụ maka onye ọ bụla chọrọ.noncetag na a random ọnụego ka abụọ chọrọ na-akpọ na otu sekọnd na-adịghị. - The body of a signed request nwere ike ịbụ n'elu 64 KB, na a body chọrọ
Content-Type: application/json.
Ọ dịghị ihe omume na-aga 401 missing_nostr_auth; otu nke na-adịghị mma, na-adịghị mma, na-adịghị mma, ma ọ bụ maka a dị iche iche URL, usoro ma ọ bụ body na-atụ anya
invalid_nostr_auth, na akụkọ ihe mere eme na ozi; a reused one returns
nostr_auth_replayedThe akara na-echekwa tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ tọhapụ 429 na
Retry-After.
Browsers nwere ike na-akpọ ndị endpoints a naanị site na saịtị Nymbot (https://nymbot.ai,
https://nymchat.app na subdomains ha). A page na ihe ọ bụla ọzọ na saịtị na-enweta ọ dịghị CORS headers n'ihu, otú ọ nwere ike ịhụ ihe ha na-ere. Scripts na native apps, nke na-enweta ọ dịghị
OriginỌ dịghị mmetụta.
Nkọwa mkpa gị nym's akara key (the nsec), nke na-akụziri ihe niile: nchịkọta gị, akụkọ ihe mere eme gị na ego gị. Na-eme ya n'ime akụkọ ihe mere eme na kọmputa ị na-akpali akpali, na-akpọ ya site na gburugburu ebe obibi karịa na-egosi ya n'ime faịlụ, na-akwado ngwa mgbe ị nwere ike.
Ndị ọrụ ndị a na-emepụta header. Ihe atụ ndị ọzọ na peeji nke a na-eji ha. Ha na-akpọ ihe siri ike na hex site na NOSTR_SECRET_HEX; The cURL a na-eji
Ọchịchị ikpeazụ akara ngwá ọrụ, nke na-ewe nsec ma ọ bụ hex key, na sha256sum Na 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");
}
Akaụntụ Nyocha
Ihe API sheet nke ngwa na-egosi na n'elu: gị public key, ndị a na-ekwe omume, ọtụtụ keys na-arụ ọrụ (adịghị na-atụ anya ma ọ bụ na-atụ anya), na Automatic ịgbado ọkụ ọnọdụ, ma ọ bụ
null Ọ bụrụ na ndị ọrụ na-adịghị na-enye ha.
GET https://nymbot.ai/api/v1/account Ị chọrọ a Nkọwa ajụjụ.
nzọụkwụ
{
"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());
Ngwaahịa Key
The endpoints n'okpuru list nke ngwa. All of them need a Nkọwa ajụjụOnye ọ bụla isi na-atụle na ụdị a, na oge na ISO 8601 na ego na sats:
Obere Object
{
"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 Ọ dị nnọọ iji hụ a key ma ọ bụghị iji ya. The key itself is returned only once, when it is made.
Ngwaahịa Key
GET https://nymbot.ai/api/v1/keys Na-ekwu
| Ọnọdụ | ụdị | Nlekọta | Nkọwa |
|---|---|---|---|
include_revoked | Ọnụ ọgụgụ (Query) | Ọ dịghị | Na-agụnye kpọmkwem. Default false. |
nzọụkwụ
{ "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);
Na-eme ka a Key
POST https://nymbot.ai/api/v1/keys N'ihi na ị na-ekwu, ị na-ekwu 201.
| Ọnọdụ | ụdị | Nlekọta | Nkọwa |
|---|---|---|---|
name | Ọnwa | Ee | 1 ka 40 akara, dị iche iche na ndị ọzọ na-arụ ọrụ keys gị (n'agbanyeghị ihe). |
limit_sats | Ntuziaka | Ọ dịghị | The ịkwụ ụgwọ cap na sats, ọ dịkarịa ala 1. Jiri ya n'ihi na ọ dịghị cap. |
reset_period | Ọnwa | Ọ dịghị | daily, weekly ọ monthlyỌnọdụ limit_sats.Tinye ya n'ihi na a cap na-adịghị reset. |
expire_at | string ma ọ bụ integer | Ọ dịghị | Ozugbo a na-agba ọsọ: a ISO 8601 oge, ma ọ bụ milliseconds site na 1970. |
Ịkwụ Ụgwọ (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"
}
}
| ọnọdụ | mgbe |
|---|---|
400 | Ọ dịghị aha ma ọ bụ nnọọ ogologo aha; a na-eji aha (duplicate_name); a cap nke na-adịghị ọnụ ọgụgụ dịkarịa ala nke nta 1; a reset oge na-enweghị cap; a na-agba ọsọ n'oge gara aga; a na-adịghị mma ala (unknown_parameter); ma ọ bụ 25 na-arụ ọrụ keys ugbu a (too_many_keys). |
429 | Ihe karịrị 60 keys mere site na a nym, ma ọ bụ 120 site na adreesị a, na otu awa (rate_limit_exceededN'ihi na Retry-After). |
cURL
URL=https://nymbot.ai/api/v1/keys
BODY='{"name":"laptop scripts","limit_sats":20000,"reset_period":"monthly"}'
curl "$URL" \
-H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
-H "Content-Type: application/json" \
-d "$BODY"
Python
import json
import requests
url = "https://nymbot.ai/api/v1/keys"
body = json.dumps({"name": "laptop scripts", "limit_sats": 20000, "reset_period": "monthly"}).encode()
res = requests.post(
url,
data=body,
headers={"Authorization": nostr_auth("POST", url, body), "Content-Type": "application/json"},
)
print(res.json()["data"]["key"])
JavaScript
const url = "https://nymbot.ai/api/v1/keys";
const body = JSON.stringify({ name: "laptop scripts", limit_sats: 20000, reset_period: "monthly" });
const res = await fetch(url, {
method: "POST",
headers: { "Authorization": nostrAuth("POST", url, body), "Content-Type": "application/json" },
body,
});
console.log((await res.json()).data.key);
Kpọtụrụ anyị
GET https://nymbot.ai/api/v1/keys/{id} Na-ekwu
ịkwụ ụgwọ {"data": {…}} na isi ihe, ma ọ bụ 404
key_not_found Ọ bụrụ na ị na-enweghị isi nke gị nwere 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);
Ịmepụta Key
PATCH https://nymbot.ai/api/v1/keys/{id} Na-ekwu
Kpọọ onye ọ bụla name, limit_sats, reset_period na
expire_at, na ndị dị otú ahụ dị ka mgbe na-eme ka a key. null na-egbochi ebe: enweghị cap, enweghị reset, enweghị ikpeazụ. Ọ na-agbanwe oge reset na-agba ọsọ oge ọhụrụ na zero. A na-agba ọsọ na-agba ọsọ na-agba ọsọ (400 key_revoked(Nyocha
{"data": {…}} na Key Object na-arụ ọrụ.
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);
Tinye a Key
DELETE https://nymbot.ai/api/v1/keys/{id} Na-ekwu
Ọ na-agba ọsọ na-ekpo ọsọ, maka mma. Ọ na-agba ọsọ na revoked_at set, na nwere ike ịhụ na include_revoked=trueOzugbo a na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ.
nzọụkwụ
{ "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 ọkọlọtọ
Kpọtụrụ ụfụfụ Lightning na Nostr Wallet Connect na Nymbot na-ekpuchi ego onwe ya mgbe API na-agba ọsọ ọsọ ọsọ. The ngwa API sheet nwere ugbu a njikọ; ndị a bụ n'ebe ọsọ n'okpuru ya. Ha niile mkpa a Nkọwa ajụjụ.
Olee otú ọ na-arụ ọrụ: mgbe a API chọrọ na-akwụ ụgwọ na ego ị na-ahọrọ ịhụ, ma ọ bụrụ na ego a na-abịa n'okpuru ụkpụrụ gị, Nymbot na-eme ka akwụ ụgwọ maka ego gị, na-akwụ ụgwọ ya, na-agba ọsọ akwụ ụgwọ. Ọ na-akwụ ụgwọ n'elu ugboro n'ime 5 nkeji maka onye ọ bụla nym na ego, n'ihi na ihe ọ bụla na-agba ọsọ na-agba ọsọ na-agba ọsọ. Ọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọsọ. Ọ na-agba ọsọ na-agba ọsọ na-agba ọsọ na-agba ọs Top-up ọnọdụ credit ya.
A njikọ string na-enye onye ọ bụla nwere ya na-achọ gị wallet ịkwụ ụgwọ. Nymbot na-egosi ya encrypted na ọ na-eji ya naanị ịkwụ ụgwọ ya onwe ya top-up akaụntụ, ma na-eme a njikọ naanị maka nke a, na a ịkwụ ụgwọ budget na gị wallet, otú ihe kasị ọ bụla nwere ike ịkwụ ụgwọ bụ a nọmba chere gị. The wallet nwere na-akwado pay_invoice.
Kpọtụrụ a wallet
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect Na-ekwu
| Ọnọdụ | ụdị | Nlekọta | Nkọwa |
|---|---|---|---|
nwc_url | Ọnwa | Ee | The njikọ string, na-amalite nostr+walletconnect://.Nymbot na-atụ aro na wallet maka get_info tọhapụ ya, na akwụsị ya encrypted. |
threshold_sats | Ntuziaka | Ee | Top up mgbe ego na-eri n'okpuru ndị a ọtụtụ sats. Ọnụ ọ bụla 1,000. |
topup_sats | Ntuziaka | Ee | Ọ bụrụ na ị na-agba ọsọ. 1,000 ka 1,000,000 sats. |
tier | Ọnwa | Ọ dịghị | pro (ụzọ dịghị) ma ọ bụ standard: ego ịhụ na top up. |
nzọụkwụ
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| ọnọdụ | mgbe |
|---|---|
400 | Ọ dịghị njikọ string (invalid_nwc_url); ụfụfụ na-enweghị nsogbu n'ihi na ya relay (nwc_unreachable) ma ọ bụ na-ekwe omume (nwc_rejected); njikọ nwere ike ịkwụ ụgwọ akaụntụ (nwc_missing_permission); ma ọ bụ ọnụ ọgụgụ dị n'elu ụkpụrụ. |
501 | Automatic top-ups na-adịghị na-akpali maka a server (nwc_unavailable). Nke a na-atụ anya na ndị ọzọ abụọ 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());
Ịgụ settings
GET https://nymbot.ai/api/v1/nwc-auto-topup Na-ekwu
Ọ na-ekwe nkwa otu ihe dị ka njikọ, na connected: false na ndị ọzọ ụlọ
null mgbe ọ dịghị ụfụfụ na-enweghị njikọ. The njikọ akara na-enweghị ikpeazụ.
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());
Ịgbado ọkụ
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection Na-ekwu
Na-egosi njikọ nchekwa string. Ọ dịghị ihe ndị ọzọ na-emepụta. Iji jide n'aka, ị nwere ike na-agba ọsọ njikọ na wallet gị.
nzọụkwụ
{ "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());
Ịkwụ ụgwọ on request na-enweghị isi
The fixed-price endpoints nwere ike ịkwụ ụgwọ maka otu nchịkọta oge n'oge Lightning, na-enweghị isi, enweghị akaụntụ na enweghị ego: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations na POST /embeddings. Chat, Responses na Messages na-achọ a isi. A chọrọ na-enweta a isi na-akwụ ụgwọ na ego dị ka ọ dị n'ezie; akwụ ụgwọ na-amalite naanị mgbe ọ dịghị isi na-enweta.
Nymbot na-ekwu abụọ version nke otu nsogbu, si otu backend: Lightning Labs '
Ọnụ 402 (Ọ na-enweta n'okpuru aha ya gara aga, LSAT) na IETF ntọala
Ịkwụ Ụgwọ HTTP authentication usoro na lightning Method na
charge Ọ bụrụ na ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme ka ị na-eme.
Ịkwụ ụgwọ na-enweghị isi bụ na naanị mgbe API_L402_SECRET nwere ihe dịkarịa ala 32 bytes, dị ka hex (64 akara) ma ọ bụ base64 (44). openssl rand -hex 32A na-agba ọsọ ma ọ bụ na-agba ọsọ ọnụ ọgụgụ na-egbochi ọrụ na-egbochi ihe mere. Iji na-agba ọsọ ya, API_L402_SECRET_PREVIOUS maka a ụbọchị: akara, ọnọdụ URLs na nsogbu mere n'okpuru ya na-arụ ọrụ ruo mgbe ha na-agba ọsọ.
Nkọwa
Kpọtụrụ anyị na No Authorization header. Ọ bụrụ na ọ dị ikike, ọ dịghị ihe ọ bụla na-agba ọsọ 402 Payment Required na akaụntụ maka ihe n'ụzọ zuru ezu nke ajụjụ na-akwụ ụgwọ: ugbu a price a key ga-akwụ ụgwọ, na-agbanwe na 10 sats a standard credit ma ọ bụ 100 sats a Pro credit na na-agba ọsọ ka a zuru okè sat (atụle na 1 sat, na ọ dịkarịa na 0.05 credit minimum). WWW-Authenticate nzọụkwụ maka otu akaụntụ:
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 }
}
Ịkwụ Ụgwọ request Parameter bụ base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
Ọrịa a na-akpali akpali akpali akpali, na Content-Type (nke media ụdị na, maka multipart, ya n'akụkụ) na na SHA-256 nke n'ụzọ zuru ezu body bytes ị na-esonụ, na-agba ọsọ 15 nkeji. Mgbe ịkwụ ụgwọ, Ọdịdị ajụjụ ọzọ: The same
Content-Type na otu JSON bytes, ma ọ bụ maka multipart endpoints (/images/edits, /audio/transcriptions, /audio/translations) otu multipart body na otu n'akụkụ. Ọtụtụ HTTP libraries na-ekpuchi a ọhụrụ n'akụkụ mgbe ọ bụla ha encode a form, otú encode ya otu ugboro na-enye ndị a bytes abụọ.
Onye ọ bụla adreesị nwere ike ịchọrọ maka 30 nsogbu kwa nkeji (a IPv6 adreesị na-egosi dị ka ọ bụla /64). Ngwongwo nke adreesị na-adịghị a maara na-egosi a kpọmkwem 10 kwa nkeji, na e nwere a zuru okè na nsogbu Nymbot nsogbu n'etiti ndị niile adreesị; a nsogbu na-agba ọsọ tupu a nsogbu na-eme (dịka na a na-adịghị mma JSON) na-agba ọsọ n'ihi ya. 429 na Retry-AfterỊkwụ ụgwọ endpoints na-akpọ na-enweghị isi ma ọ bụ ahaziri na-agụnye ka n'ikpeazụ nso nke 120 na-enweghị ahaziri chọrọ kwa nkeji kwa adreesị. A ahaziri na-akpọ na-akpọ na-enweghị isi ma ọ bụ ahaziri, na a chọrọ nke Content-Type Ọ bụghị application/json (Ọ bụ
multipart/form-data n'ihi na uploads) na-adịghị 415 Ọ bụghị mgbe ọ bụla akaụntụ.
Embeddings na-akwụ ụgwọ site na a na-akwụ ụgwọ nke tokens na input, na a 1.5 & times; margins, n'ihi na ihe n'ezie na-ekwu mgbe ahụ. Ị na-akwụ ụgwọ maka tokens na-eji, na na-adịghị eji akụkụ nke ịkwụ ụgwọ na-aga dị ka a Ịkwụ ụgwọ token.
Ịkwụ Ụgwọ
Ịkwụ ụgwọ akaụntụ na ọ bụla Lightning wallet. The wallet na-enye gị preimage, 64 hex characters. Mgbe ahụ na-enye otu chọrọ na otu n'ime ndị a:
| Ngwaahịa | Ọchịchị |
|---|---|
| Ọnụ 402 | Authorization: L402 <macaroon>:<preimage> (LSAT Ọ na-arụ ọrụ) |
| Ịkwụ Ụgwọ | Authorization: Payment <base64url JSON>, ebe JSON bụ {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
A na-akwụ ụgwọ ajụjụ na-atụle dị ka otu na-eme na a key, n'agbanyeghị na nymbot
Object na-enweghị akụkụ: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}Na ọ dịghị X-Nymbot-Balance-Sats header. A na-akwụ ụgwọ na usoro ịkwụ ụgwọ ga-enweta a Payment-Receipt header (base64url JSON na nsogbu id, ego hash dị ka reference, status na
timestamp). Ịkwụ ụgwọ ajụjụ na-enweghị ihe ọ bụla nym, otú ha adịghị na-egosi na ajụjụ akụkọ ihe mere eme.
| ọnọdụ | mgbe |
|---|---|
402 payment_already_used | Onye ọ bụla ịkwụ ụgwọ na-akwụ ụgwọ maka otu nchịkọta. Ngwọta bụ a ọhụrụ nsogbu maka nchịkọta a, n'ihi ya, a ahịa na-ekpuchi ya ikpeazụ credential (dị ka lnget na) dị nnọọ na-atụ anya. |
402 payment_mismatch | The credential e guzobere maka ọzọ endpoint, Content-Type or body, or pays less than this request now costs. A ọhụrụ challenge for this request comes with it; ọ bụrụ na ịkwụ ụgwọ bụ obere, ihe ịkwụ ụgwọ na-eri dị ka a Ịkwụ ụgwọ token (refund_token na refund_sats na nke ahụ). |
402 payment_expired | Ọ bụ ihe karịrị 15 nkeji site na nsogbu. A ọhụrụ nsogbu na-agba ọsọ ya. Ọ bụrụ na preimage na-egosi na ị na-agba ọsọ, ihe ị na-agba ọsọ na-agba ọsọ Ịkwụ ụgwọ token (refund_token na refund_sats n'ime ahụ), mgbe ahụ; a credential na-eji. |
401 invalid_preimage | The preimage na-enweghị hash na akaụntụ ego hash. The ịkwụ ụgwọ na-adịghị na-eji. |
401 invalid_payment_credential | The credential bụ malformed, na-agbanwe mgbe Nymbot na-emepụta ya, ma ọ bụ na-akpọ a nkwụnye hash Nymbot na-adịghị na-emepụta akaụntụ maka. A macaroon na a nkwado Nymbot adịghị ma ọ bụ na ndị na-agba ọsọ nkwado, na-adịghị. |
429 rate_limit_exceeded | Ihe karịrị 30 nchịkọta ma ọ bụ keys na-adịghị ike ịkpọ ụgwọ na-abịa site na adreesị a n'ime a nkeji, ma ọ bụ a nkwụnye ego token e jiri ihe karịrị 60 ugboro n'ime a nkeji. 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"));
ahịa na-ewu ewu mppx na Lightning usoro na-arụ ọrụ na Payment challenge ha; na-egosi ha na n'ikpeazụ na-akwụ ụgwọ ha.
Ngwaahịa
Ịkwụ ụgwọ POST /videos nzọụkwụ 202 dị ka a keyed otu, plus a
status_url: GET Ọ na-akpọ na-arụ ọrụ na-arụ ọrụ maka 24 awa, n'ihi na ọrụ a na-achịkwa.
{
"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..."
}
}
Kpọtụrụ anyị refund_token site na mkpanaka a: ọ na-egosi na a naanị ebe a. Ọ bụ n'èzí mgbe video na-egosi (GET /api/v1/l402/refunds nzọụkwụ "status": "pending"); ma ọ bụrụ na rendering na-adịghị ekwesị, ịkwụ ụgwọ na-eme ya. The status URL na-egosi
refund_sats maka ọrụ na-akwụ ụgwọ ma ọ bụghị token, n'ihi ya, na-agụnye ọnọdụ URL adịghị na-akwụ ụgwọ. Ịchọpụta token na-akwụ ụgwọ ọrụ na-enweghị onye ọ bụla na-akwụ ụgwọ.
Ịkwụ ụgwọ
Ọ bụrụ na a na-akwụ ụgwọ chọrọ na ndị ọrụ na-akwụ ụgwọ Nymbot maka nzọụkwụ, ịkwụ ụgwọ na error na-ekwu, na charged_satsỌ bụrụ na ọ na-adịghị mma na-adịghị mma na-adịghị mma, na-adịghị mma na-adịghị mma Ịkwụ ụgwọ token Ọ bụ ihe ị na-eji:
{
"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"
}
}
Ọ dịghị eji akụkụ na-atụle na otu ụzọ: ma ọ bụrụ na ị na-atụle abụọ foto na otu na-adịghị na-akwụ ụgwọ, na-atụle nke ọma nymbot Object nwere a refund token maka ndị na-adịghị; a transcription nke ogologo nke enweghị ike ịhụ n'ihu na-akwụ ụgwọ maka oge kachasị ogologo faịlụ nwere ike ịbụ (agba ọsọ 30 nkeji), na ihe dị iche na ogologo ahụ na-abịa dị ka a refund token; ma ọ bụrụ na ọ na-agba ọsọ 30 nkeji, ọ na-agba ọsọ 413
na ịkwụ ụgwọ zuru ezu na-atụle. Embeddings na-atụle ihe ndị na-atụle na-atụle. A na-atụle video na-atụle na token ya nkwado.
A nkwụnye ego token bụ a random 256-bit koodu. Nymbot na-egosi naanị ya hash, na ọ na-agba ọsọ mgbe 30 ụbọchị. Ọ nwere a sat ego, na ị nwere ike:
- Ịkwụ ụgwọ ya. Tinye
Authorization: Bearer REFUND-…na ọ bụla n'okpuru n'ikpeazụ endpoints (a OpenAI SDK na-eji ya dị ka API key). The price na-abịa na token na ihe na-abịa na ya (refund_token_satsNa ThenymbotObject). A token dịkarịa ala karịa ndị na-esonụ402refund_insufficient; a na-abụghị na-akwụ ụgwọ na-etinye sats n'elu otu token. - Tinye ya.
GET /api/v1/l402/refundsna otu header na-aga{"sats": 237, "status": "open", "expires_at": "..."}. - Otu token nwere ike iji ihe karịrị 60 ugboro kwa nkeji.
- Mepụta ya na a nym. Pịa ya n'ime Tinye ajụjụ na Nymbot ngwa, ma ọ bụ na-akpọ
POST /api/v1/l402/refunds/redeemna a Nkọwa ajụjụ na{"refund_token": "REFUND-...", "balance": "standard"}(Ọ bụ"pro"N'ụzọ zuru ụgwọ na-aga n'ụzọ zuru ụgwọ (10 sats onye ọ bụla on Standard, 100 on Pro); sats na-adịghị na-eme ka a zuru ụgwọ na token maka API chọrọ.
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"
nzọụkwụ
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }