सामग्रीमा जानुहोस्
Back to Nymbot

ज्ञानको आधार विकासको

ब्यालेन्स, टप-अप र कुञ्जीहरू

तपाईँसँग के छ जाँच गर्नुहोस्, लाइटनिङमा टप अप गर्नुहोस्, तपाईँको आफ्नै वालेटबाट स्वचालित रूपमा टप अप गर्नुहोस्, प्रत्येक अनुरोधको लागत के हो हेर्नुहोस्, र कोडबाट कुञ्जीहरू प्रबन्ध गर्नुहोस्।

संतुलनको निगरानी

पेय पदार्थ ‘वाइन’ बनाउन प्रयोग हुने कच्चा पदार्थ...

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);

भुक्तानी पद्धति

जसले बढी पैसा दिन्छ, उसैलाई बजेट छुट्याई दिन्थे ।

GET https://nymbot.ai/api/v1/topup/payment-methods चाहिँ चाहिँ आवश्यक छ ।

एउटा टप-अप 10 देखि 1,000,000 स्याट्स हुन्छ; एउटा प्रो टप-अपले कम्तिमा एउटा प्रो क्रेडिट किन्नुपर्छ, त्यसैले यो 100 स्याट्सबाट सुरु हुन्छ। डलर सीमाले बिटक्वाइन मूल्यलाई पछ्याउँछ। bulk_bonus मुख्य पृष्ठअटो अर्थ/बाणिज्य पत्रपत्रिका२ लाख ६८ हजारमै डर्ट बाइक, किन्ने होईन त ?

प्रतिक्रिया

{
  "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);

टप अप ओभर लाइटनिङ

डेमोके्रेसीमा सबैले समान अवसर पाउनुपर्छ, त्यसलै यसमा पैसाको कुरा आउनुहुदैन । यो जाँच तर, ऋण बढेको छ ।

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यस निमका लागि 60 भन्दा बढी इनभ्वाइसहरू, वा यस ठेगानाबाट 120, एक घण्टामा (rate_limit_exceededत्यहाँको Retry-After).
502अहिले कुनै इनभ्वाइस बनाउन सकिएन (invoice_unavailableत्यहाँको Retry-After).

cURL

curl https://nymbot.ai/api/v1/topup/create/btc-lightning \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"amount": 10000, "currency": "SATS", "tier": "pro"}'

Python

import os
import requests

res = requests.post(
    "https://nymbot.ai/api/v1/topup/create/btc-lightning",
    headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
    json={"amount": 10000, "currency": "SATS", "tier": "pro"},
)
invoice = res.json()
print(invoice["payment_request"])

JavaScript

const res = await fetch("https://nymbot.ai/api/v1/topup/create/btc-lightning", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ amount: 10000, currency: "SATS", tier: "pro" }),
});
const invoice = await res.json();
console.log(invoice.payment_request);

चटपट अमिलो बनाउन

इनभ्वाइस भुक्तान गरिएको छ कि छैन भनेर सोध्छ र, एकचोटि यो भएको छ, क्रेडिट थप्दछ। जाँच भनेको यसलाई के क्रेडिट गर्दछ, त्यसैले भुक्तान गरेपछि, स्थिति नभएसम्म जाँच गर्नुहोस् creditedविदुरले धृतराष्ट्रसँग भने कि यदि कोई अत्यन्त अहंकारी छ भने यो निश्चित छ कि उ १०० बर्षसम्म जीवित रहन सक्दैन ।

GET https://nymbot.ai/api/v1/topup/status/{invoice_id} - एन. आइ. एम. बाट एउटा कुञ्जी चाहिन्छ जसले इनभ्वाइस बनायो।

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आईडी क्रिएट कलबाट 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यो प्रश्न हो ।न त१. प्रति पृष्ठको सीमा २०, अधिकतम १००
start_date
end_date
धनुषाको प्रश्न (न त८६०१ दिउँसो र समय ।
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);

खाता अनुरोधहरूमा हस्ताक्षर गर्दै

स्ट्रबेरीमा प्रशस्त पाइने भिटामिन C शरीर भित्र बन्न नसक्ने तत्व हुने, सौन्दर्य प्रभावकारिता या मानव शरीरको प्रतिरक्षा संयन्त्रलाई बलियो पारेर भाइरससँग प्रतिकार गर्ने शक्ति उच्च पार्ने प्रभाव हुन्छ।

यसका प्रत्येक वाक्य एउटा छुट्टै कथाको विषय हो । आगलागी यो सिस्टममा एक पारदर्शी एलईडी डिस्प्ले हुनेछ, जसमा इन बिल्ट क्यामेरा लगाइएको हुन्छ ।

The signature is a Nostr event of kind 27235 (NIP-98), sent base64-encoded in the 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 यो HTTP विधि हो ।
  • payload उनले आयोगले निर्धारण गरेका ७१९ इकाइभित्रै विशेष, संरक्षित वा स्वायत्त क्षेत्र किटान गरिने बनाए । POST र PATCHत्यसैले हामी यस कुराको पुष्टि गर्न सक्दछौँ कि उसको पूर्णता केवल तब आयो जब यसलाई नविनतम समयमा लेखियो ।
  • created_at उनीहरुमध्ये ६० सेकेन्डसम्म सर्वरको घण्टा रहेको छ ।
  • हरेक समय उनी यौन दुर्व्यवहारको महसुस गर्छिन् । GET त्यसैले ‘डेटा डिटेक्टिभ’ का लागि छनोट भएका व्यक्तिले ‘जहाँ डेटा छ, त्यही पुग्ने’ हैसियत राख्नेछन् । nonce होइन भने लगभग सबै राजनीतिक पार्टीका नेतासँग मेरो दोहरो परिचय छैन, केवल...
  • अनि मैले भनेँ मेरो १३ अर्बको योजना चाहिँ शून्य प्रतिशत भन्ने तपाईं चाहिँ बिना योजनाका २० करोडको योजना ल्याउने भनेँ । Content-Type: application/json.

हराएको घटना फर्कन्छ 401 missing_nostr_authतर सबै योजना स्थलमा लागेको छ भन्ने स्थिति पनि छैन, समयको व्यवस्ता या अन्य कुने कमी कमजोरीले २। invalid_nostr_authत्यसको के भनम् प्रणाली, पुस्तक अनुसार, विधि अनुसार एउटै हो । nostr_auth_replayedहरेक महिना एकदिन प्रत्येक घरबाट एकजना (१६ देखि ६० वर्षसम्मका) व्यक्ति सामुदायिक कार्यका लागि अनिवार्य जानुपर्ने नियम बनाए । 429 सँगसँगै Retry-After.

Browsers can call these endpoints only from Nymbot's own sites (https://nymbot.ai, https://nymchat.app र तिनीहरूको उपडोमेनहरू)। कुनै पनि अन्य साइटको पृष्ठले कुनै सिओआरएस हेडरहरू फिर्ता पाउँदैन, त्यसैले यसले के फिर्ता गर्छ भनेर पढ्न सक्दैन। स्क्रिप्टहरू र नेटिभ एपहरू, जसले कुनै सन्देश पठाउँदैन। Originतर, त्यो प्रभावित नै हो ।

मेरो रहस्यको कुंजी

४. निष्काम्य कर्म (बिना कुनै स्वार्थ गरिने कार्य) nsecहो, आफ्ना रचना वा कृतिका बारेमा अरूहरुले नै बोलेको वा लेखेको राम्रो अवश्य हो जुन खुला छ जुन भोलि बोलिनेछ, लेखिनेछ ।

यसका प्रमुख विशेषताहरु : उपलब्धता र पहुँच, पुन प्रयोग र वितरण, र विश्वव्यापी सहभागिता । NOSTR_SECRET_HEX; CURL एकले प्रयोग गर्दछ नानीको तर त्यहाँ डोजर, स्काभेटर र टयाक्टर आवश्यक छ कि गाडी आवश्यक छ । sha256sum (महिलाको मस्तिष्क 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");
}

खाता संकलन

त्यसैले ‘डेटा डिटेक्टिभ’ का लागि छनोट भएका व्यक्तिले ‘जहाँ डेटा छ, त्यही पुग्ने’ हैसियत राख्नेछन् । स्वचालित टॉप-अप सन्दर्भमा, या 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 हस्ताक्षर भयो ।

क्षेत्रप्रकारकोआवश्यकवर्णन
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स्ट्रिङहो२०६० तिर दाङ आई सकेपछि मेरो स्तम्भ लेखन कार्यले निरन्तरता पायो ।
limit_satsपूर्णांकन तयस्तो योजना बनाउनका लागि एउटा उदाहरण चित्र नं. १ मा दिइएको छ ।
reset_periodस्ट्रिङन तdaily, weekly या monthlyआवश्यक छ limit_satsजतिबेला उनीहरुले बिलिङ गर्छन्, त्यतिबेला नै यहाँ कारोबार देखिन्छ।
expire_atनर्थ पोईन्ट उच्च मान तआधुनिक उपकरण पनि प्रयोग गरेर २९ मूर्तिकारले १८ दिन लगाएर ५० वटा मूर्ति बनाएका हुन्।

प्रश्नको जवाफ (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(अनियमित अवधिमा २५ दिनको अवधिमा)too_many_keys).
429अहिलेका भण्डारण गृहले पेट्रोल पाँच दिन, डिजेल १९ दिन, हवाई इन्धन २० दिनलाई मात्र पुग्छ ।rate_limit_exceededत्यहाँको Retry-After).

cURL

URL=https://nymbot.ai/api/v1/keys
BODY='{"name":"laptop scripts","limit_sats":20000,"reset_period":"monthly"}'
curl "$URL" \
  -H "Authorization: $(nostr_auth POST "$URL" "$BODY")" \
  -H "Content-Type: application/json" \
  -d "$BODY"

Python

import json
import requests

url = "https://nymbot.ai/api/v1/keys"
body = json.dumps({"name": "laptop scripts", "limit_sats": 20000, "reset_period": "monthly"}).encode()
res = requests.post(
    url,
    data=body,
    headers={"Authorization": nostr_auth("POST", url, body), "Content-Type": "application/json"},
)
print(res.json()["data"]["key"])

JavaScript

const url = "https://nymbot.ai/api/v1/keys";
const body = JSON.stringify({ name: "laptop scripts", limit_sats: 20000, reset_period: "monthly" });
const res = await fetch(url, {
  method: "POST",
  headers: { "Authorization": nostrAuth("POST", url, body), "Content-Type": "application/json" },
  body,
});
console.log((await res.json()).data.key);

सुनको कोटा चाहिँ

GET https://nymbot.ai/api/v1/keys/{id} हस्ताक्षर भयो ।

पुनरागमनहरू {"data": {…}} पहिलो हो, मोराभेकको विरोधाभास लागू हुनु । 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} हस्ताक्षर भयो ।

त्यहाँ पुग्ने जो 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} हस्ताक्षर भयो ।

पहिलो हो, मोराभेकको विरोधाभास लागू हुनु । 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());

एनआरएनको मोटरसाइकल

Connect a Lightning wallet with Nostr Wallet Connect and Nymbot tops up a balance by itself when API spending runs it low. The app's API sheet has the same settings; these are the endpoints behind it. All of them need a हस्ताक्षर गरिएको अनुरोध.

How it works: after an API request is charged to the balance you chose to watch, if that balance has fallen below your threshold, Nymbot makes an invoice for your top-up amount, asks your wallet to pay it, and adds the credit. It tops up at most once every 5 minutes for each nym and balance, so a burst of requests cannot drain the wallet. Spending in the apps does not trigger it. The time and size of the last top-up, and the last error, are in the settings; if a payment went through after an error, checking its invoice with उच्चस्तरीय स्थिति यो क्रेडिट हो ।

जब समय सकियो, क्यासिनो आइकन हराउँछ।

A connection string lets whoever holds it ask your wallet to pay. Nymbot stores it encrypted and only ever uses it to pay its own top-up invoices, but make a connection just for this, with a spending budget in your wallet, so the most it could ever pay is a number you chose. The wallet has to support pay_invoice.

कट्रिना कैफ दुनियाँको सबैभन्दा सुन्दर र

POST https://nymbot.ai/api/v1/nwc-auto-topup/connect हस्ताक्षर भयो ।

क्षेत्रप्रकारकोआवश्यकवर्णन
nwc_urlस्ट्रिङहोकट्रिना कैफ दुनियाँको सबैभन्दा सुन्दर र प्रसिद्ध अभिनेत्रीमध्ये एक हुन् । nostr+walletconnect://. Nymbot asks the wallet for 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 हस्ताक्षर भयो ।

जडानको रूपमा उही वस्तु फिर्ता गर्दछ, सँग 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());

निर्वाचन विरोधी गतिविधि हुन नदिन सुरक्षाकर्मीले यस्तो अभियान थालेको हो ।

यस्तो अवस्थामा पालिकाहरूले समपूरक अनुदान प्रयोगका लागि चाहिने न्यूनतम स्रोत पनि जुटाउन नसक्ने हुन् कि भन्ने आशंका जन्मनु स्वाभाविक हो । POST /images/generations, POST /images/edits, POST /videos, POST /audio/speech, POST /audio/transcriptions, POST /audio/translations र POST /embeddingsनिर्माण कम्पनी इ–राइड एडभेञ्चर लोहनी जेभीका प्रबन्ध निर्देशक मोतीलाल शर्माका अनुसार पुलको सबै काम सकिएको छ ।

Nymbot speaks two versions of the same idea, from one backend: Lightning Labs' ४४२ (यसको पुरानो नाम अन्तर्गत पनि स्वीकार गरिएको, LSAT) र IETF परियोजना भुक्तानी ल्याबमा कम्प्युटर र अन्य उपकरण हुँदैनन् । lightning विधि र charge अभिप्रेरणा। तपाईँको ग्राहकले बुझ्नेलाई प्रयोग गर्नुहोस्।

मेरो जिद्दी घरमा सर्वस्वीकार्य भयो ।

नयाँ शक्ति पार्टी विचारविहीन बनेको उनीहरुको आरोप थियो। API_L402_SECRET हेक्स (64 क्यारेक्टर) वा बेस 64 (44) को रूपमा कम्तिमा 32 अनियमित बाइट्सहरू राख्छ। openssl rand -hex 32छोटो वा अनुमान गर्न सकिने मानले सुविधा बन्द गर्छ र किन लग गर्छ। यसलाई घुमाउन, पुरानो मानलाई यहाँ सार्नुहोस् API_L402_SECRET_PREVIOUS एक दिनका लागिः प्रमाणहरू, स्थिति यूआरएलहरू र यसअन्तर्गत गरिएका चुनौतीहरू तिनीहरूको म्याद समाप्त नभएसम्म काम गरिरहन्छन्।

चुनौती

नयाँ पुस्ताको अनुरोध नै Authorization चाहे अस्पताल जान वा सूई लगाउन, म सधैं उनको साथमा हुन्छु । 402 Payment Required ‘आवश्यकता अनुसार खर्च गर्न पाउने तर जति मान्छे आयो त्यति नै खर्च भयो भनेर बिल पेस नगर्नु भनेर निर्देशन दिनुभएको छ,’ प्रवक्ता डंगोलले बताए । 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 त्यसको ज्वलन्त उदाहरण बनेको छ– {"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.

यी तिनै विषयमा अहिले प्रश्न सूचक लागेको अवस्था छ [...] Content-Type (यसको मिडिया प्रकार र, मल्टिपार्टका लागि, यसको सीमा) र तपाईँले पठाउनुभएको सही बडी बाइट्सको एसएचए-256 मा, र 15 मिनेटसम्म रहन्छ। भुक्तान गरेपछि, पठाउनुहोस् समानता ‘अहिले त्यही जग्गाको भाउ ३० लाख रुपैयाँ आना पुग्यो । Content-Type यसैबीच, प्रदेश नम्बर ७ लाई आर्थिक रूपमा सम्पन्न बनाउन प्राकृतिक सम्पदाको उचित दोहन नै भरपर्दो विकल्प भएको हो ।/images/edits, /audio/transcriptions, /audio/translationsयो सिस्टममा एक पारदर्शी एलईडी डिस्प्ले हुनेछ, जसमा इन बिल्ट क्यामेरा लगाइएको हुन्छ ।

Each address can ask for 30 challenges a minute (an IPv6 address counts as its whole /64). Requests whose address is not known share a stricter 10 a minute, and there is an overall cap on the challenges Nymbot issues across all addresses; a request refused before a challenge is made (for example with a body that is not valid JSON) does not count toward it. Beyond that the answer is 429 सँगसँगै Retry-Afterनेपालमा विद्युत क्षमता ८६ हजार मेगावाट छ भनेर ‘थेसिस’ मात्रै आएको छ, सरकारले आधिकारिक रुपमा यति नै आवश्यक हो भन्ने कुनै तथ्यांक निकालेको छ कि त्यही थेसिसलाई आधार मानिरहेको अवस्था हो ? Content-Type यो नै application/json (अन्य multipart/form-data यसकारण उनले अस्वीकार गरेनन् । 415 कुनै न कुनै त्रुटि छ ।

नेपालमा विद्युत क्षमता ८६ हजार मेगावाट छ भनेर ‘थेसिस’ मात्रै आएको छ, सरकारले आधिकारिक रुपमा यति नै आवश्यक हो भन्ने कुनै तथ्यांक निकालेको छ कि त्यही थेसिसलाई आधार मानिरहेको अवस्था हो ? टोक्योको पुनरागमन.

भुक्तानीकरणको लागि

कुनै पनि लाइटनिङ वालेटबाट इनभ्वाइस तिर्नुहोस्। वालेटले तपाईँलाई 64 हेक्स क्यारेक्टरको प्रिमेज दिन्छ। त्यसपछि यी मध्ये एकको साथ उही अनुरोध पठाउनुहोस्ः

योजनाकोहेडर
४४२Authorization: L402 <macaroon>:<preimage> (LSAT काम पनि गर्छ)
भुक्तानीAuthorization: Payment <base64url JSON>जहाँ इन्फेक्सन भएको त्यहाँ लसुनको तेल लगाउनुपर्छ । {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}}

त्यसैले हामी यस कुराको पुष्टि गर्न सक्दछौँ कि उसको पूर्णता केवल तब आयो जब यसलाई नविनतम समयमा लेखियो । nymbot यसको मुख्य परिचय नै यही प्राकृतिक सुन्दरता हो। {"payment": "l402", "tier": "pro", "paid_sats": 237, "charged_sats": 237}, र त्यहाँ छैन X-Nymbot-Balance-Sats सदन प्रतिपक्षको भन्ने अनि प्रतिपक्ष दलको नेतालाई सहमति अनुसार बोल्न नदिएपछि त्यो घटना भएको हो । Payment-Receipt हेडर (चुनौती आईडीको साथ बेस64युआरएल जेएसओएन, भुक्तानी ह्याशको रूपमा reference, status र timestampपोकमोन सन् ९० को दशकमा चर्चामा रहेको यही भिडियो गेमको नयाँ संस्करण हो।

स्थितिकोकहिले
402 payment_already_usedचन्द्र रानोहोंछाका कवितामा पाइने सबैभन्दा सुन्दर पक्ष हो- भाषाको प्रयोग र त्यसको शसक्तता । lnget गर्छ) केवल फेरि भुक्तान गर्दछ।
402 payment_mismatchअर्को अन्तिम बिन्दुका लागि प्रमाणपत्र जारी गरिएको थियो, Content-Type वा निकाय, वा यो अनुरोध भन्दा कम तिर्छ अब लागत। यस अनुरोधका लागि एउटा नयाँ चुनौती यसको साथ आउँछ; यदि भुक्तानी धेरै सानो थियो भने, तपाईँले भुक्तान गर्नुभएको कुरा फिर्ता आउँछ। टोक्योको पुनरागमन (refund_token र refund_sats त्यहाँ पुग्ने जो
402 payment_expiredपाँच वर्षअघि धान पिस्ने मिलको फिताले दाहिने हात सोह्रेर लगेपछि एक हातको सहाराले जीवन जिउन सिकियो। टोक्योको पुनरागमन (refund_token र refund_sats त्यसको के भनम् प्रणाली, पुस्तक अनुसार, विधि अनुसार एउटै हो ।
401 invalid_preimageपार्टीको घोषित सिद्धान्त र व्यवहारमा ठूलो अन्तर देखिएको उनको आरोप थियो ।
401 invalid_payment_credentialThe credential is malformed, was changed after Nymbot issued it, or names a payment hash Nymbot never issued an invoice for. A macaroon with a caveat Nymbot does not know, or with conflicting caveats, is refused.
429 rate_limit_exceeded30 भन्दा बढी प्रमाणहरू वा कुञ्जीहरू जुन प्रमाणित गर्न असफल भए यो ठेगानाबाट एक मिनेटमा आए, वा एउटा फिर्ती टोकन एक मिनेटमा 60 भन्दा बढी पटक पठाइएको थियो। पर्खनुहोस् Retry-After.

cURL

BODY='{"model":"nano-banana","prompt":"a lighthouse at dusk","response_format":"b64_json"}'
URL=https://nymbot.ai/api/v1/images/generations

# 1. Get the challenge
CH=$(curl -s -D - -o /dev/null "$URL" -H "Content-Type: application/json" -d "$BODY" | grep -i '^www-authenticate: L402')
MAC=$(echo "$CH" | sed -E 's/.*macaroon="([^"]+)".*/\1/')
INVOICE=$(echo "$CH" | sed -E 's/.*invoice="([^"]+)".*/\1/')

# 2. Pay $INVOICE with your wallet and copy the preimage
PREIMAGE=...

# 3. Send the identical request with the credential
curl "$URL" -H "Content-Type: application/json" -H "Authorization: L402 $MAC:$PREIMAGE" -d "$BODY"

lnget

# lnget (Lightning Labs) pays L402 challenges from your own lnd node and retries for you
lnget -X POST -H "Content-Type: application/json" \
  -d '{"model":"nano-banana","prompt":"a lighthouse at dusk","response_format":"b64_json"}' \
  https://nymbot.ai/api/v1/images/generations

Python

import base64, json, re
import requests

url = "https://nymbot.ai/api/v1/images/generations"
body = json.dumps({"model": "nano-banana", "prompt": "a lighthouse at dusk", "response_format": "b64_json"}).encode()
headers = {"Content-Type": "application/json"}

challenge = requests.post(url, data=body, headers=headers)
assert challenge.status_code == 402
info = challenge.json()
print("Pay", info["amount_sats"], "sats:", info["invoice"])

preimage = pay_with_your_wallet(info["invoice"])  # 64 hex characters

# L402
mac = re.search(r'L402 macaroon="([^"]+)"', challenge.headers["WWW-Authenticate"]).group(1)
res = requests.post(url, data=body, headers={**headers, "Authorization": f"L402 {mac}:{preimage}"})
print(res.json()["nymbot"])

JavaScript

const url = "https://nymbot.ai/api/v1/images/generations";
const body = JSON.stringify({ model: "nano-banana", prompt: "a lighthouse at dusk", response_format: "b64_json" });
const headers = { "Content-Type": "application/json" };

const challenge = await fetch(url, { method: "POST", headers, body });
const www = challenge.headers.get("www-authenticate");

// The Payment scheme: echo every challenge parameter back with the preimage
const start = www.indexOf("Payment ");
const params = Object.fromEntries([...www.slice(start + 8).matchAll(/(\w+)="((?:[^"\\]|\\.)*)"/g)].map((m) => [m[1], m[2]]));
const { invoice } = JSON.parse(Buffer.from(params.request, "base64url").toString()).methodDetails;
const preimage = await payWithYourWallet(invoice);

const credential = Buffer.from(JSON.stringify({ challenge: params, payload: { preimage } })).toString("base64url");
const res = await fetch(url, { method: "POST", headers: { ...headers, Authorization: `Payment ${credential}` }, body });
console.log((await res.json()).nymbot, res.headers.get("payment-receipt"));

त्यहाँ पुग्ने जो mppx एक पत्रिकाका अनुसार दुवै पक्ष सम्झौताको लागि अक्टोबरमा भेटेका थिए, तर सहमति हुन सकेन ।

भिडियोहरू

भुक्तानी 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"लगत्तै उनलाई एसएसकेएम हस्पिटल लगिएको थियो तर,डाक्टरले मृत घोषणा गरेका हुन् । refund_sats फूटबललाई उनी महिला सशक्तिकरणको बलियो माध्यम मान्छिन्- आत्मविश्वास त बढ्छ नै साथै अनुशासनमा रहन सिकाउँछ यो खेलको नियमहरुले।

फिर्तीहरू

If a paid request fails and the provider billed Nymbot for the attempt, the payment is kept and the error says so, with 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 नेपालमा विद्युत क्षमता ८६ हजार मेगावाट छ भनेर ‘थेसिस’ मात्रै आएको छ, सरकारले आधिकारिक रुपमा यति नै आवश्यक हो भन्ने कुनै तथ्यांक निकालेको छ कि त्यही थेसिसलाई आधार मानिरहेको अवस्था हो ? 413 विदुरले धृतराष्ट्रसँग भने कि यदि कोई अत्यन्त अहंकारी छ भने यो निश्चित छ कि उ १०० बर्षसम्म जीवित रहन सक्दैन ।

A refund token is a random 256-bit code. Nymbot stores only its hash, and it expires after 30 days. It holds a sat balance, and you can:

  • त्यसको भुक्तानी पाठ्यक्रम Authorization: Bearer REFUND-… त्यसरी दिएको आदेश तथा निर्देशन पालन गर्नु सम्बन्धित सबैको कर्तव्य हुनेछ ।refund_token_sats मा nymbot वस्तु)। अनुरोधको जवाफभन्दा कम मूल्यको टोकन। 402 refund_insufficientतर, अलिबाबाबाट भने उनले निराश हुनु परेन ।
  • उसको जाँच GET /api/v1/l402/refunds त्यहाँ रहेका वनस्पति र {"sats": 237, "status": "open", "expires_at": "..."}.
  • यो मूल्य विगत १० महिनायताकै कम भएको..
  • यसकारण उनले एक नायिका हुन् । त्यसको असर उपहार खोज्ने in the Nymbot app, or call POST /api/v1/l402/refunds/redeem एकको हस्ताक्षर गरिएको अनुरोध र {"refund_token": "REFUND-...", "balance": "standard"} (अन्य "pro"* स्थानीय तहका लागि विकास निर्माणतर्फ विनियोजित बजेट आधा पनि खर्च हुन सकेन / स्थानीय तह शिक्षक र कर्मचारीलाई तलब खुवाउनमै सिमित ।

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 } }