ცოდნის ბაზა განვითარებლები
ბალანსი, Top-ups და Key
შეამოწმეთ, რა თქვენ გაქვთ, გააუმჯობესეთ Lightning, გააუმჯობესეთ ავტომატურად თქვენი საკუთარი პაკეტში, იხილეთ, რა ყოველ მოთხოვნას ღირს, და მართეთ კურსი კოდიდან.
ეს გვერდი მოხერხებულობისთვის მანქანურად ითარგმნება. ინგლისური ორიგინალი არის ვერსია, რომელიც გამოიყენება.
შეამოწმეთ ბალანსი
ორივე თქვენი ბალანსი, და თუ რამდენად ამ key- ის კაბა გამოიყენება.
GET https://nymbot.ai/api/v1/credits/balance საჭიროა API Key. 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 | KEY არ არსებობს, არ არის ცნობილი, შეუზღუდავი ან დასრულდა. |
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);
გადახდის მეთოდები
How can you top up, and the limits. Lightning არის მხოლოდ მეთოდი.
GET https://nymbot.ai/api/v1/topup/payment-methods არ არის აუცილებელი KEY.
Top-up არის 10 to 1,000,000 sats; Pro-top-up უნდა შეიძინოთ მინიმუმ ერთი Pro საკრედიტო, ასე რომ ეს იწყება 100 sats. დოლარი შეზღუდვა შემდეგ ვიკიპედია ფასი. bulk_bonus შეიცავს დამატებითი კრედიტი უფრო დიდი top-ups, იგივე როგორც app: 10%, 15% ან 20% მეტი სტანდარტული top-ups from 500, 1,000 ან 5,000 sats, და Pro top-ups from 5,000, 10,000 ან 50,000 sats.
პასუხი
{
"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);
Topping Up Over Lightning-ის ზედაპირზე
გააკეთებს Lightning ფულადი, რომელიც დაამატებს საკრედიტო ნომერი, რომ კურსი მოიცავს. გადაიხადოს იგი ნებისმიერი Lightning ფულადი, მაშინ შეამოწმეთ კრედიტის დამატება უნდა იყოს.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning საჭიროა API Key.
| ფართობი | ტიპი | მოთხოვნა | აღწერა |
|---|---|---|---|
amount | ნომერი | დიახ | თუ რამდენად, იმ currencyდაახლოებით 1 რაოდენობა. |
currency | String | არ | SATS (სამთავრობო სიჩქარე) USD ან BTCდოლარი გადაიხადოს ამჟამად ვიკიპედია ფასი. |
tier | String | არ | pro (სამთავრობო დასაწყისში) ან standard: რა ბალანსი კრედიტი იწვევს. |
სტანდარტული კრედიტი არის 10 sats და Pro კრედიტი 100 sats, plus ნებისმიერი ბონუს;
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 მილიონი ტანსაცმელი)amount_too_large) ან უარყოფითი ბეჭდვის ბეჭდვა (amount_out_of_range). |
429 | მეტი 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);
შეამოწმეთ Top-Up
კითხვებს, თუ ფულადი გადახდის და, როდესაც იგი აქვს, დაამატა საკრედიტო. შეამოწმეთ, რა კრედიტი, ასე რომ გადახდის შემდეგ, შეამოწმეთ, სანამ სტატისტიკა არის creditedგადარჩენა შემდეგ არის უსაფრთხო: საკრედიტო დატვირთვა ერთხელ, მიუხედავად იმისა, რომ მრავალჯერობით გთხოვთ.
GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - საჭიროა ნომერი ნომერი, რომელიც აწარმოებს ანგარიშს.
status ეს pending (სამად არ გადაიხადეთ) paid (სხლა, მაგრამ ჯერ კიდევ არ დარეგისტრირებულია; შეამოწმეთ კიდევ ერთხელ), credited (და თქვენი ბალანსი) ან expired (სამოვნოდ არ გადაიხადეთ დროში). ბალანსი ფართობი არის ფასი, რომელიც ფასი აღემატება.
პასუხი
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| სტატუსი | როდესაც |
|---|---|
400 | ID არ არის 64-იანი ID, რომელიც შექმნილია. |
404 | არ არის ნომერი ამ ID თქვენი ნომერი (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);
გსურთ ისტორია
ერთი ხაზი მოთხოვნით: რა იყო, რა მოდელი, колико токенов и что это стоило. არ არის მოთხოვნა ან პასუხი არ არის შენარჩუნებული, ასე რომ არ არის დაბრუნებული. ხაზი შენარჩუნება 90 დღის განმავლობაში, უახლესი პირველი. კურსი, რომელიც შეესაბამება მისი ხარისხი, ჯერ კიდევ შეგიძლიათ წაიკითხოთ მისი ისტორია.
GET https://nymbot.ai/api/v1/queries/history — საჭიროა API key, რომელიც იხილავს საკუთარი მოთხოვნებს, ან შეტყობინება თქვენი ნომერი, რომელიც ხედავს თითოეული კურსი.
| ფართობი | ტიპი | მოთხოვნა | აღწერა |
|---|---|---|---|
page | შეტყობინება ( Query ) | არ | სტანდარტული 1, მაქსიმალურად 1000; უფრო მაღალი გვერდზე არის 400 invalid_value. |
page_count | შეტყობინება ( Query ) | არ | ფურცელი ფურცელი ფურცელი ფურცელი ფურცელი ფურცელი ფურცელი ფურცელი ფურცელი ფურცელი ფურცელი |
start_dateend_date | String – კითხვები | არ | ISO 8601 თარიღი და დრო. |
model | String – კითხვები | არ | მხოლოდ ეს მოდელი. |
type | String – კითხვები | არ | chat, responses, messages, image, video, speech, transcription ან embedding. |
all_keys | Boolean (სურცელი) | არ | ერთი კურსი: true შეიცავს თითოეული კურსი იგივე nimm. default false. |
key_id | String – კითხვები | არ | შეტყობინება, ან შეტყობინება 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);
ანგარიშის შეტყობინება
ფუნქციონირება, შეცვალოს და აღიარება კურსი, ანგარიშის შეტყობინება და ავტომატური top-ups არ მიიღოს API კურსი. ისინი მიიღოს შეტყობინება თქვენი nimm, ასე რომ ფუნქციონირებული კურსი შეიძლება გადაიხადოს მისი კაბა, მაგრამ ვერ გააკეთოს კიდევ ერთი კურსი ან გაზრდის საკუთარი კაბა.
ეს არის ეს, რაც პროგრამა გააკეთებს თქვენთვის: ყველაფერი მისი ამინდი ფურცელი იყენებს ამ Endpoints. თქვენ უბრალოდ უნდა ამ სექციაში მართოთ ფურცელი თქვენი საკუთარი კოდი.
დასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში
Authorization Header ერთად სიტყვა Nostr წინასწარ :
Event
{
"kind": 27235,
"created_at": 1790726400,
"tags": [
["u", "https://nymbot.ai/api/v1/keys"],
["method", "POST"],
["nonce", "9c4e21f07a3b...16 random bytes in hex"],
["payload", "3f1a0d7c8e2b...sha256 of the exact request body in hex"]
],
"content": "",
"pubkey": "your public key in hex",
"id": "...",
"sig": "..."
}
uარის კითხვის სრული URL, კითხვის string მოიცავს, ისევე, როგორც გამოგზავნილია.methodეს არის HTTP მეთოდი.payloadეს არის SHA-256 ნედლეულის მოთხოვნების სხეულის, hex. ეს მოითხოვსPOSTდაPATCH, და სხეულის თქვენ გადაცემთ უნდა იყოს byte- ის byte, რომელიც თქვენ hashed.created_atუნდა იყოს 60 წამში სერვერზე.- ყველა მოვლენები მუშაობს ერთხელ, a
GETშეიცავს, ასე რომ ჩართული ჰიდრავლიკაცია არ შეიძლება გადაიხადოს. დარეგისტრირეთ ახალი თითოეული მოთხოვნით.nonceიმიტომ, რომ ორი მოთხოვნა, რომელიც იგივე წამში დაარსდა, ჯერ კიდევ განსხვავდება. - კონტაქტი შეიძლება იყოს მინიმუმ 64 KB, და კონტაქტი უნდა იყოს მინიმუმ
Content-Type: application/json.
გამოქვეყნდა The Missing Event Returns 401 missing_nostr_auth; ერთი, რომელიც არ არის მორგებული, არ არის მორგებული, ძალიან ძველი, ან განსხვავებული URL, მეთოდის ან სხეულის მიწოდება
invalid_nostr_auth, მიზეზით შეტყობინება; ერთ-ერთი რეიტინგული იღებს
nostr_auth_replayedAPI Key, რომელიც გამოგზავნილია ამ Endpoints, არ არის დატოვებული. შეამოწმება შეამოწმებულია, სანამ სხეულის იხილება, და თითოეული მისამართი შეიძლება შეუწყოს 30 წუთში (IPv6 მისამართი ითვლება, როგორც მისი მთელი /64); მას შემდეგ, რაც მას იღებს 429 ერთად
Retry-After.
ბრაუზერები შეუძლია ამ Endpoints მხოლოდ Nymbot- ის საკუთარი საიტებზე (https://nymbot.ai,
https://nymchat.app და მათი დომენები). გვერდზე ნებისმიერი სხვა საიტზე არ იღებს CORS headers უკან, ასე რომ მას არ შეუძლია წაიკითხოთ, რაც ისინი გადაიხადოს. სკრიპები და მობილური პროგრამები, რომლებიც არ გაგზავნათ
Originარ არის გავლენა.
შეტყობინება მოითხოვს თქვენი NIM- ის სექსუალური Key (The Secret Key) nsec), რომელიც კონტროლებს ყველაფერი: თქვენი Identity, თქვენი ისტორია და თქვენი ბალანსი. უბრალოდ დააყენეთ ეს სკრიპში მანქანაში, რომელიც მოგცემთ, წაიკითხეთ ეს გარემოში, ვიდრე წაიკითხეთ ეს ფაილი, და prefer the app when you can.
ამ მხარდაჭერები შექმნათ სატვირთო. შემდეგ მაგალითები ამ გვერდზე გამოიყენება მათ. ისინი წაიკითხე სატვირთო key in hex from NOSTR_SECRET_HEX; cURL ერთი გამოიყენება
ქმარი ოპერაციული ინსტრუმენტი, რომელიც იღებს nsec ან hex key, და 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 ფურცელი აჩვენებს ზედაპირზე: თქვენი Public Key, ორივე შეესაბამება, რამდენიმე ფურცელი ეფექტურია (არ არ გაქირავებული ან დასრულდა), და ავტომატური Top-Up კონფიგურაცია, ან
null როდესაც სერვერები არ გთავაზობთ.
GET https://nymbot.ai/api/v1/account საჭიროა a შეტყობინება.
პასუხი
{
"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());
ძიება Key
სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის სინათლის... შეტყობინებათითოეული კურსი იღებს ამ ფორმაში, დროები ISO 8601 და რაოდენობა sats:
ძირითადი Object
{
"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 ეს არის საკმარისი, რომ აღიაროთ კურსი, მაგრამ არ გამოიყენოთ იგი. კურსი მხოლოდ ერთხელ, როდესაც იგი შექმნილია.
ლიტერატურა KEY
GET https://nymbot.ai/api/v1/keys დაარსდა
| ფართობი | ტიპი | მოთხოვნა | აღწერა |
|---|---|---|---|
include_revoked | Boolean (სურცელი) | არ | შეიცავს შეუზღუდავი keys. 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);
გაკეთება Key
POST https://nymbot.ai/api/v1/keys დასაწყისში დასაწყისში 201.
| ფართობი | ტიპი | მოთხოვნა | აღწერა |
|---|---|---|---|
name | String | დიახ | 1 - 40 სიმბოლოები, განსხვავებული თქვენი სხვა აქტიური კლიენტებს (გნახვის შემთხვევაში). |
limit_sats | ინტეგრი | არ | დაახლოებით 1 წუთი წუთი წუთი წუთი წუთი წუთი წუთი წუთი წუთი |
reset_period | String | არ | daily, weekly ან monthlyსაჭიროება limit_satsდასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში |
expire_at | String ან Integer | არ | When the key stops working: ISO 8601 დრო, ან მლიზსკუდი 1970 წლიდან. |
კონტაქტი (2012)
{
"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); cap, რომელიც არ არის საერთო ნომერი მინიმუმ 1; reset დრო გარეშე cap; დასრულების წინასწარ; ცოდნა ფართობი (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);
წაიკითხეთ ერთი Key
GET https://nymbot.ai/api/v1/keys/{id} დაარსდა
დაბრუნება {"data": {…}} ძირითადი მოწყობილობა, ან 404
key_not_found თუ არ არსებობს თქვენი კურსი ამ 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);
შეცვალოთ კურსი
PATCH https://nymbot.ai/api/v1/keys/{id} დაარსდა
გაგზავნა ნებისმიერი name, limit_sats, reset_period და
expire_atიგივე წესები, როგორიცაა კლიენტების მიღება. null გაწმენდა ფართობი: არ არის cap, არ არის reset, არ არის დასრულება. გააუმჯობესების გაუმჯობესება გაუმჯობესება ახალი ფართობი იწყება 0-დან. გაუმჯობესებული key არ შეიძლება შეცვალოს (400 key_revoked) მოგზაურობა
{"data": {…}} გაუმჯობესებული Key Object.
cURL
URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
BODY='{"limit_sats":50000,"expire_at":null}'
curl -X PATCH "$URL" \
-H "Authorization: $(nostr_auth PATCH "$URL" "$BODY")" \
-H "Content-Type: application/json" \
-d "$BODY"
Python
import json
import requests
url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
body = json.dumps({"limit_sats": 50000, "expire_at": None}).encode()
res = requests.patch(
url,
data=body,
headers={"Authorization": nostr_auth("PATCH", url, body), "Content-Type": "application/json"},
)
print(res.json()["data"])
JavaScript
const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
const body = JSON.stringify({ limit_sats: 50000, expire_at: null });
const res = await fetch(url, {
method: "PATCH",
headers: { "Authorization": nostrAuth("PATCH", url, body), "Content-Type": "application/json" },
body,
});
console.log((await res.json()).data);
ღონისძიება Key
DELETE https://nymbot.ai/api/v1/keys/{id} დაარსდა
დასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში revoked_at ჩართული და შეგიძლიათ იხილოთ include_revoked=trueდასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში დასაწყისში.
პასუხი
{ "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 მოწყობილობები
Lightning Wallet- ის დაკავშირებით Nostr Wallet Connect და Nymbot- ს ს სავარაუდოდ შეესაბამება, როდესაც API- ის ღირებულება დაბალია. პროგრამის API- ის ფურცელი აქვს იგივე შეზღუდვები; ეს არის ეს Endpoints. ყველა მათთვის საჭიროა შეტყობინება.
როგორ მუშაობს: მას შემდეგ, რაც API მოთხოვნა დატვირთულია ბალანსი, რომელიც თქვენ აირჩიეთ, თუ ეს ბალანსი დატვირთულია თქვენი შეზღუდვის ქვემოთ, Nymbot აწარმოებს ბალანსი თქვენი top-up რაოდენობისთვის, მოითხოვს თქვენი ბალანსი გადაიხადოს, და დაამატებს საკრედიტო. ეს ბალანსი დატვირთულია ყოველ 5 წუთი ყოველდღიურად, ასე რომ მოთხოვნების ბალანსი არ შეუძლია ბალანსი გადაიხადოს. აპლიკაციებში გადაიხადვა არ აწარმოებს. ბოლო ბალანსი და ბოლო ბალანსი დრო და ზომა განახლებაა; თუ გადაიხადვა გააკეთა შეცდომის შემდეგ, შეამოწმეთ მისი ბალანსი Top-up სტატუსი დარეგისტრირეთ ეს
Nymbot შენახავს ეს ჩიპტირებული და მხოლოდ ერთხელ გამოიყენებს იგი გადაიხადოს საკუთარი top-up ანგარიშები, მაგრამ შექმნათ კავშირი მხოლოდ ამთვის, გაქვთ გადაიხადოს პროგნოზი თქვენი პანელი, ასე რომ ყველაზე მას შეუძლია გადაიხადოს არის ნომერი აირჩიეთ თქვენ. პანელი უნდა მხარს უჭერს pay_invoice.
კონფიგურაცია პაკეტზე
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect დაარსდა
| ფართობი | ტიპი | მოთხოვნა | აღწერა |
|---|---|---|---|
nwc_url | String | დიახ | კონტაქტი, დაწყებული nostr+walletconnect://Nymbot მოითხოვს პლატფორმა get_info ადრე შენარჩუნება და შენარჩუნება კრეპტირებული. |
threshold_sats | ინტეგრი | დიახ | ზემოთ, როდესაც ბალანსი ქვემოთ ამ ბევრი sats. მინიმუმ 1000. |
topup_sats | ინტეგრი | დიახ | რა უნდა გააკეთოთ ყოველდღიურად? 1000 to 1,000,000 sats. |
tier | String | არ | pro (სამთავრობო დასაწყისში) ან standard: ბალანსი, რომ შეამოწმოთ და top up. |
პასუხი
{
"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); კავშირი არ შეუძლია გადაიხადოს ანგარიშები (nwc_missing_permission) ან თანხა, რომელიც არ არის შეზღუდული. |
501 | ავტომატური დატვირთვა არ არის გააქტიურებული ამ სერვერზე (nwc_unavailable) იგივე გამოიყენება სხვა ორი Endpoints. |
cURL
URL=https://nymbot.ai/api/v1/nwc-auto-topup/connect
BODY='{"nwc_url":"nostr+walletconnect://...","threshold_sats":5000,"topup_sats":20000,"tier":"pro"}'
curl "$URL" \
-H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
-H "Content-Type: application/json" \
-d "$BODY"
Python
import json, os
import requests
url = "https://nymbot.ai/api/v1/nwc-auto-topup/connect"
body = json.dumps({
"nwc_url": os.environ["NWC_URL"],
"threshold_sats": 5000,
"topup_sats": 20000,
"tier": "pro",
}).encode()
res = requests.post(
url,
data=body,
headers={"Authorization": nostr_auth("POST", url, body), "Content-Type": "application/json"},
)
print(res.json())
JavaScript
const url = "https://nymbot.ai/api/v1/nwc-auto-topup/connect";
const body = JSON.stringify({
nwc_url: process.env.NWC_URL,
threshold_sats: 5000,
topup_sats: 20000,
tier: "pro",
});
const res = await fetch(url, {
method: "POST",
headers: { "Authorization": nostrAuth("POST", url, body), "Content-Type": "application/json" },
body,
});
console.log(await res.json());
წაიკითხეთ settings
GET https://nymbot.ai/api/v1/nwc-auto-topup დაარსდა
იმიტომ, რომ იგივე მოწყობილობა, რომელიც შეიცავს connected: false და სხვა სფეროებში
null როდესაც არ არის კაბინეტი დაკავშირებული. კაბინეტი კაბინეტი თვითმართველობის არ იღებს.
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());
გადახდის მოთხოვნით, გარეშე კურსი
Fixed-price Endpoints შეიძლება გადაიხადოს ერთი მოთხოვნით ერთხელ Lightning, გარეშე key, არ ანგარიშის და არ ბალანსი: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations და POST /embeddingsჩატი, პასუხები და შეტყობინებები ყოველთვის სჭირდება Key. მოთხოვნა, რომელიც შეიცავს keyless არის გადაიხადოს, როგორც ჩვეულებრივ; გადახდის ფოსტის მხოლოდ დაიწყება, როდესაც არ არის გადაცემა keyless.
Nymbot ვთქვა ორი ვერსია იგივე იდეა, ერთი backend: Lightning Labs'
402 წლამდე (სავარაუდოდ, მისი ძველი სახელი, LSAT) და IETF პროექტი
გადახდის HTTP- ის ავტომატური სერვისი lightning მეთოდები და
charge გთხოვთ გამოიყენოთ, რაც თქვენი კლიენტს იცის.
გადახდის გარეშე კურსი არის მხოლოდ, როდესაც API_L402_SECRET შეიცავს მინიმუმ 32 ნომერი bytes, როგორიცაა hex (64 ნომერი) ან base64 (44). openssl rand -hex 32იმიტომ, რომ ეს არის ერთ-ერთი ყველაზე პოპულარული ფუნქციონირებული ფუნქციონირება. API_L402_SECRET_PREVIOUS ერთი დღის განმავლობაში: სტატისტიკა URLs, სტატისტიკა URLs და მოვლენები, რომლებიც გაკეთდა მას შემდეგ, რაც ისინი დასრულებენ.
Challenges
გამოქვეყნეთ მოთხოვნა No Authorization Header. თუ ეს არის რეალური, არაფერი არ მუშაობს, და თქვენ მიიღებთ 402 Payment Required დახურვის ფასი: იგივე ფასი, რომელიც კურსი გადაიხადოს, გადაიხადოს სტანდარტული კრედიტი ან 100 კრედიტი Pro კრედიტი და დახურულია მთლიანად მდე მდე მდე 1 კრედიტი და მინიმუმ 0.05 კრედიტი მინიმუმ). 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":"..."}}.
მოვლენები შეესაბამება შეესაბამება მოვლენები, მოვლენები Content-Type (სამდვილეში, მისი მედიის ტიპი და, მრავალფეროვანი, მისი გარიგება) და SHA-256-ზე, რომელიც გაგზავნა, დაახლოებით 15 წუთის განმავლობაში. გადახდის შემდეგ, გაგზავნა იგივე მოთხოვნა კიდევ ერთხელ: იგივე
Content-Type და იგივე JSON bytes, ან მრავალფეროვანი Endpoints (/images/edits, /audio/transcriptions, /audio/translationsყველაზე HTTP ბიბლიოთეკები აირჩიონ ახალი ხაზს ყოველდღიურად, როდესაც ისინი კოდიფიცირებენ ფორმა, ასე რომ კოდიფიცირეთ იგი ერთხელ და გაგზავნეთ ეს ბეტის ორჯერ.
თითოეული მისამართი შეიძლება მოითხოვოს 30 მოვლენებს წუთში (IPv6 მისამართი წაიკითხა, როგორც მისი სრული /64). მოთხოვნები, whose address is not known share a stricter 10 წუთში, და არსებობს საერთო შეზღუდვა მოვლენებს Nymbot პრობლემები ყველა მისამართი; მოთხოვნები, რომელიც არ მოითხოვს, სანამ მოვლენები გაკეთება (გალითად, სხეულის, რომელიც არ არის valid JSON) არ მოითხოვს მას. 429 ერთად Retry-Afterფულადი Endpoints, რომელიც არ აქვს Key ან Credential, ასევე ითვლება საერთო შეზღუდვა 120 უტვირთული მოთხოვნები წუთი თითო მისამართი. Credential არის შეამოწმებული, სანამ Body ითვლება, და მოთხოვნები, რომელიც არ არის დატვირთული. Content-Type არ არის application/json (და
multipart/form-data დასაწყისში დასაწყისში დასაწყისში დასაწყისში. 415 და არასდროს არ მიიღებს ანგარიშს.
Embeddings არის ფასი შედარებით tokens in input, ერთად 1.5 & times; margins, რადგან რეალური რაოდენობა ცნობილია მხოლოდ შემდეგ. თქვენ გადაიხადოს რეალურად გამოიყენებული tokens, და არ გამოიყენებული ნაწილი გადახდის დაბრუნება როგორც გადაიხადეთ token.
გადაცემა გადახდის
გადაიხადეთ ფულადი ნებისმიერი Lightning ფულადი. ფულადი გთავაზობთ წინასწარ სურათი, 64 ჰექსიმალური სიმბოლოები. შემდეგ გადაიხადეთ იგივე მოთხოვნა ერთი ამ:
| პროგრამა | Header |
|---|---|
| 402 წლამდე | Authorization: L402 <macaroon>:<preimage> (LSAT ასევე მუშაობს |
| გადახდის | Authorization: Payment <base64url JSON>სადაც JSON არის {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
გადაიხადული მოთხოვნა პასუხი იგივე, როგორიცაა მოთხოვნა, რომელიც გადაიხადული კურსი, გარდა ამისა, რომ nymbot
Object არ აქვს ბალანსი ფართობი: {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}და არ არის X-Nymbot-Balance-Sats Header. გადახდის მოთხოვნა გადახდის სისტემა ასევე მიიღებს a Payment-Receipt Header (base64url JSON with the challenge id, გადახდის hash as reference, status და
timestampგადახდის მოთხოვნები არ არის დაკავშირებული ნებისმიერი nimm, ასე რომ ისინი არ გამოჩნდება კითხვის ისტორიაში.
| სტატუსი | როდესაც |
|---|---|
402 payment_already_used | თითოეული გადახდის გადახდის ერთი მოთხოვნა. პასუხი არის ახალი მოთხოვნა ამ მოთხოვნა, ასე რომ კლიენტს, რომელიც cache მისი ბოლო კრედიტაცია (მაგ. lnget ეს არის) უბრალოდ დასაწყისში. |
402 payment_mismatch | დასაწყისში დასაწყისში დასაწყისში დასაწყისში, Content-Type ან სხეულის, ან გადაიხადოს ნაკლები, ვიდრე ეს მოთხოვნა ახლა ღირებულება. ახალი მოვლენები ამ მოთხოვნა მოდის მას; თუ გადახდის იყო ძალიან მცირე, ის, რაც თქვენ გადაიხადეთ დაბრუნება როგორც გადაიხადეთ token (refund_token და refund_sats და სხეულში ) |
402 payment_expired | უფრო მეტი, ვიდრე 15 წუთის განმავლობაში გამოწვევა. ახალი გამოწვევა მოდის მასთან ერთად. თუ წინასწარ სურათი აჩვენებს, რომ თქვენ გადაიხადეთ, ის, რაც თქვენ გადაიხადეთ, გადაიხადავს გადაიხადეთ token (refund_token და refund_sats ერთხელ, ერთხელ, ერთხელ, ერთხელ, ერთხელ, ერთხელ, ერთხელ, ერთხელ, ერთხელ, ერთხელ, ერთხელ, ერთხელ, ერთხელ. |
401 invalid_preimage | Preimage არ გაქირავებს ფულადი გადახდის გაქირავება. გადახდის არ გამოიყენება. |
401 invalid_payment_credential | Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ, ან Nymbot- ის გამოქვეყნების შემდეგ. |
429 rate_limit_exceeded | More than 30 credentials or keys which failed to verify came from this address in a minute, or one refund token was sent more than 60 times in a minute. 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 მეთოდის გამოყენებით გადაიხადოს გადაიხადოს მოვლენები მათთვის; მიუთითეთ მათ Endpoint- ში და გაძლევთ გადაიხადოს.
ვიდეოები
გადახდის POST /videos პასუხი 202 როგორც კოლექცია, plus a
status_url: GET ეს არის დარეგისტრირებული და მუშაობს 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"); თუ render არ არის გადაიხადული, გადახდის იღებს მას. სტატისტიკა URL აჩვენებს
refund_sats იმიტომ, რომ ამ კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის კლასის
გადახდის
If a paid request fails and the provider billed Nymbot for the attempt, გადახდის შენარჩუნება და შეცდომა ამბობს, რომ ეს არის. charged_satsროგორც წესი, ამ კითხვებს არ უნდა დააკმაყოფილოს. თუ ეს არ არის დააკმაყოფილოს, ამ კითხვებს არ უნდა დააკმაყოფილოს. გადაიხადეთ token რა ღირს თქვენ გადაიხადეთ:
{
"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 მოვლენები შეიცავს გადახდის ტკიპედია დაკარგული ერთი; ტკიპედია, რომელიც სიგრძე არ შეიძლება წაიკითხოთ წინასწარ არის ფასი, როგორც ხანგრძლივი ფაილი შეიძლება იყოს (არ არ იყოს მეტი, ვიდრე 30 წუთი), და განსხვავება რეალური სიგრძე იღებს გადახდის ტკიპედია; თუ ის გამოჩნდა, რომ უფრო მეტია, ვიდრე 30 წუთი, იგი არ არის დაეხმარება. 413
და ყველა გადახდის დაბრუნება. შეფუთვა გადაიხადოს ის, რაც შეფასება გადაიხადოს. ცუდი ვიდეო გადაიხადოს მისი შეტყობინება გადაიხადოს.
Nymbot შეინახავს მხოლოდ მისი hash, და ის დასრულდება 30 დღის შემდეგ. მას შეინახავს sat ბალანსი, და თქვენ შეგიძლიათ:
- გადაიხადეთ მას. გაგზავნა
Authorization: Bearer REFUND-…ეს არის ერთ-ერთი უპირატესობა, რომ ეს არის ერთ-ერთი უპირატესობა, რომ ეს არის ერთ-ერთი უპირატესობა, რომ ეს არის ერთ-ერთი უპირატესობა (refund_token_satsIn ამnymbotსავარაუდოდ, ეს არ არის ის, რაც თქვენ უნდა გააკეთოთ.402refund_insufficient; არ დახურული ცუდი დააყენებს sats უკან იგივე token. - შეამოწმეთ
GET /api/v1/l402/refundsიგივე Header Returns{"sats": 237, "status": "open", "expires_at": "..."}. - ერთი token შეიძლება გამოყენებულ იქნას მაქსიმალურად 60 წუთში.
- დააყენეთ იგი NIM. დააყენეთ იგი გადაიხადეთ საჩუქარი Nymbot app- ში, ან ტელეფონით
POST /api/v1/l402/refunds/redeemA შეტყობინება და{"refund_token": "REFUND-...", "balance": "standard"}(და"pro"სრული კრედიტები წავიდეთ ბალანსი (10 კრედიტი თითოეული სტანდარტული, 100 კრედიტი Pro); კრედიტი, რომელიც არ უზრუნველყოფს სრული კრედიტი ბალანსი 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 } }