Preskočite na sadržaj
Povratak na Nymbot

Baza znanja Razvijači

Chat, odgovori i poruke

Tri načina da se nešto zatraži od modela, u tri formata klijenti već govore, svi rade na istim modelima i obračunavaju na isti način.

Chat kompleti

OpenAI chat format, i onaj koji podržava gotovo svaki alat. Pošaljite razgovor do sada i dobijte sledeću poruku natrag.

POST https://nymbot.ai/api/v1/chat/completions Potreban vam je API ključ.

samo model i messages su potrebni. parametar uzorkovanja koji odabranog modela ne uzima pada bez greške, tako da jedno tijelo zahteva radi preko modela. supported_parametersOno što se odbija umjesto da se odbaci je nešto što model uopšte ne može učiniti: slike za model koji ne može vidjeti, alate za model koji ih ne može nazvati.

PoljeVrstePotrebnoOpis
modelStrukturaDanymbot/auto ili auto) za usmjeravanje Nymbota na standardnu ravnotežu, ili ID modela kataloga kao što je anthropic/claude-sonnet-5 na Pro ravnoteži. Kratka imena i nadimci aplikacije su takođe prihvaćeni. Može završiti u Dovoljno.
messagesArhivaDaRazgovori, uloge system, developer (tretiran kao sistem) user, assistant i toolSadržaj je niz ili lista text i image_url dijelovi; slike samo u korisničkim porukama. input_audio i dijelovi datoteke su odbijeni.
streamBošnjaciNePošaljite odgovor kao što je napisano.Vidi Streamiranje.
stream_optionsobjekataNe{"include_usage": true} dodaje konačni komad s brojevima žetona i troškovima.
max_tokens
max_completion_tokens
IntegracijaNeNajviše žetona za pisanje. Smanjeno na maksimum modela ako je viši. Takođe određuje koliko se drži iz vaše bilance, tako da manji broj treba manje kredita za početak.
temperature
top_p
BrojNeSampling kontrole : temperature od 0 do 2, top_p Od 0 do 1.
stopString ili arrayNeTekst koji završava odgovor: niz ili najviše 4 niza, od kojih svaki ima najviše 256 znakova. nymbot/auto.
seedIntegracijaNeZa ponavljanje uzorkovanja, gde ga model podržava.
presence_penalty
frequency_penalty
BrojNeKontrole ponavljanja, svaka od -2 do 2.
response_formatobjekataNe{"type": "json_object"} ili {"type": "json_schema", "json_schema": {…}}, gde model podržava. ne koristi nymbot/auto.
tools
tool_choice
parallel_tool_calls
array, string ili objekt, booleanNeFunkcija poziva. vidi alat za pozivanje• A web_search Oprema se pretvara u Web pretraživanjeNajviše 128 alata i 512 KB definicija, ugrađenih na najviše 64 nivoa dubine; više je 400.
reasoning_effort
reasoning
Struktura, objekatNe"minimal", "low", "medium" ili "high"ili {"effort": "high"}. "none" ili {"enabled": false} Uklonite ga.Vidi Razumevanje.
pluginsArhivaNe[{"id": "web", "max_results": 5}] uvek pretraži web prvo. Do 10 rezultata.
nIntegracijaNeSamo 1. sve ostalo se vraća 400.
logit_bias
user
metadata
String, String i objekatNePrihvatio i nije poslao. logit_bias karte na najviše 300 token ids za brojeve od -100 do 100; user Najviše 256 karaktera metadata sadrži najviše 16 vrednosti niza, ključeve do 64 karaktera i vrednosti do 512.

Odgovor je običan chat.completionUz troškove u usage.cost (u dolarima) i u nymbot objekta je model je rešen model id, tako da kratko ime dolazi nazad kao pun. Ako je model obrazložen prije odgovaranja, njegov obrazloženje je u message.reasoning_contentodvojeno od odgovora.

Odgovor

{
  "id": "chatcmpl-5f1c0a9e27d84b3c",
  "object": "chat.completion",
  "created": 1790726400,
  "model": "anthropic/claude-sonnet-5",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "A Lightning invoice is a one-time payment request..."
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1240,
    "completion_tokens": 380,
    "total_tokens": 1620,
    "prompt_tokens_details": { "cached_tokens": 0 },
    "completion_tokens_details": { "reasoning_tokens": 0 },
    "cost": 0.01895
  },
  "nymbot": {
    "balance": "pro",
    "charged_credits": 0.162,
    "charged_sats": 16.2,
    "balance_credits": 412.425,
    "balance_sats": 41242.5
  }
}

finish_reason je izrađen od onoga što se vratilo, budući da pružatelji izvještavaju drugačije: tool_calls Kada je model zatražio alate, length kada je odgovor koristio svaki dozvoljeni token (ili ih je model potrošio na rasuđivanje i nije napisao odgovor), content_filter kada je pružatelj odbio, i stop U suprotnom usage.completion_tokens_details.reasoning_tokens je uvek 0: sakriveni razmatranje žetoni se računaju, i naplaćuje, u completion_tokens.

StatusKada
400Ne model ili messages (missing_required_parameter); audio ili datotečni deo, ili slike za model koji ih ne može vidjeti (unsupported_content); više od 20 slika (too_many_images); uzorak parametar pogrešnog tipa ili van opsega (invalid_value); slika link koji nije javni (invalid_image_url); alate na modelu koji ih ne mogu nazvati (unsupported_tool); n osim 1; a :thinking suffiks na modelu koji ne može razumjeti (model_not_found); ili je pružatelj odbio zahtjev (upstream_rejected).
402Bilanca koju model troši ne može pokriti držanje.
403Najgori slučaj ne odgovara ključevoj kapi (key_limit_reachedNiže max_tokens Ili podignite kap.
404Nema modela s tim imenom (model_not_found).
429Ograničenje stope ključa ili pružatelja usluga (upstream_rate_limited).
502, 503Proizvođač nije uspeo (upstream_error) ili je preopterećena (upstream_overloaded, sa Retry-AfterNišta se ne naplaćuje osim ako pružatelj ne naplaćuje za pokušaj.

Statusni kodi za svaku akciju u krajnjoj tački navedeni su ispod greške.

cURL

curl https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "messages": [
      {"role": "system", "content": "Answer in one short paragraph."},
      {"role": "user", "content": "What is a Lightning invoice?"}
    ],
    "max_tokens": 400
  }'

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="anthropic/claude-sonnet-5",
    messages=[
        {"role": "system", "content": "Answer in one short paragraph."},
        {"role": "user", "content": "What is a Lightning invoice?"},
    ],
    max_tokens=400,
)
print(reply.choices[0].message.content)
print(reply.usage.cost)

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: "anthropic/claude-sonnet-5",
  messages: [
    { role: "system", content: "Answer in one short paragraph." },
    { role: "user", content: "What is a Lightning invoice?" },
  ],
  max_tokens: 400,
});
console.log(reply.choices[0].message.content);
console.log(reply.usage.cost);

Streamiranje

sa "stream": true odgovor stiže kao događaj poslat od strane servera dok ga model piše. chat.completion.chunk U pitanju je data: linija, a tok završava s data: [DONE]Razum dolazi u delta.reasoning_contentOdgovor u delta.content.

Stream bilo šta što može potrajati duže od oko 100 sekundi, kao što je dug odgovor, veliki odgovor. max_tokens ili model razmatranja. Zahtjev koji se ne prenosi ne šalje ništa dok odgovor nije završen, a mreža između vas i Nymbota može zatvoriti praznu vezu nakon otprilike 100 sekundi; model još uvijek završava i ono što je napisao je napunjeno, ali odgovor je izgubljen.

struja

data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}

data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"content":"A Lightning invoice"},"finish_reason":null}]}

: keep-alive

data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[],"usage":{"prompt_tokens":1240,"completion_tokens":380,"total_tokens":1620,"cost":0.01895},"nymbot":{"balance":"pro","charged_credits":0.162,"charged_sats":16.2,"balance_credits":412.425,"balance_sats":41242.5}}

data: [DONE]
  • linije koje počinju sa : su komentari koji se šalju svakih 15 sekundi dok model razmišlja.
  • Pitajte za "stream_options": {"include_usage": true} da biste dobili poslednji komad iznad, sa praznim choices, token broji, trošak i nymbot objekta je
  • Nymbot čita ostatak pružateljevog toka, do 25 sekundi, da bi dobio svoj broj tokena, a vi plaćate ono što pružatelj izvještava. Bez tog broja, naknada se procjenjuje na osnovu vašeg unosa i onoga što je napisano, plus čitava dozvola za izlazak za model iz tih razloga.
  • Greška prije prvog čunja, kao što je 401 ili 402, se vraća kao običan JSON sa svojim statusnim kodom, a ne kao tok. data: {"error": {…}} događaj, a tok završava bez [DONE].
  • Zahtjevi sa alatima i modelima na OpenAI-ovom transportu odgovora, ne protječu od pružatelja. Oni i dalje odgovaraju valjanim tokom, poslanim kada je odgovor potpun.

cURL

curl -N https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nymbot/auto",
    "stream": true,
    "stream_options": {"include_usage": true},
    "messages": [{"role": "user", "content": "Write a haiku about sats."}]
  }'

Python

import os
from openai import OpenAI

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

stream = client.chat.completions.create(
    model="nymbot/auto",
    stream=True,
    stream_options={"include_usage": True},
    messages=[{"role": "user", "content": "Write a haiku about sats."}],
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
    elif chunk.usage:
        print("\ncost:", chunk.usage.cost)

JavaScript

import OpenAI from "openai";

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

const stream = await client.chat.completions.create({
  model: "nymbot/auto",
  stream: true,
  stream_options: { include_usage: true },
  messages: [{ role: "user", content: "Write a haiku about sats." }],
});
for await (const chunk of stream) {
  if (chunk.choices.length) process.stdout.write(chunk.choices[0].delta.content || "");
  else if (chunk.usage) console.log("\ncost:", chunk.usage.cost);
}

alat za pozivanje

Opis funkcija u tools i model može zatražiti da se neko pozove umesto da odgovara. Pokrećete funkciju, dodajte njen rezultat kao tool Poruka s istim tool_call_idNymbot nikada ne pokreće vaše funkcije; on prenosi molbu modela natrag na vas.

tool_choice uzeti "auto", "none", "required" ili {"type": "function", "function": {"name": "…"}}Model lista označava koje modele možete pozvati alate (capabilities.tools). alat je odbijen sa 400 unsupported_tool je nymbot/auto i na nekoliko modela kataloga koji se pokreću na transportu OpenAI Responses, na koje Nymbot ne može prenijeti alate.

sa "stream": true, upit sa alatima radi u jednom komadu i zatim se šalje kao normalna sekvenca: uloga, jedan komad koji nosi svaki alat poziv sa svojim indeksom, id, ime i argumenti, i krajnji komad.

Odgovor, delimično

"choices": [
  {
    "index": 0,
    "message": {
      "role": "assistant",
      "content": null,
      "tool_calls": [
        {
          "id": "call_7d2e",
          "type": "function",
          "function": { "name": "get_invoice_status", "arguments": "{\"invoice_id\":\"a41f\"}" }
        }
      ]
    },
    "finish_reason": "tool_calls"
  }
]

cURL

curl https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "messages": [{"role": "user", "content": "Has invoice a41f been paid?"}],
    "tools": [{
      "type": "function",
      "function": {
        "name": "get_invoice_status",
        "description": "Look up whether an invoice is paid.",
        "parameters": {
          "type": "object",
          "properties": {"invoice_id": {"type": "string"}},
          "required": ["invoice_id"]
        }
      }
    }]
  }'

Python

import json, os
from openai import OpenAI

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

tools = [{
    "type": "function",
    "function": {
        "name": "get_invoice_status",
        "description": "Look up whether an invoice is paid.",
        "parameters": {
            "type": "object",
            "properties": {"invoice_id": {"type": "string"}},
            "required": ["invoice_id"],
        },
    },
}]
messages = [{"role": "user", "content": "Has invoice a41f been paid?"}]

reply = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
call = reply.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)

messages.append(reply.choices[0].message)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps({"paid": True})})

final = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
print(final.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 tools = [{
  type: "function",
  function: {
    name: "get_invoice_status",
    description: "Look up whether an invoice is paid.",
    parameters: {
      type: "object",
      properties: { invoice_id: { type: "string" } },
      required: ["invoice_id"],
    },
  },
}];
const messages = [{ role: "user", content: "Has invoice a41f been paid?" }];

const reply = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
const call = reply.choices[0].message.tool_calls[0];
const args = JSON.parse(call.function.arguments);

messages.push(reply.choices[0].message);
messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify({ paid: true }) });

const final = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
console.log(final.choices[0].message.content);

Fotografije u zahtjevu

Modeli sa capabilities.vision može čitati slike. Dodaj image_url dio korisničke poruke, sa ili s javnošću https:// Link ili A data:image/…;base64, URL. Do 20 slika po zahtjevu. SVG slike su odbijene, a tako je poveznica preko 4096 znakova ili jedna s korisničkim imenom ili lozinkom u njoj (400 invalid_image_url• Opcionalno detail je auto, low ili high.

sa nymbot/auto, zahteva sa slikom u njoj je usmjerena na standardni model koji može da vidi. capabilities.vision Odbijanje slika sa 400 unsupported_contentSlike mogu biti samo u korisničkim porukama. Poveznica mora ukazati na javni host; Nymbot prenosi sliku davatelju modela i ne čuva je.

Slika se naplaćuje kao ulazni žetoni koje pružatelj računa za nju, kao i ostatak zahteva.

cURL

curl https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "messages": [{
      "role": "user",
      "content": [
        {"type": "text", "text": "What is in this picture?"},
        {"type": "image_url", "image_url": {"url": "https://example.com/receipt.jpg"}}
      ]
    }]
  }'

Python

import base64, os
from openai import OpenAI

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

with open("receipt.jpg", "rb") as f:
    data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()

reply = client.chat.completions.create(
    model="anthropic/claude-sonnet-5",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text", "text": "What is in this picture?"},
            {"type": "image_url", "image_url": {"url": data_url}},
        ],
    }],
)
print(reply.choices[0].message.content)

JavaScript

import { readFile } from "node:fs/promises";
import OpenAI from "openai";

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

const dataUrl = "data:image/jpeg;base64," + (await readFile("receipt.jpg")).toString("base64");

const reply = await client.chat.completions.create({
  model: "anthropic/claude-sonnet-5",
  messages: [{
    role: "user",
    content: [
      { type: "text", text: "What is in this picture?" },
      { type: "image_url", image_url: { url: dataUrl } },
    ],
  }],
});
console.log(reply.choices[0].message.content);

Razumevanje

Modeli sa capabilities.reasoning mogu razmišljati prije nego što odgovore. zatražiti više ili manje od toga sa reasoning_effort ("minimal", "low", "medium" ili "high") ili "reasoning": {"effort": "high"}ili dodati :thinking na ime modela, što znači veliki napor. Na modelu bez razmatranja postavka se ignorira. nymbot/auto, :thinking šalje zahtjev na standardni put razmatranja.

Na Anthropic modelima napor postaje proračun za razmišljanje od oko 1.000, 2.000, 8.000 ili 16.000 žetona, nikada više od max_tokens dozvoljava. razmišljanje je ostavljeno kada tool_choice prisiljava alat, a kada zahtjev nastavlja alatnu struju (njegova posljednja poruka je rezultat alata), jer Anthropic treba ranije potpisano razmišljanje da bi ga nastavio.

Razum se vraća u message.reasoning_contentili delta.reasoning_content kada je streaming, nikada se ne miješa u odgovor. Razumevanje je izlaz i naplaćuje se kao takav, unutar completion_tokensNeki pružatelji usluga ne vraćaju tekst obrazloženja, a on se još uvek naplaćuje.

cURL

curl https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "reasoning_effort": "high",
    "messages": [{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}]
  }'

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="anthropic/claude-sonnet-5",
    reasoning_effort="high",
    messages=[{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}],
)
message = reply.choices[0].message
print(getattr(message, "reasoning_content", None))
print(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: "anthropic/claude-sonnet-5",
  reasoning_effort: "high",
  messages: [{ role: "user", content: "Is 2^61 - 1 prime? Show why." }],
});
console.log(reply.choices[0].message.reasoning_content);
console.log(reply.choices[0].message.content);

Modeli suffixes

Sufix na imenu modela menja način na koji se obrađuje zahtjev, bez drugog polja. Oni rade na punim idima i kratkim imenima jednako, kao u anthropic/claude-sonnet-5:online.

DovoljnoUticaj
:onlinePretraži web prvo, kao plugins: [{"id": "web"}]ovo Web pretraživanje.
:thinkingVisoki razmatranje napora; na nymbot/auto, put rasuđivanja. Na modelu koji ne može razumeti, 400 model_not_found sa “ nema pronađenih krajnjih tačaka”.
:nitro, :floor, :exacto, :extendedSvaki model kataloga ima jedan put, tako da nema bržeg, jeftinijeg ili dužeg puta za odabir; sufiksi su dozvoljeni tako da imena modela kopirana iz drugih usluga i dalje rade.

Svaki drugi dodatak se ignorira. Cijelo ime se prvo pokuša, tako da model čiji ID stvarno sadrži kolon još uvijek radi; u suprotnom, dodatak se uzima s kraja jedan po jedan dok se model ne podudara. 400 invalid_value.

cURL

curl https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5:thinking",
    "messages": [{"role": "user", "content": "Plan a three-day trip to Lisbon."}]
  }'

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="anthropic/claude-sonnet-5:thinking",
    messages=[{"role": "user", "content": "Plan a three-day trip to Lisbon."}],
)
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: "anthropic/claude-sonnet-5:thinking",
  messages: [{ role: "user", content: "Plan a three-day trip to Lisbon." }],
});
console.log(reply.choices[0].message.content);

Nymbot traži zadnju korisničku poruku (njihovih prvih 2000 znakova), čita najbolje stranice i daje ih modelu sa pitanjem, označenim kao spoljni sadržaj iz kojeg model ne bi trebao uzimati upute.

  • Uvek u potrazi: "plugins": [{"id": "web", "max_results": 5}]ili a :online suffix na modelu.
  • Pronađite kada pomaže: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Takođe prihvaćen kao web_search_preview ili openrouter:web_searchNymbot pretražuje samo kada pitanje izgleda kao da mu je potrebna trenutna informacija, isti test koji aplikacija koristi.

max_results je 5 podrazumevano i na najviše 10. izvori se vraćaju u nymbot.web_search.sourcesSvaki od njih sa a title, snippet i urli kao url_citation Napomene na poruku.

Svaka pretraga koja radi košta 0,008 dolara, pretvorena u sats, na vrhu žetona, a to je deo držanja. stranice koje čita su i ulazni žetoni, tako da odgovor s interneta košta više od istog pitanja postavljenog hladno, ponekad nekoliko puta više.

Odgovor, delimično

"nymbot": {
  "balance": "pro",
  "charged_credits": 0.431,
  "charged_sats": 43.1,
  "balance_credits": 411.994,
  "balance_sats": 41199.4,
  "web_search": {
    "sources": [
      { "title": "Lightning Network - Wikipedia", "snippet": "The Lightning Network is a payment protocol...", "url": "https://en.wikipedia.org/wiki/Lightning_Network" }
    ]
  }
}

cURL

curl https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "plugins": [{"id": "web", "max_results": 5}],
    "messages": [{"role": "user", "content": "What changed in the latest Bitcoin Core release?"}]
  }'

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="anthropic/claude-sonnet-5",
    messages=[{"role": "user", "content": "What changed in the latest Bitcoin Core release?"}],
    extra_body={"plugins": [{"id": "web", "max_results": 5}]},
)
print(reply.choices[0].message.content)
for source in reply.model_extra["nymbot"]["web_search"]["sources"]:
    print(source["url"])

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: "anthropic/claude-sonnet-5",
  plugins: [{ id: "web", max_results: 5 }],
  messages: [{ role: "user", content: "What changed in the latest Bitcoin Core release?" }],
});
console.log(reply.choices[0].message.content);
for (const source of reply.nymbot.web_search.sources) console.log(source.url);

Odgovori API

Noviji format OpenAI-a, koji koristi OpenAI Agents SDK i Codex. Radi na istim modelima, obračunavanju i funkcijama kao i Chat Completions.

POST https://nymbot.ai/api/v1/responses Potreban vam je API ključ.

PoljeVrstePotrebnoOpis
modelStrukturaDaKao za Chat kompletiSufiše su uključene.
inputString ili arrayDaRed ili lista stavki: poruke (rolovi user, assistant, system, developer) sa input_text, input_image i output_text dijelova i function_call i function_call_output Predmeti za alate. input_image Uzmi jedan image_url link ili URL podataka, a ne id datoteke. reasoning i web_search_call predmeti su preskočeni; item_reference je odbijen.
instructionsStrukturaNeUpute za sistem.
max_output_tokensIntegracijaNeNajviše tokena za pisanje.
temperature
top_p
BrojNeSampling kontrole, gde ih model uzima.
tools
tool_choice
parallel_tool_calls
array, string ili objekt, booleanNeFunkcije alata, u obliku odgovora ({"type": "function", "name": …, "parameters": …}) a web_search ili web_search_preview Oprema se pretvara u Web pretraživanje kada pomaže. Ostali ugrađeni alati su odbijeni.
reasoningobjekataNe{"effort": "minimal" | "low" | "medium" | "high"}. xhigh i max Značenje high; none Okrenite ga.
text.format
response_format
objekataNeStrukturirani izlaz, kao JSON shema ili json_object.
metadataobjekataNeVrati nepromijenjeno u odgovoru Na najviše 16 vrednosti niza, ključeve do 64 karaktera i vrednosti do 512.
streamBošnjaciNeStream događanja kao što je opisano ispod.
storeBošnjaciNeNišta se ne čuva, a odgovor uvijek kaže "store": false.
previous_response_id
conversation
background
String, Objekt i BooleanNeNije podržan: 400 unsupported_parameterOdgovori se ne pohranjuju, pa pošaljite ceo razgovor u input Svaki put

Odgovor

{
  "id": "resp_8c1e4b0f9a2d4e61",
  "object": "response",
  "created_at": 1790726400,
  "status": "completed",
  "model": "anthropic/claude-sonnet-5",
  "output": [
    {
      "type": "message",
      "id": "msg_2b7f",
      "role": "assistant",
      "status": "completed",
      "content": [{ "type": "output_text", "text": "A Lightning invoice is...", "annotations": [] }]
    }
  ],
  "output_text": "A Lightning invoice is...",
  "usage": {
    "input_tokens": 1240,
    "input_tokens_details": { "cached_tokens": 0 },
    "output_tokens": 380,
    "output_tokens_details": { "reasoning_tokens": 0 },
    "total_tokens": 1620
  },
  "incomplete_details": null,
  "error": null,
  "instructions": null,
  "store": false,
  "previous_response_id": null,
  "metadata": {},
  "nymbot": { "balance": "pro", "charged_credits": 0.162, "charged_sats": 16.2, "balance_credits": 412.425, "balance_sats": 41242.5 }
}

Zahtjev za alat se pojavljuje u output kao a function_call Odlomak sa call_id, name i argumentspošaljite rezultat nazad kao a function_call_output Predmet sa istim call_idRazumevanje, kada ga model vrati, je reasoning Odlomak sa reasoning_text Sadržaj, prvi na listi. status je incomplete Kada odgovor udari max_output_tokens ili pružatelj usluga odbio, sa incomplete_details.reason Postavite max_output_tokens ili content_filterOdgovor takođe odjekuje postavke zahtjeva (temperatura, alat, izbor alata i tako dalje) kao što to čini OpenAI, i prenosi nymbot Cijena objekta

Streaming, svaki događaj je event: linija i a data: linija sa a sequence_numberU ovom redoslijedu: response.created, response.in_progress, response.output_item.added, response.content_part.addedBilo koji broj response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.donei konačno response.completed uz upotrebu i troškove. odgovor skraćuje kratke završetke sa response.incomplete umjesto toga, i neuspjeh nakon što je potok počeo s response.failedRazumevanje tokova kao vlastite stavke sa response.reasoning_text.delta i .donePozivi alata dolaze nakon poruke, svaki kao stavka sa response.function_call_arguments.delta i .done.

StatusKada
400Ne model ili input; previous_response_id, conversation, background ili jedan item_reference (unsupported_parameter); alat ili tip sadržaja koji nije podržan.
402, 403, 404, 429, 502, 503Što se tiče chat kompleta.

cURL

curl https://nymbot.ai/api/v1/responses \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "instructions": "Answer in one short paragraph.",
    "input": "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"])

response = client.responses.create(
    model="anthropic/claude-sonnet-5",
    instructions="Answer in one short paragraph.",
    input="What is a Lightning invoice?",
)
print(response.output_text)

JavaScript

import OpenAI from "openai";

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

const response = await client.responses.create({
  model: "anthropic/claude-sonnet-5",
  instructions: "Answer in one short paragraph.",
  input: "What is a Lightning invoice?",
});
console.log(response.output_text);

Antropske poruke

Anthropic je format, za Anthropic SDK i Claude Code. Radi sa svakim modelom u katalogu, ne samo Claude: zahtjev se prevodi, radi kroz istu cijev i prevodi nazad.

POST https://nymbot.ai/api/v1/messages – potreban je API ključ, kao što je x-api-key ili Authorization: Bearer.

Naši anthropic-version i anthropic-beta Antropična imena modela podudaraju se sa katalogom, tako da Claude Code i SDK-ovi rade sa imenima koja već koriste:

  • Ime koje katalog zna, kao što je claude-sonnet-5 ili anthropic/claude-opus-5Koristi se onako kako je.
  • U svakom slučaju, datum (-20260514), -latest, verziju tag kao što je -v1, bracketed tag kao što su [1m] i jedan anthropic/ ili anthropic. Prefiks se uklanja, a točke i točke u verziji se pokušavaju na oba načina (claude-haiku-4-5 Pronađite claude-haiku-4.5).
  • Ako to još uvek ne odgovara, koristi se porodica (Opus, Sonnet ili Haiku), pod uvjetom da je verzija kataloga ista ili novija od one za koju je zatražena.
  • Ime koje se ne podudara sa ničim vraća se 404 not_found_error.
PoljeVrstePotrebnoOpis
modelStrukturaDaKatalog ID modela ili Anthropic ime modela.
max_tokensIntegracijaDaNajviše tokena za pisanje.
messagesArhivaDauser i assistant Kretanje, sa text, image (base64 ili izvorni URL), tool_use i tool_result Blokovi thinking Blokovi iz ranijih krugova su prihvaćeni i odbačeni.
systemString ili arrayNeSistemski prompt, kao niz ili tekstualni blokovi.
temperature
top_p
BrojNeSampling kontrole, gde ih model uzima. top_k Prihvaćen je i odbačen.
stop_sequencesUslovi korišćenja stringovaNeTekst koji završava odgovor. Najviše 4 niza, od kojih svaki ima najviše 256 znakova.
tools
tool_choice
objekat, objekatNeOprema sa name, description i input_schema• A web_search Server alat se pretvara u Web pretraživanjeAnthropic druge ugrađene alate (bash, tekst urednik, računalo korišćenje) su odbijeni sa unsupported_tool. tool_choice uzeti auto, any, tool ili nonei disable_parallel_tool_use.
thinkingobjekataNe{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} ili {"type": "disabled"}Proračun odabire nivo napora: ispod 2.048 minimalno, od 2.048 nisko, od 8.192 srednje, od 16.384 visoko. output_config.effortili visoka.
streamBošnjaciNeStream u Anthropic-ovom formatu događaja.
metadataobjekataNePrihvaćeno i ignorisano.

Odgovor

{
  "id": "msg_01c7a2f93e5b4d08",
  "type": "message",
  "role": "assistant",
  "model": "anthropic/claude-sonnet-5",
  "content": [{ "type": "text", "text": "A Lightning invoice is..." }],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 1240,
    "output_tokens": 380,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 0
  },
  "nymbot": { "balance": "pro", "charged_credits": 0.162, "charged_sats": 16.2, "balance_credits": 412.425, "balance_sats": 41242.5 }
}

content Takođe možete držati tool_use Blokovi i A thinking Blok, koji je signature On je prazan. stop_reason je end_turn, max_tokens, tool_use ili refusalRadili su na isti način kao i finish_reason je Chat kompleti; stop_sequence Uvek je null, čak i kada je stop sekvenca završila odgovor. input_tokens Broji se samo svježi unos; cached input je u dva polja za cache. nymbot Objekti i X-Nymbot-Cost-Sats Šta je header?

Streamed, događaji su Anthropic's: message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta ili thinking_delta), content_block_stop, message_delta uz razlog za zaustavljanje, upotrebu i nymbot Trošak objekta i message_stop• A ping takođe se šalje svakih 15 sekundi dok model radi. Pozivi alata stižu nakon teksta, svaki kao tool_use blok sa svojim celokupnim ulazom u jednom input_json_delta.

Greške na ovoj krajnjoj tački koriste Anthropic format: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Kratka ravnoteža je 402 billing_errorPreopterećeni dobavljač 503 overloaded_errorNeuspjeh nakon što je stream počeo šalje se kao error događaja .

cURL

curl https://nymbot.ai/api/v1/messages \
  -H "x-api-key: $NYMBOT_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
  }'

Python

import os
import anthropic

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

message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(message.content[0].text)

JavaScript

import Anthropic from "@anthropic-ai/sdk";

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

const message = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(message.content[0].text);

Brojanje tokena

Procjena broja ulaznih žetona koje bi upit za poruke koristio, tako da klijent može proveriti pre nego što pošalje.

POST https://nymbot.ai/api/v1/messages/count_tokens Potreban vam je API ključ.

Tijelo je isto kao i PorukeBez max_tokens; ime modela mora da se riješi. Broj je procjena: znakovi sistemskog uputstva, poruka, poziva alata i definicija alata podijeljeni sa četiri, plus 1,600 za svaku sliku. To nije sam tokenizer pružatelja, tako da se pravi broj može razlikovati.

Odgovor

{ "input_tokens": 318 }

cURL

curl https://nymbot.ai/api/v1/messages/count_tokens \
  -H "x-api-key: $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
  }'

Python

import os
import anthropic

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

count = client.messages.count_tokens(
    model="claude-sonnet-5",
    messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(count.input_tokens)

JavaScript

import Anthropic from "@anthropic-ai/sdk";

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

const count = await client.messages.countTokens({
  model: "claude-sonnet-5",
  messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(count.input_tokens);

Popis modela

Svaki model i generator koji API prihvata, sa onim što košta.Lista se čita iz istog kataloga uživo kao i aplikacijski picker, tako da je to uvek ono što će server pokrenuti.

GET https://nymbot.ai/api/v1/models — nije potreban ključ. Sakriveno pet minuta.

GET /api/v1/models/{id} Vraća jedan ulaz.

PoljeVrstePotrebnoOpis
typeString (preuzimanje pitanja)Nechat (u slučaju neispunjavanja obaveza), image, video, audio, embedding ili allNekoliko se može dati, kao image,video.

Cijene su ono što plaćate, uz naknadu i maržu već u, u dolarima i u ratama po trenutnoj ceni Bitcoina. balance kaže koji balans model troši. nymbot_key je kratko ime modela u aplikaciji. created uvek je 0, jer katalog ne bilježi kada je model dodan. per_request umjesto toga.

nymbot/auto Uvek je prvi, cijena kao variableUz a routes lista koja daje stopu svakog standardnog putovanja. Ona navodi viziju i razmatranje, ali ne i alate.

GET /api/v1/models/{id} prihvaća ista imena i nadimke kao zahtjev i vraća unos za model na koji se odlučuju.

Odgovor

{
  "object": "list",
  "data": [
    {
      "id": "anthropic/claude-sonnet-5",
      "object": "model",
      "type": "chat",
      "owned_by": "anthropic",
      "name": "Claude Sonnet 5",
      "created": 0,
      "context_length": 1000000,
      "max_output_tokens": 64000,
      "architecture": { "input_modalities": ["text", "image"], "output_modalities": ["text"] },
      "supported_parameters": ["max_tokens", "temperature", "tools", "tool_choice", "reasoning", "response_format", "stop"],
      "capabilities": { "vision": true, "video": false, "tools": true, "reasoning": true, "web_search": true },
      "balance": "pro",
      "pricing": {
        "type": "per_token",
        "currency": "USD",
        "input_per_1M_tokens": 4.725,
        "output_per_1M_tokens": 23.625,
        "cache_read_per_1M_tokens": 0.4725,
        "sats_input_per_1M_tokens": 4038,
        "sats_output_per_1M_tokens": 20192
      },
      "description": "...",
      "nymbot_key": "claude-sonnet"
    }
  ]
}

Ostali tipovi :

  • Slike Ulaznice imaju capabilities (accepts_image_url, requires_image_url, edit) i cena per_generation.
  • Videozapis Ulaznice imaju max_duration_seconds i resolutionsi jedna cena per_second za svaku rezoluciju.
  • Audije Ulaznice imaju audio_type speech ili transcriptionCene per_1k_chars ili per_minute.
  • Ugradnja Ulaznice imaju dimensions, context_length, max_inputs i cenu po milion ulaznih tokena.

Cijene označene "estimated": true je procjena aplikacije za generator čija cena nije objavljena. type Povratak 400.

cURL

curl "https://nymbot.ai/api/v1/models?type=chat"

Python

import requests

models = requests.get("https://nymbot.ai/api/v1/models", params={"type": "chat"}).json()["data"]
for m in models:
    print(m["id"], m["balance"], m["pricing"].get("input_per_1M_tokens"))

JavaScript

const res = await fetch("https://nymbot.ai/api/v1/models?type=chat");
const { data } = await res.json();
for (const m of data) console.log(m.id, m.balance, m.pricing.input_per_1M_tokens);