Saltar al contingut
Torna cap a Nymbot

Base de coneixement Desenvolupadors

Panoràmica de foc

Els models, generadors i balanços que utilitzeu a l'aplicació, a partir del vostre propi codi. L'API parla dels formats OpenAI i Anthropic, de manera que la majoria d'eines i SDK funcionen canviant una URL de base i una clau.

Què és el foc

Una API HTTP nymbot.ai que respon a les mateixes sol·licituds que un client OpenAI o Anthropic ja envia.

Estan pagats per les mateixes dues Equilibris No hi ha subscripció ni quota gratuïta a l'API: cada sol·licitud es paga amb els crèdits que has comprat.

El que l'API no fa és afegir res del propi Nymbot. Els vostres missatges van al model quan els heu enviat: cap consell del sistema de Nymbot, cap memòria, cap data o suggeriments d'idioma.

URL de base

utilitzarURL de base
OpenAI SDKs i eines compatibles amb OpenAIhttps://nymbot.ai/api/v1
Els SDK antropològics i El codi de Claudehttps://nymbot.ai/api (El SDK afegeix /v1/messages El mateix)

Tots els punts finals viuen sota /api/v1/Un camí desconegut torna 404 i un camí conegut anomenat amb el mètode equivocat torna 405Ambdós són JSON.

L'API respon a les sol·licituds d'origen creu de qualsevol lloc, de manera que una pàgina del navegador la pot trucar. Tot el que enviïs a un navegador pot ser llegit per qui l'obri, però, així que només ho facis amb una clau que tingui una petita CapEls punts finals signats amb el teu nim (claus, resum del compte, NWC auto-top-up i reemborsament de reemborsament) són l'excepció: en un navegador només responen als llocs propis de Nymbot. Sol·licitud de signatura de compte.

Enviar cada cos JSON amb Content-Type: application/jsonQualsevol altre tipus és rebutjat 415, per tant, una simple forma HTML o una text/plain una petició d'un altre lloc no pot arribar a l'API. amb cURL, passi -H "Content-Type: application/json" Juntament amb -d.

Claus de foc

Les claus es fan a l'app. obert El foc a la barra lateral de l'aplicació web, o al menú d'Android i iOS, i Creació de clauDonar-li un nom i, si ho desitja, un cap i una data d'expiració.

La clau es mostra una vegada.Copiu-la en algun lloc segur abans de tancar el full: Nymbot només en conserva una empremta, de manera que no us la pot mostrar de nou.Una clau perduda no es pot recuperar; revoca-la i fes-ne una altra.

La clau sembla sk-nymbot- A continuació hi ha 43 lletres, dígits, puntuacions i subtítols. L'aplicació enumera cada clau pel seu nom i una petita pista com ara: sk-nymbot-Qm7x…c2Lw.

  • Una clau pertany al teu nim. Es gasta el seu saldo, i només el seu nim pot fer, canviar o revocar.Qualsevol que tingui la clau pot gastar amb ell, així que tractar-lo com una contrasenya.
  • Els caps estan a punt. Una clau pot tenir un límit de despesa, i el límit es pot resetar cada dia, cada setmana (dilluns) o cada mes (el primer), a les 00:00 UTC. Compta ambdós saldos, un crèdit estàndard com a 10 sats i un crèdit Pro com a 100, de manera que significa el mateix sigui quin sigui el saldo que gasta una sol·licitud. Abans d'executar una sol·licitud, el màxim que podria costar (arrodonit fins a crèdits sencers) s'estableix contra el que queda del límit. 403 key_limit_reached, fins i tot si la resposta hagués entrat sota el cap; l'error diu quant queda i quan es restableix el cap. max_tokens Una sol·licitud es carrega el que realment costa i que compta contra el cap, de manera que si el proveïdor informa més tokens del que es van posar de banda, l'última sol·licitud que s'ajusta pot prendre la clau una mica més enllà del seu cap; el següent és rebutjat.
  • Una capsa gastada només atura la despesa. Una clau al seu cap encara pot comprovar el saldo, llegir el seu historial, llistar models, comptar tokens, pujar i comprovar un vídeo que ja hagi començat.
  • Expirar és opcional. Després de la data que heu establert, la clau deixa de funcionar.
  • La revocació és immediata i definitiva. Una clau revocada fracassa en la seva següent sol·licitud. Es manté en la llista, marcada revocada, de manera que el seu historial de despeses encara té sentit.
  • Podeu tenir fins a 25 claus actives, cadascuna amb el seu propi nom.

El mateix full mostra la despesa de cada clau durant aquest període i, en total, quan es va utilitzar per última vegada, tant els saldos com les sol·licituds d'API recents. Gestió de claus.

Autenticació d'una sol·licitud

Envieu la clau en qualsevol d'aquests encapçalaments. Són equivalents, de manera que utilitzeu el que el vostre client enviï per defecte:

HeaderEnviat per
Authorization: Bearer sk-nymbot-…SDK d'OpenAI, la majoria d'eines, Claude Code amb ANTHROPIC_AUTH_TOKEN
x-api-key: sk-nymbot-…Els SDK antropològics
api-key: sk-nymbot-…Clients d'estil Azure

Retorns de claus desaparegudes, desconegudes, revocades o caducades 401Amb el codi missing_api_key, invalid_api_key, revoked_api_key o expired_api_keyListing models, models d'àudio i veus, i mètodes de pagament no necessita cap clau.

Imatges, vídeo, veu, transcripció i embeddings també es poden pagar per una sol·licitud a la vegada a través de Lightning sense cap clau en absolut: enviar la sol·licitud sense una i pagar la factura en el 402 Resposta: Veure Pagament a petició sense clau.

La gestió de claus, el resum del compte i els top-ups automàtics són l'excepció: prenen una signatura del seu nim en comptes d'una clau, de manera que una clau fuga no pot fer més claus. Sol·licitud de signatura de compte.

La seva primera petició

Poseu la clau en una variable d'entorn, i després pregunteu a un model alguna cosa. NYMBOT_API_KEY.

cURL

export NYMBOT_API_KEY="sk-nymbot-..."

curl https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nymbot/auto",
    "messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
  }'

Python

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://nymbot.ai/api/v1",
    api_key=os.environ["NYMBOT_API_KEY"],
)

reply = client.chat.completions.create(
    model="nymbot/auto",
    messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(reply.choices[0].message.content)

JavaScript

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://nymbot.ai/api/v1",
  apiKey: process.env.NYMBOT_API_KEY,
});

const reply = await client.chat.completions.create({
  model: "nymbot/auto",
  messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(reply.choices[0].message.content);

nymbot/auto és el propi enrutament de Nymbot, pagat des del saldo estàndard. anthropic/claude-sonnet-5, per utilitzar aquest model des de l'equilibri Pro. Llista de models Donar cada identitat.

Quin cost té una sol·licitud

L'API factura exactament com fa l'aplicació.

  • Quin equilibri nymbot/auto Gasta el estàndard balanç (10 sats un crèdit). Cada altre model de xat gasta el Pro El generador d'imatges estàndard i la veu estàndard gasten crèdits estàndard; cada altre generador gasta Pro. Els embeddings gasten crèdits estàndard. La transcripció gasta crèdits estàndard quan el saldo estàndard pot cobrir-lo, i crèdits Pro d'una altra manera. La llista de models diu quin saldo gasta cada model.
  • Quanta quantitat Una sol·licitud de xat es mesura en els tokens que el model realment llegeix i escriu, a les taxes publicades del proveïdor. Aquest preu té una tarifa de 5% afegida i després es multiplica per 1,5, de manera que pagueu 1.575 vegades el preu de la llista del proveïdor. Es converteix en tarifa al preu Bitcoin en viu i es cobra en milers d'un crèdit. Les imatges pro, el vídeo i la veu són preuats per generació, per segon o per caràcter, i la transcripció per segon d'àudio, amb la mateixa tarifa i marge. La imatge estàndard és un pla 5 crèdits estàndard i la veu estàndard un pla 3.
  • El mínim Cada sol·licitud mesurada que s'executa té un cost mínim de 0,05 crèdit: la meitat es va situar en el saldo estàndard, 5 es van situar en el Pro.
  • Segueix i després s’assenta. Abans d'executar una sol·licitud, el màxim que pugui costar es manté del seu saldo, en funció del que ha enviat i el màxim de tokens que pot escriure. El text fora de la norma ASCII es mesura a partir dels seus bytes UTF-8, i els dígits ASCII i la puntuació compten com un token cadascun, de manera que el text en qualsevol script, codi i números es mantenen completament. La possessió és en crèdits sencers, almenys un, de manera que qualsevol sol·licitud necessita almenys 10 parades gratuïtes en el saldo estàndard o 100 parades en Pro per començar. Només es carrega el cost real; la resta es lliura quan acaba. Una llarga sol·licitud manté la seva possessió mentre s'executa 402 insufficient_balance Si el cost real és més gran del que el saldo pot pagar, es pren tot el saldo, la resta es deu (owed_sats En la nymbot Objecte, i un saldo negatiu). El que es deu es paga primer dels següents crèdits que arriben a aquest saldo. Fins que es paga, no es pot gastar res en aquest saldo: no per l'API, respostes a l'aplicació, una transferència o un regal.
  • No hi ha prou crèdit. Si el saldo no pot cobrir la possessió, la sol·licitud es denega amb 402 L'error diu quin saldo és curt, quantes partides necessita la sol·licitud i quantes són gratuïtes. max_tokens Això vol dir un menor manteniment.
  • els fracassos. Una sol·licitud que fracassa no costa res, llevat que el proveïdor facturés per la feina que va fer abans d'haver fracassat, o una cerca web o la nymbot/auto El control de tasques ja s'havia executat; llavors això és el que pagues, almenys 0,05 crèdit. Un flux que retalleu es cobra pels tokens que informa el proveïdor: Nymbot continua llegint el flux del proveïdor fins a 25 segons després de deixar-lo per obtenir aquest recompte.
  • Cerca web costa $0.008 una cerca, convertida en sats, cada vegada que es va executar una cerca, ja sigui que el model respon o no. Les pàgines que llegeix també s'envien al model com a entrada, de manera que afegeixen els seus tokens.

Cada resposta diu el que costa. respostes JSON porten una nymbot Objecte amb el saldo del qual va ser pagat, la càrrega en crèdits i tarifes, i el que queda:

Objecte de cost

"nymbot": {
  "balance": "pro",
  "charged_credits": 0.162,
  "charged_sats": 16.2,
  "balance_credits": 412.425,
  "balance_sats": 41242.5
}

Les respostes pagades també porten aquests encapçalaments, que és on buscar el cost d'una resposta que no és JSON, com ara el discurs:

HeaderSignificat
X-Nymbot-Cost-SatsQuant costa aquesta sol·licitud, en sats.
X-Nymbot-Balance-SatsEl que queda en el saldo del qual s'ha pagat, en sats.
X-Request-IdUn identificador per a la sol·licitud, en cada resposta. Citar-lo si contacta amb el suport.

Les taxes per milió de tokens, ja incloent la tarifa i el marge, estan en la Llista de models en dòlars i en taxes, i en La llista de preusSi el preu de Bitcoin no es pot llegir, es retornaran les sol·licituds pagades 503 price_unavailable amb Retry-After: 60 En comptes d’endevinar

Errors

Cada error té la mateixa forma, una que els clients d'OpenAI ja entenen. code és un nom estable amb el qual es pot coincidir; message És per a la gent i pot canviar.

El cos equivocat

{
  "error": {
    "message": "This request needs up to 200 sats (2 credits) on your Pro balance, and 40 sats are free. Catalog models spend the Pro balance. Top up in the Nymbot app or with POST /api/v1/topup/create/btc-lightning.",
    "type": "insufficient_quota",
    "code": "insufficient_balance",
    "param": null,
    "balance": "pro",
    "required_sats": 200,
    "balance_sats": 40
  }
}
EstatutQuan
400 invalid_request_errorEl cos no és vàlid JSON (invalid_json), un camp requerit falta (missing_required_parameter), un valor és incorrecte, o la sol·licitud demana alguna cosa que el model o el punt final no faci, com ara eines en nymbot/auto (unsupported_tool). param Nom del camp. També upstream_rejected quan el prestador rebutgi la sol·licitud.
401 authentication_errorLa clau està desapareguda, desconeguda, revocada o caducada, o una sol·licitud signada és vàlida o reutilitzada.
402 insufficient_quotaEl saldo no pot cobrir la sol·licitud.Codi insufficient_balance, amb balance, required_sats i balance_sats.
403 permission_errorLa sol·licitud no coincideix amb el cap de la clau (key_limit_reached, amb limit_sats, used_sats i reset_at), o el compte pot no utilitzar el servei (account_denied).
404 not_found_errorUn camí desconegut (unknown_endpoint, un model que no existeix (model_not_found), o una clau desconeguda, factura o vídeo.
405El camí existeix, però no amb aquest mètode (method_not_allowed) El Allow Header enumera els mètodes que utilitza.
413El cos o el fitxer és massa gran (payload_too_large, file_too_large), o una gravació és massa llarga (audio_too_long) es Limitació.
415 invalid_request_errorEl cadàver no és enviat com application/json (o, per als terminis d’enllumenat, multipart/form-data): unsupported_media_type.
422Una veu i un llenguatge que no van junts en text i paraula (voice_language_mismatch, unsupported_language).
429 rate_limit_errorMoltes sol·licituds en aquesta clau, des d'aquesta adreça, o amb credencials que no es van verificar (rate_limit_exceeded) o el proveïdor és limitat a la taxa (upstream_rate_limitedEsperar els segons en Retry-After.
500 api_errorAlguna cosa va anar malament en el costat de Nymbot (internal_error).
502 api_errorEl proveïdor no va retornar cap resposta (upstream_error) o una factura de llamp no es podia fer (invoice_unavailable).
503 api_errorEl proveïdor està sobrecarregat (upstream_overloaded), el preu de Bitcoin no es pot llegir (price_unavailable), o una part del servei està baix (service_unavailable, media_hosting_unavailable). Retry-After Diu quan tornar a intentar-ho, on és conegut.

Dues excepcions:

  • /api/v1/messages respostes en el format d'error d'Anthropic, ja que això és el que analitzen els clients d'Anthropic: {"type": "error", "error": {"type": "authentication_error", "message": "…"}}El tipus segueix l'estat: invalid_request_error, authentication_error, billing_error (402), permission_error, not_found_error, request_too_large, rate_limit_error, api_error o overloaded_error (503).
  • Una sol·licitud de streaming que fracassa abans del seu primer byte rep un error JSON ordinari amb l'estat anterior, no un flux d'esdeveniments.

Els missatges d'error mai contenen detalls interns d'un altre servei. L'error propi d'un proveïdor es reordena abans que arribi a vostè.

Limitació

LimitacióEl valor
Sol·licituds per clauMés de 120 minuts, per sobre de tot. 429 amb Retry-After.
Sol·licituds sense clau120 per minut per adreça, per a les llistes de model, àudio i mètode de pagament, comprovacions de token de reemborsament i punts terminals pagats trucats sense clau o pagament. 429 amb Retry-After.
Autenticació fallida30 per minut per adreça per a claus, signatures, credencials de pagament i tokens de reemborsament que no verifica. 429 amb Retry-After Les credencials es comproven abans de llegir el cos.
Noves claus60 per hora i 120 per hora per adreça.
Top-up de les factures60 per hora i 120 per hora per adreça.
Connexions de cartera NWC10 a l'hora per nym i 30 a l'hora per adreça. El trasllat de cartera ha d'utilitzar wss:// En el port estàndard.
Reemborsament de tokens60 peticions per minut per token.
AdreçaUna adreça IPv6 es compta com el seu conjunt /64 en cada límit per adreça, i una adreça IPv4 mapped IPv6 com la seva adreça IPv4.
El cos de la sol·licitud JSON4 MB; 64 KB per a sol·licituds signades amb el seu nim.
El cos de la sol·licitud de múltiples parts (uploads)32 MB. Una imatge per editar pot ser de fins a 20 MB, un arxiu d'àudio de fins a 25 MB. En la majoria de 64 parts, cadascuna amb un màxim de 8 KB d'encapçalaments de parts, i un límit d'1 a 70 caràcters; en cas contrari 400 invalid_multipart.
Imatges en una sol·licitud de xatCada un de nosaltres és un https:// o http:// Enllaç a un host públic, o a data:image/… La URL.
Imatges per generació1 a 4 (n)
Producció de tokensCaptada al màxim del propi model. Un més gran max_tokens Es redueix a ella, no es nega.
Introducció al discurs800 caràcters per a la veu estàndard, 2.000 per a Aura 2.
Transcripció30 minuts d'àudio, 25 MB. Es nega una gravació més llarga amb 413 i no es carrega, fins i tot quan la seva longitud només es coneix una vegada que el Sospir ho ha escoltat.
Embeddings100 entrades per sol·licitud.
Vídeo de treballQueden aturats durant 24 hores després d'haver estat enviats; un rendiment s'abandona després d'una hora.
Volem històriaS’haurien d’esperar 90 dies.
Les claus actives per nymNomés es conserven les últimes 50 claus revocades.

Un enllaç a una imatge ha de apuntar a un amfitrió públic: una adreça en una xarxa privada o local, o en els llocs propis de Nymbot, es nega. El ritme del proveïdor que s'aplica a l'aplicació també s'aplica aquí, de manera que una explosió de sol·licituds a un proveïdor pot ser retardada en lloc de fracassar.

El que el foc pot veure

L'API no és privat en la forma en què són les aplicacions, i val la pena ser exactes sobre com.

  • No és end-to-end xifrat. En les aplicacions, un missatge és segellat en el seu dispositiu a les claus només Nymbot té i viatja com un Presentació WrapUna sol·licitud d'API és HTTPS ordinari: es xifra en el camí a Nymbot, i el servidor de Nymbot la llegeix en el clar per gestionar-la.
  • Les preguntes i les respostes no s'emmagatzemen. El que es conserva és la factura: per a cada sol·licitud el temps, model, tipus, comptes de token, cost, saldo, clau i si va tenir èxit, durant 90 dies, que és el que Història desitjada Un registre d'ús de la mateixa sol·licitud (temps, tipus, model, comptes de tokens, cost, durada i si va utilitzar la cerca web o va tenir èxit) també es conserva durant 90 dies, al costat de la pròpia de l'aplicació.
  • Tot el que es manté per a un ninot és petit i es mostra aquí. Claus de foc s'emmagatzemen com un hash, mai la clau, amb el seu nom, una petita pista, cap de despesa, període de restabliment, expiració i quan es van fer i l'última vegada que es van utilitzar; només es conserven les últimes 50 claus revocades. Top-up automàtic La connexió de cartera s'emmagatzema encriptada, amb el seu llindar, la quantitat i el resultat de l'últim top-up. Els llocs de treball de vídeo es mantenen durant 24 hores. Les sol·licituds pagades per trucada només deixen un hash de pagament de llamp per 7 dies i un token de reemborsament hash per 30 dies, lligat a cap nim. Les càrregues que un saldo no podia cobrir es mantenen com a degudes fins que un top-up les pagui.
  • Descarregar l’aplicació elimina. A Instal·lació Wipe revoca i esborra cada clau de l'API, i esborra l'historial de consultes, registres d'ús, connexió de cartera i tasques de vídeo.
  • El proveïdor del model veu la seva sol·licitudEls models de catàleg s'executen als seus creadors; les rutes estàndard i les incorporacions s'executen a Cloudflare.
  • Els mitjans generats són públics. Les imatges i els vídeos lliurats com a enllaços es carreguen als amfitrions de fitxers públics Blossom, on l'adreça d'un fitxer és el seu hash. Qualsevol persona amb l'enllaç pot obrir-lo, i Nymbot no pot tornar a descarregar-lo. b64_json i una imatge generada torna en la resposta i mai es carrega.
  • Així són les imatges que dóna a un generador. Una imatge que puguis pujar Edició, o enviar com a data: URL en un generador image_url, es carrega a un amfitrió públic Blossom primer perquè el generador pugui recollir-lo, i el mateix s'aplica a ell. https:// Les imatges en una sol·licitud de xat van al proveïdor del model, no a Blossom.
  • Una clau està lligada al teu nim. Tot el que una clau gasta ve del saldo del seu nim, de manera que l'ús de l'API no és AnònimSi voleu que l'ús de l'API es mantingui a part de la vostra nicotina diària, feu les claus d'una nicotina separada amb el seu propi equilibri.

Si necessiteu la protecció de les aplicacions, utilitzeu les aplicacions. L'API és per quan necessiteu els models en les vostres pròpies eines.

Tots els terminis

El punt finalQuè faAutònom
GET /api/v1/modelsLlista de modelsAmb els preusNingú
POST /api/v1/chat/completionsCompleta el chatclau
POST /api/v1/responsesReaccions a les flamesclau
POST /api/v1/messagesMissatges antropològicsclau
POST /api/v1/messages/count_tokensEstimació de tokens d'entradaclau
POST /api/v1/images/generationsGenerar imatgesclau o llamps
POST /api/v1/images/editsEdita una imatgeclau o llamps
POST /api/v1/videos, GET /api/v1/videos, GET /api/v1/videos/{id}Inici, llistes i comprovacions de vídeosLa clau, o llamps Començar una
POST /api/v1/audio/speechText del discursclau o llamps
GET /api/v1/audio/models, GET /api/v1/audio/voicesModels d'àudio i veusNingú
POST /api/v1/audio/transcriptions, POST /api/v1/audio/translationsDiscurs al text, i a l'anglèsclau o llamps
POST /api/v1/embeddingsEmbeddingsclau o llamps
GET /api/v1/credits/balance (o el POST)Ambdós equilibrisclau
GET /api/v1/topup/payment-methodsManeres de pagarNingú
POST /api/v1/topup/create/btc-lightningFacturació de llampsclau
GET /api/v1/topup/status/{invoice_id}Xecs i crèditsclau
GET /api/v1/queries/historyQuant costa cada peticióClau o NIM
GET /api/v1/accountResum de comptesnòmina
/api/v1/keysCrea, canvia i revoca clausnòmina
/api/v1/nwc-auto-topupTop-ups automàticsnòmina
GET /api/v1/l402/refunds, POST /api/v1/l402/refunds/redeemComprova o rescata un token de devolucióRefund token; nym a redeem

“Nym” significa una sol·licitud signada per la teva clau Nostr, descrita en Sol·licitud de signatura de comptePer a les eines que ja parlen aquests formats, vegeu Eines i SDK, i per a agents de codificació com Claude Code, Codex i Cline, vegeu Eines de codificació.