Batayan ng kaalaman mga developer
Balance, top-ups at mga keys
Tingnan kung ano ang iyong mayroon, top up sa Lightning, top up automatically mula sa iyong sarili na wallet, tingnan kung ano ang mga gastos ng bawat request, at i-manage ang mga keys mula sa code.
Ang pahinang ito ay isinalin sa makina para sa kaginhawahan. Ang orihinal na Ingles ay ang bersyon na naaangkop.
Kontrolin ang balanse
Lahat ng iyong balances, at kung paano ang kape ng key na ito ay ginagamit.
GET https://nymbot.ai/api/v1/credits/balance Kailangan mo ng isang API key. POST Ito ay para sa mga customer na hinihintay ito.
balance ay ang dalawang balanse kasama sa dolyar sa kasalukuyang presyo ng Bitcoin, para sa mga tool na naghahanap ng isang single number (null kung ang presyo ay hindi makikita). Ang iba ay sa credits at sats, na kung saan ang mga balanse ay tunay na itinuturing. key Ang isang key na umabot sa kanyang cap ay maaaring i-check ang balance.
Reaksiyon
{
"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"
}
}
| Status ng | kapag |
|---|---|
401 | Ang key ay missing, unknown, revoked o expired. |
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);
Mga Modelo ng Pagbabayad
Kung paano mo i-top up, at ang mga limitasyon. Lightning ay ang lamang na paraan.
GET https://nymbot.ai/api/v1/topup/payment-methods Hindi kailangan ng key.
Ang isang top-up ay 10 hanggang 1,000,000 sats; ang isang Pro top-up ay dapat bumili ng halos isang Pro credit, kaya nagsimula ito sa 100 sats. bulk_bonus sumusunod ang extra credit sa mas malaking top-ups, sama na sa app: 10%, 15% o 20% higit sa standard top-ups mula sa 500, 1,000 o 5,000 sats, at sa Pro top-ups mula sa 5,000, 10,000 o 50,000 sats.
Reaksiyon
{
"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);
Pagkakaiba sa pamamagitan ng Lightning
Makakakuha ng isang Lightning invoice na magdagdag ng credit sa nym na ang key ay mayroon sa. Pagbayad ito mula sa anumang Lightning wallet, pagkatapos ay Tingnan ang Kailangan mo ng credit added.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning Kailangan mo ng isang API key.
| ang field | Tipong | Kailangan | ang description |
|---|---|---|---|
amount | ang number | Oo | Ngunit kung paano, sa currencyAng isang buong numero para sa sats. |
currency | ang string | Hindi | SATS (Ang mga sumusunod ay USD o sa BTCDollars ay i-convert sa kasalukuyang presyo ng Bitcoin. |
tier | ang string | Hindi | pro (Ang pagbabago) o standard: kung ano ang balanse ang credit ay pumunta sa. |
Ang isang standard na credit ay 10 sats at isang Pro credit 100 sats, plus ang anumang bulk bonus;
credits Sabihin mo kung ano ang ibig sabihin nito.
Reaksiyon
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| Status ng | kapag |
|---|---|
400 | nagtatapos sa tuldok (unsupported_methodMaaring gumawa ng anotasyon (unsupported_currencyAng maliliit na negosyo sa mga sumusunod na sektor ay kinakailangan: pagproseso ng produktong agrikultural (amount_too_smallMga pahinang tumuturo sa 1 (amount_too_large) o inihayag sa pamamagitan ng Lightning wallet (amount_out_of_range). |
429 | Higit sa 60 invoices para sa ito nym, o 120 mula sa address na ito, sa isang oras (rate_limit_exceededDahil sa Retry-After). |
502 | Huwag kang gagaw ng pasiya na nagmamahal (invoice_unavailableDahil sa 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);
Tingnan ang Top-up
Nagtataka kung ang invoice ay na-pay na at, kapag ito ay, i-add ang credit. Checking ay kung ano ang mga kredito ito, kaya pagkatapos ng pagbabayad, i-check hanggang sa status ay creditedPag-check again pagkatapos ay safe: ang credit landing isang beses, kahit kung maraming beses mo pakialam.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - kailangan ng isang key mula sa nym na ginawa ang invoice.
status ay pending (Hindi ko pa rin makipag-usap, paid (Payed, ngunit hindi pa rin credited; tingnan ang taas), credited (Ang iyong balanse) o expired (Hindi magbayad sa panahon). Ang mga field ng balanse ay para sa mga layer na ang invoice top up.
Reaksiyon
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| Status ng | kapag |
|---|---|
400 | Ang id ay hindi ang 64-karakter na id mula sa create call. |
404 | Huwag mag-alala tungkol sa anumang bagay (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);
Tungkol sa History
One row per request: kung ano ang ito, kung ano ang modelo, kung paano ang mga tokens at kung ano ang gastos. Walang mga prompts o mga solusyon ay itinatag, kaya walang na-returns. Rows ay itinatag para sa 90 araw, ang pinakabagong unang. Ang isang keyword na nakuha ang kanyang cap ay maaaring palagi ang kanyang kasaysayan.
GET https://nymbot.ai/api/v1/queries/history — kailangan ng isang API key, na makikita ang kanyang mga pangangailangan, o isang Subukan ang request sa iyong nym, na nakikita ang lahat ng mga key.
| ang field | Tipong | Kailangan | ang description |
|---|---|---|---|
page | ang napili ng mga taga-hanga: | Hindi | Ang default ay 1, sa higit sa 1,000; isang mas mataas na pahina ay 400 invalid_value. |
page_count | ang napili ng mga taga-hanga: | Hindi | Pagkakaiba sa Paggamit ng Pagkakaiba ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit ng Paggamit |
start_dateend_date | Mga Tiket sa Paglipad ( | Hindi | ISO 8601 mga petsa o oras. |
model | Mga Tiket sa Paglipad ( | Hindi | lamang ang modelo na ito. |
type | Mga Tiket sa Paglipad ( | Hindi | chat, responses, messages, image, video, speech, transcription o sa embedding. |
all_keys | ang napili ng mga taga-hanga: Query | Hindi | Sa isang key: true ang lahat ng mga key ng parehong nym. Default false. |
key_id | Mga Tiket sa Paglipad ( | Hindi | Sa pamamagitan ng isang signature request, o sa pamamagitan all_keys=trueAng key na ito. |
Reaksiyon
{
"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);
Pangalan ng mga Request Account
Ang paggawa, pagbabago at pag-revoke ng mga key, ang account summary at ang automatic top-ups ay hindi gumagamit ng isang API key. Siya ay gumagamit ng isang signature mula sa iyong nym, kaya ang isang leaked key ay maaaring gumagamit hanggang sa kanyang cap ngunit hindi maaaring gumawa ng isang iba pang key o ilipat ang kanyang kape.
Ang app ay gawin ito para sa iyo: ang lahat sa kanyang ang fire Ang mga endpoints na ito ay ginagamit ng sheet. You only need this section to manage keys from your own code.
Ang signature ay isang Nostr event ng uri 27235 (NIP-98), na inilabas base64-coded sa
Authorization Header sa pamamagitan ng Word Nostr Para sa front:
ang event
{
"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": "..."
}
uang buong URL ng request, na kasama ang string ng query, eksaktong tulad ng inilathala.methodIto ang HTTP method.payloadang SHA-256 ng raw request body, sa hex. Ito ay kinakailangan saPOSTatPATCHat ang katawan mo magpadala ay dapat maging byte para sa byte ang iyong hashed.created_atKailangan ito sa loob ng 60 segundo mula sa server ng oras.- Lahat ng mga bagay ay nagtatagumpay, a
GETAng mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod na mga sumusunod.nonceang tag na may isang random na halaga upang ang dalawang pag-sign ng mga request sa parehong segundo ay patuloy na magkakaiba. - Ang body ng isang signed request ay maaaring maging hanggang sa 64 KB, at ang body ay kailangan
Content-Type: application/json.
Ang isang missing event ay bumalik 401 missing_nostr_authisang na malaki-formed, malaki-signed, mababang, o para sa isang iba't ibang URL, paraan o body returns
invalid_nostr_authPagkatapos ng pag-aaral, ang mga ito ay bumabalik.
nostr_auth_replayedAng signature ay checked bago ang katawan ay nabasa, at ang bawat address ay maaaring hindi ito 30 beses sa isang minuto (ang isang IPv6 address ay tinatawag bilang kanyang buong /64); pagkatapos ay ito ay makakuha ng 429 sa
Retry-After.
Ang mga browser ay maaaring i-call ang mga endpoint na ito lamang mula sa mga site ng Nymbot (https://nymbot.ai,
https://nymchat.app Ang isang pahina sa anumang iba pang site ay hindi makakakuha ng mga headers ng CORS, kaya hindi siya makikita kung ano ang nagbalik.
OriginHindi nila nakakaapekto.
Ang pag-sign ay kailangan ng iyong nym's secret key (ang nsec), na kung saan kontrolado ang lahat: ang iyong identidad, ang iyong kasaysayan at ang iyong balanse. I-set ito lamang sa isang script sa isang makina na naniniwala sa iyo, i-read ito mula sa environment na hindi i-writing ito sa file, at pinili ang app kapag maaari mong.
Ang mga helper na ito ay lumikha ng header. Ang mga sumusunod na halimbawa sa pahina na ito ay gumagamit ng mga ito. NOSTR_SECRET_HEXang cURL one ay gumagamit ng
ang nak isang tool ng command-line, na ginagamit ng isang nsec o hex key, at sha256sum Para sa 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");
}
ang account summary
Ano ang API sheet ng app ay nagpapakita sa itaas: ang iyong public key, ang parehong balances, ang bilang ng mga keys ay aktibo (hindi revoked o umalis), at ang Automatic ang top-up ang mga setting, o
null kung ang server ay hindi nag-aalok ng mga ito.
GET https://nymbot.ai/api/v1/account Kailangan ng isang Subukan ang request.
Reaksiyon
{
"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());
Pangalan ng mga keys
Ang mga endpoints sa ilalim ng listahan ng key ng app. Lahat ng mga ito ay kailangan ng isang Subukan ang requestAng bawat key ay bumalik sa form na ito, na may mga oras sa ISO 8601 at mga halaga sa sats:
Mga Object 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 Ang isang key ay dapat na i-recognize, ngunit hindi upang gamitin ito. Ang key na ito ay i-return lamang ng isang beses, kapag ito ay ginawa.
Ang mga key
GET https://nymbot.ai/api/v1/keys na ang signature.
| ang field | Tipong | Kailangan | ang description |
|---|---|---|---|
include_revoked | ang napili ng mga taga-hanga: Query | Hindi | Ipinapakita ang mga tagubilin. default false. |
Reaksiyon
{ "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);
Paggawa ng isang Key
POST https://nymbot.ai/api/v1/keys Ipinanganak na ang return 201.
| ang field | Tipong | Kailangan | ang description |
|---|---|---|---|
name | ang string | Oo | 1 hanggang 40 character, iba sa iyong iba pang mga aktibo na keys (ignoring kaso). |
limit_sats | ang integer | Hindi | Ang gastos cap sa sats, sa loob ng isang minimum 1. Leave it out for no cap. |
reset_period | ang string | Hindi | daily, weekly o sa monthlyang kailangan limit_satsGawin ito para sa isang cap na hindi mai-reset. |
expire_at | ang string o integer | Hindi | Kapag ang key ay hindi gumagana: isang ISO 8601 oras, o milliseconds mula noong 1970. |
Mga pahinang tumuturo (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"
}
}
| Status ng | kapag |
|---|---|
400 | Ang maliliit na negosyo sa mga sumusunod ay kinakailangan: pagproseso ng produktong agrikultural (duplicate_name); isang cap na hindi ang isang buong bilang ng hindi bababa sa 1; isang reset na panahon na walang isang cap; isang pagkuha sa kasaysayan; isang unknown field (unknown_parameter); o 25 na aktibo na mga key na ngayon (too_many_keys). |
429 | Higit sa 60 mga key na ginawa ng ito nym, o 120 mula sa address na ito, sa isang oras (rate_limit_exceededDahil sa 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);
Paglalarawan ng isang key
GET https://nymbot.ai/api/v1/keys/{id} na ang signature.
Pagbalik {"data": {…}} sa isang key object, o 404
key_not_found Kung wala ka ng key na may id na ito.
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);
Pagbabago ng isang Key
PATCH https://nymbot.ai/api/v1/keys/{id} na ang signature.
Magpadala ng isang name, limit_sats, reset_period at
expire_at, sa parehong mga patakaran tulad ng pagkuha ng isang key. null Nagtataka kung ano ito ay tungkol sa ako nagpasya, inexplicably, na ang pinakamahusay na bagay na gawin ay, hindi upang tumakbo sa banyo, ngunit upang pumunta sa isang pagmumuni-muni.400 key_revoked(Ang mga return
{"data": {…}} sa pamamagitan ng update ng 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);
Ibalik ang isang key
DELETE https://nymbot.ai/api/v1/keys/{id} na ang signature.
Ipinanganak ang key sa isang pagkakataon, para sa good. It remains in the list with revoked_at at malapit na ding maging isang trahedya include_revoked=trueI-revoke a key that is already revoked ay sinasabi sa parehong paraan. Only the latest 50 revoked keys are retained; ang mga mas mababa na keys are deleted when another key is revoked.
Reaksiyon
{ "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());
Mga pahinang tumuturo sa NWC Auto-top-up
I-connect ang isang Lightning wallet sa Nostr Wallet Connect at ang Nymbot ay tumutulong sa isang balanse sa pamamagitan ng kanyang sarili kapag ang gastos ng API ay lumabas. Ang pahina ng API ng app ay may parehong mga setting; ito ay ang mga endpoints sa ilalim nito. Ang lahat ng mga ito ay kailangan ng isang Subukan ang request.
Paano ito gumagana: pagkatapos ng isang API request ay inilathala sa saldo na piliin mo upang tingnan, kung ang saldo ay umabot sa ibaba sa iyong threshold, ang Nymbot ay gumawa ng isang invoice para sa iyong top-up na halaga, ay nag-aalok sa iyong wallet upang bayaran ito, at ilagay ang credit. Ito ay umabot sa higit sa isang beses sa bawat 5 minuto para sa bawat nym at saldo, kaya ang isang bumuo ng mga requests ay hindi maaaring i-drop ang wallet. Pagbebenta sa mga app ay hindi gumagana ito. Ang oras at halaga ng pinakabagong top-up, at ang pinakabagong error, ay sa mga setting; kung ang isang pagbabayad ay dumating pagkatapos ng isang error, i-check ang kanyang invoice sa ang top-up status kredito ang mga ito.
Ang isang string ng koneksyon ay nagbibigay-daan sa lahat ng nagtatagumpay sa iyong wallet upang bayaran. Nymbot i-save ito na encrypted at lamang ginagamit ito upang bayaran ang kanyang sarili top-up invoices, ngunit gumawa ng isang koneksyon lamang para sa ito, na may isang gastos budget sa iyong wallet, kaya ang karamihan na ito ay maaaring i-pay ay isang numero na pinili mo. pay_invoice.
Pag-connect ng isang wallet
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect na ang signature.
| ang field | Tipong | Kailangan | ang description |
|---|---|---|---|
nwc_url | ang string | Oo | Ang link na ito ay nagsisimula nostr+walletconnect://Nymbot ay nangangailangan ng wallet para sa get_info Pero kapag nalaman niyang nakilala mo siya dahil binasa mo ang diary... get ready for the consequences. |
threshold_sats | ang integer | Oo | Pagkatapos ng pagbabago, magkakaroon ka ng isang minimum na 1,000. |
topup_sats | ang integer | Oo | Kailangan mo ng pag-aalok ng bawat beses. 1,000 hanggang 1,000,000 sats. |
tier | ang string | Hindi | pro (Ang pagbabago) o standard: ang balanse upang tingnan at top up. |
Reaksiyon
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| Status ng | kapag |
|---|---|
400 | Huwag dry sa banyo (invalid_nwc_url(Hindi ko alam kung ano ang ibig sabihin ng pag-iisip ko.)nwc_unreachableMaaring gumawa ng anotasyon (nwc_rejected(Tingnan ang mga sumusunod na mga sumusunod (nwc_missing_permission3) o isang halaga sa loob ng limitasyon. |
501 | Ang mga automatic top-ups ay hindi pinagsasama para sa server na ito (nwc_unavailableAng katulad na ito ay tungkol sa iba pang dalawang 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());
I-read ang settings
GET https://nymbot.ai/api/v1/nwc-auto-topup na ang signature.
Ibalik ang parehong object na nag-connect, sa pamamagitan ng connected: false at ang iba pang mga field
null kung walang wallet ay konektado. Ang koneksyon string mismo ay hindi maibalik.
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());
Disconnect ang
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection na ang signature.
Pumunta ang naka-save na string ng koneksyon. Walang higit pang mga top-ups ay ginawa. Upang maging sigurado, maaari mo ring i-revoke ang koneksyon sa iyong wallet.
Reaksiyon
{ "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());
Pagbabayad sa pamamagitan ng request na walang key
Ang mga fixed-price endpoints ay maaaring i-pay para sa isang request sa isang oras sa pamamagitan ng Lightning, walang key, walang account at walang balance: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations at POST /embeddingsAng isang request na naglalaman ng isang key ay inilathala sa balance tulad ng karaniwang; ang pag-payment flow ay nagsisimula lamang kapag walang key ay inilathala.
Nymbot nagsasalita ng dalawang bersyon ng parehong ideya, mula sa isang backend: Lightning Labs'
ang 402 (Tulad nila ang kanyang pangalan, LSATat ang draft ng IETF
Pagbabayad HTTP authentication scheme sa pamamagitan ng lightning ang method at
charge Pag-iisip mo kung ano ang ibig sabihin ng iyong customer.
Pagbabayad nang walang key ay sa lamang kapag API_L402_SECRET may halos 32 random bytes, tulad ng hex (64 character) o base64 (44). openssl rand -hex 32Magbigay ng inspirasyon sa kontemporaryong designer ay maaaring gumawa ng kahit ano, kahit ano, at ang New Year - ay walang exception. API_L402_SECRET_PREVIOUS para sa isang araw: ang mga credentials, status URLs at mga challenge na ginawa sa ilalim ng ito ay patuloy na gumagana hanggang sa pag-expire.
ang challenge
I-send ang request sa No Authorization kung ito ay valid, walang ginagawa, at ikaw ay makakuha ng 402 Payment Required sa isang invoice para sa eksaktong kung ano ang mga gastos ng mga request: ang parehong presyo na isang key ay magbayad, i-convert sa 10 sats sa isang standard credit o 100 sats sa isang Pro credit at rounded hanggang sa isang buong sat (at least 1 sat, at hindi bababa sa 0.05 credit minimum). WWW-Authenticate Mga problema para sa parehong account:
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 }
}
ang pagbabayad request Ang parameter ay base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
Ang isang challenge ay nakatuon sa endpoint, sa Content-Type (ang uri ng media at, para sa multipart, ang limitasyon nito) at sa SHA-256 ng eksaktong body bytes na ibinigay mo, at nagtatapos ng 15 minuto. ang identical Request again: ang parehong
Content-Type Mga pahinang tumuturo sa mga ito (/images/edits, /audio/transcriptions, /audio/translationsAng karamihan ng mga library ng HTTP ay pumili ng isang bagong limitasyon sa bawat pagkakataon na in-codify ang isang form, kaya in-codify ito ng isang beses at ipadala ang mga byte ng dalawang beses.
Ang bawat address ay maaaring magtanong para sa 30 mga problema sa isang minuto (ang isang IPv6 address ay tinatanggap bilang ang kanyang buong /64). Ang mga request na ang address ay hindi kilala ay magtatag ng isang mas malakas na 10 sa isang minuto, at may isang pangkalahatang cap sa mga problema ng Nymbot sa lahat ng addresses; ang isang request na inihayag bago ang isang challenge ay ginawa (halimbawa, na may isang katawan na hindi valid na JSON) ay hindi matatagpuan para sa kanya. 429 sa Retry-AfterAng mga nakalipas na endpoints na tinatawag nang walang isang key o credential ay din sumunod sa ang pangkalahatang limitasyon ng 120 unauthenticated requests per minute per address. Ang isang credential ay checked bago ang body ay tinatawag, at ang isang request na Content-Type Hindi ko application/json (Ang
multipart/form-data Para sa pag-uugali) ay inihayag na 415 Huwag kailanman makakuha ng isang account.
Ang mga embeddings ay na-priced mula sa isang estimate ng mga token sa input, na may isang 1.5× margin, dahil ang tunay na bilang ay kilala lamang pagkatapos. Ibalik ang token.
Paghahatid ng pagbabayad
I-pay ang invoice sa anumang Lightning wallet. Ang wallet ay nagbibigay sa iyo ang preimage, 64 hex characters. At pagkatapos ay i-send ang parehong request na may isa sa mga ito:
| ang scheme | ang header |
|---|---|
| ang 402 | Authorization: L402 <macaroon>:<preimage> (LSAT nagtatapos sa tuldok ( |
| Pagbabayad | Authorization: Payment <base64url JSON>kung saan ang JSON ay {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
Ang isang pagbabayad na request ay sumusuporta sa parehong tulad ng isang ginawa na may isang key, except na ang nymbot
Ang object ay walang balanse fields: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}at hindi na X-Nymbot-Balance-Sats isang request na ibinigay sa Pagbabayad scheme ay makakakuha ng isang Payment-Receipt ang header (base64url JSON na may challenge id, ang payment hash as reference, status at
timestampAng mga pagbabayad na mga pangangailangan ay hindi nakatuon sa anumang nym, kaya hindi nila ipinapakita sa kasaysayan ng mga query.
| Status ng | kapag |
|---|---|
402 payment_already_used | Ang paghahatid ay isang bagong challenge para sa request na ito, kaya ang isang client na cache ang kanyang pinakabagong credential (as lnget Tapos, merong mga commercial na over na. |
402 payment_mismatch | Ang credential ay ibinigay para sa isang iba pang endpoint, Content-Type o katawan, o magbayad ng mas mababa kaysa sa mga gastos na ito ngayon. Isang bagong challenge para sa ito ay dumating sa kanya; kung ang pagbabayad ay mas maliit, kung ano ang ibinigay mo ay bumalik bilang isang Ibalik ang token (refund_token at refund_sats sa loob ng katawan). |
402 payment_expired | Mayroong higit sa 15 minuto na nakalipas mula sa challenge. Ang isang bagong challenge ay kasama sa kanya. Kung ang preimage ay nagpapakita na ikaw ay nagbayad, kung ano ang iyong nagbayad ay bumalik bilang isang Ibalik ang token (refund_token at refund_sats Sa loob ng isang taon na ang nakalipas, ang credential ay ginagamit. |
401 invalid_preimage | Ang preimage ay hindi hash sa pagbabayad hash ng invoice. Ang pagbabayad ay hindi ginagamit. |
401 invalid_payment_credential | Ang credential ay malformed, ay na-modified pagkatapos ng Nymbot ay inilathala ito, o mga pangalan ng isang pagbabayad hash Nymbot ay hindi inilathala ng isang invoice para sa. Ang isang macaroon na may isang caveat Nymbot ay hindi alam, o na may conflicting caveats, ay inihayag. |
429 rate_limit_exceeded | Higit sa 30 mga credentials o keys na hindi maaaring i-verify ay dumating mula sa address na ito sa isang minuto, o isang refund token ay ibinigay ng higit sa 60 beses sa isang minuto. 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"));
Ang mga customer ay binubuo sa mppx Sa pamamagitan ng isang Lightning na paraan, i-manage ang Pagbabayad challenge sa kanila; i-point ang mga ito sa endpoint at i-pay ang mga ito.
Mga Video
Pagbayad ng POST /videos Reply sa 202 Ako ay isang tagahanga, plus a
status_url: GET Ito ay sinubukan at gumagana para sa 24 oras, habang ang trabaho ay itinatag.
{
"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..."
}
}
Pumunta ang refund_token sa pagitan ng ito: ito ay ipinapakita lamang dito. Ito ay huling habang ang video ay nagpapakita (GET /api/v1/l402/refunds Reply sa "status": "pending"); kung ang render ay hindi inilabas, ang pagbabayad ay lumabas sa kanya. Ang status URL ay nagpapakita
refund_sats Para sa isang reimbursadong trabaho ngunit hindi ang token, kaya pag-share ng status URL ay hindi gumagana ang reimbursement.
Pagbabayad
Kung ang isang na-pay request ay nangangailangan at ang provider ay inilathala ng Nymbot para sa pagsusuri, ang pagbabayad ay itinuturing at ang error ay nagsasabi na ito, na may charged_satsPero kapag nalaman niyang nakilala mo siya dahil binasa mo ang diary... get ready for the consequences. Ibalik ang token Ang mga bagay na kailangan mo upang bayaran:
{
"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"
}
}
Ang mga unused parts ay bumalik sa parehong paraan: kung nais mo para sa dalawang mga larawan at ang isa ay hindi nangangahulugan, ang reaksyon ng kasiyahan nymbot ang object ay naglalaman ng isang refund token para sa nawala na isa; isang transcription kung saan ang length ay hindi maaaring i-read up bago ay priced para sa mas mahabang ang file ay maaaring maging (hindi higit sa 30 minuto), at ang pagkakaiba sa real na length ay bumalik bilang isang refund token; kung ito ay lumilitaw na mas mahaba sa 30 minuto, ito ay inihayag sa 413
at ang buong pagbabayad ay bumalik. Embeddings return what the estimate held back. A failed video refunds to the token its submission returned.
Ang isang reimbursement token ay isang random 256-bit code. Nymbot ay i-save lamang ang kanyang hash, at ito ay lumabas pagkatapos ng 30 araw. Ito ay may isang sat balance, at maaari mong:
- Pagbayad sa kanya. Magpasalamat
Authorization: Bearer REFUND-…Nagtatapos sa tuldok, tuldok sa tuldok, tuldok sa tuldok, tuldok sa tuldok, tuldok sa tuldok (refund_token_satssa mganymbotA token worth less than the request answers402refund_insufficientAng isang unbilled failure ay nagtatag ng sats back sa parehong token. - Tingnan ang
GET /api/v1/l402/refundssa pamamagitan ng same header{"sats": 237, "status": "open", "expires_at": "..."}. - Ang isang token ay maaaring gamitin sa higit sa 60 beses sa isang minuto.
- Pumunta ito sa isang nym. Ipasok ito sa Gumawa ng isang regalo sa app ng Nymbot, o pag-call
POST /api/v1/l402/refunds/redeemsa a Subukan ang request at{"refund_token": "REFUND-...", "balance": "standard"}(Ang"pro"Ang buong mga credits ay pumunta sa balance (10 sats bawat sa standard, 100 sa Pro); sats na hindi gumawa ng isang buong credit stay sa token para sa 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"
Reaksiyon
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }