Ga naar de inhoud
Terug naar Nymbot

Kennisbank Ontwikkelaars

Vuur Overzicht

De modellen, generatoren en balans die u in de app gebruikt, zijn afkomstig van uw eigen code.De API spreekt de OpenAI- en Anthropic-formaten, dus de meeste tools en SDK's werken door een basis-URL en een sleutel te veranderen.

Wat is het vuur

Een HTTP API nymbot.ai dat dezelfde verzoeken beantwoordt die een OpenAI- of Anthropic-client al verzendt.

Het wordt betaald uit dezelfde twee balanceren Er is geen abonnement en geen gratis toelage op de API: elke aanvraag wordt betaald met credits die u hebt gekocht.

Wat de API niet doet, is iets toevoegen van Nymbot's eigen. Uw berichten gaan naar het model terwijl u ze hebt verzonden: geen Nymbot-systeemprompt, geen geheugen, geen datum of taal hints.

Basis URL's

GebruikGebaseerde URL
OpenAI SDK's en OpenAI-compatibele toolshttps://nymbot.ai/api/v1
Antropische SDK's en van Claude Codehttps://nymbot.ai/api (De SDK voegt toe /v1/messages van zichzelf)

Elk eindpunt leeft onder /api/v1/Een onbekend pad keert terug 404 en een bekend pad dat wordt genoemd met de verkeerde methode keert terug 405Zowel als JSON.

De API beantwoordt cross-origin verzoeken van elke site, zodat een browser-pagina het kan bellen. alles wat je verzendt naar een browser kan worden gelezen door iedereen die het opent, dus doe dat alleen met een sleutel die een kleine hoofdDe eindpunten die zijn ondertekend met uw nym (sleutels, de accountoverzichten, NWC auto-top-up en terugbetaling) zijn de uitzondering: in een browser beantwoorden ze alleen de eigen sites van Nymbot. Account aanvragen ondertekenen.

Stuur elke JSON-lichaam met Content-Type: application/jsonElk ander type wordt geweigerd met 415, dus een eenvoudige HTML-vorm of een text/plain verzoek van een andere site kan de API niet bereiken. -H "Content-Type: application/json" Samen met -d.

Vuur sleutels

De sleutels worden gemaakt in de app. Open Vuur in de zijbalk van de webapp, of in het menu op Android en iOS, en tik op Maak een sleutelGeef het een naam en, als u wilt, een cap en een vervaldatum.

Kopieer het op een veilige plaats voordat u het blad sluit: Nymbot bewaart er slechts een vingerafdruk van, zodat het het u niet meer kan laten zien.

Een sleutel lijkt sk-nymbot- gevolgd door 43 letters, cijfers, dashes en underscores.De app vermeldt elke sleutel met zijn naam en een korte hint zoals: sk-nymbot-Qm7x…c2Lw.

  • Een sleutel behoort tot je nym. Het besteedt je saldo, en alleen je nim kan het maken, wijzigen of intrekken.Wie de sleutel heeft, kan ermee besteden, dus behandel het als een wachtwoord.
  • Caps zijn in sats. Een sleutel kan een uitgavencap hebben, en de cap kan elke dag, elke week (maandag) of elke maand (de eerste) op 00:00 UTC opnieuw worden ingesteld. Het telt beide saldi, een standaardkrediet als 10 sats en een Pro-krediet als 100, dus het betekent hetzelfde ongeacht welk saldo een verzoek besteedt. Voordat een verzoek loopt, wordt het maximum dat het kan kosten (afgerond tot hele credits) ingesteld tegen wat overblijft van de cap. Als het niet past, wordt het verzoek afgewezen met 403 key_limit_reached, zelfs als het antwoord onder de cap zou zijn gekomen; de fout zegt hoeveel er over is en wanneer de cap wordt hersteld. max_tokens Een verzoek wordt gefactureerd wat het daadwerkelijk kost en dat telt tegen de cap, dus als de provider meer tokens rapporteert dan aan de zijkant werden gesteld, kan het laatste verzoek dat past de sleutel een beetje voorbij zijn cap nemen; de volgende wordt vervolgens geweigerd.
  • Een uitgegeven cap stopt alleen de uitgaven. Een sleutel bij zijn cap kan nog steeds het saldo controleren, de geschiedenis lezen, modellen vermelden, tokens tellen, top-up en een video checken die het al begon.
  • Expiry is optioneel. Na de datum die u instelt, stopt de sleutel met werken.
  • De herroeping is onmiddellijk en definitief. Een ingetrokken sleutel faalt zijn volgende verzoek. Het blijft in de lijst, gemarkeerd ingetrokken, zodat de geschiedenis van de uitgaven nog steeds zinvol is.
  • U kunt maximaal 25 actieve sleutels hebben, elk met zijn eigen naam.

Hetzelfde blad toont de uitgaven van elke sleutel in deze periode en in totaal, wanneer deze voor het laatst werd gebruikt, zowel uw saldi als uw recente API-verzoeken. Beheren van sleutels.

Authenticatie van een verzoek

Stuur de sleutel in een van deze kopjes. ze zijn gelijkwaardig, dus gebruik wat uw client standaard stuurt:

headerverzonden door
Authorization: Bearer sk-nymbot-…OpenAI SDK's, de meeste tools, Claude Code met ANTHROPIC_AUTH_TOKEN
x-api-key: sk-nymbot-…Antropische SDK's
api-key: sk-nymbot-…Azure-stijl klanten

Een ontbrekende, onbekende, ingetrokken of verlopen sleutel retourneren 401Met de code missing_api_key, invalid_api_key, revoked_api_key of expired_api_keyLijstmodellen, audiomodellen en stemmen, en betaalmethoden hebben geen sleutel nodig.

Foto's, video's, spraak, transcripties en embeddings kunnen ook worden betaald voor één verzoek tegelijk via Lightning zonder enige sleutel: stuur de verzoek zonder één en betaal de factuur in de 402 Antwoord: Zie Betalen op aanvraag zonder sleutel.

Sleutelbeheer, de accountverzameling en automatische top-ups zijn de uitzondering: ze nemen een handtekening van uw nym in plaats van een sleutel, dus een gelekte sleutel kan niet meer sleutels maken. Account aanvragen ondertekenen.

Uw eerste verzoek

Zet de sleutel in een omgevingsvariabele en vraag dan iets aan een model. 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 is de eigen routing van Nymbot, betaald uit de standaardbalans. anthropic/claude-sonnet-5, om dat model uit de Pro-balans te gebruiken. Lijst van modellen Geef elke ID.

Wat kost een verzoek

De API factureren precies zoals de app doet.

  • Wat een balans. nymbot/auto U besteedt de standaard balans (10 sats a credit). Elk ander chatmodel besteedt de voor De standaard beeldgenerator en de standaard stem spenderen standaard credits; elke andere generator spendeert Pro. Embeddings spenderen standaard credits. Transcription spendeert standaard credits wanneer de standaard balans het kan dekken, en Pro credits anders. De modellijst zegt welke balans elk model spendeert.
  • Hoeveel wel. Een chatverzoek wordt gemeten op de tokens die het model daadwerkelijk leest en schrijft, bij de gepubliceerde tarieven van de provider. Die prijs heeft een 5% vergoeding toegevoegd en wordt vervolgens vermenigvuldigd met 1,5, dus betaalt u 1.575 keer de lijstprijs van de provider. Het wordt omgezet in sats bij de live Bitcoin-prijs en in duizendste van een krediet in rekening gebracht. Pro foto's, video's en spraak worden geprijsd per generatie, per seconde of per teken, en transcriptie per seconde van audio, met dezelfde vergoeding en marge. Het standaardbeeld is een flat 5 standaard credits en de standaard stem een flat 3.
  • Het minimum . Elke gemeten verzoek dat loopt kost ten minste 0,05 krediet: een halve set op de standaardbalans, 5 sats op Pro.
  • Houd vast, dan settle. Voordat een verzoek wordt uitgevoerd, wordt het meeste dat het kan kosten gehouden uit uw saldo, op basis van wat u hebt verzonden en de meeste tokens die het kan schrijven. Tekst buiten de eenvoudige ASCII is afgestemd op zijn UTF-8 bytes, en ASCII-cijfers en punctuatie tellen als een token elk, dus de tekst in elk script, code en getallen worden volledig gehouden. De houding is in hele credits, ten minste één, dus elke aanvraag heeft ten minste 10 gratis sats op de standaardbalans of 100 sats op Pro nodig om te beginnen. Alleen de werkelijke kosten worden gefactureerd; de rest wordt vrijgegeven wanneer het eindigt. Een lange aanvraag houdt haar houding voor zolang het loopt; als de gehouden credits sowieso beschikbaar blijven, stopt een stroom met een 402 insufficient_balance Als de werkelijke kosten hoger zijn dan het saldo kan betalen, wordt het gehele saldo genomen, de rest is verschuldigd (owed_sats In de nymbot object, en een negatief saldo). Wat verschuldigd is, wordt eerst betaald uit de volgende credits die dat saldo bereiken. Totdat het wordt betaald, kan niets op dat saldo worden besteed: niet door de API, antwoorden in de app, een overdracht of een geschenk.
  • Niet genoeg krediet. Indien het saldo de houding niet kan dekken, wordt het verzoek afgewezen met 402 De fout zegt welke balans kort is, hoeveel sats de aanvraag nodig heeft en hoeveel zijn gratis. max_tokens Dat betekent een kleinere houding.
  • De mislukkingen. Een mislukte aanvraag kost niets, tenzij de provider heeft gefactureerd voor het werk dat het heeft gedaan voordat het mislukte, of een webzoekopdracht of de nymbot/auto Een stroom die je snijdt wordt in rekening gebracht voor de tokens die de provider rapporteert: Nymbot blijft de stroom van de provider tot 25 seconden lezen nadat je vertrekt om dat getal te krijgen.
  • Web zoeken kost $ 0,008 een zoekopdracht, omgezet in sats, elke keer dat een zoekopdracht werd uitgevoerd, of het model dan antwoordt of faalt.

Elke reactie zegt wat het kost. JSON-reacties dragen een nymbot object met het saldo waaruit het is betaald, de vergoeding in credits en sats, en wat er overblijft:

Het kostenobject

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

Betaalde antwoorden dragen ook deze kopjes, waar u kunt zoeken naar de kosten van een reactie die niet JSON is, zoals spraak:

headerBetekenis
X-Nymbot-Cost-SatsWat deze aanvraag kost, in sats.
X-Nymbot-Balance-SatsWat overblijft op het saldo waaruit het is betaald, in sats.
X-Request-IdEen id voor het verzoek, op elke reactie. Citeer het als u contact opneemt met ondersteuning.

De tarieven per miljoen tokens, al inclusief de vergoeding en marge, zijn in de Modellijst in dollars en sats, en op De prijslijstAls de Bitcoin-prijs niet kan worden gelezen, worden betaalde verzoeken teruggegeven 503 price_unavailable met Retry-After: 60 In plaats van te raden.

Fouten

Elke fout heeft dezelfde vorm, die OpenAI-clients al begrijpen. code is een stabiele naam die je kunt matchen; message Het is voor mensen en kan veranderen.

Fout lichaam

{
  "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
  }
}
StatusWanneer
400 invalid_request_errorHet lichaam is niet geldig JSON (invalid_json) een vereist veld ontbreekt (missing_required_parameter), een waarde is verkeerd, of de verzoek vraagt om iets dat het model of eindpunt niet doet, zoals tools op nymbot/auto (unsupported_tool). param De naam van het veld. ook upstream_rejected wanneer de leverancier het verzoek heeft afgewezen.
401 authentication_errorDe sleutel is ontbreken, onbekend, ingetrokken of verlopen, of een ondertekende aanvraag is ongeldig of hergebruikt.
402 insufficient_quotaHet saldo kan het verzoek niet dekken.Code insufficient_balance, met balance, required_sats En balance_sats.
403 permission_errorDe aanvraag past niet bij de cap van de sleutel (key_limit_reached, met limit_sats, used_sats En reset_at), of het account kan de service niet gebruiken (account_denied).
404 not_found_errorEen onbekende weg (unknown_endpoint, een model dat niet bestaat (model_not_foundeen onbekende sleutel, factuur of video.
405De weg bestaat, maar niet met die methode (method_not_allowed) van de Allow Header maakt een lijst van de methoden die hij gebruikt.
413Het lichaam of het bestand is te groot (payload_too_large, file_too_large) of een opname is te lang (audio_too_long) zie Limieten.
415 invalid_request_errorHet lichaam wordt niet als application/json (Of, voor de upload eindpunten, multipart/form-data): unsupported_media_type.
422Een stem en taal die niet samen gaan in tekst tot spraak (voice_language_mismatch, unsupported_language).
429 rate_limit_errorTe veel verzoeken op deze sleutel, van dit adres, of met credentials die niet kunnen worden geverifieerd (rate_limit_exceeded) of de leverancier is de tariefbeperking (upstream_rate_limitedWacht op de seconden in Retry-After.
500 api_errorEr is iets mis gegaan aan de kant van Nymbot (internal_error).
502 api_errorDe leverancier heeft geen antwoord gegeven (upstream_error) of een bliksemrekening kon niet worden gemaakt (invoice_unavailable).
503 api_errorDe leverancier is overbelast (upstream_overloaded), de prijs van Bitcoin kan niet worden gelezen (price_unavailable) of een deel van de dienst is afgenomen (service_unavailable, media_hosting_unavailable). Retry-After zegt wanneer opnieuw te proberen, waar het bekend is.

Twee uitzonderingen :

  • /api/v1/messages antwoorden in het foutformaat van Anthropic, want dat is wat Anthropic-clients analyseren: {"type": "error", "error": {"type": "authentication_error", "message": "…"}}Het type volgt de status: invalid_request_error, authentication_error, billing_error (402), permission_error, not_found_error, request_too_large, rate_limit_error, api_error of overloaded_error (503).
  • Een streamingverzoek dat faalt voordat zijn eerste byte een gewone JSON-fout krijgt met de bovenstaande status, niet een gebeurtenisstroom.

Foutberichten bevatten nooit interne details van een andere dienst.Een eigen fout van een provider wordt opnieuw geformuleerd voordat deze je bereikt.

Limieten

LimietWaarde
Verzoeken per sleutel120 per minuut. bovendien, 429 met Retry-After.
Verzoeken zonder sleutel120 per minuut per adres, voor het model, audio en betaalmethode lijsten, terugbetaling token cheques, en betaalde eindpunten bellen zonder een sleutel of betaling. 429 met Retry-After.
Mislukte authenticatie30 per minuut per adres voor sleutels, handtekeningen, betalingsbewijzen en restitutietoetsen die niet verificeren. 429 met Retry-After Credentials worden gecontroleerd voordat het lichaam wordt gelezen.
Nieuwe sleutels60 per uur per nym en 120 per uur per adres.
Top-up facturen60 per uur per nym en 120 per uur per adres.
NWC portemonnee verbindingen10 per uur per nym en 30 per uur per adres. wss:// Op de standaardpoort.
Token terugbetalen60 verzoeken per minuut per token.
adressenEen IPv6-adres telt als zijn /64 in elke adreslimiet, en een IPv4-gemarkeerd IPv6-adres als zijn IPv4-adres.
JSON verzoek lichaam4 MB; 64 KB voor verzoeken die zijn ondertekend met uw nym.
Multipart verzoek lichaam (uploads)32 MB. Een afbeelding om te bewerken kan maximaal 20 MB, een audiobestand maximaal 25 MB. Op maximaal 64 delen, elk met maximaal 8 KB onderdelenkoppen, en een limiet van 1 tot 70 tekens; anders 400 invalid_multipart.
Foto's in één chat verzoek20 Ieder is een https:// of http:// een link naar een publieke host, of een data:image/… De url.
Afbeeldingen per generatie aanvraag1 tot 4 (n)
Uitvoer tokensCapped op het eigen maximum van het model. een grotere max_tokens Daardoor wordt het verlaagd, niet afgewezen.
Toegang tot spraak800 tekens voor de standaard stem, 2000 voor Aura 2.
Transcriptie30 minuten audio, 25 MB. Een langere opname wordt geweigerd met 413 En niet geladen, zelfs als de lengte ervan alleen bekend is als de Whisper het hoort.
Embeddings100 inputs per aanvraag.
Video werkgelegenheidWacht 24 uur nadat ze zijn ingediend; een rendering wordt na een uur opgehouden.
Wilt geschiedenis90 dagen wachten.
Actieve sleutels per nymAlleen de nieuwste 50 ingetrokken sleutels worden bewaard.

Een link naar een afbeelding moet wijzen op een publieke host: een adres op een privé- of lokaal netwerk, of op de eigen sites van Nymbot, wordt geweigerd.

Wat het vuur kan zien

De API is niet privé in de manier waarop de apps zijn, en het is de moeite waard om precies te zijn over hoe.

  • Het is niet end-to-end versleuteld. In de apps wordt een bericht op uw apparaat afgesloten op sleutels die alleen Nymbot vasthoudt en reist als een Geschenk WrapEen API-verzoek is gewoon HTTPS: het wordt gecodeerd op weg naar Nymbot, en de server van Nymbot leest het in het helder om het te verwerken.
  • Prompten en antwoorden worden niet opgeslagen. Wat wordt bewaard is de factuur: voor elke aanvraag de tijd, model, soort, token telt, kosten, saldo, sleutel en of het geslaagd is, gedurende 90 dagen, dat is wat Wilt geschiedenis Een gebruikrecord van dezelfde aanvraag (tijd, soort, model, token tellen, kosten, duur en of het gebruikte webzoek of geslaagd) wordt ook bewaard voor 90 dagen, naast de app zelf.
  • Alles wat voor een nym wordt gehouden, is klein en hier vermeld. Vuur sleutels worden opgeslagen als een hash, nooit de sleutel, met hun naam, een korte hint, uitgavencap, resetperiode, vervaldatum en wanneer ze werden gemaakt en voor het laatst gebruikt; alleen de nieuwste 50 herroepte sleutels worden bewaard. Automatische top-up video-jobs worden bewaard voor 24 uur. verzoeken betaald per gesprek laat alleen een Lightning betaling hash voor 7 dagen en een hashed terugbetaling token voor 30 dagen, gekoppeld aan geen nym. kosten een saldo kon niet dekken worden gehouden als verschuldigd totdat een top-up betaalt ze.
  • Het verwijderen van de app verwijdert het. A apparaat wipe herroept en verwijdert elke API-sleutel en verwijdert de querygeschiedenis, gebruiksrecords, portemonneeverbindingen en video-jobs.
  • De provider van het model ziet uw verzoekCatalogusmodellen worden uitgevoerd bij hun makers; standaardroutes en embeddings worden uitgevoerd op Cloudflare.
  • De geproduceerde media zijn publiek. Afbeeldingen en video's die als links worden geleverd, worden geüpload naar openbare Blossom-bestandshosts, waar het adres van een bestand de hash is. Iedereen met de link kan het openen en Nymbot kan het niet opnieuw downloaden. b64_json En een gegenereerde afbeelding komt terug in de reactie en wordt nooit geüpload.
  • Zo zijn de foto's die je een generator geeft. Een foto die u uploadt naar Edit, of verzenden als a data: URL in een generator image_url, wordt eerst geüpload naar een publieke Blossom-host zodat de generator het kan ophalen, en hetzelfde geldt voor het. https:// Foto's in een chatverzoek gaan naar de provider van het model, niet naar Blossom.
  • Een sleutel is gekoppeld aan uw nym. Alles wat een sleutel uitgeeft, komt uit de balans van uw nim, dus het gebruik van API is niet AnoniemAls u wilt dat het gebruik van API's apart wordt gehouden van uw dagelijkse nym, maak dan de sleutels van een afzonderlijke nym met een eigen balans.

Als u de bescherming van de apps nodig hebt, gebruikt u de apps.De API is voor wanneer u de modellen in uw eigen tools nodig hebt.

Elk eindpunt

eindpuntWat het doetAuth
GET /api/v1/modelsLijst modellen, met prijzengeen
POST /api/v1/chat/completionsChat voltooiensleutel
POST /api/v1/responsesReacties op APIsleutel
POST /api/v1/messagesAntropische boodschappensleutel
POST /api/v1/messages/count_tokensSchatten van input tokenssleutel
POST /api/v1/images/generationsGenereren van beeldensleutel of De bliksem
POST /api/v1/images/editsEdit een afbeeldingsleutel of De bliksem
POST /api/v1/videos, GET /api/v1/videos, GET /api/v1/videos/{id}Start, lijst en controleer video'ssleutel of De bliksem Om te beginnen een
POST /api/v1/audio/speechTekst tot toespraaksleutel of De bliksem
GET /api/v1/audio/models, GET /api/v1/audio/voicesAudio modellen en stemmengeen
POST /api/v1/audio/transcriptions, POST /api/v1/audio/translationsSpreken naar tekst, en naar Engelssleutel of De bliksem
POST /api/v1/embeddingsEmbeddingssleutel of De bliksem
GET /api/v1/credits/balance (of POST)Beide balanssleutel
GET /api/v1/topup/payment-methodsManieren om te betalengeen
POST /api/v1/topup/create/btc-lightningEen bliksemrekeningsleutel
GET /api/v1/topup/status/{invoice_id}Checks en credits hetsleutel
GET /api/v1/queries/historyWat elke aanvraag kostKey of nym
GET /api/v1/accountAccount samenvattingNieuw
/api/v1/keysMaak, wijzigt en herroept sleutelsNieuw
/api/v1/nwc-auto-topupAutomatische top-upsNieuw
GET /api/v1/l402/refunds, POST /api/v1/l402/refunds/redeemChecks of redempts een terugbetaling tokenRefund token; nym om te redden

“Nym” betekent een verzoek ondertekend door uw Nostr-sleutel, beschreven in Account aanvragen ondertekenenVoor tools die deze formaten al spreken, zie Tools en SDK's, en voor coderingsagenten zoals Claude Code, Codex en Cline, zie Tools voor coderen.