Эчтәлеккә күчү
Nymbotка кайтаргач

Белем базасы Разработчиклар

Баланс, тултыру һәм ачкычлар

Сезнең нинди ресурслар бар икән тикшерегез, 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
}
СтатусКачан
400ID — ул чыгару (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_date
end_date
строка (запрос)ЮкISO 8601 даталары яки вакытлары.
modelстрока (запрос)ЮкТөнге тикmun.
typeстрока (запрос)Юкchat, responses, messages, image, video, speech, transcription яки embedding.
all_keysboolean (сорау)ЮкАчкыч белән: 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, җաբәт бирелгән сол көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көйләү көй량 көйләү көйләү көй량 көйләү көй량 көйләү көй량 көйләү көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량 көй량
  • method HTTP методы булып тора.
  • 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_revokedboolean (сорау)ЮкАңгартылган ачткычларны керәтү. 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) язылган; әгәр ошибкадан соң төләү үтсә, аның счётны тикшерү... түләү статусы кредит бирә.

Кошелеңәeをつнаштырмасmenнән әFтә

Берләштерү строкаясы аны тоកាន់ган кешенең сезнең кошетыгыз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
L402Authorization: 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 объект). Сүз белгеч сураудан да аз дәрәҗәдәге җавап бирә 402 refund_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 } }