Անցեք բովանդակությանը
Հեռնել Nymbot

Գիտելիքների բազա Արտադրողներ

Հիմնական հոդված՝ Top-ups եւ keys

Տեսեք, թե ինչ ունեք, վերցնել Lightning- ը, վերցնել ավտոմատորեն ձեր սեփական փաթեթից, տեսնել, թե ինչ է գնում յուրաքանչյուր պահանջը, եւ կառավարել սխալները կոդըից:

Տեղադրեք Balance

Երկու ձեր սխալները, եւ թե ինչպես է օգտագործվել այս սխալի կետը.

GET https://nymbot.ai/api/v1/credits/balance - Դուք պետք է API սեղմեք. POST Այն նաեւ աշխատում է, հաճախորդների համար, ովքեր հավատում են այն.

balance Արդյոք, դուք կարող եք ստանալ մի քանի $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ (null Արդյոք, եթե գինը չի կարող կարդալ) Արդյոք, վերականգնում է kredits եւ sats, ինչպիսիք են, թե ինչպես բաղադրիչները իրականում պահվում են. 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);

Վճարման մեթոդներ

Ինչպե՞ս կարող եք վերեւել, եւ limits. Lightning է միայն մեթոդը.

GET https://nymbot.ai/api/v1/topup/payment-methods Չնայած այն, որ անհրաժեշտ է սեղմել.

A top-up է 10 մինչեւ 1,000,000 sats; a Pro top-up պետք է գնել մի քանի Pro հավելված, այն սկսվում է 100 sats. bulk_bonus Տեղադրում է ավելի մեծ top-ups- ում, ինչպես նաեւ app- ում: 10%, 15% կամ 20% ավելին ստանդարտ top-ups- ում 500, 1,000 կամ 5,000 sats- ից, եւ Pro top-ups- ում 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);

Հիմնական հոդված՝ Toping Up Over Lightning

Հիմնադրում է Lightning հաշիվը, որը ավելացնում է հավասարությունը նամակը, որ կախված է: Pay it from any Lightning wallet, then Տեսեք այն Բարձրացվել է հավելվածությունը.

POST https://nymbot.ai/api/v1/topup/create/btc-lightning - Դուք պետք է API սեղմեք.

ՖիլմՔաղաքականԽնդրում ենքՆկարագրություն
amountՄեկըԱյո՛Ինչքան է, այնքան currencyԱրդյոք, բոլորը միավոր են sats- ի համար:
currencyStringի մասինՈչSATS (Անհարկե սխալը) USD կամ BTCDollars- ը փոխարինվում է այժմ Bitcoin- ի գինը:
tierStringի մասինՈչpro (Տեսանյութ՝ The Default) 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,000 000 բաղադրիչներ (amount_too_large) կամ կախված է Lightning փաթեթը (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Արդյոք, վերահսկողությունը այն է, որ այն անվտանգ է: Credit Land մի անգամ, թե ինչքան անգամ դուք պահանջում եք.

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Հիմնական հոդվածը (լուսանկարներ)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 սեղմիչ, որը տեսնում է իրենց պահանջները, կամ մի Նկարագրված պահանջը Ձեր նամակից, որը տեսնում է բոլոր սխալները:

ՖիլմՔաղաքականԽնդրում ենքՆկարագրություն
pageԱրդյոք, դուք պետք է ցանկանում եք:ՈչՀիմնական էջ 1, մինչեւ 1,000; ավելի բարձր էջը 400 invalid_value.
page_countԱրդյոք, դուք պետք է ցանկանում եք:ՈչՀիմնական էջը 20։ Հիմնական էջ 100։ Հիմնական էջ 20։
start_date
end_date
Հիմնական հարցեր (Query)ՈչISO 8601 Տեսակներ եւ ժամանակներ.
modelՀիմնական հարցեր (Query)ՈչՄիայն այս մեթոդը
typeՀիմնական հարցեր (Query)Ոչchat, responses, messages, image, video, speech, transcription կամ embedding.
all_keysԲելլան (Query)ՈչՄինչեւ մի կոճակը: true Նշվում է, որ ամենը միասին է: Նշում է false.
key_idՀիմնական հարցեր (Query)ՈչՊահպանված հարցով, կամ all_keys=trueՄիայն այս սեղմը.

պատասխանը

{
  "data": [
    {
      "id": "q_71c4e9a0",
      "timestamp": "2026-09-30T08:12:00Z",
      "model": "anthropic/claude-sonnet-5",
      "type": "chat",
      "input_tokens": 1240,
      "output_tokens": 380,
      "cached_tokens": 0,
      "cost_sats": 16.2,
      "cost_usd": 0.01895,
      "balance": "pro",
      "key_id": "4f0c9a1be27d3856",
      "web_search": false,
      "status": "ok"
    }
  ],
  "pagination": { "page": 1, "page_count": 20, "total": 311, "total_pages": 16 }
}

cURL

curl "https://nymbot.ai/api/v1/queries/history?page_count=50&type=chat" \
  -H "Authorization: Bearer $NYMBOT_API_KEY"

Python

import os
import requests

res = requests.get(
    "https://nymbot.ai/api/v1/queries/history",
    headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
    params={"page_count": 50, "type": "chat"},
)
for row in res.json()["data"]:
    print(row["timestamp"], row["model"], row["cost_sats"])

JavaScript

const res = await fetch("https://nymbot.ai/api/v1/queries/history?page_count=50&type=chat", {
  headers: { "Authorization": "Bearer " + process.env.NYMBOT_API_KEY },
});
for (const row of (await res.json()).data) console.log(row.timestamp, row.model, row.cost_sats);

Կանոնային հաշիվների գրառումը

Ավելացնել, փոխել եւ վերահսկել սեղմիչները, հաշիվը վերահսկողությունը եւ ավտոմատ վերահսկողությունը չի ստանում API սեղմիչը: Նրանք ստանում են ձեր սեղմիչից սեղմիչը, այնպես որ սեղմվող սեղմիչը կարող է ծախսել մինչեւ իր կետը, բայց չի կարող ստեղծել այլ սեղմիչը կամ բարձրացնել իր կետը:

App-ը այն է, ինչ ձեզ համար է: ամեն ինչ իր մեջ է: Ապրիլ Արդյոք, դուք պետք է միայն այս մասը կառավարել սեղանները ձեր սեփական կոդը.

Նկարագրությունը է 27235 (NIP-98) տեսակի Nostr- ի պատմություն, որը ուղարկվում է base64- ի համար Authorization Header հետ խոսքը 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 The full URL of the request, query string included, պարզապես այնպես, ինչպես է ուղարկվել.
  • method Դա HTTP մեթոդ է.
  • payload SHA-256- ը, որը պահանջվում է սեղմել սեղմվող պահանջի մարմնի, սեղմվում է hex. POST և PATCHՏեսանյութը, որը դուք ուղարկել եք, պետք է լինել բայթը բայթը, որը դուք hashed.
  • created_at Դա պետք է լինի 60 րոպեից server- ի ժամացույցի ընթացքում:
  • Ամեն գործը աշխատում է մեկ անգամ, a GET Արդյոք, ինչպիսիք են, թե ինչպիսիք են, թե ինչպիսիք են, թե ինչպիսիք են, թե ինչպիսիք են, թե ինչպիսիք են, թե ինչպիսիք են, թե ինչպիսիք են: nonce Տեղադրեք անմիջական արժեքը, այնպես որ երկու պահանջները, որոնք նշված են մի քանի շաբաթվա ընթացքում, դեռ տարբեր են:
  • Մեկը կարող է ստանալ ավելի քան 64 kB, եւ մեկը պետք է ստանալ 64 kB Content-Type: application/json.

Պահպանված գործառույթը վերադարձվում է 401 missing_nostr_auth; մեկը, որը սխալ ձեւավորվում է, սխալ նշված է, շատ ծախսված է, կամ տարբեր URL-ի, մեթոդի կամ մարմնի համար: invalid_nostr_authՀիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդվածը nostr_auth_replayedԱրդյոք, ինչպիսիք են IPv6 հասցենը, այն կարող է սխալվել 30 անգամ մեկ րոպե (IPv6 հասցենը հաշվի է իր ամբողջ /64): 429 Մինչեւ Retry-After.

Տեղադրիչները կարող են հեռացնել այս կետը միայն Nymbot- ի սեփական կայքերից (https://nymbot.ai, https://nymchat.app Արդյոք, մի էջ ցանկացած այլ կայքում չի ստանում CORS տպագրեր, այնպես որ չի կարող կարդալ այն, ինչ նրանք վերցնում են: Scripts and native apps, which send no OriginՆրանք չգիտվում են.

Ձեր սխալը

Նկարագրելու համար պետք է ձեր նամակային սխալը (The secret key of your nym) nsec), որը վերահսկում է ամեն ինչ: ձեր բաղադրիչը, ձեր պատմությունը եւ ձեր բաղադրիչը: Միայն տեղադրեք այն մի սերտիֆիկի վրա մեքենայի վրա, որը դուք հավատում եք, կարդալ այն միջավայրից, այլեւ գրել այն ֆայլում, եւ ընտրեք ծրագիրը, երբ դուք կարող եք:

Այս օգուտները կառուցում են սեղմիչը: Այս էջում անցյալ օրինակները օգտագործում են նրանց: Նրանք կարդում են սեղմիչը hex- ում NOSTR_SECRET_HEX• CURL- ը օգտագործում է Կանայք Command-line գործիք, որը օգտագործում է nsec կամ hex սեղմիչ, եւ sha256sum macOS համար, shasum -a 256).

cURL

nostr_auth() {
  method="$1"; url="$2"; body="$3"
  nonce=$(openssl rand -hex 16)
  if [ -n "$body" ]; then
    hash=$(printf '%s' "$body" | sha256sum | cut -d' ' -f1)
    event=$(nak event --sec "$NOSTR_SECRET_HEX" -k 27235 -t "u=$url" -t "method=$method" -t "nonce=$nonce" -t "payload=$hash")
  else
    event=$(nak event --sec "$NOSTR_SECRET_HEX" -k 27235 -t "u=$url" -t "method=$method" -t "nonce=$nonce")
  fi
  printf 'Nostr %s' "$(printf '%s' "$event" | base64 | tr -d '\n')"
}

Python

# pip install coincurve requests
import base64, hashlib, json, os, time
from coincurve import PrivateKey, PublicKeyXOnly

SECRET = bytes.fromhex(os.environ["NOSTR_SECRET_HEX"])

def nostr_auth(method, url, body=b""):
    pubkey = PublicKeyXOnly.from_secret(SECRET).format().hex()
    tags = [["u", url], ["method", method], ["nonce", os.urandom(16).hex()]]
    if body:
        tags.append(["payload", hashlib.sha256(body).hexdigest()])
    created_at = int(time.time())
    serialized = json.dumps([0, pubkey, created_at, 27235, tags, ""], separators=(",", ":"), ensure_ascii=False)
    event_id = hashlib.sha256(serialized.encode()).digest()
    event = {
        "id": event_id.hex(),
        "pubkey": pubkey,
        "created_at": created_at,
        "kind": 27235,
        "tags": tags,
        "content": "",
        "sig": PrivateKey(SECRET).sign_schnorr(event_id).hex(),
    }
    return "Nostr " + base64.b64encode(json.dumps(event).encode()).decode()

JavaScript

// npm install nostr-tools
import { createHash, randomBytes } from "node:crypto";
import { finalizeEvent } from "nostr-tools/pure";

const secret = Buffer.from(process.env.NOSTR_SECRET_HEX, "hex");

export function nostrAuth(method, url, body = "") {
  const tags = [["u", url], ["method", method], ["nonce", randomBytes(16).toString("hex")]];
  if (body) tags.push(["payload", createHash("sha256").update(body).digest("hex")]);
  const event = finalizeEvent(
    { kind: 27235, created_at: Math.floor(Date.now() / 1000), tags, content: "" },
    secret,
  );
  return "Nostr " + Buffer.from(JSON.stringify(event)).toString("base64");
}

Տեղադրման համեմատություն

Որն է app- ի 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());

Հեղինակային սխալներ

Արդյոք, այն ամենը, ինչ պետք է պետք է լինի, պետք է կանգնեն: Նկարագրված պահանջըԱմեն սեղմը վերադարձվում է այս ձեւով, ժամանակների հետ 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 Հիմնական հարցը, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն:

Սպիտակներ

GET https://nymbot.ai/api/v1/keys - Նկարագրվել է

ՖիլմՔաղաքականԽնդրում ենքՆկարագրություն
include_revokedԲելլան (Query)ՈչԱրդյոք, դուք կարող եք վերցնել. Default false.

պատասխանը

{ "data": [ { "id": "4f0c9a1be27d3856", "name": "laptop scripts", "hint": "sk-nymbot-Qm7x…c2Lw", "...": "..." } ] }

cURL

URL=https://nymbot.ai/api/v1/keys
curl "$URL" -H "Authorization: $(nostr_auth GET "$URL")"

Python

import requests

url = "https://nymbot.ai/api/v1/keys"
for key in requests.get(url, headers={"Authorization": nostr_auth("GET", url)}).json()["data"]:
    print(key["id"], key["name"], key["period_used_sats"], key["limit_sats"])

JavaScript

const url = "https://nymbot.ai/api/v1/keys";
const { data } = await (await fetch(url, { headers: { "Authorization": nostrAuth("GET", url) } })).json();
for (const key of data) console.log(key.id, key.name, key.period_used_sats, key.limit_sats);

Կարդալ մի կոճակը

POST https://nymbot.ai/api/v1/keys Արդյոք, վերադառնալ 201.

ՖիլմՔաղաքականԽնդրում ենքՆկարագրություն
nameStringի մասինԱյո՛1 մինչեւ 40 բաղադրիչներ, որոնք տարբեր են ձեր այլ աշխատակից սեղմիչների հետ (լուծում է բաղադրիչը):
limit_satsԱնգլերենՈչԱրդյոք, այն, ինչ դուք կարող եք ստանալ, պետք է տեւել այն, ինչ դուք պետք է ստանալ: 1.
reset_periodStringի մասինՈչdaily, weekly կամ monthlyՆրանք պետք է limit_satsԱրդյոք, դուք կարող եք ստանալ մի կոճակը, որը երբեք չի վերադառնալ.
expire_atString կամ integerՈչԵրբ սեղմիչը չի աշխատում: ISO 8601 անգամ, կամ milliseconds 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); cap, որը ոչ մի ամբողջ գծի ոչ ավելի քան 1; վերահսկողության ժամանակը առանց 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);

Հիմնական հոդված՝ One 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 Սեղմվում է մի սեղմիչ: ոչ մի կոճակը, ոչ մի վերահսկողություն, ոչ մի կոճակը: Փոխելու վերահսկողության ժամանակը սկսում է նոր սեղմիչը 0- ից: Մի վերահսկողված սեղմիչը չի կարող փոխել (400 key_revoked) վերադառնալ {"data": {…}} Արդյոք նորարարված սխալը.

cURL

URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
BODY='{"limit_sats":50000,"expire_at":null}'
curl -X PATCH "$URL" \
  -H "Authorization: $(nostr_auth PATCH "$URL" "$BODY")" \
  -H "Content-Type: application/json" \
  -d "$BODY"

Python

import json
import requests

url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
body = json.dumps({"limit_sats": 50000, "expire_at": None}).encode()
res = requests.patch(
    url,
    data=body,
    headers={"Authorization": nostr_auth("PATCH", url, body), "Content-Type": "application/json"},
)
print(res.json()["data"])

JavaScript

const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
const body = JSON.stringify({ limit_sats: 50000, expire_at: null });
const res = await fetch(url, {
  method: "PATCH",
  headers: { "Authorization": nostrAuth("PATCH", url, body), "Content-Type": "application/json" },
  body,
});
console.log((await res.json()).data);

Պահպանեք մի կոճակը

DELETE https://nymbot.ai/api/v1/keys/{id} - Նկարագրվել է

Արդյոք, այնքան լավ է, որ սեղմվում է սեղմում revoked_at Տեղադրված է եւ կարող է տեսնել include_revoked=trueՄիայն նորագույն 50 վերահսկված սեղմիչները պահպանվում են, ամենահասը սեղմվում են, երբ այլ սեղմիչը վերահսկվում է:

պատասխանը

{ "data": { "id": "4f0c9a1be27d3856", "revoked": true } }

cURL

URL=https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856
curl -X DELETE "$URL" -H "Authorization: $(nostr_auth DELETE "$URL")"

Python

import requests

url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856"
print(requests.delete(url, headers={"Authorization": nostr_auth("DELETE", url)}).json())

JavaScript

const url = "https://nymbot.ai/api/v1/keys/4f0c9a1be27d3856";
const res = await fetch(url, { method: "DELETE", headers: { "Authorization": nostrAuth("DELETE", url) } });
console.log(await res.json());

NWC Auto-Top-Up Վիքիպահեստում

Nostr Wallet Connect- ի հետ միացեք Lightning- ը եւ Nymbot- ը ինքնաթիռ է, երբ API-ի ծախսերը ցածր են: Այս app- ի API-ի թերթը նույն կարգավորումները ունի: Սա այն վերջնական վայրերը են, որոնք ներսում են այն: Նրանք բոլորը պահանջում են Նկարագրված պահանջը.

Ինչպե՞ս աշխատում է: Երբ API- ի պահանջը բեռնում է ձեր ընտրած վկայականը, եթե այդ վկայականը կգնում է ձեր գծի տակ, Nymbot- ը ստեղծում է հաշիվը ձեր top-up գումարի համար, ցանկանում է ձեր վկայականը վճարել այն, եւ ավելացնում է արժեքը: Այն բեռնում է ամեն 5 րոպե մեկ անգամ յուրաքանչյուր նմ եւ վկայականի համար, այնպես որ պահանջների բեռնելը չի կարող տեւել վկայականը: Ապրանքի մեջ վճարումը չի բեռնել այն: Վերջին top-up- ի ժամանակը եւ չափը, եւ վերջին սխալը, տեղադրված են: Եթե վճարումը անցել է սխալից հետո, ստուգեք իր վկայականը Top-up բաղադրիչը Դա հավելված է.

Երբ դուք կապնեք մի փաթեթը

Nymbot պահում է այն սպտված եւ միայն օգտագործում է այն, որպեսզի վճարել իր սեփական top-up հաշիվներ, բայց ստեղծել մի կապ միայն այս համար, հետ ծախսերի բովանդակությունը ձեր տոմսում, այնպես որ ամենը, որը երբեք կարող է վճարել է մի շարք ընտրել ձեզ. տոմսը պետք է աջակցել pay_invoice.

Միացեք մի փաթեթը

POST https://nymbot.ai/api/v1/nwc-auto-topup/connect - Նկարագրվել է

ՖիլմՔաղաքականԽնդրում ենքՆկարագրություն
nwc_urlStringի մասինԱյո՛The connection string, որը սկսվում է nostr+walletconnect://Nymbot-ը ցանկանում է փաթեթավորել get_info Հիմն է, որ այն պահվում է, եւ սեղմվում է սեղմվում:
threshold_satsԱնգլերենԱյո՛Բարձրացրեք, երբ բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային բջջային
topup_satsԱնգլերենԱյո՛Ինչքան պետք է ավելացնել ամեն անգամ: 1000 մինչեւ 1,000,000 sats.
tierStringի մասինՈչpro (Տեսանյութ՝ The Default) 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());

Խնդրում ենք վճարել, առանց սխալը

Հիմնական արժեքը կարող է վճարվել մեկ անգամ Lightning- ի ընթացքում, առանց սեղան, առանց հաշիվը եւ առանց բաղադրիչը: POST /images/generations, POST /images/edits, POST /videos, POST /audio/speech, POST /audio/transcriptions, POST /audio/translations և POST /embeddingsChats, Responses and Messages- ը միշտ պետք է տեքստ, որը տեքստը տեքստ է տեքստում, ինչպես սովորաբար տեքստ է տեքստը տեքստի մեջ: Payment Flow- ը սկսվում է միայն այն ժամանակ, երբ տեքստը չի տեքստում:

Nymbot-ը խոսում է երկու տարբերակների միասին գաղտնիքից, մի միասին: Lightning Labs- ի Գլխավոր402 (Անհարկե, որ իր գեղեցիկ անունը, LSAT) եւ IETF նախագծի Վճարման HTTP authentication համակարգը lightning Method եւ charge Տեղադրեք այն, ինչ ձեր հաճախորդը հասկանում է.

Հեռնել ձեր սեփական սերվեր

Պահպանեք ոչ մի կլորը միայն այն ժամանակ, երբ API_L402_SECRET 32 բուդեր, ինչպիսիք են hex (64 բուդեր) կամ base64 (44) openssl rand -hex 32Արդյոք, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն. API_L402_SECRET_PREVIOUS Մեկ օրվա ընթացքում: հավելվածները, կայքի URL-ները եւ սխալները, որոնք կատարվում են այն տակ, աշխատում են մինչեւ նրանք անցնում են:

Արդյունքը

Խնդրում ենք ուղարկել պահանջը ոչ Authorization Եթե սեղմվում է, ոչինչ չի աշխատում, եւ դուք ստանում եք 402 Payment Required Գիտակով, որ ճշգրիտ է, թե ինչ է պահանջում արժեքը: նույն գինը, որը կախված է մի խոշորը, փոխվել է 10 Sats է ստանդարտ արժեքը կամ 100 Sats է Pro արժեքը եւ կախված է ամբողջ Sats (կամ 1 Sats, եւ ոչ ավելի քան 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 Արդյոք, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես էլ, այնպես/images/edits, /audio/transcriptions, /audio/translationsHTTP գրասենյակների ամենը ընտրում է նոր գծի ամեն անգամ, երբ նրանք սեղմում են ձեւը, այնպես որ սեղմեք այն մեկ անգամ եւ ուղարկեք այդ գծերը երկու անգամ:

Մարդիկ կարող են պահանջել 30 խնդիրներ մեկ րոպեում (IPv6 հասցեը հաշվի է իր ամբողջ /64): Մարդիկ, որոնց հասցեն չգիտվում է, կախված են ավելի հզոր 10-ին րոպեում, եւ Nymbot- ի խնդիրների ամբողջական կախված է բոլոր հասցեններում: Մարդիկ, որոնք կախված են, երբ ստացվում է հարցը (բնայած այն, որ JSON- ը չգիտվում է) չգիտվում են այն մասին: 429 Մինչեւ Retry-AfterԲարձրացվել է, թե ինչ է անում, թե ինչ է անում, թե ինչ է անում, թե ինչ է անում, թե ինչ է անում, թե ինչ է անում, թե ինչ է անում: Content-Type Ոչ application/json (Տեսանյութ multipart/form-data Բարձրացվել է (լուսանկարներ) 415 Նա երբեք չի ստանում հաշիվը.

Ապրիշները գնում են տոմսերի արժեքը, որոնք օգտագործվում են ինտերնետում, 1.5-րդ ժամանակով, քանի որ ճշգրիտ քանակը գիտելի է միայն հետո: Դուք վճարում եք ճշգրիտ օգտագործված տոմսերի համար, եւ վճարման անսահմանափակ մասը վերադարձվում է որպես Տեղադրեք Token.

Վճարման ուղարկելը

Պահպանեք հաշիվը ցանկացած Lightning տոմսով: Տոմսը ձեզ է տալիս preimage, 64 hex characters. Այնուհետեւ ուղարկեք նույն հարցը մեկի հետ:

ԾրագրերՀիմնական
Գլխավոր402Authorization: L402 <macaroon>:<preimage> (LSAT Նրանք նաեւ աշխատում են)
ՎճարմանAuthorization: Payment <base64url JSON>Որտեղ է JSON-ը {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}}

Պահպանված պահանջը պատասխանում է նույնպես, ինչպես այն, որը կատարվում է սեղմի հետ: nymbot Object- ը չի ունենում Balance fields: {"payment": "l402", "tier": "pro", "paid_sats": 237, "charged_sats": 237}, եւ ոչ մի X-Nymbot-Balance-Sats Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված՝ Հիմնական հոդված Payment-Receipt Գլխավոր (base64url JSON with the challenge id) reference, status և timestampՊահպանված պահանջները ոչ մի nimm- ի հետ չեն բաղադրվում, այնպես որ նրանք չգիտեն հարցերի պատմության մեջ:

ՏեսակներԵրբ
402 payment_already_usedԱմեն վճարը վճարում է մեկ պահանջի համար: Դա մի նոր փորձ է այս պահանջի համար, այնպես որ հաճախորդը, ով սխալում է իր վերջին հավելվածությունը (հարկե lnget Արդյոք, պարզապես վերադառնալ է.
402 payment_mismatchԱրդյոք, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, Content-Type Արդյոք, դուք կարող եք վճարել ավելի քիչ, քան այս պահանջը այժմ ծախսում է: Այս պահանջի համար նոր փորձ է: Եթե վճարը շատ փոքր էր, այն, ինչ դուք վճարել եք, վերցնում է, քանի որ Տեղադրեք Token (refund_token և refund_sats Արդյոք սենյակում)
402 payment_expiredԱվելի քան 15 րոպե անցել է մրցանակից հետո. Նոր մրցանակ կստանա այն հետ: Եթե նախընտրական տեսակը ցույց է տալիս, որ դուք վճարել եք, այն, ինչ դուք վճարել եք, վերադարձվում է Տեղադրեք Token (refund_token և refund_sats Հիմնական հոդվածը (տեսանյութ) Հիմնական հոդվածը (տեսանյութ) Հիմնական հոդվածը (տեսանյութ) Հիմնական հոդվածը
401 invalid_preimageՀիմնական նկարը չի hash է վճարման փոխանակման փոխանակման. վճարումը չի օգտագործվել.
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_exceededԱվելի քան 30 հավելվածները կամ սեղմները, որոնք չգիտեն ստուգել, տվել են այս հասցենից մեկ րոպեում, կամ մեկ վերադառնալը տոմսը ուղարկվել է ավելի քան 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 Պահպանեք Payment Challenge- ը իրենց հետ: Տեսեք նրանց Endpoint- ում եւ թողեք նրանց վճարել:

Վիդեո

Վճարվել է POST /videos պատասխաններ 202 Հիմնական հոդվածը, ինչպիսիք են a plus a status_url: GET Արդյոք, թե ինչ է անում այն, թե ինչ է անում այն, թե ինչ է անում այն, թե ինչ է անում այն, թե ինչ է անում այն, թե ինչ է անում այն, թե ինչ է անում այն, թե ինչ է անում այն, թե ինչ է անում այն, թե ինչ է անում այն.

{
  "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..."
  }
}

Տեղադրեք The refund_token Արդյոք, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն, թե ինչ է այն:GET /api/v1/l402/refunds պատասխաններ "status": "pending"); եթե render-ը չգիտվում է, վճարը կտա այն վրա: Status URL-ը ցույց է տալիս, որ refund_sats Պահպանված աշխատանքը, բայց երբեք token- ը, այնպես որ տեղադրման URL-ը չպետք է զանգահարել վերադառնալը: Պահպանելով token- ը նաեւ լուծում է սեղմված աշխատանքը, որը ոչ ոք չի հարցնում:

Տեղադրություն

Եթե վճարված պահանջը սխալ է, եւ մատակարարը բեռնում է Nymbot-ը փորձի համար, վճարը պահպանվում է եւ սխալը ասում է, որ դա է: 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 Object- ը բեռնում է վերադառնալը տոմսը սխալածի համար: A transcription whose length could not be read up front is priced for as long as the file could be (never more than 30 minutes), and the difference to the real length comes back as a վերադառնալը տոմս: Եթե այն հասկանում է, որ ավելի երկար է 30 րոպե, այն կխտվում է 413 Արդյոք, այն ամենը, ինչ պետք է ստանալ, պետք է վերադառնալ այն, ինչ պետք է վերադառնալ, եւ բոլորը պետք է վերադառնալ.

Ապրիշային տոմսը 256-bit- ի անմիջական կոդը է: Nymbot-ը մատակարարում է միայն իր hash-ը, եւ 30 օրվա ընթացքում կախված է: Այն մատակարարում է SAT-ը եւ դուք կարող եք:

  • Վճարեք այն հետ. Հեռնել Authorization: Bearer REFUND-… Արդյոք, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն, ինչպիսիք են այն (refund_token_sats Արդյոք nymbot Արդյոք, մի տոմս արժեքը ավելի փոքր է, քան պահանջի պատասխանները: 402 refund_insufficientԱրդյոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք, ոչ ոք:
  • Տեսեք այն GET /api/v1/l402/refunds Հիմնական հոդված՝ The same header returns {"sats": 237, "status": "open", "expires_at": "..."}.
  • Մեկ token- ը կարող է օգտագործվել մինչեւ 60 անգամ րոպեում:
  • Տեղադրեք այն մի նամակով. Տեղադրեք այն Կարդալ մի գիրք Nymbot app- ում, կամ Call POST /api/v1/l402/refunds/redeem A-ի հետ Նկարագրված պահանջը և {"refund_token": "REFUND-...", "balance": "standard"} (Տեսանյութ "pro"Արդյոք, բոլոր արժեքները գնում են սխալին (10 sats յուրաքանչյուրը ստանդարտ է, 100 է Pro); արժեքները, որոնք չեն ստեղծել ամբողջ արժեքը գնում է token- ում 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 } }