Белем базасы Разработчиклар
Баланс, тултыру һәм ачкычлар
Сезнең нинди ресурслар бар икән тикшерегез, Lightning аша акча салу, үз кошелегендән автоматтык ярдәм алу, һәр бир сорау нинди толаганын күрегез һәм код аша ключларны башкарыгыз.
Бу бит уңайлык өчен машинага тәрҗемә ителгән. Инглизчә оригиналь - кулланыла торган версия.
Балансны тикшерү
Икеңезнең дә баланслары һәм бу ачкычның күпсенәгеннән ничкә файдаланылган.
GET https://nymbot.ai/api/v1/credits/balance — API ачкычы кирәк. POST буны булсын, клиентләр күтәрә булса, эшлә );
balance хәзерге Биткоин баهاсы белән ике баланс бергә долларлашып,
бер число яки сан өметле инструментлар өчен (null бизнең баасын укып булмаса). Калган частиясә
кредитләр һәм сатслар белән, бадиенләр аларны ягытлаган рәвештә саклана. key соралган калитне тасвирлый. Лимитына еттек калит исәп-хисапны һали тикшереп тора ала.
Җавап
{
"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"
}
}
| Статус | Качан |
|---|---|
401 | АчтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR ачтAR |
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);
Төләм ыгымнары
Сез акчаны ничек тутыра аласыз һәм чикләр. Lightning — бердиен метод.
GET https://nymbot.ai/api/v1/topup/payment-methods — ачкыч кирәк түгел.
Пополныш 10-дан 1,000,000 сатошигә кадәр; Pro пополнышы өчен беренче Pro кредитын сатып алу кирәк, шуңа күрә ул 100 сатошидан башлана. Доллар чикләре Биткоин бәхәте буенча билгеләнә. bulk_bonus зулракка тукларны күрсәтер: кушымтадагы кебек: 500, 1,000 яки 5,000 сатсыннан башланарга стандарт туклар өчен 10%, 15% яки 20% артырак, ә Pro туклар өчен 5,000, 10,000 яки 50,000 сатсыннан башланарга артырак.
Җавап
{
"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);
Lightning а travésлы тутыру
Lightning инвойсы ясыла, ул үзэгенә тэмәлләү (credit) өстәгән nym ачкычына кредит өстәргә ярдәм итә. Аны берничә Lightning кошетке җыелган акчадан түләү, аннан соң керетә булырга тиеш кредит өแนนәргә.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning — API ачкычы кирәк.
| Тәнәсе | Төп | Зарыл | Тасвирлама |
|---|---|---|---|
amount | сан | Әйе | Ничек, ... currencySats өчен бүтлек бәйрәме. |
currency | сызык | Юк | SATS (төп), USD яки BTCДолларлар бүгенге биткоин бәясе буенча әйләндерә. |
tier | сызык | Юк | pro (тәгабер) яки standardкредит кайдагы баланска керә? |
Стандарт кредит 10 сат, ә Pro кредит 100 сат, плюс күптән сатып алу бонусы;
credits бу счёт нәрсә өстәрлеген әйтә.
Җавап
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| Статус | Качан |
|---|---|
400 | Юлдагы башка метод (unsupported_method), белмәгән валюта (unsupported_currency) яки уровень, кемшертү җезе турган сумма яки минималь суммадан төшен сумма (amount_too_small), 1,000,000 sats аша (amount_too_large) яки Lightning кошелек тарафыннан танталылды (amount_out_of_range). |
429 | Бу nym өчен 60тән артык инвойс яки бу адреснән бер сәгать эчендә 120тән артык инвойс (rate_limit_exceeded, белән Retry-After). |
502 | Хәзердик итоговый счёт чыгармаска мөмкин булды (invoice_unavailable, белән 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);
Топ-апны тикшерү
Счет түләнәше дип сорый һәм, түлгәчтән соң, кредит өстәргә ярдәм итә. Түләү түгәрәтүнең нинди кредит өстәшен тикшерү — түләү үткәчтән, статус шул киләнгә ←까지 тикшереп тору. creditedАннары тикшерү корыксыз була: ничлек тапшырырга сорасагыз да, кредит бер ген тапшырыла.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} — счёт исәпте тулган nym-нан ачкыч кирәк.
status бар pending (әле түгел] paid (түләнгән, ләкин әле түгел
түләп алынган; кайтарак тикшерәргә), credited (сезнең балансызда) яки expired (вакытнында түгел). Баланс полялары счет үс regularity яңартыла торган уровень өчен.
Җавап
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| Статус | Качан |
|---|---|
400 | ID — ул чыгару (create) арызыннан киләге 64 символлы ID түгел. |
404 | Бу ID буенча сезнең исемегезгә (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);
Су запрос тарихы
Һәр сорау өчен берe рәис: нәрсә булганы, кайсы модель, күп tokenнар һәм нинди чәчәк. Promptлар яки җаваплар сакланмый, шуңа күрә алар кайтарылмый. Рәисләр 90 көн саклана, иң яңалары алින්. Үз лимитын тапкан ключ үз тарихын һали укый ала.
GET https://nymbot.ai/api/v1/queries/history — API ачкычы кирәк, ул үзенең сорауларын күрә, яки имзаланган сорау һәрбер ачкышны күрүче нимиңнән.
| Тәнәсе | Төп | Зарыл | Тасвирлама |
|---|---|---|---|
page | чисел (со запрос) | Юк | Тәгабер 1, максимум 1,000; югарырак бишмәк — 400 invalid_value. |
page_count | чисел (со запрос) | Юк | Битендәге саතුවлар саны. Тәкълим ителгәннек — 20, максимум — 100. |
start_dateend_date | строка (запрос) | Юк | ISO 8601 даталары яки вакытлары. |
model | строка (запрос) | Юк | Төнге тикmun. |
type | строка (запрос) | Юк | chat, responses, messages, image, video, speech, transcription яки embedding. |
all_keys | boolean (сорау) | Юк | Ачкыч белән: true бер төрле nymның барлык юктакларын үз эченә ала. Default false. |
key_id | строка (запрос) | Юк | Имзаланган аразылык белән яки all_keys=true:< гайсагыз. |
Җавап
{
"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);
Аккаунт сорауларын имзалау
Ачкычлар ясау, үзгәртергә һәм аларны рәвакый итеп китәргә, аккаунт суммасы һәм автоматтык тутыргычлар API ачкычын кабул итми. Алар сезнең nym ачкычыннан имза алалар, шулай өчен сөзешкә чыккан ачкыч үз күләме (cap) чиккәрмәгәнчә акча югатырга мөмкин, ләкин башка ачкыч ясауга яки үз күләмен күтәрүгә беркарателгән түбәнлекләргә иярә алмый.
Приложение сезне өчен буны ясап бирә: барысы да үз... API sheet бу конекшннарны куллана. Сезгә үз кодыннан ключларны башкару өчен тик бу бүлек генә кирәк.
Тизмет имзасы — 27235 төрле (NIP-98) Nostr оçıбы, ул base64 форматlarında җибәрелә
Authorization сүз белән башлык Nostr төп алда:
Җиыел
{
"kind": 27235,
"created_at": 1790726400,
"tags": [
["u", "https://nymbot.ai/api/v1/keys"],
["method", "POST"],
["nonce", "9c4e21f07a3b...16 random bytes in hex"],
["payload", "3f1a0d7c8e2b...sha256 of the exact request body in hex"]
],
"content": "",
"pubkey": "your public key in hex",
"id": "...",
"sig": "..."
}
uбу — запросның სრული URL, сорыincluding query string, җաբәт бирелгән сол көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көй량 көйләү көй량 көйләү көй량 көйләү көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량methodHTTP методы булып тора.payloadсорауның чийн (raw) теленсе алынган SHA-256 коды, hex форматında. Ул ... өчен зарур.POSTһәмPATCH, һәм сез җибәргән тел белән каралсын, ул хэшләгән телне байт буенча исемесе белән тулылык итәчэк.created_atсервер сәаты белән 60 секунд эчендә булырга тиеш.- Һәр вакыйга бер генә эшли, а
GETкүләмгә кертелгән, шуңаEllä, алынган заголовокны кайта competición итү мөмкин түгел. һәр үтенче өчен яңасын кулла. Добавить аnonceРандом значение белән тегләгез, шунда бер секунд эчендә имзаланган ике запрос да бер-берсеннән айныр булачак. - Тамгаланган сорауның тө bodyParserы максимум 64 КБ может, әле bodyParser кирә
Content-Type: application/json.
Зурлык җыелмагы кайтаргач 401 missing_nostr_auth; дөрес булмаган, дөрес имзаланмаган, бик иске яки башка URL, метод яки тело өчен булып торган эшкәрмә түбәндәгеләрне кайтара
invalid_nostr_authхәбәрдәге сәбәп белән; кайталанган җөмлә кайталар
nostr_auth_replayedБу эзертмәләргә җибәрелгән API ачкычы кабул ителми. Тизлекне күрмәс территориягә ул суым укылмасдан алまえ имза тикшилергә кирәк, һәм һәр адрес минүт сайын аны 30 тапкыр туктатырга мөмкин (IPv6 адресы аның бүтлек /64 адресы булып санала); шундан соң ул 429 белән
Retry-After.
Браузерләр бу эндпоинтларга Нымботның үз сайтышින් гына кайрыла ала](https://nymbot.ai,
https://nymchat.app һа аларның субдоменнары). Башка берничә сайттагы страница CORS
headers алуга мөмкин түгел, шулай өчен алар кайтарган нәрсәне укый алмый. Скриптлар һәм натив приложениелар, алар *@* җибәрмәгән
Origin, 영향lı түгел.
Имзалау өчен сезнең nym-ның сырлы ачкычыгыз кирәк ( ... nsec), ул барысын да башкара: синнең кимлегеңне, тарихыңны һәм балансыңны. Аны тик гына син ышанарга мөмкин булган машинада скрипткә куй, файлга языргаррак аны средадан укы һәм мөмкин булганда приложениены кулланырга тырыш.
Бу ярдәмчеләр таңгашны төзәләр. Бу билдәттәге аннан соңгы мисалларда алар кулланыла. Алар секрет ключны hex форматында укыйлар: NOSTR_SECRET_HEX; cURL берәмне куллана
нәк командалар сатысы инструмент, ул nsec яки hex
ачкычны кабул итә, һәм sha256sum (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");
}
Төләмнәр суммасы
Приложение API sheet ашында нәрсә күрсәте: сезнең публик ачкычыгыз, ике баланс, ничне ачкычлар актив (анга чикләү бирелмәгән яки вакыты үтмәгән) һәм Автоматлы тултыру тәэберләүләр, яки
null сервер аларны тәкъдим итмәгәндә.
GET https://nymbot.ai/api/v1/account — кирә имзаланган сорау.
Җавап
{
"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());
Ачкычларны башкару
Тطبيق ачкычлар исемлеге а룡лы конекшннар. Аларның барысына да кирәк имзаланган запросҺәрбер ачкы бу формада кайтарыла, вакытлар ISO 8601 форматында һәм суммалар sats форматында:
Ачкыч объект
{
"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 ачкычны танырга бик enough, әмма аны кулланырга юк. Ачкычның үзе тик бер генә тапкыр, ул ясалганда кайтарыла.
Ачкычларны исемләү
GET https://nymbot.ai/api/v1/keys — имзаланган.
| Тәнәсе | Төп | Зарыл | Тасвирлама |
|---|---|---|---|
include_revoked | boolean (сорау) | Юк | Аңгартылган ачткычларны керәтү. Default false. |
Җавап
{ "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);
Ачкыч ясау
POST https://nymbot.ai/api/v1/keys — имзаланган. Кайтарулар 201.
| Тәнәсе | Төп | Зарыл | Тасвирлама |
|---|---|---|---|
name | сызык | Әйе | 1-тән 40 символ, башка актив ачкычларыгыздан өзелеш (регистрне күмәлләне без). |
limit_sats | бүтсел | Юк | Сатс белән саклау пределы, әйтебер менә 1. Чик булмасын өчен, аны калдырмаслыкла. |
reset_period | сызык | Юк | daily, weekly яки monthly. Кирәклекләр limit_satsКайтаlamлы булмаган чик өчен аны калдырыгыз. |
expire_at | строка яки integer | Юк | Ачкыч эшләмәгән чатка: ISO 8601 вакыты яки 1970 елдан бирле миллисекундалар. |
Җавап (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"
}
}
| Статус | Качан |
|---|---|
400 | Менә дәк белмәгән яки бик озын имя; ул имя үтә генә кулланыла (duplicate_name); киммен дә 1 булмаган бүтен сан булмаган чик; чиксез тикләнеш периоды; үткән вакыттагы мөһләт; белмәгән майдан (unknown_parameter); яки 25 актив ачкыч эвакыт ирендә (too_many_keys). |
429 | Бу ним тарафыннан бер сәгать эчендә 60тән артык ачкыч яки бу адрескән 120 ачкыч (rate_limit_exceeded, белән 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);
Бер төп калитәне укыу
GET https://nymbot.ai/api/v1/keys/{id} — имзаланган.
Кайтмалар {"data": {…}} т Schlüssel-объект белән, яки 404
key_not_found Әгәрдә сезнең берничә иkeysе дә бу 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);
Ачкычны değiştirү
PATCH https://nymbot.ai/api/v1/keys/{id} — имзаланган.
Берне дә җибәрегез name, limit_sats, reset_period һәм
expire_atачкыч ясалгандагы кебек шул ук кагыйдalar белән. null полены чистир: чикләүсез, тиккерүсез, срок җыелдырмый. Тиккерү периодын үзгәртү нулирдан яңа период башлый. Ануланган ключны үзгәртү мөмкин түгел (400 key_revoked). Кайтара
{"data": {…}} яңартылган ачкыч объект белән.
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);
Ачкычны аннуляциялау
DELETE https://nymbot.ai/api/v1/keys/{id} — имзаланган.
Ачкычны берничә өчен берьюл туктатып торгач. Ул списокта кала: revoked_at устатылган, һәм ... белән күрелә ала include_revoked=trueҮтә генә аннуланган ключны аннулау да бер теләклый җавап бирә. Тиз генә аннуланган 50 ключ гына саклана; башка ключ аннуланганда искеләре үчертелә.
Җавап
{ "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 авто-тултыру
Lightning кошелен Нostr Wallet Connect беләнにつながгыз, әгәр API чыгымнары балансны төменләтсә, Nymbot үзе автоматтык түрде тутыра. Приложение API листның үзsettingsләре бар; алар аның арткы эшликлары. Аларның барысына да кирәк имзаланган сорау.
Бу ничек эшли: API соравы сез күзерәтү өчен сайлаган баланс белән түлгәчтән соң, әгәр ул баланс сез билгеләгән чиктан төшсә, Nymbot сез тутырырга кирәкле сумма өчен счёт (invoice) чыга, сучылдагыз (wallet) төләү ясауны сорый һәм кредитны өстә. Ул һәр nym һәм баланс өчен 5 минутта бер тапкырдан да күбрәк тутырма, шуңа күрә сорауларның күпләп килү сучылдагызны тудән төбә алмый. Приложениеләр белән акча чапкыту бу процесны э embarking итми. Соңгы тутыру вакыты һәм күләме, һәм соңгы ошибка берәтмәләрдә (settings) язылган; әгәр ошибкадан соң төләү үтсә, аның счётны тикшерү... түләү статусы кредит бирә.
Берләштерү строкаясы аны тоកាន់ган кешенең сезнең кошетыгызdan түләүләр өчен сорау җибәрүсә maraштын чикләргә ярдәм итә. Nymbot
аны шифрланган хәлдә саклай һәм аны үзенең тутыру счетнарын түләү өчен генә куллана, ләкин
бу өченSeg котытыгызда чыгым бюджеты булган бер bağlantә үзешмә, шулай итеп иң күп түләүгә мөмкин булган сумма сез сайлаган сан булачак. Кошит түләргә мөмкинлек бирәргә тиеш pay_invoice.
Кошелекны тоташтыру
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect — имзаланган.
| Тәнәсе | Төп | Зарыл | Тасвирлама |
|---|---|---|---|
nwc_url | сызык | Әйе | Берләштерү strung-сы, башлау nostr+walletconnect://. Nymbot кошелектан ... сурарга get_info аны сакламасынан алдыннан һәм аны шифрланган ҳоллә саклай. |
threshold_sats | бүтсел | Әйе | Баланс шунча сатошидан азрак булганда тултырырга. Чик — әкъер 1,000. |
topup_sats | бүтсел | Әйе | Һәр тапкыр ничек өстәргә кирәк. 1,000 easily 1,000,000 sats. |
tier | сызык | Юк | pro (тәгабер) яки standardбалансны карау һәм тутыру өчен. |
Җавап
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| Статус | Качан |
|---|---|
400 | Байланыш строкая түгел (invalid_nwc_url); кошелек үз релесе аша җавап бирмәде (nwc_unreachable) яки чектен баш тартты (nwc_rejected); bağlantәләр счётнарны түләүDerebeл дәүләм кыбах турында (nwc_missing_permission); яки чикләрдән тыш сумма. |
501 | Бу сервер өчен автоматлы тутырулар күрсәтелмәгән (nwc_unavailable). Бу калган ике конекка да шул ук кагыла. |
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());
Теләкләрне укыу
GET https://nymbot.ai/api/v1/nwc-auto-topup — имзаланган.
Connecting белән бер төрле объектны кайтара, белән connected: false һәм башка полялар
null кошелекにくандырмалма булганда. Коннекшн строкая үзү ка adverts return ителми.
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());
Аерылып бара...
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection — имзаланган.
Сакланган бәйләнеш сызыгын үчертә. Түләүләр башка ясалмасын. Эзен тикшерергә өчен, ул бәйләнешне кошелеңдән дә аерып ташлый аласыз.
Җавап
{ "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());
Ачкычсыз һәр сорау өчен төләү
Фикс ценаlı эндпоинтларга Lightning аша бер таптырма белән, ключсыз, аккаунтсыз һәм баланссыз түләү мөмкин: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations һәм POST /embeddings. Чатлар, җаваплар һәм
хәбәрләр һәрвакыт ачкычны тәкъдим итәргә тиеш. Ачкыч кагылып җибәрелгән сорау баланс буенча оZA турында гадәттәгечә түләү керә;
түләү процессы ачкыч җибәрелмәгән timescales гына башылана.
Nymbot бер бэкэнднән бер идеяның ике версиясын сөйлә ); Lightning Labs'
L402 (шулай ук аның иске исеме белән дә кабул ителгән, LSAT) һәм IETF draughtы
Төләм HTTP аутентификация схемасе белән lightning методы һәм
charge ниет. Клиентыгез аңлашарга ка adverts кайсысы кирәк булса, шуны кулланыңыз.
Ачкычсыз түләү тик ... гына эшләгән API_L402_SECRET һәммум 32 рандом байтны, hex (64 символ) яки base64 (44) форматындаEs holds at least 32 random
bytes, as hex (64 characters) or base64 (44). Make one with openssl rand -hex 32Кыскарак яки танылган чик мәдәниәтне өчтэрә һәм нишләвесен теркәгәнә. Аны чикләү өчен, иске чикне күчтерегез: API_L402_SECRET_PREVIOUS бер көнгә: мәгълүматлар, статус URL-ләре һәм
алар төпләнгән чаклы чаклы эшләп торалар.
Сынау
Үтенечне бернәр булмыйча җибәрегез Authorization header. Әгәр ул дөрес булса, бернәрсе дә эшләми һәм
сез аласыз 402 Payment Required һаракатның дөртлек херҗәте буенча һаҡлау лист (invoice) белән:
аларның барысы да ключ төлләгән бәхәт, стандарт кредит өчен 10 sats яки Pro кредит өчен 100 sats коэффициенты белән әйләндерелгән
һәм бүтләп sat гы<br>билеп (химна 1 sat, һәм химна 0.05 кредит минимум).<br>җавап өч<br>аштыра WWW-Authenticate бер төләмә өчен читлелекләр:
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 }
}
Төләм request параметр — бу base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
Сыйелма чикка, чикка иретелгән *@challenge* Content-Type (аның медиа тибы һәм,
multipart өчен, аның границасы) һәм сез җибәрегән төп телләрнең SHA-256 кодынә багышlı, 15
минут дәвам итә. Төләмнән соң, җибәрегез одинак кайтадан сорау: аналоги
Content-Type һәм шул ук JSON байтлары, яки multipart эндпоинтлар өчен
(/images/edits, /audio/transcriptions, /audio/translations)
һәм equally boundary яки бер төрле multipart тело. HTTP китапханәләренең күбәге форманы корауның һәр разында яңа boundary сайлый, шуңа күрә аны бер тапкыр кора һәм шул байтларны ике тапкыр җибәр.
Һәрбер адрес минутка 30 чыгаруны (challenge) сора могу (IPv6 адрес анының бүтлек /64 адресы булаlarak санала).
Адресы белмәгән сораулар минутка 10 сораудан түшенәley катырак чикләнгән, шулай ук Nymbot барлык адреслар буенча чыгара торган чыгаруларның дәрәҗәсе буенча общья чик бар; чыгару юлланмазынан әඟәрлек бирелмәсden әඟәрлек кабатланырга (мәсәлән, JSON форматына туры килмәгән тел белән) сорау, шуга чиккә керми. Шуннан соң җавап икәр... 429 белән Retry-After, мәгълүмат укылуыннан әгәр дә җибәрелә. Ачкыч яки документсыз чакырылган түләүле конектеллар да һәр адрес өчен минутка 120 аутентификацияланмаган сураныш лимитына керә. Документ мәгълүмат укылуыннан әгәр дә тикшерелә, ә сураныш, каторы Content-Type җтәкелмә application/json (яки
multipart/form-data югарттулар өчен) белән рәфү ителгән 415 һәм бернинди дә
инвойс алырга да ярдәм итми.
Эмбеддингләрне баалау керү дөньясындагы токеннарның тапшырмалауы белән 1.5× маржа белән, чөнки төп саны тик алайдан белешә була. Сез алынып алынган токеннар өчен түләү ясыйсез, ә түләүнең кулланылмаган өлеше ... булап кайта була төл converselyคืนคืน (refund) токен.
Төлем җибәрү
Лайтнинг (Lightning) кошельләренең берсеменнә счётны түләү. Кошель сезгә preimage бирә, ул 64 hex символдан тора. Шуңа күрә, түбәндәгеләрнең берсемен белән шул ук запросны җибәрегез:
| Схема | Там җегезle_үәлe_бәртe_үe_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n_e_n |
|---|---|
| L402 | Authorization: L402 <macaroon>:<preimage> (LSAT шәмәллә hefyd) |
| Төләм | Authorization: Payment <base64url JSON>, JSON кайда? {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
Төләмле запрос ключ белән ясалган запрос кел дә җавап бирә, тик... nymbot
объектта баланс полялары юк: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}, һәм бернәр дә юк X-Nymbot-Balance-Sats тәҗһәтмә. А
Төләм схемасы белән түлләнгән сорау да үзгәрү ала Payment-Receipt header (base64url
JSON challenge id белән, төлем хешле качестведә reference, status һәм
timestamp). Төлләгән сораулар бернинди nym белән бәйләнешле түгел, шуңа күрә алар
сорау тарихында күренмиләр.
| Статус | Качан |
|---|---|
402 payment_already_used | Һәр төләм бер сурау өчен түләү barges. Җавап бу сурау өчен яңа сынак булып тора, шулай итеп клиент үзнең соңгы идентификаторын кешеләп саклады (кебек lnget һәм) җайгын түли. |
402 payment_mismatch | Сертификат башка конечка ноты өчен бирелгән, Content-Type яме, яки бу сораудан аз түләү хәзерге чагыннарның кыйметенә туры килми. Бу сорау өчен яңа сынак килә; әгәр түләү бик кечкенә булса, син түләгән акча түбәндәге булып кайта була төл converselyคืนคืน (refund) токен (refund_token һәм refund_sats (тәннең эчендә). |
402 payment_expired | Ярыш битлегеннән 15 минуттан артык үтте. Аның белән берлагач яңа ярыш килә. Әгәр преобраз төләмә төлләгеңне күрсәтсә, түлгән акчаң ... булып кайта була төл converselyคืนคืน (refund) токен (refund_token һәм refund_sats much body), берэш тапшыру; аннан соң аклауны куллану мөмкин түгел. |
401 invalid_preimage | Предсorsanә инвойсның т membayar хәшлегенә хәшлек бирми. Тembarт кулланылмый. |
401 invalid_payment_credential | Сертификат сыผิด форматлы, Nymbot аны чыгаргандан соң үзгәртелгән яки Nymbot берничә тапшырма (invoice) чыгармаган түләү хэшкә исем бирелгән. Nymbot белмәгән шарт (caveat) яки карашлы шартлар булган macaroon кабул ителми. |
429 rate_limit_exceeded | Бул адречтән бер минут эчендә тикшерелмәгән 30-дан артык мәгълүмат яки тортлар килде яки бер минут эчендә бер refund токены 60тән артык тапшырылды. Көтегез 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"));
Клиентләр төз%] mppx Lightning методы белән Төләм (Payment) мәсьәләсен үзләрендә чикләгез; аларны конеч утлау (endpoint) яpadded кылгыз һәм түләү ясауларына рөхсәт бирү.
Видеолар
Төләмле POST /videos җаваплар 202 ачкычлы кебек, плюс а
status_url: GET абыйны куелган эшне башкару өчен бернәрсе кирәк түгел. Ул имзаланган
һәм эш башкарылган timescales 24 сәгать эшли.
{
"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..."
}
}
Сакла refund_token бу җаваптан: ул биредә генә күрнелгән. Видео рендеринг ясаулыгендә ул пуста (GET /api/v1/l402/refunds җаваплар "status": "pending");
рендеринг төләмәсез вакытта сызса, түләү аның өстенә түшә. Статус URL күрсәтә
refund_sats төлләнгән эш өчен, ләкин токен һичCAP, шуңа күрә статус URLын бүлештерү төлләүне бүлештерми. Токенны тикшерү шулай ук берничә кеше дә тикшермәгән төшкән эшне дә рәсьми рәвештә тәмамлый.
Кайтмалар
Әгәрle түләүле төләм оешып барса һәм провайдер Nymbotны ошо тырышу өчен акчаласа, түләү калдырыла һәм
хайәт оны турында әйтә, шул ук белән charged_sats, exactly as for a keyed request. If it fails
without being billed, the error carries a төл converselyคืนคืน (refund) токен түләгән акчаңа аксу:
{
"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"
}
}
Кулланылмаган өлешләр дә шулай кайта була: әгәр сез ике рәсем сорасагыз һәм берсе төлләмәсез сәтсез булса, уңыш җавабының... nymbot объект юкалган өчен кайтару токенын ташый;
аңлыманың озынлыгы алдан укына алмаса, файлның иң озын булган мөмкинлегенә бер цена — (һич кайсы timescales 30 минуттан артык түгел), һәм дөрес озынлык белән а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara файлының а ara фай 413
һәм бүтлек түләү кайта була. Эмбеддингләр балау күрсәтелгәнне кайтара. Түгел ясалган видео үзенең җибәрелгән токеннарына түләүне кайтара.
Кайтма токены — ул 256 битлы чиксез код. Nymbot аның тик хэш-кодын гына саклай һәм ул 30 көннән соң үтә. Ул сат балансын тоташтыра һәм сез:
- Аның белән түлә. Җибәрү
Authorization: Bearer REFUND-…выше кирсәтелгән эчке ноQDтaların берендә (OpenAI SDK аны API ачкычы булак итеп ала). Баها токеннан алына һәм калган часть аның уңында кала (refund_token_sats...даnymbotобъект). Сүз белгеч сураудан да аз дәрәҗәдәге җавап бирә402refund_insufficient; төлләмәгән сыймыгы сатснарны бер төрле токенга кайтара. - Текшер.
GET /api/v1/l402/refundsһәм диктәге кебек кайтара{"sats": 237, "status": "open", "expires_at": "..."}. - Бер токенны бер минутта максимум 60 тапкыр кулланырга була.
- Аны nym-га күчерт. Аны шул урынга урнаштырыгыз Элем만큼ны кулланырга куллану Nymbot приложениесында яки шакырыгыз
POST /api/v1/l402/refunds/redeemбер ... белән имзаланган сорау һәм{"refund_token": "REFUND-...", "balance": "standard"}(яки"pro"). Барлык кредитлар баланска күчтә керә (стандартта һәрберсе өчен 10 sats, Pro версиясында 100 sats); бүтын кредит булмый торган sats-лар API сураулары өчен токенда кала.
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"
Җавап
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }