Þekkingargrunnur Framleiðendur
Balans, toppur og lykla
Skoðaðu hvað þú hefur, yfirgefa Lightning, yfirgefa sjálfkrafa úr eigin veskinu, sjá hvað hver beiðni kostar og stjórna lykjum úr kóði.
Þessi síða er vélþýdd til hægðarauka. Enska frumritið er útgáfan sem á við.
Skoðað jafnvægi
Bæði jafnvægi þitt, og hversu mikið af hápur þessarar lykla er notað.
GET https://nymbot.ai/api/v1/credits/balance Þarf að nota API lykil. POST Það virkar líka, fyrir viðskiptavini sem bíður það.
balance er tveir jafnvægi saman í dollara við núverandi Bitcoin verð, fyrir verkfæri sem búast við einni númer (null Ef verð er ekki hægt að lesa). restin er í kreditum og sats, sem er hvernig jafnvægi eru í raun haldið. key Lykill sem hefur náð hæðinni getur samt athugað jafnvægi.
Svarið
{
"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"
}
}
| Staðsetning | Þegar |
|---|---|
401 | Lykillinn er saknað, óþekktur, afturkallaður eða upphafinn. |
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);
Fjárfestingarnar
Hvernig þú getur topp upp, og takmarkanir. Lightning er eina aðferðin.
GET https://nymbot.ai/api/v1/topup/payment-methods Engin lykill þörf.
A top-up er 10 til 1.000.000 sats; Pro top-up þarf að kaupa að minnsta kosti einn Pro kredit, svo það byrjar á 100 sats. bulk_bonus listar auka kredit á stærri toppur, eins og í app: 10%, 15% eða 20% meira á venjulegum toppur frá 500, 1.000 eða 5.000 sats, og á Pro toppur frá 5.000, 10.000 eða 50.000 sats.
Svarið
{
"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);
Stíga upp yfir Lightning
Gerir Lightning reikning sem bætir kredit til nym sem lykillinn tilheyrir. borga það frá hvaða Lightning veski, þá Skoðaðu það Til að fá kreditinn bætt.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning Þarf að nota API lykil.
| Fields | tegund | nauðsynlegt | lýsingu |
|---|---|---|---|
amount | Fjöldi | Já | Hversu mikið, í currencyFullt númer fyrir sats. |
currency | Strengið | Nei ekki | SATS (Það er að minnsta kosti, USD eða BTCDollar eru breytt á núverandi Bitcoin verð. |
tier | Strengið | Nei ekki | pro (Það er skortur) eða standard: hvaða jafnvægi kreditinn fer til. |
A venjulegur kredit er 10 sats og Pro kredit 100 sats, auk hvaða bulk bónus;
credits segir hvað þessi reikning mun bæta við.
Svarið
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"payment_request": "lnbc100u1p5...",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": "2026-09-30T09:27:00Z",
"status": "pending"
}
| Staðsetning | Þegar |
|---|---|
400 | Aðrar leiðir á leiðinni (unsupported_method, óþekktur gjaldmiðill (unsupported_currencyHægt er að taka þátt í því sem er að minnsta kosti, eða að minnsta kosti (amount_too_small, yfir 1000 milljónir sats (amount_too_large) eða hafnað af Lightning veski (amount_out_of_range). |
429 | Meira en 60 reikningar fyrir þessa nym, eða 120 frá þessari heimilisfang, á klukkustund (rate_limit_exceeded, með Retry-After). |
502 | Það er ekki hægt að taka þátt í því núna (invoice_unavailable, með 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);
Skoðaðu top-up
Spyr hvort reikningurinn hafi verið greiddur og þegar það hefur, bætir það við kreditinn. creditedAð athuga aftur síðar er öruggt: kredit landar einu sinni, sama hversu oft þú spyrð.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - þarf lykil frá nym sem gerði reikninginn.
status er pending (Það er ekki greitt ennþá) paid (Að borga, en ekki enn kredit; athugaðu aftur), credited (á jafnvægi þínu) eða expired (ekki borgað á tíma). Fjárhæðin eru fyrir stigið sem reikningurinn toppar upp.
Svarið
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| Staðsetning | Þegar |
|---|---|
400 | ID er ekki 64 stafrænt ID frá því að búa til símann. |
404 | Það er ekki hægt að taka þátt í því með því að þú sért ekki með þinn NM (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);
Vilja sögu
Eitt röð á beiðni: hvað það var, hvaða gerð, hversu mörg tokens og hvað það kostar. Engar tilkynningar eða svör eru haldnir, þannig að enginn er endurgreitt. Rings eru haldnir í 90 daga, nýjasta fyrst. Lykill sem hefur náð hæðinni getur enn lesið sögu sína.
GET https://nymbot.ai/api/v1/queries/history - þarf API lykil, sem sér eigin beiðni, eða undirritað beiðni frá nym þínum, sem sér hvern lykla.
| Fields | tegund | nauðsynlegt | lýsingu |
|---|---|---|---|
page | Niðurstöður (Query) | Nei ekki | Standard 1, hámarks 1.000; hærri síða er 400 invalid_value. |
page_count | Niðurstöður (Query) | Nei ekki | Rings per page. Default 20, að hámarki 100. |
start_dateend_date | Þátttakendur (Query | Nei ekki | ISO 8601 dagsetningar eða tímar. |
model | Þátttakendur (Query | Nei ekki | Aðeins þessi líkan. |
type | Þátttakendur (Query | Nei ekki | chat, responses, messages, image, video, speech, transcription eða embedding. |
all_keys | Boolean (frá spurningunni) | Nei ekki | Og með lykil: true inniheldur alla lykla af sama nym. false. |
key_id | Þátttakendur (Query | Nei ekki | með undirritaða beiðni eða með all_keys=trueBara þessi lykill. |
Svarið
{
"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);
Skilaboð um beiðni
Að búa til, breyta og endurgreiða lykla, reikningarsammtöku og sjálfkrafa upphæðir taka ekki API lykla. Þeir taka undirskrift frá nym þínu, þannig að leaked lykla getur eytt upp til hliðarinnar en getur aldrei gert aðra lykla eða hækka eigin hliða.
The app gerir þetta fyrir þig: allt í sínu Eldur Þú þarft aðeins þessa kafla til að stjórna lyklum úr eigin kóði.
Skýrslan er Nostr atburður af tegund 27235 (NIP-98), sendur base64-kóðað í
Authorization Header með orði Nostr í framan:
Atburðurinn
{
"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": "..."
}
uer fullur URL beiðninni, spurningartengd þar með, nákvæmlega eins og sent.methodÞetta er HTTP aðferðin.payloader SHA-256 af rauðu beiðni líkama, í hex. Það er nauðsynlegt áPOSTogPATCH, og líkaminn sem þú sendir verður að vera byte fyrir byte sem þú hashed.created_atÞað þarf að vera innan 60 sekúndna klukkustunda þjónustunnar.- Hver atburður virkar einu sinni, a
GETþar með, þannig að tekinn header er ekki hægt að endurspila. Skrifaðu nýjan fyrir hverja beiðni. Bæta viðnonceTákn með handahófi gildi þannig að tveir beiðnir undirritaðir á sama sekúndu eru samt mismunandi. - Líkaminn að undirrita beiðni getur verið að hámarki 64 KB, og líkaminn þarf
Content-Type: application/json.
Mistakinn atburður kemur aftur 401 missing_nostr_autheinn sem er slæmt myndaður, slæmt undirritaður, of gamall, eða fyrir mismunandi URL, aðferð eða líkama returns
invalid_nostr_auth, með ástæðu í skilaboðinu; endurnýja einn endurnýjar
nostr_auth_replayedÁskriftin er athugað áður en líkaminn er lesið, og hver heimilisfang getur misheppnað því 30 sinnum á mínútu (IPv6 heimilisfang telst sem heilt /64); eftir það fær það 429 með
Retry-After.
Hugbúnaðurinn getur aðeins hringt á þessar endapunkta frá eigin vefsíðum Nymbot (https://nymbot.ai,
https://nymchat.app Síðuna á öðrum vefsvæðum fær engin CORS heitir aftur, þannig að hún getur ekki lesið það sem þau koma til baka.
OriginÞeir eru ekki fyrir áhrifum.
Að undirrita þarf leyndarmálið þitt (e. the secret key of your nym). nsecAðeins setja það í handrit á vél sem þú treystir, lesa það frá umhverfi í stað þess að skrifa það inn í skráninguna og kjósa appinn þegar þú getur.
Þessir hjálpar byggja header. síðar dæmi á þessari síðu nota þá. Þeir lesa leyndarmálið í hexum frá NOSTR_SECRET_HEX; cURL einn notar
Nák skipulag, sem tekur nsec eða hexahlutann, og 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");
}
Samþykkt reikning
Hvað API skjal app sýnir efst: opinbera lykillinn þinn, bæði jafnvægi, hversu margir lyklar eru virkar (ekki afturkallaðar né upphæðir), og Sjálfvirkur top-up uppsetningar eða
null þegar þjónustan býður þeim ekki.
GET https://nymbot.ai/api/v1/account Þarf að a undirritað beiðni.
Svarið
{
"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());
Að stjórna lykjum
Endpoints á bak við lykillist app. Allir þeirra þurfa undirritað beiðniHver lykill er skilaður í þessari formi, með tímum í ISO 8601 og upphæðum í sats:
Mikilvægt hlutverk
{
"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 Það er nóg til að viðurkenna lykil en ekki nota það.Keysið sjálft er aðeins gefið aftur einu sinni, þegar það er gert.
Listið lykla
GET https://nymbot.ai/api/v1/keys að undirrita.
| Fields | tegund | nauðsynlegt | lýsingu |
|---|---|---|---|
include_revoked | Boolean (frá spurningunni) | Nei ekki | Inniheldur endurgreitt lykla. false. |
Svarið
{ "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);
Að gera lykil
POST https://nymbot.ai/api/v1/keys Skrifað. aftur 201.
| Fields | tegund | nauðsynlegt | lýsingu |
|---|---|---|---|
name | Strengið | Já | 1 til 40 stafi, öðruvísi en aðrar virkar lyklar þínar (gleyma tilfelli). |
limit_sats | Ítrekað | Nei ekki | Áætlað er að leggja út kostnaðinn í sats, að minnsta kosti 1. Láttu það út fyrir engin cap. |
reset_period | Strengið | Nei ekki | daily, weekly eða monthlyÞörf limit_satsLáttu það í burtu fyrir háp sem aldrei endurheimtir. |
expire_at | String eða integer | Nei ekki | Þegar lykillinn hættir að vinna: ISO 8601 tíma, eða millisekúndur frá 1970. |
Svar við (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"
}
}
| Staðsetning | Þegar |
|---|---|
400 | Nánari eða of lengi nafn; nafn sem þegar er í notkun (duplicate_name); hár sem er ekki heilt tal af að minnsta kosti 1; endurheimta tímabil án hár; upphæð í fortíðinni; óþekktur svið (unknown_parameter); eða 25 virkar lykla nú þegar (too_many_keys). |
429 | Meira en 60 lykla gerðar af þessum nym, eða 120 frá þessari heimilisfang, á klukkutíma (rate_limit_exceeded, með 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);
Að lesa einn lykillinn
GET https://nymbot.ai/api/v1/keys/{id} að undirrita.
Aftur {"data": {…}} með lykilatriði, eða 404
key_not_found ef enginn lykillinn þinn hefur þennan 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);
Breyting á lykil
PATCH https://nymbot.ai/api/v1/keys/{id} að undirrita.
Sendu einhverjum name, limit_sats, reset_period og
expire_at, með sömu reglum eins og þegar að gera lykil. null Það er ekki hægt að skipta um að þú sért að skipta um að þú sért að skipta á að þú sért að skipta á að þú sért að skipta á að þú sért að skipta á að þú sért að skipta á að þú sért að skipta á að þú sért að skipta á að þú sért að skipta á að þú sért að skipta á að þú sért að skipta á að þú sért að skipta á að þú sért að skipta (400 key_revoked• Til baka
{"data": {…}} með uppfærða lykilobjekti.
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);
Hreyfing á lykil
DELETE https://nymbot.ai/api/v1/keys/{id} að undirrita.
Stoppur lykillinn strax, til góðs. Það er í listanum með revoked_at sett, og er hægt að sjá með include_revoked=trueAð afturkalla lykil sem hefur þegar verið afturkallað svarar á sama hátt. Aðeins nýjustu 50 afturkallaðar lykil eru haldnir; eldri lykil eru fjarlægt þegar annar lykill er afturkallaður.
Svarið
{ "data": { "id": "4f0c9a1be27d3856", "revoked": true } }
cURL
URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
curl -X DELETE "$URL" -H "Authorization: $(nostr_auth DELETE "$URL")"
Python
import requests
url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
print(requests.delete(url, headers={"Authorization": nostr_auth("DELETE", url)}).json())
JavaScript
const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
const res = await fetch(url, { method: "DELETE", headers: { "Authorization": nostrAuth("DELETE", url) } });
console.log(await res.json());
NWC Auto-top-up áætlun
Að tengja Lightning veskið með Nostr Wallet Connect og Nymbot toppar upp jafnvægi af sjálfu sér þegar API kostnaður hlaupa það lágt. API blaðið á forritinu hefur sömu stillingar; þetta eru endapunkturnar á bak við það. undirritað beiðni.
Hvernig það virkar: Eftir að API beiðni er tekin upp á jafnvægi sem þú velur að horfa, ef jafnvægi hefur fallið undir þörf þína, gerir Nymbot reikning fyrir upphæðina þína, biður veskinu þína um að borga það og bætir við kreditinn. Það toppar upp að hámarki einu sinni á 5 mínútur fyrir hverja nym og jafnvægi, þannig að brjót af beiðnum getur ekki drukknað veskinu. Borgað í forritunum kveikur það ekki. Tíminn og stærðin á síðasta upphæðinni, og síðasta mistök, eru í stillingum; ef greiðsla gekk í gegnum eftir mistök, athugaðu reikninginn með Top-up ástandið kredit á það.
Nymbot geymir það dulkóðað og notar það aðeins til að borga eigin upphaflega reikninga, en gera tengingu bara fyrir þetta, með útgjöld fjárhagsáætlun í veskinu þínu, svo mest það gæti nokkru sinni borgað er númer valið þig. pay_invoice.
Til að tengja veskið
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect að undirrita.
| Fields | tegund | nauðsynlegt | lýsingu |
|---|---|---|---|
nwc_url | Strengið | Já | Samskiptavefurinn, sem hefst nostr+walletconnect://Nymbot biður um veskinu get_info áður en það er geymt, og geymir það dulkóðuð. |
threshold_sats | Ítrekað | Já | Hæsta upp þegar jafnvægi fellur undir þessum mörgum sats. |
topup_sats | Ítrekað | Já | Hversu mikið á að bæta við á hverjum tíma. 1.000 til 1.000.000 sats. |
tier | Strengið | Nei ekki | pro (Það er skortur) eða standard: jafnvægi til að horfa og topp upp. |
Svarið
{
"data": {
"connected": true,
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
"last_topup_at": null,
"last_topup_sats": null,
"last_error": null
}
}
| Staðsetning | Þegar |
|---|---|
400 | Hægt er að koma í veg fyrir tengingu (invalid_nwc_url); veskið svaraði ekki við sendinguna (nwc_unreachable) eða hafnað skoðun (nwc_rejected); tengingin getur ekki borgað reikninga (nwc_missing_permission) eða upphæð sem er utan takmarka. |
501 | Sjálfvirk upphæðar eru ekki kynntar fyrir þessa þjónusta (nwc_unavailableÞað sama gildir um hinar tvær endapunktur. |
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());
Að lesa stillingarnar
GET https://nymbot.ai/api/v1/nwc-auto-topup að undirrita.
Returns sama hlutinn sem tengja, með connected: false og hinum sviðum
null þegar engin veski er tengd. Samkvæmt tengslinni er aldrei endurgreitt.
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());
Afskipti
DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection að undirrita.
Sletur geymdu tengslakerfið. Engar fleiri upphæðar eru gerðar. Til að vera viss, þú getur einnig afturkallað tengslina í veskinu þínu.
Svarið
{ "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());
Borga á beiðni án lykla
Fasta verð endapunktur geta verið greiddar fyrir einn beiðni á einu sinni yfir Lightning, án lykla, ekki reikning og engin jafnvægi: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations og POST /embeddingsSpjall, svör og skilaboð þurfa alltaf lykil. Áspurn sem er með lykil er tekin inn á jafnvægi eins og venjulega; greiðsluflæði hefst aðeins þegar enginn lykill er sent.
Nymbot talar um tvær útgáfur af sömu hugmynd, frá einum bakhliða: Lightning Labs
L 402 (Og einnig viðurkennd undir gamla nafni sínu, LSAT) og IETF áætlun
greiðslu HTTP authentication kerfi með lightning aðferð og
charge Notaðu það sem viðskiptavinur þinn skilur.
Að borga án lykla er aðeins á þegar API_L402_SECRET inniheldur að minnsta kosti 32 handahófi bytes, eins og hex (64 stafi) eða base64 (44). openssl rand -hex 32Stærri eða giskaðari gildi slökkur á eiginleikanum og skráir af hverju. API_L402_SECRET_PREVIOUS í einn dag: staðfestingar, stöðu URLs og áskorun sem gerðar eru undir því halda áfram að vinna þar til þeir eru lokið.
Áskorunin
Sendu beiðni með NEI Authorization header. Ef það er gild, er ekkert í gangi og þú færð 402 Payment Required með reikning fyrir nákvæmlega það sem beiðni kostar: sama verð sem lykill myndi borga, breytt í 10 sats a venjulegur kredit eða 100 sats a Pro kredit og hrundið upp í heilt sat (að minnsta kosti 1 sat, og að minnsta kosti 0.05 kredit minnsta). WWW-Authenticate Áskorun fyrir sömu reikninga:
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 }
}
greiðslu request Hægt er að nota base64url JSON:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
Áskorun er tengd endalokinu, til Content-Type (medía tegund hennar og, fyrir multipart, landamæri hennar) og til SHA-256 nákvæmlega líkama bytes sem þú sendir, og varir 15 mínútur. sömu Ákvarðað aftur: Sama
Content-Type og sömu JSON bytes, eða fyrir multipart endpoints (/images/edits, /audio/transcriptions, /audio/translationsFlestir HTTP bókasafni velja nýja takmörk í hvert skipti sem þeir kóða eyðublað, svo kóða það einu sinni og senda þessar bytes tvisvar.
Hver heimilisfang getur beðið um 30 áskorun á mínútu (IPv6 heimilisfang telst sem heilt /64). Áskorun sem heimilisfang er ekki þekkt deila strangari 10 á mínútu, og það er heildar takmörk á áskorunum Nymbot á öllum heimilisfangum; beiðni hafnað áður en áskorun er gerð (til dæmis með líkamanum sem er ekki gild JSON) telst ekki til þess. 429 með Retry-After, sendur áður en líkaminn er lesið. Betil endapunktur kallað án lykla eða trúnaðaraðila einnig teljast í átt að almennri takmörkun 120 óönnuð beiðni á mínútu á heimilisfang. Content-Type Er ekki application/json (eða
multipart/form-data fyrir uppsetningar) er hafnað með 415 og aldrei fá reikning.
Embeddings eru verðlaun frá upphæð tokens í inntakinu, með 1.5× marg, þar sem raunveruleg reikning er aðeins þekkt síðar. Þú greiðir fyrir tokens í raun notuð, og ónotuð hluti greiðslunnar kemur aftur sem Endurgreiðsla token.
Sendu greiðsluna
Greiða reikninginn með hvaða Lightning veski sem er. veskið gefur þér fyrirmyndina, 64 hexagraf. Síðan senda sömu beiðni með einum af þessum:
| áætlun | Heiðar |
|---|---|
| L 402 | Authorization: L402 <macaroon>:<preimage> (LSAT einnig að vinna) |
| greiðslu | Authorization: Payment <base64url JSON>þar sem JSON er {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
Greitt beiðni svarar nákvæmlega eins og það sem gerð er með lykil, nema að nymbot
Object hefur ekki jafnvægi: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}Og það er ekki X-Nymbot-Balance-Sats Header.Fyrirspurning sem greidd er með greiðslusysteminu fær einnig Payment-Receipt header (base64url JSON með áskorunum id, greiðslu hash eins og reference, status og
timestampBettir beiðnir eru ekki tengdir neinum nym, þannig að þeir birtast ekki í spurningahistóríki.
| Staðsetning | Þegar |
|---|---|
402 payment_already_used | Hver greiðsla greiðir fyrir einni beiðni. svarið er nýtt áskorun fyrir þessa beiðni, þannig að viðskiptavinur sem safnar síðasta trúnaðargögnum sínum (eins og lnget Það er einfaldlega landið aftur. |
402 payment_mismatch | Skilaboðin voru gefin út fyrir annað endapunkt, Content-Type eða líkama, eða borga minna en þessi beiðni kostar núna. Frábær áskorun fyrir þessa beiðni kemur með því; ef greiðsla var of lítil, það sem þú borgaðir kemur aftur sem Endurgreiðsla token (refund_token og refund_sats í líkama okkar). |
402 payment_expired | Meira en 15 mínútur eru liðin frá áskoruninni. Frábær áskorun kemur með því. Ef fyrirmyndin sýnir að þú hefur borgað, kemur það sem þú hefur borgað aftur sem áskorun. Endurgreiðsla token (refund_token og refund_sats í líkamanum), einu sinni; kredential er þá notað upp. |
401 invalid_preimage | Fyrirmyndin hashar ekki við greiðslu hash á reikningnum. |
401 invalid_payment_credential | Skilaboðin er mismunandi, var breytt eftir að Nymbot gaf út það, eða heitir greiðslu hash Nymbot hefur aldrei gefið út reikning fyrir. Makaron með viðvörun Nymbot veit ekki, eða með andstæðar viðvörun, er hafnað. |
429 rate_limit_exceeded | Meira en 30 trúnaðarefni eða lykla sem ekki var hægt að staðfesta komu frá þessari heimilisfang á mínútu, eða einn endurgreiðslu token var sent meira en 60 sinnum á mínútu. 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"));
Viðskiptavinir byggð á mppx með Lightning aðferð að takast á við greiðslu áskorun sjálfur; leiða þá á endanum og láta þá borga.
Myndbönd
Að borga POST /videos Svör 202 eins og einn, plús a
status_url: GET Það er undirritað og virkar í 24 klukkustundir, svo lengi sem starf er haldið.
{
"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..."
}
}
Haltu því refund_token Á þessari síðu er hægt að skoða myndbandið, þar sem myndbandið er hreint (GET /api/v1/l402/refunds Svör "status": "pending"); ef útgáfa misheppnar án reikninga, landar greiðsla á henni.
refund_sats Fyrir endurgreitt starf en aldrei táknið, svo að deila stöðu URL deilir ekki endurgreiðslu.
Endurgreiðslu
Ef greitt beiðni misheppnar og birgirinn borgaði Nymbot fyrir tilraunina, er greiðsla haldið og mistök segir svo, með charged_sats, nákvæmlega eins og fyrir lykill tilkynningu. Ef það misheppnar án þess að reiknað sé, fær mistök Endurgreiðsla token Það er þess virði sem þú borgar:
{
"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"
}
}
Ónottaðir hlutar koma aftur á sama hátt: Ef þú baðst um tvær myndir og eitt missti unfatted, árangur svarið nymbot Object er með endurgreiðslu token fyrir missandi einn; útskrift sem lengd gæti ekki verið lesið upp fyrir framan er verðlaun fyrir lengsta sem skrá gæti verið (aldri en 30 mínútur), og munurinn á raunveruleg lengd kemur aftur sem endurgreiðslu token; ef það kemur út að vera lengri en 30 mínútur, það er hafnað með 413
Innborgun endurgreiðir það sem upphæðin hefur haldið aftur. A misheppnuð myndbönd endurgreiðir tókninn sem sendingin hennar var endurgreidd.
A endurgreiðslu token er handahófi 256-bit kóða. Nymbot geymir aðeins hash hennar, og það er lokið eftir 30 daga. Það er haldið sat jafnvægi, og þú getur:
- Borgaðu með því. Sendu
Authorization: Bearer REFUND-…Hægt er að taka upp áætlunina (e. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. b. a. a. a. a. a. a. a. a. a. a. a. a. a. a. a. b. a. a. a. a. a. a. a. b. a. a. a. a. a. a. a. a. a. a. b. a. a. a. a. a. a. b. a. a. a. arefund_token_satsí thenymbotA token virði minna en beiðni svör402refund_insufficient; Unbiled mistök setur sats aftur á sömu token. - Skoðaðu það.
GET /api/v1/l402/refundsmeð sama header kemur aftur{"sats": 237, "status": "open", "expires_at": "..."}. - Eitt token er hægt að nota hámarki 60 sinnum á mínútu.
- Hreyfðu það á nym. Passaðu því inn Búið að gefa gjöf í Nymbot forritinu eða hringja
POST /api/v1/l402/refunds/redeemmeð A undirritað beiðni og{"refund_token": "REFUND-...", "balance": "standard"}(eða"pro"Allir kröfur fara í jafnvægi (10 satsir hver á staðlaða, 100 á Pro); satsir sem gera ekki allt kreditinn að vera á token fyrir API beiðnir.
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"
Svarið
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }