Dasar pangaweruh ngembangkeun
Balance, top-ups jeung kunci
Periksa naon anjeun gaduh, top up leuwih Lightning, top up otomatis ti dompet anjeun, tingali naon unggal permintaan biaya, jeung ngatur kunci ti kode.
Kaca ieu ditarjamahkeun ku mesin pikeun genah. Asli Inggris nyaéta versi anu lumaku.
Nurutkeun Balance
Kabéh keseimbangan anjeun, jeung seueur kapang kunci ieu dipaké.
GET https://nymbot.ai/api/v1/credits/balance Anjeun kudu nyadiakeun API. POST Ieu ogé ngajadikeun klien anu nyarankeun eta.
balance aya dua keseimbangan dina dolar dina harga Bitcoin ayeuna, pikeun alat anu ngantosan nomer tunggal (null mun harga teu bisa dibaca). sisa téh dina kredit jeung sats, nu mangrupakeun kumaha keseimbangan sebenarnya disimpen. key Ngeunaan alat-alat ieu, anjeun tiasa nyadiakeun alat-alat anu aya dina alat-alat ieu.
Jawaban
{
"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 nu | Ku kituna |
|---|---|
401 | Kunci anu mungkir, unknown, dibatalkeun atawa kadua. |
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);
Metode Pembayaran
Kumaha anjeun bisa top up, jeung batasan. Lightning nyaéta satu-satunya metode.
GET https://nymbot.ai/api/v1/topup/payment-methods Aya kunci anu dibutuhkeun.
A top-up nyaéta 10 ka 1.000.000 sats; a Pro top-up kudu meuli sahenteuna hiji kredit Pro, jadi eta dimimitian dina 100 sats. bulk_bonus Nurutkeun kredit tambahan on top-ups badag, sarua jeung di app: 10%, 15% atawa 20% leuwih on top-ups standard ti 500, 1,000 atawa 5,000 sats, jeung on Pro top-ups ti 5,000, 10,000 atawa 50,000 sats.
Jawaban
{
"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);
Demi sasatoan anu dimaksud nyaéta vertebrata.
Meunangkeun tagihan Lightning nu nambahkeun kredit kana nym nu kunci nepi ka. Bayar eta ti mana wae wallet Lightning, lajeng Nurutkeun Anjeun tiasa nambahkeun kredit.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning Anjeun kudu nyadiakeun API.
| Field nu | tipe nu | Diperlukan | Daptarkeun |
|---|---|---|---|
amount | Numutkeun | Sumuhun | Ku kituna, dina currencyNgeunaan jumlah rata. |
currency | Pikeun string | nu nu | SATS Demi sasatoan anu dimaksud nyaéta vertebrata. USD Anjeunna BTCDolar diwangun ku harga Bitcoin ayeuna. |
tier | Pikeun string | nu nu | pro Demi sasatoan anu dimaksud nyaéta vertebrata. standard: mana balanja pinjaman bakal dialihkeun. |
A kredit standar nyaéta 10 sats jeung Pro kredit 100 sats, ditambahkeun bonus bulk;
credits Nurutkeun naon inpo ieu bakal nambahkeun.
Jawaban
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| Status nu | Ku kituna |
|---|---|
400 | Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (unsupported_methodNgeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (unsupported_currencyNgeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (amount_too_smallNgeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (amount_too_largeNgeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (amount_out_of_range). |
429 | Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (rate_limit_exceededjeung Retry-After). |
502 | Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (invoice_unavailablejeung 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);
Nurutkeun top-up
Nurutkeun lamun inpo geus dibayar jeung, saprak aya, nambahkeun kredit. Checking nyaéta naon kredit eta, jadi sanggeus dibayar, nonton nepi ka status creditedChecking deui sanggeus éta aman: kredit landing hiji kali, ngan sababaraha kali anjeun mintonkeun.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - kudu kunci ti nym nu nyieun inpo.
status Anjeunna pending Demi sasatoan anu dimaksud nyaéta vertebrata. paid Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan ( credited Demi sasatoan anu dimaksud nyaéta vertebrata. expired (Naha aya nu aya nu aya nu aya nu aya nu aya nu aya nu aya nu aya nu aya nu aya)
Jawaban
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| Status nu | Ku kituna |
|---|---|
400 | ID teu nyaéta id 64-karakter ti panggero dijieun. |
404 | Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (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);
Ngeunaan sajarah
Hiji baris per permintaan: naon éta, model nu, sababaraha token na naon biaya éta. No prompts atawa jawab nu disimpen, jadi teu aya anu dikembalikan. baris disimpen pikeun 90 poé, panganyarna kahiji. A kunci nu geus ngahontal cap na masih bisa maca sajarah nya.
GET https://nymbot.ai/api/v1/queries/history — perlu kunci API, nu nempo permintaan sorangan, atawa a Rencana ditandatanganan Anjeunna nyarankeun ka anjeun, anu nyarankeun ka anjeun.
| Field nu | tipe nu | Diperlukan | Daptarkeun |
|---|---|---|---|
page | Ngeunaan author nu: | nu nu | Default 1, nepi ka 1000; kaca luhur nyaéta 400 invalid_value. |
page_count | Ngeunaan author nu: | nu nu | Rows per page. Default 20 jeung maksimum 100. |
start_dateend_date | Ngeunaan string (query) | nu nu | ISO 8601 tanggal atawa waktos. |
model | Ngeunaan string (query) | nu nu | Ieu model téh. |
type | Ngeunaan string (query) | nu nu | chat, responses, messages, image, video, speech, transcription Anjeunna embedding. |
all_keys | Ngeunaan author nu: | nu nu | Ngeunaan salah sahiji kunci: true Ieu ngandung unggal kunci nym anu sarua. Default false. |
key_id | Ngeunaan string (query) | nu nu | Ngeunaan pernyataan anu ditangtayungan, atawa all_keys=trueSadaya kunci ieu. |
Jawaban
{
"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);
Nurutkeun permintaan akun
Meunangkeun, ngarobah jeung nyingkahan kunci, ringkasan akun jeung top-ups otomatis teu nyokot API key. Aranjeunna nyokot tanda ti nym anjeun, jadi key leaked bisa nghabiskan nepi ka cap nya tapi teu bisa nyieun kunci séjén atawa ngaronjat cap sorangan.
Aplikasi ngajalankeun ieu pikeun anjeun: sadaya dina Ngaronjatkeun Anjeun ngan butuh bagian ieu pikeun ngatur kunci ti kode Anjeun sorangan.
Tanda ieu mangrupakeun acara Nostr tina jenis 27235 (NIP-98), dikirim base64-koded dina
Authorization Header jeung kecap Nostr Di hadé téh:
Ieu acara
{
"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": "..."
}
uurl lengkep tina permintaan, string query kaasup, sakumaha dikirimkeun.methodIeu téh metode HTTP.payloadnyaéta SHA-256 tina awak permintaan raw, dina hex. Ieu diperlukeun dinaPOSTjeungPATCHDemi sasatoan anu dimaksud nyaéta vertebrata, anu sasatoan nyaéta vertebrata.created_atIeu kudu dina 60 detik ti jam server.- Sabenerna, sagala hal anu dilakukeun, a
GETNgeunaan alat-alat ieu, anjeun teu bisa nganteurkeun header anu ditangtukeun. signing hiji anyar pikeun unggal request.noncetag jeung nilai acak jadi dua permintaan ditandatanganan dina detik anu sarua masih beda. - Tubuh tina permintaan ditandatanganan bisa maksimum 64 KB, jeung body kudu
Content-Type: application/json.
Anjeunna nganteurkeun acara hilang. 401 missing_nostr_auth; hiji nu badly formed, badly signed, too old, atawa pikeun URL béda, metode atawa body ngembalikan
invalid_nostr_authDemi sasatoan anu dimaksud nyaéta vertebrata.
nostr_auth_replayedA kunci API dikirim ka titik endpoints ieu ditolak. tanda ditéksekusi saméméh awak dibaca, jeung unggal alamat bisa gagal eta 30 kali per menit (a alamat IPv6 dihitung salaku sakabéh /64); sanggeus eta meunang 429 jeung
Retry-After.
Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (https://nymbot.ai,
https://nymchat.app A halaman dina mana wae situs séjén nampa no CORS header balik, jadi eta teu bisa maca naon aranjeunna balik. skrip jeung aplikasi asli, nu ngirim no
OriginAnjeun teu terpengaruh.
Ngeunaan nyadiakeun kunci rahasia nym Anjeun (the nsec), nu ngadalikeun sadaya: identitas anjeun, sajarah anjeun jeung keseimbangan anjeun. Sadaya nempatkeun eta dina script dina mesin anu anjeun percaya, maca eta ti lingkungan badag dituliskeun kana file, sarta milih aplikasi lamun anjeun bisa.
Pamakéan ieu ngembangkeun header. contoh handap dina kaca ieu ngagunakeun aranjeunna. Aranjeunna maca kunci rahasia dina hex ti NOSTR_SECRET_HEXDemi sasatoan anu dimaksud nyaéta vertebrata.
Anjeunna alat baris perintah, nu nyandak nsec atawa hex key, jeung sha256sum Pikeun 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");
}
Résumé tina akun
Naon nu sheet API aplikasi nembongkeun di luhur: kunci publik anjeun, duanana balances, sababaraha kunci aktif (taun teu dibatalkeun atawa kadua), jeung Ieu téh top-up otomatis. Anjeunna nyokot, atawa
null nu server teu nyadiakeun eta.
GET https://nymbot.ai/api/v1/account Anjeun kudu a Rencana ditandatanganan.
Jawaban
{
"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());
Manajemén kunci
The endpoints di balik daftar kunci aplikasi. Sadaya aranjeunna kudu hiji Rencana ditandatangananSadaya kunci dikembalikan dina bentuk ieu, kalayan waktos dina ISO 8601 jeung jumlah dina sats:
Objek ieu
{
"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 Ieu cukup pikeun ningali kunci tapi teu ngagunakeun eta.
Nurutkeun kunci
GET https://nymbot.ai/api/v1/keys Ieu signing.
| Field nu | tipe nu | Diperlukan | Daptarkeun |
|---|---|---|---|
include_revoked | Ngeunaan author nu: | nu nu | Ngaronjatkeun kunci anu dibatalkeun. default false. |
Jawaban
{ "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);
Meunangkeun kunci
POST https://nymbot.ai/api/v1/keys Anjeunna balik. 201.
| Field nu | tipe nu | Diperlukan | Daptarkeun |
|---|---|---|---|
name | Pikeun string | Sumuhun | 1 ka 40 karakter, béda ti kunci aktif séjén anjeun (ngabawa kasus). |
limit_sats | Ngeunaan | nu nu | Anjeun kudu nyimpen duit, tapi teu nyimpen duit.1. |
reset_period | Pikeun string | nu nu | daily, weekly Anjeunna monthlyAnjeun kudu limit_satsNgeunaan pikeun kapang nu teu pernah reset. |
expire_at | string jeung integer | nu nu | Nalika kunci nganteurkeun: hiji ISO 8601 waktos, atawa milliseconds saprak 1970. |
Ngeunaan author nu:
{
"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 nu | Ku kituna |
|---|---|
400 | Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (duplicate_nameNgeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (unknown_parameterNgeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (too_many_keys). |
429 | Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (rate_limit_exceededjeung 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);
Nurutkeun salah sahiji kunci
GET https://nymbot.ai/api/v1/keys/{id} Ieu signing.
Ngobrolkeun {"data": {…}} jeung tujuan utama, atawa 404
key_not_found Lamun teu aya salah sahiji ID anjeun.
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);
Ngaronjatkeun kunci
PATCH https://nymbot.ai/api/v1/keys/{id} Ieu signing.
Ngirimkeun salah sahiji name, limit_sats, reset_period jeung
expire_at, jeung aturan anu sarua salaku lamun nyieun kunci. null Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (400 key_revokedNgeunaan
{"data": {…}} ku objek kunci diperbarkeun.
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);
Ngaronjatkeun kunci
DELETE https://nymbot.ai/api/v1/keys/{id} Ieu signing.
Ngaronjatkeun kunci sateuacan, pikeun alus. Ieu tetep dina daftar jeung revoked_at Anjeunna bisa nempo sareng nempo. include_revoked=trueNgaronjatkeun kunci anu geus dibantahkeun ngalawan cara anu sarua. Sadaya 50 kunci anu dibantahkeun panganyarna disimpen; anu tua disimpen lamun kunci séjén anu dibantahkeun.
Jawaban
{ "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());
Ngeunaan Auto-top-up
Sambungkeun wallet Lightning jeung Nostr Wallet Connect jeung Nymbot toppes hiji keseimbangan ku sorangan lamun API spending ngajalankeun eta low. Rencana ditandatanganan.
Kumaha éta ngalaksanakeun: sanggeus permintaan API dibayaran kana saldo anjeun milih nonton, lamun saldo ieu geus turun di handap lintasan anjeun, Nymbot nyadiakeun inpo pikeun jumlah top-up anjeun, nelepon dompet anjeun pikeun mayar eta, sarta nambahkeun kredit. Ieu toppes nepi ka maximum hiji kali unggal 5 menit pikeun unggal nym jeung saldo, jadi hiji burst tina inpo nu teu bisa nyimpen dompet Anjeun. Ulahkeun dina aplikasi teu ngabalukarkeun eta. The waktos jeung ukuran tina top-up panungtungan, jeung kesalahan panungtungan, aya dina setelan; upami inpo kaluar sanggeus salah, nempo inpo ku Ngeunaan status top-up Kredit ieu téh.
A string sambungan ngidinan jalma anu ngabogaan eta ngobrol dompet Anjeun pikeun mayar. Nymbot nyimpen ieu encrypted jeung ngan ngan ngagunakeun eta pikeun mayar inpo-top-up sorangan, tapi nyieun sambungan ngan pikeun ieu, jeung anggaran spésifikasi di dompet Anjeun, jadi pangalusna eta bisa pernah mayar nyaéta nomer milih Anjeun. dompet kudu ngaronjatkeun pay_invoice.
Sambungkeun dompet
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect Ieu signing.
| Field nu | tipe nu | Diperlukan | Daptarkeun |
|---|---|---|---|
nwc_url | Pikeun string | Sumuhun | Sambungkeun string, dimimitian nostr+walletconnect://Nymbot nyarankeun dompet pikeun get_info Demi sasatoan anu dimaksud nyaéta vertebrata. |
threshold_sats | Ngeunaan | Sumuhun | Ku kituna, anjeun tiasa nyokot jumlahna dina jumlah ieu. paling kurang 1000. |
topup_sats | Ngeunaan | Sumuhun | Kumaha anjeun bakal nambahkeun unggal kali. 1000 ka 1.000.000 sats. |
tier | Pikeun string | nu nu | pro Demi sasatoan anu dimaksud nyaéta vertebrata. standard: keseimbangan pikeun nempo jeung top up. |
Jawaban
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| Status nu | Ku kituna |
|---|---|
400 | Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (invalid_nwc_urlNgeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (nwc_unreachableNgeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (nwc_rejectedNgeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (nwc_missing_permission); atawa jumlah leuwih ti batas. |
501 | Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (nwc_unavailableHal anu sarua pikeun dua endpoints séjén. |
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());
Nurutkeun settings
GET https://nymbot.ai/api/v1/nwc-auto-topup Ieu signing.
Ngabalukarkeun obyek anu sarua jeung sambungan, ku connected: false Demi sasatoan anu dimaksud nyaéta vertebrata.
null nu teu aya dompet nu dihubungkeun. string sambungan sorangan teu pernah dikembalikan.
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());
Ngaronjatkeun
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection Ieu signing.
Ngurungkeun string sambungan anu disimpen. No lagi top-ups dijieun. Pikeun jaminan, anjeun ogé bisa nyokot sambungan dina dompet Anjeun.
Jawaban
{ "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());
Uang ku permintaan tanpa kunci
The fixed-price endpoints bisa dibayar pikeun hiji permintaan dina waktu ngaliwatan Lightning, tanpa kunci, tanpa akun jeung tanpa saldo: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations jeung POST /embeddingsChat, Jawaban jeung Pesan selalu kudu kunci. permintaan nu ngabalukarkeun kunci dikaluarkeun kana saldo kawas biasa; aliran pembayaran ngan dimimitian lamun teu aya kunci dikirim.
Nymbot ngobrol dua versi tina gagasan anu sarua, ti hiji backend: Lightning Labs '
Ngeunaan 402 Demi sasatoan anu dimaksud nyaéta vertebrata. LSATNgeunaan Rencana IETF
Ngeunaan HTTP authentication skema jeung lightning Metode anu
charge Ngeunaan naon anu klien anjeun paham.
Uang tanpa kunci nyaéta dina ngan lamun API_L402_SECRET ngabogaan sahenteuna 32 byte acak, salaku hex (64 karakter) atawa base64 (44). openssl rand -hex 32A nilai shorter atawa bisa dipikahoyong ngéléhkeun fitur na logs kumaha. pikeun ngabalukarkeun eta, pindah nilai tua ka API_L402_SECRET_PREVIOUS pikeun hiji poé: credentials, status URLs jeung tantangan dilakukeun di handap ieu terus ngoperasikeun nepi ka kadua.
Tantangan ieu
Ngirimkeun permintaan ku no Authorization sakumaha anu dipikawanohkeun, teu aya kitu, jeung anjeun 402 Payment Required jeung invoice pikeun sakali naon demand biaya: harga anu sarua nu kunci bakal bayar, dialihkeun dina 10 sats hiji kredit standar atawa 100 sats hiji kredit Pro jeung buleud nepi ka sakuliah sat (minimum 1 sat, jeung minimal 0.05 kredit minimum). WWW-Authenticate Tanggapan pikeun akun anu sarua:
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 }
}
Ngeunaan request Parameter nyaéta base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
A tantangan anu dikaitkeun ka titik akhir, ka Content-Type (tipe media na, pikeun multipart, limit nya) jeung ka SHA-256 tina body bit akurat anjeun ngirimkeun, sarta tetep 15 menit. Ieu identik Nurutkeun deui: sama
Content-Type Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (/images/edits, /audio/transcriptions, /audio/translationsPaling perpustakaan HTTP milih batas anyar unggal kali aranjeunna encode hiji formulir, jadi encode eta hiji kali jeung ngirim bajet ieu dua kali.
Hiji alamat bisa ngobrol pikeun 30 tantangan per menit (a alamat IPv6 dihitung salaku sakabéh /64). Requests nu alamat anu teu dipikawanoh ngabalukarkeun leuwih ketat 10 per menit, jeung aya hiji cap umum dina tantangan Nymbot masalah di sakuliah alamat; hiji permintaan ditolak saméméh hiji tantangan anu dilakukeun (misalna, kalayan body nu teu valid JSON) teu dihitung ka eta. 429 jeung Retry-After, dikirimkeun saméméh awak anu dibaca. endpoints dibayar dipigawé tanpa kunci atawa credential ogé dihitung ka batas umum tina 120 requests unauthenticated per menit per alamat. a credential diperiksa saméméh awak anu dibaca, jeung permintaan anu Content-Type Nu nu application/json (Ieu téh
multipart/form-data Demi sasatoan anu dimaksud nyaéta vertebrata. 415 Ieu aya nu bakal nembongan dina kaayaan gering.
Embeddings anu harga ti estimasi tina token dina input, kalawan margin 1.5×, saprak jumlah nyata anu dipikawanoh ngan sanggeus. Anjeun mayar pikeun token anu sebenarnya dipaké, jeung bagian unused tina pembayaran balik salaku Ngeunaan token.
Ngirimkeun Pembayaran
Ulahkeun inpormasi ku mana wae Lightning dompet. dompet nyadiakeun anjeun preimage, 64 karakter hex. Saterusna ngirim permintaan anu sarua jeung salah sahiji ieu:
| Rencana | Header nu |
|---|---|
| Ngeunaan 402 | Authorization: L402 <macaroon>:<preimage> (LSAT Ngeunaan author nu: |
| Ngeunaan | Authorization: Payment <base64url JSON>Ku kituna nu JSON {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
A request dibayar nyanggakeun sakumaha anu dilakukeun ku kunci, kecuali yén nymbot
objek teu boga medan keseimbangan: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}Tapi nu aya nu X-Nymbot-Balance-Sats panalungtikan anu dibayar ku skema Pembayaran ogé nampa a Payment-Receipt header (base64url JSON jeung challenge id, hash pembayaran salaku reference, status jeung
timestampPercobaan dibayar teu dikaitkeun kana nym, jadi aranjeunna teu muncul dina sajarah pencarian.
| Status nu | Ku kituna |
|---|---|
402 payment_already_used | Tiap pembayaran dibayar pikeun hiji permintaan. Jawaban mangrupakeun tantangan anyar pikeun permintaan ieu, jadi klien anu cache credential panganyarna (seperti lnget Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan. |
402 payment_mismatch | Demi sasatoan anu dimaksud nyaéta vertebrata. Content-Type Anjeun tiasa nyimpen, atawa nyimpen kurang ti permintaan ieu ayeuna biaya. hiji tantangan anyar pikeun permintaan ieu datang jeung eta; lamun bayaran éta terlalu leutik, naon anjeun dibayar balik salaku hiji Ngeunaan token (refund_token jeung refund_sats Demi sasatoan anu dimaksud nyaéta vertebra. |
402 payment_expired | leuwih ti 15 menit kaluar ti tantangan. tantangan anyar datang jeung eta. Upami preimage nembongkeun anjeun dibayar, naon anjeun dibayar balik salaku Ngeunaan token (refund_token jeung refund_sats Demi sasatoan anu dimaksud nyaéta vertebrata. |
401 invalid_preimage | The preimage teu hash ka tagihan tagihan tina invoice. |
401 invalid_payment_credential | Credential ieu malformed, diubahkeun sanggeus Nymbot ngirimkeun eta, atawa ngaran hiji pembayaran hash Nymbot teu pernah ngirimkeun invoice pikeun. A macaroon kalawan caveat Nymbot teu nyaho, atawa kalawan caveats konflik, anu ditolak. |
429 rate_limit_exceeded | leuwih ti 30 credentials atawa kunci nu gagal verifikasi datang ti alamat ieu dina menit, atawa hiji token refund dikirimkeun leuwih ti 60 kali dina menit. 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"));
Klien dibangunkeun dina mppx jeung Metode Lightning ngatur tantangan Pembayaran sorangan; pointing aranjeunna di titik ujung jeung ninggalkeun aranjeunna mayar.
Video nu
Ngeunaan POST /videos Jawaban 202 Anjeunna mangrupakeun salah sahiji, plus a
status_url: GET Ieu téh ditandatanganan jeung dioperasikeun pikeun 24 jam, sedengkeun tugas ieu disimpen.
{
"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..."
}
}
Jaga nu refund_token Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (GET /api/v1/l402/refunds Jawaban "status": "pending"); lamun render gagal unfibred, payout landed on eta. URL status ngajelaskeun
refund_sats pikeun karya anu dibayar balik tapi teu pernah token, jadi ngagikeun URL status teu ngagikeun refund.
Rembongkeun
Upami permintaan dibayar gagal jeung provider dibayarkan Nymbot pikeun percobaan, pembayaran disimpen jeung kesalahan nyebutkeun eta, ku charged_satsKu kituna, anjeun tiasa nyarankeun naon anu aya dina akun anjeun, tapi anjeun tiasa nyarankeun naon anu aya dina akun anjeun. Ngeunaan token Ngeunaan duit anu dibayar:
{
"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"
}
}
Bagean unused balik kana cara anu sarua: lamun geus diminta pikeun dua gambar jeung salah sahiji gagal unchecked, respon suksés nymbot objek ngabalukarkeun token refund pikeun anu mungkir; transcription nu panjangna teu bisa dibaca nepi ka hadé ieu harga pikeun pangpanjangna file bisa jadi (kurang leuwih ti 30 menit), jeung perbedaan ka panjangna nyata datang balik salaku token refund; upami éta dihasilkeun pikeun leuwih ti 30 menit, éta ditolak ku 413
Ngeunaan alat-alat ieu, anjeun tiasa nyadiakeun alat-alat ieu pikeun ngaronjatkeun kasalahan anjeun.
A token refund nyaéta kode acak 256-bit. Nymbot nyimpen ngan hash nya, sarta eta tumuwuh sanggeus 30 poé. Ieu nyimpen saldo sat, sarta anjeun bisa:
- Uang jeung eta. Ngirimkeun
Authorization: Bearer REFUND-…Ngeunaan author nu: Lamun anjeun resep artikel ieu ngeunaan (refund_token_satsDinymbotA token worth less than the request responds. – A token worth less than the request answers.402refund_insufficientA unbiled gagal nyetirkeun sats balik dina token anu sarua. - Ieu téh.
GET /api/v1/l402/refundsKu kituna header ieu balik.{"sats": 237, "status": "open", "expires_at": "..."}. - Hiji token bisa dipaké nepi ka 60 kali per menit.
- Ngalihkeun eta ka nym. Ngeunaan Meunangkeun hadiah di app Nymbot, atawa panggilan
POST /api/v1/l402/refunds/redeemjeung a Rencana ditandatanganan jeung{"refund_token": "REFUND-...", "balance": "standard"}(Ieu téh"pro"Cél-kredit balik ka saldo (10 sats unggal on standar, 100 on Pro); sats nu teu nyieun hiji kredit sakabéh tetep on token pikeun 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"
Jawaban
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }