Preskoči na vsebino
Nazaj na Nymbot

Baza znanja razvijalci

Chat, odgovori in sporočila

Trije načini, kako vprašati model nekaj, v treh oblikah stranke že govorijo, vsi tečejo na istih modelih in zaračunajo na enak način.

Chat dopolnitev

OpenAI chat format, in tisti, ki ga skoraj vsako orodje podpira. Pošljite pogovor do sedaj in dobite naslednje sporočilo nazaj.

POST https://nymbot.ai/api/v1/chat/completions Potrebujete API ključ.

samo model in messages Parameter vzorčenja, ki ga izbrani model ne sprejme, se spusti brez napake, tako da eno telo zahteve deluje v različnih modelih. supported_parametersKar se zavrne, namesto da bi ga spustili, je nekaj, česar model sploh ne more storiti: slike za model, ki ne more videti, orodja za model, ki jih ne more poklicati.

poljeVrstaPotrebnoOpis
modelStringjanymbot/auto (ali pa auto) za usmerjanje Nymbota na standardnem ravnovesju ali ID modela kataloga, kot je anthropic/claude-sonnet-5 na ravnovesju Pro. Sprejemajo se tudi kratka imena in vzdevki aplikacije. zadostuje.
messagesArrayjaPogovor - vloge system, developer (ki se uporablja kot sistem), user, assistant in toolVsebina je niz ali seznam text in image_url dele; slike samo v uporabniških sporočilih. input_audio in datotečni deli so zavrnjeni.
streambooljanneOdgovor pošljite tako, kot je napisan. Streamiranje.
stream_optionspredmetovne{"include_usage": true} doda končni kos s števili žetonov in stroški.
max_tokens
max_completion_tokens
integerneNajveč žetonov, ki jih je treba napisati. znižano na največjo vrednost modela, če je višja. Prav tako določa, koliko se drži iz vašega stanja, tako da manjše število potrebuje manj kredita za začetek.
temperature
top_p
številoneKontrolni vzorci: temperature od 0 do 2, top_p od 0 do 1.
stopString ali arrayneBesedilo, ki se konča z odgovorom: niz ali največ 4 nizov, vsak največ 256 znakov. nymbot/auto.
seedintegerneZa ponavljajoče se vzorčenje, kjer ga model podpira.
presence_penalty
frequency_penalty
številonePonavljajoči se kontrolniki, vsak od -2 do 2.
response_formatpredmetovne{"type": "json_object"} ali {"type": "json_schema", "json_schema": {…}}, kjer ga model podpira. ne uporablja nymbot/auto.
tools
tool_choice
parallel_tool_calls
Array, String ali Object, BooleanneFunkcija klicanja. glej Orodja za klice• A web_search Orodje se spremeni spletno iskanjeNajveč 128 orodij in 512 KB definicij, vgrajenih na največ 64 ravneh globoko; več je 400.
reasoning_effort
reasoning
String, predmetine"minimal", "low", "medium" ali "high"ali {"effort": "high"}. "none" ali {"enabled": false} Odstranite ga. glej Razumevanje.
pluginsArrayne[{"id": "web", "max_results": 5}] vedno najprej išče spletno stran. do 10 rezultatov.
nintegerne1. vse ostalo se vrne 400.
logit_bias
user
metadata
String, String in predmetneSprejeto in ne poslano naprej. logit_bias zemljevidi z največ 300 ID-ji žetonov do številk od -100 do 100; user Največ 256 znakov metadata ima največ 16 vrednosti nizov, ključe do 64 znakov in vrednosti do 512.

Odgovor je navaden chat.completionS stroški v usage.cost (v dolarjih) in v nymbot Objekt je . model je rešeno ime modela, tako da se kratko ime vrne kot polno ime. message.reasoning_contentločeno 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 iz tega, kar se je vrnilo, saj ponudniki poročajo drugače: tool_calls Ko je model zahteval orodja, length ko je odgovor uporabil vsak žeton, ki je bil dovoljen (ali jih je model porabil vse razmišljanje in ni napisal nobenega odgovora), content_filter če ponudnik zavrne, in stop Drugače pa usage.completion_tokens_details.reasoning_tokens je vedno 0: skriti tokeni razlage se štejejo in zaračunajo v completion_tokens.

statusaKdaj
400ne model ali messages (missing_required_parameter); avdio ali datotečni del ali slike za model, ki jih ne more videti (unsupported_content); več kot 20 slik (too_many_images); vzorčni parameter napačnega tipa ali izven razpona (invalid_value); povezava na sliko, ki ni javna (invalid_image_url); orodja na modelu, ki jih ne more imenovati (unsupported_tool); n drugače kot 1; a :thinking inštrukcije, ki je ni mogoče razumeti (model_not_found); ali ponudnik zavrne zahtevo (upstream_rejected).
402Bilanca, ki jo model porabi, ne more pokriti posesti.
403Najslabši primer ne ustreza ključavnici (key_limit_reached• nižje max_tokens Ali pa dvignite glavo.
404Ne obstaja model s tem imenom (model_not_found).
429Omejitev stopnje ključa ali ponudnika (upstream_rate_limited).
502, 503Proizvajalec ni uspel (upstream_error) ali je preobremenjen (upstream_overloaded, z Retry-AfterNič se ne zaračuna, razen če je ponudnik zaračunal za poskus.

Statusne kode vsakega končnega deleža so navedene pod Napake.

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

Streaming

z "stream": true Odgovor pride kot dogodek, ki ga pošlje strežnik, medtem ko ga model piše. chat.completion.chunk je a data: line, in tok se konča z data: [DONE]Razumevanje prihaja v delta.reasoning_contentOdgovor v delta.content.

Pretakajte vse, kar lahko traja več kot približno 100 sekund, na primer dolg odgovor, velik max_tokens Zahteva, ki se ne pretaka, ne pošlje ničesar, dokler odgovor ni končan, in omrežje med vami in Nymbotom lahko zapre prazno povezavo po približno 100 sekundah; model še vedno konča in tisto, kar je napisal, se naloži, vendar je odgovor izgubljen.

Stream

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, ki se začnejo z : so komentarji, ki se pošiljajo vsakih 15 sekund, medtem ko model razmišlja.
  • Vprašajte za "stream_options": {"include_usage": true} da bi dobili zadnji kos zgoraj, s praznim choices, token šteje, stroški in nymbot Objekt je .
  • Če zaprete povezavo zgodaj, se model ne ustavi: Nymbot bere preostanek ponudnikovega toka, do 25 sekund, da dobi svoj število žetonov, in plačate, kar ponudnik poroča.
  • Napaka pred prvim delom, kot je 401 ali 402, se vrne kot običajen JSON s svojo kodo stanja, ne kot tok. Napaka po začetku toka pride kot zadnji data: {"error": {…}} dogodek, in tok se konča brez [DONE].
  • Zahteve z orodji in modeli na transportu Odgovori OpenAI ne pretakajo od ponudnika. Še vedno odgovarjajo z veljavnim tokom, poslanim, ko je odgovor končan.

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

Orodja za klice

Opis funkcij v tools in model lahko zahteva, da se nekdo pokliče namesto odgovora. Zaženete funkcijo in jo dodate kot rezultat tool Sporočilo z istim tool_call_idNymbot nikoli ne izvaja vaših funkcij; modelovo zahtevo vam pošlje nazaj.

tool_choice vzame "auto", "none", "required" ali {"type": "function", "function": {"name": "…"}}Seznam modelov označuje, kateri modeli lahko kličejo orodja (capabilities.toolsOrodja so zavrnjena z 400 unsupported_tool je nymbot/auto in na nekaj kataloških modelih, ki se izvajajo na transportu OpenAI's Responses, na katere Nymbot ne more prenesti orodij.

z "stream": true, zahteva z orodji teče v enem kosu in se nato pošlje kot normalna sekvenca: vloga, en kos, ki nosi vsak klic orodja s svojim indeksom, id, ime in argumenti ter končni del.

Odgovor je delno

"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 v zahtevku

Modeli z capabilities.vision lahko preberete slike. dodaj image_url del uporabniškega sporočila, bodisi z občinstvom https:// povezava ali a data:image/…;base64, URL. Do 20 slik na zahtevo. SVG slike so zavrnjene, tako da je povezava več kot 4096 znakov ali ena z uporabniškim imenom ali geslom v njej (400 invalid_image_url• Opcijsko detail je auto, low ali high.

z nymbot/auto, je zahteva s sliko v njej usmerjena na standardni model, ki ga lahko vidi. capabilities.vision zavrača slike z 400 unsupported_contentSlike so lahko le v uporabniških sporočilih.Povezava mora kazati na javni gostitelj; Nymbot posreduje sliko ponudniku modela in je ne shrani.

Slika se zaračuna kot vhodni žetoni, ki jih ponudnik šteje za to, tako kot preostanek zahteve.

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 z capabilities.reasoning lahko razmislijo, preden odgovorijo. prosite za več ali manj reasoning_effort ("minimal", "low", "medium" ali "high") ali "reasoning": {"effort": "high"}ali pa dodaj :thinking ime modela, kar pomeni velik napor. Na modelu brez obrazložitve je nastavitev prezrta. nymbot/auto, :thinking zahtevo pošlje na standardno pot obrazložitve.

Na Anthropic modelih prizadevanje postane proračun za razmišljanje približno 1.000, 2.000, 8.000 ali 16.000 žetonov, nikoli več kot max_tokens Razmišljanje je prepuščeno, ko tool_choice naredi orodje, in ko zahteva nadaljuje z orodjem (njeno zadnje sporočilo je rezultat orodja), ker Anthropic potrebuje prej podpisano razmišljanje, da ga nadaljuje.

Razlogi se vračajo v message.reasoning_contentali delta.reasoning_content ko pretakanje, nikoli ne mešamo v odgovor. Razumevanje je izhod in se zaračuna kot tak, znotraj completion_tokensNekateri ponudniki sploh ne vrnejo besedila obrazložitve in se še vedno zaračuna.

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

Vzorčni suffixes

Dodatek na ime modela spremeni način obdelave zahteve, brez drugega polja. Delajo na polnih ID-jih in kratkih imenih enako, kot v anthropic/claude-sonnet-5:online.

zadostujeUčinek
:onlineNajprej poiščite spletno stran, kot plugins: [{"id": "web"}]to je spletno iskanje.
:thinkingVisoko racionalno delo; na nymbot/autoNa modelu, ki ne more razumeti, 400 model_not_found z “ nobenih končnih točk najdenih”.
:nitro, :floor, :exacto, :extendedVsak model kataloga ima eno pot, tako da ni hitrejše, cenejše ali daljše, da izberejo; priponke so dovoljene, tako da imena modelov, kopirane iz drugih storitev še vedno delujejo.

Vsak drugi dodatek je ignoriran. Celotno ime je preizkušeno najprej, tako da model, katerega ID dejansko vsebuje kolon, še vedno deluje; v nasprotnem primeru se dodatki vzamejo iz konca enkrat naenkrat, dokler se model ne ujema. 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 išče zadnje uporabniško sporočilo (njihovih prvih 2000 znakov), bere najboljše strani in jih daje modelu z vprašanjem, označenim kot zunanja vsebina, iz katere model ne sme sprejeti navodil.

  • Vedno iskanje: "plugins": [{"id": "web", "max_results": 5}]ali pa a :online Dovolj za model.
  • Poiščite, kdaj pomaga: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Sprejeto tudi kot web_search_preview ali openrouter:web_searchNymbot išče le, ko se zdi, da vprašanje potrebuje trenutne informacije, isti test, ki ga uporablja aplikacija.

max_results je privzeto 5 in največ 10. viri se vrnejo v nymbot.web_search.sourcesVsak z a title, snippet in urlin kot url_citation Opozorila na sporočilo.

Vsako iskanje, ki teče, stane $ 0,008, pretvorjeno v sats, na vrhu žetonov, in je del zadrževanja.Strani, ki jih berejo, so tudi vhodni žetoni, zato je odgovor iz spleta stane več kot isto vprašanje, ki je bilo hladno, včasih večkrat več.

Odgovor je delno

"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 na API

Novejša oblika OpenAI, ki jo uporabljajo OpenAI Agents SDK in Codex. Teče na istih modelih, obračunavanju in funkcijah kot Chat Completions.

POST https://nymbot.ai/api/v1/responses Potrebujete API ključ.

poljeVrstaPotrebnoOpis
modelStringjakot za Chat dopolnitevDodatki so vključeni.
inputString ali arrayjaniz ali seznam elementov: sporočila (vloge user, assistant, system, developer) z input_text, input_image in output_text delih in function_call in function_call_output Predmeti za orodja. input_image vzemite eno image_url povezavo ali podatkovni URL, ne ID datoteke. reasoning in web_search_call predmeti so izpuščeni; item_reference je zavrnjeno
instructionsStringneNavodila za sistem.
max_output_tokensintegerneNajveč žetonov za pisanje.
temperature
top_p
številoneSampling kontrolniki, kjer jih model vzame.
tools
tool_choice
parallel_tool_calls
Array, String ali Object, BooleanneFunkcije orodja, v obliki Odgovori ({"type": "function", "name": …, "parameters": …}) a web_search ali web_search_preview Orodje se spremeni spletno iskanje ko pomaga. Druga vgrajena orodja so zavrnjena.
reasoningpredmetovne{"effort": "minimal" | "low" | "medium" | "high"}. xhigh in max pomeni high; none Odklopite ga
text.format
response_format
predmetovnestrukturiranega izhoda, kot je shema JSON ali json_object.
metadatapredmetovneVrne nespremenjeno v odgovoru. pri največ 16 vrednostih nizov, ključi do 64 znakov in vrednosti do 512.
streambooljanneStream dogodke, kot je opisano spodaj.
storebooljanneNič ni shranjeno, in odgovor vedno pravi "store": false.
previous_response_id
conversation
background
String, Objekt in BooleanneNi podprto : 400 unsupported_parameterOdgovori niso shranjeni, zato pošljite celoten pogovor v input Vsakič pa

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

Zahteva za orodje se prikaže v output kot a function_call Točka z call_id, name in arguments, pošljite rezultat nazaj kot a function_call_output Točka z enakim call_idRazumevanje, ko ga model vrne, je reasoning Točka z reasoning_text vsebino, ki je navedena najprej. status je incomplete Ko je odgovor zadel max_output_tokens ali pa je ponudnik zavrnil, incomplete_details.reason nastavite na max_output_tokens ali content_filterOdgovor odmeva tudi nastavitve zahteve (temperatura, orodja, izbira orodja in tako naprej), kot to počne OpenAI, in prenaša nymbot stroški predmeta.

Streamed, vsak dogodek je event: Linija in a data: Linija z a sequence_numberV tem vrstnem redu: response.created, response.in_progress, response.output_item.added, response.content_part.addedVsako število response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.doneIn končno response.completed z uporabo in stroški. odgovor skrajša kratke konce z response.incomplete namesto, in neuspeh, ko se je tok začel z response.failedRazumevanje tokov kot lastnega predmeta z response.reasoning_text.delta in .doneKlic orodja pride po sporočilu, vsak kot element z response.function_call_arguments.delta in .done.

statusaKdaj
400ne model ali input; previous_response_id, conversation, background ali enega item_reference (unsupported_parameter); nepodprto orodje ali vrsta vsebine.
402, 403, 404, 429, 502, 503Kar se tiče chat končnic.

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

Antropična sporočila

Format Anthropic, za Anthropic SDK in Claude Code. Deluje z vsakim modelom v katalogu, ne samo Claude: zahteva je prevedena, teče skozi isto cevovodo in prevedena nazaj.

POST https://nymbot.ai/api/v1/messages — potrebuje ključ API, kot x-api-key ali Authorization: Bearer.

za anthropic-version in anthropic-beta Antropična imena modelov se ujemajo s katalogom, zato Claude Code in SDK delujejo z imeni, ki jih že uporabljajo:

  • Ime, ki ga katalog pozna, kot je claude-sonnet-5 ali anthropic/claude-opus-5Uporablja se kot je.
  • V nasprotnem primeru datum (-20260514), -latest, različica tag kot -v1V takšnem zapuščenem dnevu, kot [1m] in enega anthropic/ ali anthropic. Predpona se odstrani in točke in podobe v različici se preizkusijo na oba načina (claude-haiku-4-5 najde claude-haiku-4.5).
  • Če se to še vedno ne ujema, se uporabi družina (Opus, Sonnet ali Haiku), če je različica kataloga enaka ali novejša od tiste, ki jo je zahtevala.
  • Ime, ki se ne ujema z ničemer, se vrne 404 not_found_error.
poljeVrstaPotrebnoOpis
modelStringjaKatalog ID modela ali Anthropic ime modela.
max_tokensintegerjaNajveč žetonov za pisanje.
messagesArrayjauser in assistant Vrti se, z text, image (base64 ali vir URL) tool_use in tool_result Blokiraj thinking Bloki iz prejšnjih vrtljajev so sprejeti in spuščeni.
systemString ali arrayneSistemski priročnik, kot niz ali besedilne bloke.
temperature
top_p
številoneSampling kontrolniki, kjer jih model vzame. top_k je sprejet in padel.
stop_sequencesŠtevilo stringovneBesedilo, ki se konča z odgovorom. Največ 4 nizov, vsak največ 256 znakov.
tools
tool_choice
Array, predmetineOrodja z name, description in input_schema• A web_search Server orodje se obrne na spletno iskanjeDruga vgrajena orodja Anthropica (bash, urejevalnik besedila, uporaba računalnika) so zavrnjena unsupported_tool. tool_choice vzame auto, any, tool ali none, in disable_parallel_tool_use.
thinkingpredmetovne{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} ali {"type": "disabled"}Proračun izbere raven napora: pod 2.048 minimalno, od 2.048 nizko, od 8.192 srednje, od 16.384 visoko. output_config.effortAli pa visoko.
streambooljanneStream v obliki dogodka Anthropic.
metadatapredmetovneSprejeto in prezrto.

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 Lahko tudi držijo tool_use Bloki in a thinking Blok, ki ga signature Je pa prazna. stop_reason je end_turn, max_tokens, tool_use ali refusalDelal je na enak način kot finish_reason je Chat dopolnitev; stop_sequence Vedno je null, tudi ko stop zaporedje končal odgovor. input_tokens šteje samo sveže vnose; vnos v predpomnilniku je v dveh predpomnilniških poljih. nymbot Objekt in X-Nymbot-Cost-Sats še header

Streamed, dogodki so Anthropic's: message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta ali thinking_delta), content_block_stop, message_delta z razlogom za ustavitev, uporabo in nymbot stroški objekta in message_stop• A ping pošlje tudi vsakih 15 sekund, medtem ko model deluje. Klic orodja pride po besedilu, vsak kot tool_use blok s celotnim vhodom v eno input_json_delta.

Napake na tej končni točki uporabljajo obliko zapisa Anthropic: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Kratko ravnovesje je 402 billing_errorPreobremenjeni ponudnik 503 overloaded_errorNeuspeh po začetku toka se pošlje kot error dogodek .

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

Štetje tokenov

Ocenjevanje, koliko vhodnih žetonov bi zahteva za sporočila uporabila, tako da lahko odjemalec preveri, preden pošlje.

POST https://nymbot.ai/api/v1/messages/count_tokens — potrebujete API ključ. brezplačno.

Telo je enako kot sporočilBrez max_tokens; ime modela mora rešiti. Štetje je ocena: znaki sistemskega obvestila, sporočila, klice orodij in opredelitve orodij so razdeljeni na štiri, plus 1600 za vsako sliko. To ni lastni tokenizer ponudnika, zato se lahko dejansko štetje razlikuje. Ključ, ki je dosegel svojo mejo, ga lahko še vedno uporablja.

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

Seznam modelov

Vsak model in generator, ki ga sprejme API, s tem, kar stane.Seznam se bere iz istega kataloga v živo kot izbira aplikacije, zato bo strežnik vedno deloval.

GET https://nymbot.ai/api/v1/models — ni potreben ključ. Skrit za pet minut.

GET /api/v1/models/{id} vrne eno vstopnico.

poljeVrstaPotrebnoOpis
typeString (poizvedba)nechat (v primeru nepravilnosti) image, video, audio, embedding ali allNekaj jih je mogoče dati, kot image,video.

Cene so tisto, kar plačate, s pristojbino in maržo že v, v dolarjih in v stopnjah po trenutni ceni Bitcoin. balance določa, kateri model porabi. nymbot_key je kratko ime modela v aplikaciji. created je vedno 0, ker katalog ne beleži, kdaj je bil model dodan. per_request namesto tega.

nymbot/auto je vedno najprej, cena kot variable, z a routes seznam, ki prikazuje stopnje vsake standardne poti. navaja vizijo in razmišljanje, ne pa orodij.

GET /api/v1/models/{id} sprejmejo enaka imena in vzdevke kot zahtevo in vrnejo vnos za model, za katerega se odločijo.

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

Za druge vrste:

  • sliko Vstopnice imajo capabilities (accepts_image_url, requires_image_url, edit) in cena per_generation.
  • Video posnetki Vstopnice imajo max_duration_seconds in resolutionsIn tudi cena per_second za vsako resolucijo.
  • Audija Vstopnice imajo audio_type speech ali transcriptionCena je per_1k_chars ali per_minute.
  • Vstavljanje Vstopnice imajo dimensions, context_length, max_inputs in cena na milijon vhodnih žetonov.

Označene cene "estimated": true je ocena aplikacije za generator, katerega cena ni objavljena. type Vrnitev 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);