गिन्यानाचो आदार विकसक
शिल्लक, टॉप-अप आनी किल्ली
तुमचे कडेन कितें आसा तें तपासात, लाईटनींगाचेर टॉप अप करात, तुमच्या स्वताच्या वॉलेटांतल्यान स्वयंचलितपणान टॉप अप करात, दर एका विनंत्याक कितलो खर्च येता तें पळयात, आनी कोडांतल्यान किल्ली वेवस्थापन करात.
हें पान सोयी खातीर मशीनांतल्यान अणकारीत केलां. इंग्लीश मूळ ही आवृत्ती लागू जाता.
शिल्लक तपासप
तुमचीं दोनूय शिल्लक, आनी ह्या किल्लीची कॅप कितली वापरतात.
GET https://nymbot.ai/api/v1/credits/balance - एक ए. पी. आय. किल्ली जाय. 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 | चावी गहाळ जाल्या, अज्ञात, रद्द केल्या वा कालबाह्य जाल्या. |
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) हीच एक सोप (method) आसा.
GET https://nymbot.ai/api/v1/topup/payment-methods - चावीची गरज ना.
एक टोप-अप १० सावन १,०००,००० सॅट्स पूण; एक प्रो टोप-अपाक सकयलनी एक प्रो क्रेडिट मेळोवंक जाय, देखून तें
१०० सॅट्स सावन सुरू जाता. डॉलरचीं सीमा बीटकॉइनच्या किमती प्रमाण बदलता. bulk_bonus ऍप्लिकेशनांत आसा तशेच व्हड टॉप-अपांचेर अतिरिक्त क्रेडीटाची वळेरी करताः 500,1,000 वा 5,000 सॅटांतल्यान प्रमाण टॉप-अपांचेर 10 टक्के, 15 टक्के वा 20 टक्के चड, आनी 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);
लाइटनिंग वाटेन भरपून
एक लायटनिंग इनव्हॉइस तयार करप जे त्या नयम (nym) कडेन क्रेडिट जोडतले जें की की (key) ताच्याकडे आसा. कोणल्याय लायटनिंग वॉलेटाय कडून तें पेय करप, तें तेका तपास ताक 🔍 क्रेडिट जोडपा खातीर.
POST https://nymbot.ai/api/v1/topup/create/btc-lightning - एक ए. पी. आय. किल्ली जाय.
| क्षेत्र | प्रकार | गरजेचें | वर्णन |
|---|---|---|---|
amount | संख्या | हय | कितलें, हातूंत currency. सॅटां खातीर एक पुराय आंकडो. |
currency | स्ट्रिंग | ना. | SATS (पूर्वनिर्धारीत), USD अतवी BTC. सद्याच्या बिटक्वॉयन मोलाचेर डॉलराचें रुपांतर जाता. |
tier | स्ट्रिंग | ना. | pro (पूर्वनिर्धारीत) वा standard: क्रेडिट खंयच्या बॅलन्साक वता. |
प्रमाण क्रेडीट म्हळ्यार 10 सॅट आनी प्रो क्रेडीट 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 सॅट्स (amount_too_large) वा विजेच्या वॉलेटान न्हयकार दिलो (amount_out_of_range). |
429 | ह्या nym खातीर ६० परस चड इन्वॉयस, वा ह्या पत्त्याचेर एका तासांत १२० (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} — invoice korpi nym koddun ek key zai.
status आसा pending (अजून फारीक करूंक ना), paid (पयशां भरल्यात, पूण अजून जमा जावंक ना; परत तपासप), credited (तुमच्या शिल्लकचेर) वा expired (वेळार पावलें ना. (not paid
in time). बाकीचे क्षेत्र (balance fields) ती टियर (tier) खातीर आसात जाका इन्व्हॉइस (invoice) टॉप अप करता.
प्रतिसाद
{
"invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
"status": "credited",
"amount_sats": 10000,
"credits": 115,
"tier": "pro",
"expires_at": null,
"balance_credits": 523.33,
"balance_sats": 52333
}
| स्थिती | केन्ना? |
|---|---|
400 | आयडी ही क्रिएट कॉलांतली 64 अक्षरांची आयडी न्हय. |
404 | तुमच्या एन. आय. एम. खातीर त्या आयडी वरवीं चलन ना (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 - एक एपीआय किल्ली जाय, जी स्वताच्यो विनंत्यो पळयता, वा स्वाक्षरी केल्ली विनंती तुज्या नांवाकडून, जे प्रत्येक चाव्याचें पळयता.
| क्षेत्र | प्रकार | गरजेचें | वर्णन |
|---|---|---|---|
page | पूर्णांक (क्वेरी) | ना. | डिफॉल्ट १, जास्तीत जास्ती १,०००; चड पान आसा 400 invalid_value. |
page_count | पूर्णांक (क्वेरी) | ना. | दर पानाक रांक. पूर्वनिर्धारीत 20, चडांत चड 100. |
start_dateend_date | स्ट्रिंग (क्वेरी) | ना. | आय. एस. ओ. 8601 तारखां वा वेळा. |
model | स्ट्रिंग (क्वेरी) | ना. | फकत हेंच मॉडेल. |
type | स्ट्रिंग (क्वेरी) | ना. | chat, responses, messages, image, video, speech, transcription अतवी embedding. |
all_keys | बुलियन (क्वेरी) | ना. | किल्ली घेवनः true एकाच एन. आय. एम. ची दरेक किल्ली आस्पावीत करता. पूर्वनिर्धारीत 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);
खात्याची विनंती स्वाक्षरी करप
किल्ली तयार करप, बदलप आनी रद्द करप, खात्याचो सारांश आनी स्वयंचलित टॉप-अप हे ए. पी. आय. किल्ली घेनात. ते तुमच्या एन. आय. एम. कडल्यान स्वाक्षरी घेतात, देखून फुटिल्ली किल्ली आपल्या कॅप मेरेन खर्च करूंक शकता पूण केन्नाच दुसरी किल्ली तयार करूंक शकना वा स्वताची कॅप वयर उखलूंक शकना.
ऍप्लिकेशन तुज्या खातीर अशें करताः तातूंतलें सगळें. एपीआय पत्रक हे निमाणें बिंदू वापरतात. तुमच्या स्वताच्या कोडांतल्यान किल्ली वेवस्थापन करपाक तुमकां फकत ह्या विभागाची गरज आसा.
स्वाक्षरी ही 27235 (एन. आय. पी.-98) प्रकारची नॉस्टर घटना, तातूंत बेस64-एन्कोडेड धाडल्या.
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ही विनंतीची पुराय यू. आर. एल., क्वेरी स्ट्रिंग आस्पाविल्ली, धाडल्या सारकीच.methodही एचटीटीपी पद्दत.payloadहें हेक्स भाशेंत कच्च्या विनंती बॉडीचें एस. एच. ए.-256 आसा. हें हेक्साचेर गरजेचें आसा.POSTआनीPATCH, आनी तुमी धाडपी बॉडी तुमी हॅश केल्ल्या बाईटा खातीर बाईट आसपाक जाय.created_atसर्वरच्या घड्याळा उपरांत 60 सेकंदां भितर आसपाक जाय.- प्रत्येक इव्हेंट एक फावटीच काम करता, a
GETआस्पाव केला, देखून कॅप्चर केल्लें हेडर परतून चलोवंक मेळना. दर एका विनंत्या खातीर नवें सायन करात. एक जोडnonceयादृच्छिक मोल आशिल्लो टॅग जाका लागून एकाच सेकंदांत स्वाक्षरी केल्ल्यो दोन विनंत्यो अजूनय वेगवेगळ्यो आसतात. - स्वाक्षरी केल्ल्या विनंत्याचो भाग चडांत चड 64 के. बी. आसूं येता, आनी कुडीक ताची गरज आसता.
Content-Type: application/json.
एक गमलिल्ली घटना परत येता 401 missing_nostr_auth; ek ji khub vait
form kela, khub vait sign kela, khub poroni, vo veglo URL, method vo body aslo tem returns
invalid_nostr_auth, संदेशांतल्या कारणा वांगडा; परतून वापरिल्लें परत येता
nostr_auth_replayed. ह्या एंडपॉइंट्सक आयिल्ली API की नाकारली वता. बॉडी वाचोवचे पयली सिग्नेचर तपासली वता, आनी प्रत्येक ॲड्रेस एका मिनिटांत ३० वेळा फाईल करू शकता (एका IPv6 ॲड्रेसक वचोवपाचो पूर्ण /६४ भाग मानतात); तांयपून तें... 429 वांगडाच
Retry-After.
ब्राउझर हे एंडपॉइंट्स फकत Nymbot च्या स्वताच्या साईट्सच्यान सकयलच कॉल करूंक शकतात (https://nymbot.ai,
https://nymchat.app आनी तांचे सबडोमेन). खंयच्याय दुसऱ्या साईटचें पान ताका कोर्स (CORS) हेडर मेळना, देखून तें तांच्या परत करपी वस्त वाचूंक शकना. स्क्रिप्ट्स आनी नेटिव्ह ॲप्स, जे कसलेच...
Origin, प्रभावी जावचे ना.
सायनींग करपा खातीर तुमच्या एन. आय. एम. ची गुपीत किल्ली जाय ( nsec), जें सगळें नियंत्रीत करताः तुमची वळख, तुमचो इतिहास आनी तुमचें संतुलन. फकत तुमचो विस्वास आशिल्ल्या यंत्राचेर लिपींत दवरात, फायलींत बरोवचे परस वातावरणांतल्यान वाचात, आनी तुमकां शक्य जाल्यार एप पसंत करात.
हे मदतनीस हेडर तयार करतात. ह्या पानाचेर उपरांतच्या उदाहरणांनी तांचो उपेग करतात. ते हेक्सांतली गुपीत किल्ली वाचतात NOSTR_SECRET_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 शीटच्या वयर कितें दिसेता: तुमची पब्लिक की, दोनूय बॅलन्स, कितल्या की अॅक्टिव्ह आसात (रिव्होक जा भुरग्या वा एक्स्पायर जा ना), आनी... स्वयंचालित टॉप-अप सेटिंग्स, वा
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());
कळींचे व्यवस्थापन करप
ॲपच्या की लिस्टच्या मागचे एंडपॉइंट्स. तांच्या सगळ्यांकडे एक जाय 🧱 स्वाक्षरी केल्ली विनंतीआय. एस. ओ. 8601 त वेळा सयत आनी सॅटांत प्रमाणा सयत दरेक किल्ली ह्या रुपांत परत करतातः
मुखेल वस्तू
{
"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 ही किल्ली वळखुपाक फावोशी आसता पूण ती वापरपाक न्हय. ती तयार करतकच ती किल्ली फकत एक फावट परत येता.
वळेरीची वळेरी
GET https://nymbot.ai/api/v1/keys — सादार (signed).
| क्षेत्र | प्रकार | गरजेचें | वर्णन |
|---|---|---|---|
include_revoked | बुलियन (क्वेरी) | ना. | रद्द केल्ल्यो किल्ली आस्पावीत करात. पूर्वनिर्धारीत 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तेदोच सुटून दव, ती कॅप (cap) कणीच रिसेट जावची ना. |
expire_at | स्ट्रिंग वा पूर्णांक | ना. | जेन्ना किल्ली काम करप बंद करताः एक आय. एस. ओ. 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} — सादार (signed).
परतून आययलेलीं वस्तू {"data": {…}} मुखेल वस्तूकडेन, वा 404
key_not_found तुजी चावी नासली जाल्यार ती आयडी आसा.
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} — सादार (signed).
खंयचेंय धाड name, limit_sats, reset_period आनी
expire_at, चावी तयार करतना त्याच नेमां वांगडा. 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} — सादार (signed).
चावी एकाच वेळार थांबयता, बरें जातलें. ती वांगडा वळेरेंत उरता 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());
एन. डब्ल्यू. सी. ऑटो-टॉप-अप
लाईटनींग वॉलेट नॉस्टर वॉलेट कनेक्ट कडेन जोडचें आनी ए. पी. आय. खर्च उणो जाता तेन्ना निमबॉट स्वता बॅलन्स टॉप अप करता. एपच्या ए. पी. आय. शीटाची तीच सेटिंग आसता; हे ताचे फाटले निमाणें बिंदू आसतात. त्या सगळ्यांक एक बॅलन्स जोडपाची गरज आसता. स्वाक्षरी केल्ली विनंती.
हें कशें काम करताः तुमी पळोवपाक वेंचून काडिल्ल्या शिल्लक रकमेचेर ए. पी. आय. विनंती चार्ज केल्या उपरांत, ती शिल्लक तुमच्या थ्रेशोल्ड सकयल देंवली जाल्यार, निमबॉट तुमच्या टॉप-अप रक्कमे खातीर चलन करता, तुमच्या वॉलेटाक तें फारीक करपाक सांगता, आनी क्रेडीट जोडटा. दर 5 मिनटांनी दर एका मिनटांत चडांत चड तें टॉप अप जाता, देखून विनंत्यांचो स्फोट वॉलेट काडूंक शकना. ऍप्लिकेशनांत खर्च करप ताका ट्रिगर करिना. निमाण्या टॉप-अपचो वेळ आनी आकार, आनी निमाणो त्रुटी, सेटिंग्जांत आसात; चुकल्या उपरांत फारीकणी जाल्ली जाल्यार, ताचे चलन तपासात टॉप-अप स्थिती ताका श्रेय दिवचें.
जोडणी स्ट्रिंग कोणाक तें धरल्यार तुजें वॉलेट फारीक करपाक सांगता. निंबॉट तें एन्क्रिप्ट केल्लें सांठोवन दवरता आनी फकत स्वताचे टॉप-अप पावत्या फारीक करपा खातीर ताचो वापर करता, पूण फकत हाचे खातीर जोडणी करात, तुमच्या वॉलेटांत खर्चाचें बजेट आसता, जाका लागून तो सगळ्यांत चड फारीक करूंक शकता तो तुमी वेंचून काडिल्लो क्रमांक. वॉलेटाक आदार दिवचो पडटा pay_invoice.
वॉलेट जोडटात
POST https://nymbot.ai/api/v1/nwc-auto-topup/connect — सादार (signed).
| क्षेत्र | प्रकार | गरजेचें | वर्णन |
|---|---|---|---|
nwc_url | स्ट्रिंग | हय | जोडणी स्ट्रिंग, सुरू जाता nostr+walletconnect://. निंबॉट वॉलेटाक विचारता get_info तें सांबाळून दवरचे पयलीं, आनी तें कूटबद्ध करून सांठोवन दवरात. |
threshold_sats | पूर्णांक | हय | शिल्लक इतल्या सॅट सकयल देंवता तेन्ना टॉप अप करात. उण्यांत उणें 1,000. |
topup_sats | पूर्णांक | हय | दर खेपे कितलें जोडचें. 1,000 ते 1,000,000 सॅट. |
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); जोडणी पावंड्यो फारीक करूंक शकना (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 — सादार (signed).
जोडिल्ले सारकीच वस्तू परत करता, वांगडा 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 — सादार (signed).
साठयिल्ली कनेक्शन स्ट्रिंग पुसून घालता. आतां कसलेच टॉप-अप्स करपाचें ना. खात्री करपाक, तुमकां तुमचे वॉलेट मदीन कनेक्शन रिव्होक (revoke) करपाक येता.
प्रतिसाद
{ "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());
की शिवाय प्रत्येक विनंतीक पैसे दिवप
Lightning वर एक वेळेंत एक विनंती करपाखातीर फिक्स्ड-प्राइस एंडपॉइंट्स खातीर पयसाय दितात, कोणाचेंय की (key) ना, खातीर खातीर (account) ना आनी शिल्लक (balance) ना: POST /images/generations, POST /images/edits,
POST /videos, POST /audio/speech, POST /audio/transcriptions,
POST /audio/translations आनी POST /embeddings. चॅट, प्रतिसाद आनी संदेशांक सदांच किल्लीची गरज आसता. किल्ली आशिल्ल्या विनंतीचें बिल सदचे भशेन शिल्लक दवरतात; किल्ली धाडना तेन्नाच फारीकणीचो प्रवाह सुरू जाता.
Nymbot एकच विचार दोन वर्शनांत सांगता, एकच बॅकएंड सावन: Lightning Labs'
L402 (देखील त्याच्या पुराण्या नावान स्वीकारपूत, LSAT) आनी आय. ई. टी. एफ. ड्राफ्ट
पेमेंट हाचे वांगडा एच. टी. टी. पी. प्रमाणीकरण येवजण lightning पद्दत आनी
charge हेतू. तुमच्या गिरायकाक जें समजता तें वापरात.
कणा विना पयसा दिल्लें फकत तेन्नाच चालू आसता तेन्ना 🔍 API_L402_SECRET हेंक्स (64 अक्षरां) वा बेस 64 (44) अशे उण्यांत उणें 32 यादृच्छिक बाइट्स धरता. openssl rand -hex 32एकें उणें वा ओळखीक येवपी मान आनी ही वैशिष्ट्य बंद करता आनी ताचें कारण नोंदवता. ताचो फेरबदल करपाक, जुले मान लावन API_L402_SECRET_PREVIOUS एका दिना खातीर: credentials, status URLs आनी
तेाच्यांतल्यान केल्लें challenges तेो संपुंचो सावन कार्यांत आसतात.
आव्हान
ना ही विनंती धाड Authorization हेडर. तें वैध आसल्यार कांयच चलचें ना, आनी तुमकां मेळटा 402 Payment Required त्या विनंतीक कितलो खर्च येतलो हाचे खातीर चलन घेवनः एक किल्ली तीच किंमत फारीक करतली, 10 सॅट प्रमाण क्रेडीट वा 100 सॅट प्रो क्रेडीटांत रुपांतरीत जातली आनी पुराय सॅट (उण्यांत उणें 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 पॅरामीटर बेस64युआरएल जे. एस. ओ. एन.:
{"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.
आव्हान निमाण्या बिंदूचेर बांदिल्लें आसता, Content-Type (ताचो मिडिया प्रकार आनी, मल्टीपार्टा खातीर, ताची शीम) आनी तुमी धाडिल्ल्या अचूक बॉडी बाईटांच्या एसएचए-256चेर, आनी 15 मिण्टां मेरेन चलता. फारीक केल्या उपरांत, धाड एकसारकें परतून मागणी करा: तेच
Content-Type आनी तेच JSON bytes, वा multipart endpoints खातीर
(/images/edits, /audio/transcriptions, /audio/translations) एकाच शिमेचो एकूच मल्टी पार्ट बॉडी. चडशे एचटीटीपी लायब्ररी दर खेपे फॉर्म एन्कोड करतना नवी शीम वेंचून काडटात, देखून ती एक फावट एन्कोड करात आनी ती बाइट्स दोन फावटीं धाडात.
दर एका पत्त्याक एका मिनटाक 30 आव्हानां विचारूं येतात (एक आयपीव्ही6 पत्तो पुराय/64 म्हणून मेजतात). ज्याचो पत्तो खबर ना त्यो विनंत्यो दर मिनटाक 10 कडक वांटून घेतात, आनी सगळ्या पत्त्यांचेर निंबोट समस्यांच्या आव्हानांचेर एकंदर मर्यादा आसता; आव्हान दिवचे पयलीं न्हयकारिल्ली विनंती (देखीक वैध जेएसओएन नाशिल्ल्या बॉडीकडेन) ताचे वटेन मेजनात. ताचे भायर जाप आसा 429 वांगडाच Retry-After, कूड वाचपा पयलीं आयिल्लें. की (key) वा क्रेडेंशियल (credential) विणें कडेन जावपी एंडपॉइंट्स (endpoints) तितलीच एक मिनीटाकल्यान एका ॲड्रेसक १२0 अनऑथेन्टिकेटेड (unauthenticated) रिक्वेस्टच्या सामान्य मर्यादेत गिळले वत. कूड वाचपा पयलीं क्रेडेंशियल तपासलें वता, आनी अशी रिक्वेस्ट ज्याची Content-Type नाय application/json (वा
multipart/form-data अपलोड करपा खातीर) न्हयकारला 415 आनी केन्नाच चलन मेळना.
एम्बेडिंग्सची किंमत इनपुटच्या टोकन्सच्या अंदाजानवय 1.5× मार्जिन सोंदपून ठरयता, कारण खऱ्या आकड्याचें खबर पळोवन मेळटा. तुमी खरेंच वापरिल्ल्या टोकन्सखातीर पयशे दितात, आनी न वापरिल्ल्या पयशांचो भाग ... म्हूण परत मेळटा. रिफंड टोकन.
पेमेंट धाडत आसां 💸
खंयच्याय लाईटनींग वॉलेटान चलन फारीक करात. वॉलेटांत तुमकां 64 हेक्स अक्षरांचो प्रीमेज मेळटा. मागीर तातूंतल्या एका अक्षरान तीच विनंती धाडचीः
| येवजण | हेडर |
|---|---|
| L402 | Authorization: L402 <macaroon>:<preimage> (LSAT काम लेगीत करता) |
| पेमेंट | Authorization: Payment <base64url JSON>, जे. एस. ओ. एन. खंय आसा {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}} |
एकें दिल्लेचिए खातीर एक पेड रिक्वेस्ट, की (key) वापरून केल्ल्या सारखीच जाप दिता, पूण तें एकदम तशें न्हयें... nymbot
वस्तूक समतोल क्षेत्र नाः {"payment": "l402", "tier": "pro", "paid_sats": 237,
"charged_sats": 237}, आनी कांयच ना X-Nymbot-Balance-Sats हेडर. फारीकणी येवजणे वांगडा फारीक केल्ली विनंती लेगीत मेळटा Payment-Receipt हेडर (चॅलेंज आय. डी. वांगडा बेस64यु. आर. एल. जे. एस. ओ. एन., पेमेंटाचो हॅश असो reference, status आनी
timestamp). पेड रिクエスト्स कश्याच nym सोंदनाच आसात, देखून तांची query historyंत वळख जात ना.
| स्थिती | केन्ना? |
|---|---|
402 payment_already_used | दर एक फारीकणी एका विनंत्या खातीर फारीक करतात. ह्या विनंत्या खातीर प्रतिसाद हें एक नवें आव्हान, देखून एक गिरायक जो आपलें निमाणें प्रमाणपत्र कॅशे करता (म्हणून lnget करता) फकत परत फारीक करता. |
402 payment_mismatch | दुसऱ्या एका निमाण्या बिंदू खातीर प्रमाणपत्र जारी केल्लें, Content-Type ki sharir, ki hea vinantichim modotantlean kom bhugtun korta. Hea vinantichi ek navin chinot tazo sobat yeta; jednam bhugtun khub kom aslem, tumi kitem bhugtun kel'lem tem ek... रिफंड टोकन (refund_token आनी refund_sats काळजांतल्यान। |
402 payment_expired | चॅलेंज सोंपतकच 15 मिण्टां परस चड वेळ गेलो. ताचे वांगडा एक नवें चॅलेंज येता. प्रीमेजांत तुमी फारीक केल्लें दाखयल्यार, तुमी फारीक केल्लें फारीक जातलें. रिफंड टोकन (refund_token आनी refund_sats कुडींत), एक फावट; उपरांत प्रमाणपत्र वापरतात. |
401 invalid_preimage | पयलें चित्र चलन फारीक करपाच्या हॅशाक हॅश करचें ना. फारीकणी सोंपची ना. |
401 invalid_payment_credential | Credential चुकीच्या रददेंत आसा, Nymbot ताका लागून बदलिल्लां, वा एका अइशें पेमेंट हॅश सांगता जाचो न्हयें Nymbot कडेन कोणचेंही इनव्हॉइस नासलें. Nymbot कडेन नासलेली caveat आसपीलें वा विरोधाभासी caveat आसपीलें macaroon नाकारलेलें वचतले. |
429 rate_limit_exceeded | एका मिनिटांतल्या एका वेळार ३० परस चड क्रेडेंशियल्स वा कीज (keys) व्हेरिफाय करपाक फाल्या जाल्या, वा एक रिफंड टोकन एका मिनिटांत ६० परस चड वेळा धाडल्या. थांब। 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 वीज पद्दतीन पेमेंटाचें आव्हान स्वता हाताळचें; तांकां निमाण्या बिंदूचेर दाखोवचें आनी तांकां फारीक करपाक दिवचें.
व्हिडियो
ए फारीक केल्लें POST /videos उत्तऱां 202 चावी असलें, तशेंच अ
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 unbilled थंय फेल जाल्यार, तर पेमेंट ताचेर येता. Status URL दाखयता
refund_sats परत मेळिल्ल्या कामा खातीर पूण टोकन केन्नाच मेळना, देखून स्थिती यू. आर. एल. शेअर केल्यार रिफंड मेळना. टोकन तपासल्यार कोणूच मतदान करूंक नाशिल्लें एक अयशस्वी काम थारता.
परतावे (Refunds)
जरें एक पेड रिक्वेस्ट फेल जाली आनी प्रोव्हायडरने त्या प्रयत्ना खातीर Nymbot कडेन बिलिंग केलें, तर ती पेमेंट राखून दवरतात आनी
चुक (error) तें सांगता, हेन्ना... charged_sats, जशें चावी आशिल्ल्या विनंत्या बाबतींत. बिल काडनासतना तो अपेशी थारलो जाल्यार, चुकेक लागून रिफंड टोकन तुमच्या पयशां खातीर योग्य:
{
"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
आनी सगळो पयमेंट परत येता. Embeddings तीच वस्त परत दितात जी अंदाजान रोकून दवरली. एकें फेल जाल्लें व्हिडिओ तें टोकन परत करता जे चडयलेल्या प्रमाण वचपें आशिल्लें.
रिफंड टोकन हो एक यादृच्छिक 256-बिट कोड. निंबॉट फकत ताचो हॅश सांठोवन दवरता, आनी तो 30 दिसां उपरांत सोंपता. तातूंत सॅट शिल्लक आसता, आनी तुमी करूं येताः
- ताचे वरवीं फारीक करात. धाड.
Authorization: Bearer REFUND-…वयल्या खंयच्याय निमाण्या बिंदूचेर (ओपनएआय एसडीके ती आपली एपीआय किल्ली म्हूण घेता). टोकनांतल्यान किंमत येता आनी जें उरलां तें ताचेर उरता (refund_token_satsम्हजेरnymbotऑब्जेक्ट). विनंतीच्या उत्तरा परस उणें मोल आशिल्लें टोकन402refund_insufficient; बिल काडूंक नाशिल्ल्यान सॅट परत त्याच टोकनाचेर दवरतात. - तपासात.
GET /api/v1/l402/refundsतेच हेडर वांगडा परत मेळटा{"sats": 237, "status": "open", "expires_at": "..."}. - एक टोकन मिनटाक चडांत चड 60 फावटीं वापरूं येता.
- ती एका एन. आय. एम. चेर व्हरात. तातूंत पेस्ट करात. भेटवस्तू परतून घे. Nymbot app въ, vo call करा
POST /api/v1/l402/refunds/redeemएका बरोबर स्वाक्षरी केल्ली विनंती आनी{"refund_token": "REFUND-...", "balance": "standard"}(वा"pro"). पूण क्रेडिट्स बॅलन्स कडेन वतात (standard वरी 10 sats, Pro वरी 100 sats); जे sats पूण क्रेडिट तयार करिना, ते API requests खातीर टोकनचेरच उरतात.
cURL
URL=https://nymbot.ai/api/v1/l402/refunds/redeem
BODY='{"refund_token":"REFUND-...","balance":"standard"}'
curl "$URL" \
-H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
-H "Content-Type: application/json" \
-d "$BODY"
प्रतिसाद
{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }