Rekọja si akoonu
Ti o ba tẹsiwaju ni Nymbot

Ipilẹ imo onibara

Oṣuwọn, Top-ups ati Key

Ṣayẹwo ohun ti o ni, ṣayẹwo lori Lightning, ṣayẹwo laifọwọyi lati rẹ owo, wo owo fun kọọkan ibeere, ati isakoso awọn key lati koodu.

Ṣayẹwo awọn iṣakoso

Bi awọn iṣeduro rẹ, ati bi o ti o ni owo ti iṣeduro ti a ti lo.

GET https://nymbot.ai/api/v1/credits/balance — O nilo a API key. POST ṣiṣẹ, fun awọn onibara ti o tẹsiwaju.

balance ni awọn mejeeji iṣakoso ni dollars ni ojoojumọ Bitcoin owo, fun awọn ọja ti o ba fẹ a nikan nọmba (null awọn owo ko le wa ni ko le ṣẹlẹ). Awọn oṣuwọn jẹ ni iye ati iye, eyiti o jẹ bi awọn iye ti wa ni o wa ni o wa. key Ti o ba tẹsiwaju awọn aṣayan ti o ba tẹsiwaju awọn aṣayan ti o ba tẹsiwaju awọn aṣayan ti o tẹsiwaju.

àwárí

{
  "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"
  }
}
olubasọrọakojọ
401Ọrọìwòye jẹ ko tọ, ko mọ, ti wa ni ifọwọkan tabi ti wa ni ipamọ.

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

Iṣakoso iṣowo

Ṣugbọn ti o le ṣẹda, ati awọn agbegbe. Lightning jẹ ọna nikan.

GET https://nymbot.ai/api/v1/topup/payment-methods Nibẹ ni ko si awọn key nilo.

A top-up ni 10 to 1,000,000 sats; a Pro top-up ni lati ra ọkan ninu ọkan Pro iroyin, ki o si bẹrẹ ni 100 sats. bulk_bonus Ti o ba tẹsiwaju awọn gbigbe owo lori awọn top-ups ti o tobi, gẹgẹ bi ninu awọn app: 10%, 15% tabi 20% siwaju sii lori awọn top-ups ti o tobi lati 500, 1,000 tabi 5,000 sats, ati lori awọn top-ups Pro lati 5,000, 10,000 tabi 50,000 sats.

àwárí

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

Ti o ba tẹsiwaju lori Lightning

Ṣe a Lightning iroyin eyi ti o fi iroyin si awọn nym ti awọn key ni. Pay o lati eyikeyi Lightning wallet, ki o si Ṣayẹwo Ti o ba tẹsiwaju gbigbe gbigbe.

POST https://nymbot.ai/api/v1/topup/create/btc-lightning — O nilo a API key.

Orilẹ-edeÀwọn ẹkaWọleỌrọìwòye
amountnọmbaBẹẹniỌpọlọpọ, ni currencyỌpọlọpọ awọn nọmba fun sats.
currencyọrọìwòyemiiranSATS Ti o ba tẹsiwaju, USD Wọn BTCDollars ti wa ni yipada ni ojoojumọ Bitcoin price.
tierọrọìwòyemiiranpro (Ti o ba tẹsiwaju) tabi standard: ni iye owo ti o ba wa.

A iṣakojọpọ Standard jẹ 10 sats ati a Pro iṣakojọpọ 100 sats, plus eyikeyi bulk ajeseku; credits Ti o ba tẹsiwaju pe o yoo fi yi iroyin.

àwárí

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "payment_request": "lnbc100u1p5...",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": "2026-09-30T09:27:00Z",
  "status": "pending"
}
olubasọrọakojọ
400Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii (unsupported_method), a ti ko mọ owo (unsupported_currencyTi o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.amount_too_small), diẹ sii ju 1 000 000 sats (amount_too_largeTi o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.amount_out_of_range).
429Ti o ba tẹsiwaju sii ju 60 iroyin fun yi nym, tabi 120 lati yi adirẹsi, ni wakati kan (rate_limit_exceededmiiran Retry-After).
502Ti o ba tẹsiwaju lilọ kiri aaye (invoice_unavailablemiiran 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);

Ṣayẹwo awọn top-up

Ṣayẹwo ti o ba ti o ti wa ni owo ati, lẹhin ti o ni, fi awọn iroyin. Ṣayẹwo ni ohun ti o gbọdọ o, ki lẹhin ti o ti wa ni owo, ṣayẹwo nigba ti awọn iroyin creditedṢayẹwo siwaju sii lẹhin ti o jẹ ailewu: awọn gbigba gbigba kan, bi daradara ti o ba fẹ.

GET https://nymbot.ai/api/v1/topup/status/{invoice_id} — o nilo a key lati awọn nym ti ṣe awọn iroyin.

status O si pending (Tẹlẹ ko ṣayẹwo ṣee ṣe), paid (Tọkasi, ṣugbọn ko ṣugbọn ko siwaju sii; tẹsiwaju siwaju sii), credited (Ninu awọn aṣa rẹ) tabi expired Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.

àwárí

{
  "invoice_id": "b7d41e0c95a2f38e6c1d0e9a4b7f2c61d3e8a05f9b2c4d7e1a6f3b8c0d5e2a9f4",
  "status": "credited",
  "amount_sats": 10000,
  "credits": 115,
  "tier": "pro",
  "expires_at": null,
  "balance_credits": 523.33,
  "balance_sats": 52333
}
olubasọrọakojọ
400Awọn id ko jẹ id 64-ọkan lati awọn gbigbọn.
404Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.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);

Tẹle akọkọ

Ọkan akọkọ fun ibeere: ohun ti o jẹ, eyikeyi awoṣe, ọpọlọpọ awọn tokens ati eyikeyi iye o wa. Ko si ifọwọsi tabi awọn ifọwọsi ti wa ni a ṣe, ki o si ko ba wa ni ifọwọsi. Awọn akọkọ ti wa ni a ṣe fun 90 ọjọ, titun ni akọkọ. A key ti o ti ni ifọwọsi kan ti o ti wa ni ṣiṣe.

GET https://nymbot.ai/api/v1/queries/history — o nilo a API key, eyi ti o ri awọn ibeere rẹ, tabi a Ọrọìwòye Ti o ba tẹsiwaju lati rẹ nym, eyi ti o ri gbogbo awọn key.

Orilẹ-edeÀwọn ẹkaWọleỌrọìwòye
pageawọn ọja (query)miiranDefault 1, ni o pọju 1,000; aaye ti o tobi jẹ 400 invalid_value.
page_countawọn ọja (query)miiranRọba fun iwe. Default 20, ni o pọju 100.
start_date
end_date
ỌrọigbaniwọlemiiranISO 8601 awọn ọjọ tabi akoko.
modelỌrọigbaniwọlemiiranO jẹ nikan awoṣe yii.
typeỌrọigbaniwọlemiiranchat, responses, messages, image, video, speech, transcription Wọn embedding.
all_keysawọn ọja (Query)miiranNipa awọn key: true Ṣatunkọ awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara. Default false.
key_idỌrọigbaniwọlemiiranNi ibamu pẹlu ifiranṣẹ, tabi pẹlu all_keys=true: nikan yii key.

àwárí

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

Awọn ifiranṣẹ akọsilẹ

Ṣiṣe, yipada ati yipada awọn key, awọn iroyin iroyin ati awọn awotẹlẹ top-ups ko gba a API key. Nwọn gba a ifihan lati rẹ nym, ki o si a ti fi sori ẹrọ key le tẹsiwaju to rẹ cap ṣugbọn ko le ṣiṣe kan siwaju sii key tabi mu rẹ cap.

Awọn app ṣe eyi fun o: gbogbo ninu rẹ ọrọìwòye Ọrọìwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòwòw

Awọn iwe-aṣẹ jẹ iṣowo Nostr ti iru 27235 (NIP-98), ti a fi sori ẹrọ nipasẹ base64 ninu awọn iwe-aṣẹ Authorization Header pẹlu awọn ọrọ Nostr Ti o tẹsiwaju:

akojọ

{
  "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 ti wa ni kikun URL ti awọn ifiranṣẹ, ifiranṣẹ string pẹlu, nikan bi ti a fi sori ẹrọ.
  • method O jẹ ọna HTTP.
  • payload ni SHA-256 ti awọn ohun elo iṣoro, ni hex. O ti wa ni gbọdọ lori POST ati PATCHTi o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.
  • created_at o yẹ ki o wa ni laarin 60 iṣẹju ti awọn onibara akoko.
  • Gbogbo awọn iṣẹ ṣiṣẹ ọsẹ kan, a GET ni, ki a ko le ṣeto titun titun. Tẹ titun titun fun kọọkan ibeere. Fi a nonce awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara.
  • Awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara Content-Type: application/json.

Ọrọigbaniwọle Aṣa 401 missing_nostr_auth; ọkan ti o ti wa ni iyanu, ti o ti wa ni iyanu, ti o wa ni iyanu, tabi fun orisirisi URL, ọna tabi iru awọn iroyin invalid_nostr_authTi o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa. nostr_auth_replayed. A API key ti a fi sori ẹrọ si awọn ipo wọnyi ti wa ni fi sori ẹrọ. Iṣakoso ti wa ni tẹle ṣaaju ki o to awọn ibi ti wa ni kọ, ati kọọkan adirẹsi le fi sori ẹrọ 30 igba fun iṣẹju (a IPv6 adirẹsi tẹsiwaju bi awọn oniwe-ọna /64); lẹhin ti o gba 429 akojọ Retry-After.

Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa (https://nymbot.ai, https://nymchat.app Aaye lori eyikeyi aaye miiran yoo ko gba awọn titẹri CORS lẹhin, ki o si ko le ṣayẹwo ohun ti o gba. Scripts ati awọn apps native, eyi ti yoo ko fi OriginTi o ba tẹsiwaju.

Ọrọìwòye

Ti o ba tẹsiwaju ti o ba wa ni nym's secret key (ti o nsec), eyi ti iṣakoso gbogbo nkan: awọn ẹya ara rẹ, awọn akọkọ rẹ ati awọn iṣakoso rẹ. O kan fi o ninu a script lori ẹrọ ti o gbọdọ, ṣayẹwo o lati awọn agbegbe ki o si fi o si fi o si awọn faili, ati ki o tẹsiwaju awọn app nigbati o le.

Awọn olumulo wọnyi ṣeto awọn titẹ. Awọn igbeyewo lẹhin lori iwe yi lo wọn. Awọn olumulo wọnyi ṣeto awọn titun titẹ ni hex lati NOSTR_SECRET_HEX; awọn cURL ọkan nlo awọn akojọ awọn ọna asopọ, eyi ti o ni nsec tabi hex key, ati sha256sum Nipa awọn 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");
}

Iṣakoso Account

Ohun ti awọn app API sheet fihan ni oke: rẹ Public key, mejeeji owo, ọpọlọpọ awọn key ti wa ni ifọwọkan (ni ko ti wa ni ifọwọkan tabi ti o ti wa ni ifọwọkan), ati awọn Oṣuwọn Top-Up awọn iroyin, tabi null Ti o ba tẹsiwaju pe server ko pese wọn.

GET https://nymbot.ai/api/v1/account O nilo a Ọrọìwòye.

àwárí

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

Iṣakoso awọn Key

Ti o ba tẹsiwaju awọn ipo ibi ti awọn app. Gbogbo wọn nilo a ỌrọìwòyeGbogbo awọn key ti wa ni ifowosowopo ni yi fọọmu, pẹlu awọn akoko ni ISO 8601 ati awọn iye ni sats:

awọn ọja

{
  "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 Ti o ba tẹsiwaju lati mọ a kẹta ṣugbọn ko lo o. Awọn kẹta yii ti wa ni gba nikan, nigba ti o ba ti wa ni ṣe.

Ẹrọ Key

GET https://nymbot.ai/api/v1/keys O ṣeun.

Orilẹ-edeÀwọn ẹkaWọleỌrọìwòye
include_revokedawọn ọja (Query)miiranṢatunkọ awọn ẹya ara ẹrọ. Default false.

àwárí

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

Ṣiṣe awọn key

POST https://nymbot.ai/api/v1/keys Ti o ba tẹsiwaju 201.

Orilẹ-edeÀwọn ẹkaWọleỌrọìwòye
nameọrọìwòyeBẹẹni1 to 40 awọn ẹya ara, o yatọ si awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara (awọn iṣoro).
limit_satsOṣuwọnmiiranTi o ba tẹsiwaju awọn iṣeduro ti o ba tẹsiwaju, o ba tẹsiwaju awọn iṣeduro ti o ba tẹsiwaju awọn iṣeduro.
reset_periodọrọìwòyemiirandaily, weekly Wọn monthlyawọn ibeere limit_satsTi o ba tẹsiwaju fun a cap ti ko ba fi sori ẹrọ.
expire_atỌrọigbaniwọle or integermiiranTi o ba ṣiṣẹ: ISO 8601 akoko, tabi milliseconds niwon 1970.

Ọrọìwòye (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"
  }
}
olubasọrọakojọ
400Ọrọigbaniwọle ti o ba tẹsiwaju lati ṣayẹwo (duplicate_name); a cap ti ko jẹ nọmba eniyan ti o kere ju 1; a reset akoko laisi a cap; a gbigbe ni akọkọ; a agbegbe ti ko mọ (unknown_parameter); tabi 25 awọn ẹya ara ẹya ara (too_many_keys).
429Ti o ba tẹsiwaju sii ju 60 awọn aṣayan ti a ṣe nipasẹ yi nym, tabi 120 lati yi adirẹsi, ni wakati kan (rate_limit_exceededmiiran 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);

Ṣayẹwo kan key

GET https://nymbot.ai/api/v1/keys/{id} O ṣeun.

awọn iroyin {"data": {…}} awọn ẹya ara ẹrọ, tabi 404 key_not_found Ti o ba ti ko si wa ni 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);

Ṣayẹwo awọn key

PATCH https://nymbot.ai/api/v1/keys/{id} O ṣeun.

Ṣiṣe eyikeyi name, limit_sats, reset_period ati expire_atNi ibamu pẹlu awọn ẹya ara ẹrọ bi o ṣe awọn key. null Ti o ba tẹsiwaju pe o ba tẹsiwaju pe o ba tẹsiwaju pe o ba tẹsiwaju pe o tẹsiwaju pe o tẹsiwaju pe o tẹsiwaju pe o tẹsiwaju pe o tẹsiwaju (400 key_revokedaṣiṣe {"data": {…}} Ṣatunkọ si awọn Key Object.

cURL

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

Python

import json
import requests

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

JavaScript

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

Ṣayẹwo awọn key

DELETE https://nymbot.ai/api/v1/keys/{id} O ṣeun.

Ṣatunkọ awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara revoked_at Ṣatunkọ, ati ki o le ri pẹlu include_revoked=trueTi o ba wa ni 50 awọn titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun titun tit

àwárí

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

Awọn ọja NWC Auto-top-up

Ṣayẹwo a Lightning wallet pẹlu Nostr Wallet Connect ati Nymbot lọ si iṣeduro nikan nigba ti API iṣeduro ṣiṣe o ni kekere. Awọn apẹẹrẹ API ti awọn app ni o ni awọn iṣeduro kanna; awọn wọnyi ni awọn iṣeduro lẹhin o. Gbogbo wọn nilo Ọrọìwòye.

Bi o ṣiṣẹ: lẹhin ti a API ibeere ti wa ni gbọdọ si iye owo ti o fẹ lati wo, ti o ba ti iye owo ni isalẹ awọn iye owo rẹ, Nymbot ṣe iroyin fun iye owo rẹ, gbọdọ awọn owo rẹ lati fi o, ati fi awọn iroyin. O gbọdọ si ọpọlọpọ ọkan ninu 5 iṣẹju fun kọọkan nym ati iye owo, ki a gbọdọ awọn ibeere ko le fi oju awọn owo. Iye ni awọn apps ko ṣẹda o. Awọn akoko ati iwọn ti awọn ti akọkọ owo, ati awọn ti akọkọ iṣoro, wa ni ninu awọn ipo; ti o ba gbọdọ lọ si lẹhin iṣoro, tẹsiwaju iro Iwọn Top-Up O gbọdọ.

Ṣaaju ki o to pin a wallet

A ifowosowopo ifowosowopo le kọọkan ti o ni lati wo rẹ wallet lati fi owo. Nymbot iṣakoso o ni aifọwọyi ati nikan nlo o lati fi owo rẹ top-up ifowosowopo, ṣugbọn ṣe a ifowosowopo nikan fun yi, pẹlu a owo owo ni rẹ wallet, ki o si julọ ti o le ṣee ṣe owo jẹ nọmba ti o tọju. pay_invoice.

Ṣiṣakoso awọn wallet

POST https://nymbot.ai/api/v1/nwc-auto-topup/connect O ṣeun.

Orilẹ-edeÀwọn ẹkaWọleỌrọìwòye
nwc_urlọrọìwòyeBẹẹniawọn ọna asopọ, bẹrẹ nostr+walletconnect://Nymbot fẹ awọn wallet fun get_info Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.
threshold_satsOṣuwọnBẹẹniTi o ba tẹsiwaju ki o ba ti o ba tẹsiwaju owo ti o ba tẹsiwaju owo ti o ba tẹsiwaju owo ti o ba tẹsiwaju 1000.
topup_satsOṣuwọnBẹẹniTi o ba tẹsiwaju ni owo kan. 1,000 to 1,000,000 sats.
tierọrọìwòyemiiranpro (Ti o ba tẹsiwaju) tabi standard: awọn iṣakoso lati wa ni ati top up.

àwárí

{
  "data": {
    "connected": true,
    "threshold_sats": 5000,
    "topup_sats": 20000,
    "tier": "pro",
    "last_topup_at": null,
    "last_topup_sats": null,
    "last_error": null
  }
}
olubasọrọakojọ
400Ti o ba tẹsiwaju lilọ kiri (invalid_nwc_url); owo owo ko ni atilẹyin nipa relay rẹ (nwc_unreachable) tabi rejected awọn iṣakoso (nwc_rejected); awọn ibaraẹnisọrọ ko le ṣayẹwo owo (nwc_missing_permission); tabi owo diẹ sii ju awọn agbegbe.
501Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa. (nwc_unavailableNi ibamu si awọn miiran meji ipo.

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

Ṣayẹwo awọn Settings

GET https://nymbot.ai/api/v1/nwc-auto-topup O ṣeun.

Gba awọn ẹya ara ẹya ara ẹya ara ẹya, pẹlu connected: false Awọn agbegbe miiran null Ti o ba tẹsiwaju pe ko si wiwọle. Awọn wiwọle ti o ba wa ni ko si wiwọle.

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

Iṣakoso

DELETE https://nymbot.ai/api/v1/nwc-auto-topup/connection O ṣeun.

Ṣayẹwo awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹ

àwárí

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

Owo fun awọn ibeere laisi awọn key

The fixed-price endpoints le wa ni owo fun ọkan ibeere ni akoko nipa Lightning, pẹlu ko si key, ko si iroyin ati ko si owo: POST /images/generations, POST /images/edits, POST /videos, POST /audio/speech, POST /audio/transcriptions, POST /audio/translations ati POST /embeddingsChat, Awọn ifiranṣẹ, ati Awọn ifiranṣẹ ni gbogbo nilo a kẹkẹ. A ifiranṣẹ ti o ni a kẹkẹ ti wa ni gbọdọ si awọn owo bi o ti wa ni iṣowo; awọn owo akọkọ nikan bẹrẹ nigba ti ko ba wa awọn kẹkẹ.

Nymbot fọwọsi meji ti awọn idena kanna, lati ọkan backend: Lightning Labs ' awọn ọja 402 (Tẹsiwaju lilọ kiri aaye ayelujara yii) LSAT) ati awọn IETF oniru àwárí HTTP authentication eto pẹlu awọn lightning Ọna ati charge Ti o ba tẹsiwaju ti o ba tẹsiwaju.

Ṣiṣeto rẹ Server

Ṣayẹwo laisi awọn key jẹ nikan ni akọkọ nigba ti API_L402_SECRET o ni o kere 32 awọn byte ti o wa, gẹgẹbi hex (64 awọn ẹya ara) tabi base64 (44). openssl rand -hex 32Ọpọlọpọ awọn ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara ẹya ara API_L402_SECRET_PREVIOUS fun ọjọ kan: awọn iroyin, awọn URL iroyin ati awọn iṣoro ti a ṣe nipa o tun ṣiṣẹ nigba ti wọn ti wa ni ipamọ.

Ọrọìwòye

Ṣayẹwo awọn ibeere pẹlu No Authorization ojuami. Ti o ba wa ni gidi, ko siwaju, ati awọn ti o gba 402 Payment Required pẹlu ifowosowopo fun nikan ohun ti awọn ibeere owo: owo kanna a key yoo pese, ti a ṣe ni 10 sats a iye owo tabi 100 sats a Pro iye owo ati ki o gbigbe si kanna sat (ni o kere 1 sat, ati awọn o kere 0.05 iye owo kekere). WWW-Authenticate Ọrọigbaniwọle fun awọn wọnyi:

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

owo owo request awọn parameter ni base64url JSON: {"amount":"237","currency":"sat","methodDetails":{"invoice":"lnbc...","network":"mainnet","paymentHash":"..."}}.

Ọrọigbaniwọle ni ibamu si awọn endpoint, si awọn Content-Type (ti awọn media ati, fun awọn multipart, awọn oniwe-ọna) ati si awọn SHA-256 ti awọn ẹya ara ti o ti fi sori ẹrọ, ati awọn ti o wa ni 15 iṣẹju. Lẹhin ti o gba, fi awọn Ọrọìwòye Ọrọìwòye: The same Content-Type Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa./images/edits, /audio/transcriptions, /audio/translationsỌpọlọpọ awọn HTTP libraries gba a titun titun titun ni gbogbo igba ti won koodu a fọọmu, ki o si koodu o kan akọkọ ati fi awọn baiti wọnyi meji.

Gbogbo adirẹsi le fẹ lati 30 iṣoro fun iṣẹju kan (a IPv6 adirẹsi ni oye bi awọn oniwe-ọna /64). Iṣoro ti awọn adirẹsi ti o ko ba wa ni mọ ni o wa kan diẹ ẹ sii 10 fun iṣẹju, ati nibẹ ni o wa kan iyipada lori awọn iṣoro Nymbot awọn iṣoro lori gbogbo awọn adirẹsi; a gbiyanju ti a ti fi sẹyin ṣaaju ki o to a iṣoro (fun apẹẹrẹ pẹlu kan ti o ko wa ni JSON ti wa ni o wa). 429 akojọ Retry-AfterṢatunkọ awọn iṣeduro ti o ba ni ko ni aifọwọyi tabi iroyin ti o tun tẹsiwaju si atilẹyin 120 ti awọn iroyin ti ko ni aifọwọyi fun iṣẹju fun iroyin. A iroyin ti wa ni tẹsiwaju ṣaaju ki o to awọn iroyin ti o wa ni aifọwọyi, ati awọn iroyin ti o ti wa ni Content-Type Wọn ni application/json (Awọn multipart/form-data Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa. 415 Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.

Embeddings ti wa ni owo nipasẹ a iye ti awọn tokens ni awọn input, pẹlu a 1.5× marun, bi awọn ti o ti wa ni mọ nikan lẹhin. O ba ti wa ni owo fun awọn tokens ti o ti ṣee lo, ati awọn ti o ti wa ni ko lo ti awọn owo ti wa ni a Tẹle tẹlifoonu.

Ṣayẹwo awọn owo

Ṣayẹwo awọn ifowosowopo pẹlu eyikeyi Lightning wallet. Awọn ifowosowopo nfun awọn preimage, 64 hex characters. Lẹhinna fi ọrọ kanna pẹlu ọkan ninu awọn wọnyi:

awọn etoOṣuwọn
awọn ọja 402Authorization: L402 <macaroon>:<preimage> (LSAT O si ṣiṣẹ)
àwáríAuthorization: Payment <base64url JSON>Ti o ba wa ni JSON {"challenge": {every parameter of the challenge, as sent}, "payload": {"preimage": "<hex>"}}

A gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ gbọdọ nymbot Obirin ko ni awọn agbegbe: {"payment": "l402", "tier": "pro", "paid_sats": 237, "charged_sats": 237}O si nibẹ ni X-Nymbot-Balance-Sats aṣeyọri. Aṣeyọri ti o ṣe pẹlu aṣeyọri eto tun gba a Payment-Receipt akojọ (base64url JSON pẹlu id aṣayan, awọn owo hash bi reference, status ati timestamp). Awọn ibeere owo ko ti wa ni ifojusi si eyikeyi nym, nitorina wọn ko ṣii ni akọsilẹ awọn ibeere.

olubasọrọakojọ
402 payment_already_usedGbogbo iyipada owo fun ọkan ifiranṣẹ. Awọn ifiranṣẹ jẹ ifiranṣẹ titun fun ifiranṣẹ yii, nitorina awọn onibara ti o ti fi awọn ifiranṣẹ ti o ti tẹsiwaju (ni bi lnget Ti o ba tẹsiwaju tẹsiwaju tẹsiwaju.
402 payment_mismatchTi o ba tẹsiwaju lilọ kiri aaye ayelujara yii, Content-Type Orilẹ-ede, tabi o fẹ diẹ ẹ sii ju ibeere yii bayi owo. A titun iṣoro fun ibeere yii wa pẹlu o; ti o ba ti awọn owo ti o ti wa ni kekere, eyi ti o ti fi fun wa lọ bi a Tẹle tẹlifoonu (refund_token ati refund_sats O si ninu ara rẹ).
402 payment_expiredỌpọlọpọ awọn iṣẹju ti o wa ni diẹ sii ju 15 iṣẹju niwon awọn iṣoro. Ọpọlọpọ awọn iṣoro ti o ba wa pẹlu o. Ti o ba ti o ba fihan awọn iroyin ti o ti wa ni owo, eyi ti o ti wa ni owo ti o ba wa ni owo. Tẹle tẹlifoonu (refund_token ati refund_sats Ati awọn ti o ba tẹsiwaju; awọn ti o ba tẹsiwaju; awọn ti o ba tẹsiwaju.
401 invalid_preimageAwọn preimage ko hash si awọn owo owo hash. Awọn owo ko ti wa ni lilo.
401 invalid_payment_credentialAwọn iroyin ti wa ni iṣeduro, ti a ti mu lẹhin ti Nymbot ṣe o, tabi awọn orukọ ti o ṣe ni owo ti Nymbot ko ṣe iṣeduro fun. A macaroon pẹlu a iṣeduro Nymbot ko mọ, tabi pẹlu awọn iṣeduro ti o wa ni iṣeduro, ti wa ni fẹ.
429 rate_limit_exceededDiẹ ẹ sii ju 30 awọn ẹya ara ẹrọ tabi awọn ẹya ara ẹrọ ti o ti ko ṣe atilẹyin lati yi adirẹsi ni iṣẹju kan, tabi ọkan gbigbe tita ti a fi sori ẹrọ diẹ sii ju 60 igba fun iṣẹju kan. 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"));

Awọn onibara ti iṣeto ni mppx pẹlu a Lightning ọna lati ṣakoso awọn Payment challenge wọn; tẹ wọn si awọn ipo ibi ati ki o fi wọn owo.

awọn fidio

owo owo POST /videos àwárí 202 bi a kẹkẹkẹtẹ, plus a status_url: GET Ti o ba ti ko ni eyikeyi kọọkan lati tẹsiwaju iṣẹ. O ti wa ni tẹsiwaju ati ṣiṣẹ fun 24 wakati, nigba ti o ba wa iṣẹ.

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

Ṣayẹwo awọn refund_token Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.GET /api/v1/l402/refunds àwárí "status": "pending"); ṣugbọn ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba ti o ba refund_sats fun iṣẹ ti o ṣe atilẹyin, ṣugbọn ko si awọn token, ki o si ṣayẹwo awọn URL ti iṣowo ko ṣayẹwo awọn atilẹyin.

Oṣuwọn

Ti o ba wa ni aṣeyọri gbigbe ati awọn provider gbigbe Nymbot fun awọn igbeyewo, owo ti wa ni ti wa ni ti wa ni aṣeyọri ati awọn igbeyewo wí pé, pẹlu charged_sats, gẹgẹ bi fun a kẹkẹsẹ ifiranṣẹ. Ti o ba ti o ba ti wa ni ko ni gbọdọ, awọn iṣoro Tẹle tẹlifoonu Ti o ba tẹsiwaju owo ti o ṣe:

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

Awọn ẹya-ara ti a ti wa ni ko lo wa ni ọna kanna: ti o ba fẹ lati gba meji awọn fọto ati ọkan ti a ti fi sori ẹrọ, awọn ifiranṣẹ ti nymbot awọn ohun elo nlo a tẹtẹ tẹtẹ fun awọn ti o fẹ; a tẹtẹtẹ ti o ko le ṣee le ṣee le ṣee ṣe akọkọ ti o wa ni akoko kan ju awọn faili le wa ni (ni ko siwaju sii ju 30 iṣẹju), ati awọn iyipada si awọn ti o ti wa ni o wa ti wa ni tẹtẹ tẹtẹ tẹtẹ bi a tẹtẹtẹ tẹtẹtẹ; ti o ba fẹ lati wa siwaju sii ju 30 iṣẹju, o ti wa ni tẹtẹ pẹlu 413 Ti o ba tẹsiwaju si awọn aṣayan ti o ba tẹsiwaju si awọn aṣayan ti o ba tẹsiwaju si awọn aṣayan ti o tẹsiwaju.

A tẹsiwaju tẹsiwaju jẹ koodu iyanu 256-bit. Nymbot tẹsiwaju nikan awọn hash rẹ, ati awọn ti o ti wa ni ipamọ lẹhin 30 ọjọ. O ni o ni a sat iye, ati awọn ti o le:

  • Ṣayẹwo pẹlu o. Ṣayẹwo Authorization: Bearer REFUND-… Ti o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o ba tẹsiwaju lilọ kiri aaye ayelujara yii, o n gba awọn eto cookies wa.refund_token_sats Ninu awọn nymbot Obirin). A token ni o wa diẹ ẹ sii ju awọn ibeere yan 402 refund_insufficientAṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣiṣi.
  • Ṣayẹwo o. GET /api/v1/l402/refunds Ni ibamu pẹlu awọn header yii {"sats": 237, "status": "open", "expires_at": "..."}.
  • Ọkan token le ṣee lo to 60 igba fun iṣẹju.
  • Ṣayẹwo o si awọn nym. Ṣayẹwo o si Ṣayẹwo awọn ajeseku ni app Nymbot, tabi fi POST /api/v1/l402/refunds/redeem Nipa a Ọrọìwòye ati {"refund_token": "REFUND-...", "balance": "standard"} (Awọn "pro"Gbogbo awọn iroyin lọ si awọn iṣura (10 iroyin kọọkan lori iṣura, 100 lori Pro); iroyin ti ko ṣe a gbogbo iroyin gbọdọ lori awọn token fun API ibeere.

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"

àwárí

{ "data": { "credited": 23, "tier": "standard", "balance_credits": 123, "remaining_sats": 7 } }