Prijeđi na sadržaj
Povratak na Nymbot

Baza znanja Razvijatelji

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 završetak

OpenAI chat format, i onaj koji gotovo svaki alat podržava.

POST https://nymbot.ai/api/v1/chat/completions Treba vam ključ od vatre.

Samo model i messages Parametar uzorkovanja koji odabrani model ne uzima pada bez pogreške, tako da jedno tijelo zahtjeva radi na različitim modelima. supported_parametersOno što se odbija umjesto da se odbaci je nešto što model uopće ne može učiniti: slike za model koji ne može vidjeti, alate za model koji ih ne može nazvati.

poljeVrstaPotrebnoOpis
modelStringDanymbot/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 također su prihvaćeni. Dovoljno.
messagesArrayDaRazgovori, uloge system, developer (sastavljen je kao sustav) user, assistant i toolSadržaj je niz ili popis text i image_url dijelovi; slike samo u korisničkim porukama. input_audio i dijelovi datoteke su odbijeni.
streamBooleanNeOdgovor pošaljite onako kako je napisano. Streamiranje.
stream_optionsobjektaNe{"include_usage": true} dodaje konačni komad s brojevima žetona i troškovima.
max_tokens
max_completion_tokens
integerNeNajviše žetona za pisanje. Smanjeno na maksimum modela ako je veće. Također određuje koliko se drži iz vaše ravnoteže, tako da manji broj treba manje kredita za početak.
temperature
top_p
BrojNeKontrola uzoraka: 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.
seedintegerNeZa ponavljanje uzorkovanja, gdje ga model podržava.
presence_penalty
frequency_penalty
BrojNeKontrola ponavljanja, svaka od -2 do 2.
response_formatobjektaNe{"type": "json_object"} ili {"type": "json_schema", "json_schema": {…}}, gdje ga model podržava. ne koristi nymbot/auto.
tools
tool_choice
parallel_tool_calls
array, string ili objekt, booleanNeFunkcija poziva. vidjeti alat za pozivanjea web_search Uređaj se okreće Web pretraživanjeNajviše 128 alata i 512 KB definicija, ugrađenih na najviše 64 razine dubine; više je 400.
reasoning_effort
reasoning
Struktura, objektiNe"minimal", "low", "medium" ili "high"ili {"effort": "high"}. "none" ili {"enabled": false} Izbjegavajte ga.Vidjeti Razumijevanje.
pluginsArrayNe[{"id": "web", "max_results": 5}] Uvijek prvo pretražuje internet. do 10 rezultata.
nintegerNe1. sve ostalo se vraća 400.
logit_bias
user
metadata
String, String i ObjectNePrihvaćeno i ne upućeno. logit_bias mapama na najviše 300 ID-ova žetona do brojeva od -100 do 100; user Najviše 256 znakova metadata Sadrži najviše 16 vrijednosti niza, ključeve do 64 karaktera i vrijednosti do 512.

Odgovor je uobičajen chat.completionUz troškove u usage.cost (u dolarima) i u nymbot Objekt je . model je riješen id modela, tako da se kratko ime vraća kao pun. Ako je model razložen prije odgovaranja, njegov razlož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 ispravlja se iz onoga što se vratilo, budući da pružatelji izvještavaju drugačije: tool_calls Kada je model tražio alate, length kada je odgovor koristio svaki dozvoljeni žeton (ili ih je model potrošio na rasuđivanje i napisao nikakav odgovor), content_filter Ukoliko je kupac odbio, i stop Inače usage.completion_tokens_details.reasoning_tokens uvijek je 0: skriveni tokeni razmatranja se računaju i naplaćuju, u completion_tokens.

StatusKada
400Ne model ili messages (missing_required_parameter); audio ili datotečni dio, ili slike za model koji ih ne može vidjeti (unsupported_content(više od 20 fotografija)too_many_images); parametar uzorkovanja pogrešnog tipa ili izvan raspona (invalid_value); slika poveznica koja nije javna (invalid_image_url); alate na modelu koji ih ne mogu nazvati (unsupported_tool); n osim 1; a :thinking Sljedeći članakKako se riješiti problema koji se ne mogu riješiti (model_not_found(npr. ako je podnositelj zahtjeva odbijen)upstream_rejected).
402Bilanca koju model troši ne može pokriti držanje.
403U najgorem slučaju ne odgovara ključevoj kapi (key_limit_reached) niže max_tokens Ili podignite kap.
404Ne postoji model s tim imenom (model_not_found).
429Ograničenje stope ključa ili pružatelja usluga (upstream_rate_limited).
502, 503Proizvođač je propustio (upstream_error) ili je preopterećena (upstream_overloaded, s Retry-AfterNišta se ne naplaćuje, osim ako pružatelj ne naplaćuje za pokušaj.

Statusni kodovi za svaku dionicu u krajnjoj točki navedeni su pod pogreš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);

Streaming

sa "stream": true odgovor dolazi kao događaj koji je poslat od strane poslužitelja dok ga model piše. chat.completion.chunk Na a data: Linija, a struja završava s data: [DONE]Razumijevanje dolazi u delta.reasoning_contentOdgovor u delta.content.

Stream sve što može potrajati duže od oko 100 sekundi, kao što je dug odgovor, veliki odgovor. max_tokens Zahtjev koji se ne prenosi ne šalje ništa dok odgovor nije dovrš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.

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 koje počinju s : su komentari koji se šalju svakih 15 sekundi dok model razmišlja.
  • Pitajte za "stream_options": {"include_usage": true} da biste dobili posljednji komad iznad, s praznim choices, token broji, trošak i nymbot Objekt je .
  • Ako zatvorite vezu ranije, model se ne zaustavlja: Nymbot čita ostatak pružateljevog toka, do 25 sekundi, kako bi dobio svoj broj tokena, a vi plaćate ono što pružatelj izvještava.
  • Pogreška prije prvog dijela, 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 struja završava bez [DONE].
  • Zahtjevi s alatima i modelima na transportu OpenAI odgovora ne prolaze od pružatelja.

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 jedan pozove umjesto da odgovori. tool Poruka s istim tool_call_idNymbot nikada ne pokreće vaše funkcije; on vam vraća zahtjev modela.

tool_choice uzima "auto", "none", "required" ili {"type": "function", "function": {"name": "…"}}Model lista označava koji modeli mogu nazvati alate (capabilities.toolsInstrument je odbijen s 400 unsupported_tool On je nymbot/auto i na nekoliko modela kataloga koji se pokreću na transportu OpenAI-a Responses, na koje Nymbot ne može prenijeti alate.

sa "stream": true, zahtjev s alatima radi u jednom komadu i zatim se šalje kao normalna sekvenca: uloga, jedan komad koji nosi svaki poziv na alat sa svojim indeksom, idom, imenom i argumentima i završnim komadom.

Odgovor, djelomič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);

Slike u zahtjevu

Modeli s capabilities.vision Možete čitati slike. Dodaj image_url dio korisničke poruke, s bilo kojom publikom 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, zahtjev s slikom u njemu je usmjeren na standardni model koji može vidjeti. capabilities.vision Odbijanje slika s 400 unsupported_contentSlike mogu biti samo u korisničkim porukama. Poveznica mora ukazati na javni domaćin; Nymbot prenosi sliku pružatelju modela i ne čuva je.

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

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

Razumijevanje

Modeli s capabilities.reasoning Možete razmišljati prije nego što odgovorite. zatražiti više ili manje od toga s 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 Razmišljanje je prepušteno kada tool_choice Njegova posljednja poruka je rezultat alata, jer Anthropic treba ranije potpisano razmišljanje da bi ga nastavio.

Razumijevanje se vraća u message.reasoning_contentili delta.reasoning_content kada je streaming, nikada se ne miješa u odgovor. Razumiranje je izlaz i kao takav se naplaćuje, unutar completion_tokensNeki pružatelji usluga uopće ne vraćaju tekst obrazloženja i još uvijek se 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 suffix

Sufix na imenu modela mijenja način na koji se zahtjev obrađuje, bez drugog polja. anthropic/claude-sonnet-5:online.

DovoljnoUčinak
:onlineNajprije pretražite web, kao što je plugins: [{"id": "web"}]Svijet Web pretraživanje.
:thinkingVisoki razumijevanje napora; na nymbot/autoNa modelu koji ne može razumjeti, 400 model_not_found “ nema pronađenih krajnjih točaka”
:nitro, :floor, :exacto, :extendedSvaki model kataloga ima jedan put, tako da nema bržeg, jeftinijeg ili dužeg puta za odabir; nastavci su dopušteni tako da imena modela kopirana iz drugih usluga još uvijek rade.

Svaki drugi dodatak je ignoriran. Cijelo ime je prvo pokušano, tako da model čiji ID stvarno sadrži kolon još uvijek radi; u protivnom, 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 posljednju korisničku poruku (njihovih prvih 2000 znakova), čita najbolje stranice i daje ih modelu s pitanjem, označenim kao vanjski sadržaj iz kojeg model ne bi trebao uzimati upute.

  • Uvijek tražiti: "plugins": [{"id": "web", "max_results": 5}]ili a :online suffix na modelu.
  • Potražite kada pomaže: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Također prihvaćena 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 podrazumijevano i na najviše 10. izvori se vraćaju u nymbot.web_search.sourcesSvaka osoba s a title, snippet i urlI kao url_citation Napomene na poruku.

Svaka pretraga koja radi košta 0,008 $, pretvorena u sats, na vrhu žetona, a to je dio 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, djelomič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 na API

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

POST https://nymbot.ai/api/v1/responses Treba vam ključ od vatre.

poljeVrstaPotrebnoOpis
modelStringDaKao za Chat završetakUključene su i suffixove.
inputString ili arrayDaRed ili popis stavki: poruke (rolovi user, assistant, system, developer) s input_text, input_image i output_text dijelova i function_call i function_call_output Podaci 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 To je odbijeno.
instructionsStringNeUpute za sustav.
max_output_tokensintegerNeNajveći broj tokena za pisanje.
temperature
top_p
BrojNeSampling kontrole, gdje ih model uzima.
tools
tool_choice
parallel_tool_calls
array, string ili objekt, booleanNeSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći ({"type": "function", "name": …, "parameters": …}) a web_search ili web_search_preview Uređaj se okreće Web pretraživanje kada pomaže. drugi ugrađeni alati su odbijeni.
reasoningobjektaNe{"effort": "minimal" | "low" | "medium" | "high"}. xhigh i max znači high; none Okrenite ga.
text.format
response_format
objektaNeStrukturirani ishod, kao JSON shema ili json_object.
metadataobjektaNeVrati se nepromijenjeno u odgovoru. na najviše 16 vrijednosti niza, ključeve do 64 znakova i vrijednosti do 512.
streamBooleanNeStream događanja kako je opisano u nastavku.
storeBooleanNeNišta se ne pohranjuje, 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 cijeli 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 pojavljuje se u output kao a function_call Pitanje s call_id, name i argumentsRezultat se vraća kao a function_call_output Pitanje s istim call_idRazlog, kada ga model vrati, je reasoning Pitanje s reasoning_text Sadržaj, navedeno na prvom mjestu status je incomplete Kad odgovor dođe max_output_tokens ili odbijanje pružatelja usluga incomplete_details.reason postaviti max_output_tokens ili content_filterOdgovor također odjekuje postavke zahtjeva (temperatura, alat, izbor alata i tako dalje) kao što to čini OpenAI, i prenosi nymbot Cijena objekta

Slijedeća objavaSvaki događaj je event: linija i a data: Linija s 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 s korištenjem i troškovima. odgovor skraćuje kratke završetke s response.incomplete umjesto toga, a neuspjeh nakon što je potok počeo s response.failedRazumijevanje struja kao vlastite stavke s response.reasoning_text.delta i .donePozivi alata dolaze nakon poruke, svaka kao stavka s 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 vrsta 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

Radi sa svakim modelom u katalogu, ne samo Claude: zahtjev se prevodi, pokreće kroz istu cijev i prevodi natrag.

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

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

  • Ime koje katalog zna, kao što je claude-sonnet-5 ili anthropic/claude-opus-5Koristi se onako kako je.
  • Sljedeći Članak Datum (-20260514), -latest, verzija tag kao što je -v1Jedan od takvih bracketa kao što je [1m] i jedan anthropic/ ili anthropic. Sljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći članakSljedeći (claude-haiku-4-5 pronaći claude-haiku-4.5).
  • Ako to još uvijek ne odgovara, koristi se obitelj (Opus, Sonnet ili Haiku), pod uvjetom da je verzija kataloga ista ili novija od one za koju je zatražena.
  • Ime koje se ne uklapa ništa vraća 404 not_found_error.
poljeVrstaPotrebnoOpis
modelStringDaKatalog ID modela ili Anthropic model ime.
max_tokensintegerDaNajveći broj tokena za pisanje.
messagesArrayDauser i assistant Vratimo se, s text, image (base64 ili izvorni URL), tool_use i tool_result Blokirani su thinking Blokovi iz ranijih krugova prihvaćeni su i odbačeni.
systemString ili arrayNeSistemski prompt, kao niz ili tekstualni blokovi.
temperature
top_p
BrojNeSampling kontrole, gdje ih model uzima. top_k Prihvaćena je i odbačena.
stop_sequencesArray od stringaNeTekst koji završava odgovor. Najviše 4 niza, od kojih svaki ima najviše 256 znakova.
tools
tool_choice
Objekti, objektiNealat s name, description i input_schemaa web_search Server Tool se pretvara u Web pretraživanjeOstali ugrađeni alat Anthropica (bash, urednik teksta, uporaba računala) su odbijeni unsupported_tool. tool_choice uzima auto, any, tool ili nonei disable_parallel_tool_use.
thinkingobjektaNe{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} ili {"type": "disabled"}Proračun odabire razinu napora: ispod 2,048 minimalna, od 2,048 niska, od 8,192 srednja, od 16,384 visoka. output_config.effortili visoka.
streamBooleanNeStream u Anthropic događajnom formatu.
metadataobjektaNePrihvaćeni i ignorirani.

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đer se može 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 On je Chat završetak; stop_sequence Uvijek je null, čak i kada je stop sekvenca završila odgovor. input_tokens Broji se samo svježi unos; cache ulaz je u dva polja cache. nymbot Objekt i X-Nymbot-Cost-Sats Header je

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 S obzirom na to da je uzrok, uporaba i nymbot Cijena objekta i message_stopa ping također se šalje svakih 15 sekundi dok model radi. pozivi alata dolaze nakon teksta, svaki kao tool_use blok sa svojim cijelim ulazom u jednom input_json_delta.

Greške na ovoj krajnjoj toč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 početka toka šalje se kao error događanja .

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

Brojiti tokene

Procjena broja ulaznih žetona koji će se koristiti u zahtjevu za poruke, tako da klijent može provjeriti prije nego što pošalje.

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

Tijelo je isto kao i PorukeBez max_tokens; ime modela mora riješiti. Broj je procjena: znakovi sistemskog poziva, poruka, poziva alata i definicija alata podijeljeni su za četiri, plus 1,600 za svaku sliku. To nije vlastiti tokenizer pružatelja, tako da se stvarni 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 API-ja prihvaća, sa onim što košta.Lista se čita iz istog kataloga uživo kao i aplikacijski picker, tako da je to uvijek ono što će server pokrenuti.

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

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

poljeVrstaPotrebnoOpis
typeString (zahtjev za upit)Nechat (u slučaju neispunjenja obveze) image, video, audio, embedding ili allMnoge od njih mogu se koristiti, kao image,video.

Cijene su ono što plaćate, s pristojbom i maržom već u, u dolarima i u ratama po trenutnoj cijeni Bitcoina. balance To govori o tome koji model troši. nymbot_key je kratko ime modela u aplikaciji. created uvijek je 0, jer katalog ne bilježi kada je model dodan. per_request umjesto toga.

nymbot/auto Uvijek na prvom mjestu, cijena je variable, s a routes Popisuje 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 :

  • Slika Ulaznice imaju capabilities (accepts_image_url, requires_image_url, edit) i cijena per_generation.
  • Video Ulaznice imaju max_duration_seconds i resolutionsi cijena per_second Za svaku odluku.
  • Audija Ulaznice imaju audio_type speech ili transcriptioncijena per_1k_chars ili per_minute.
  • Ugradnja Ulaznice imaju dimensions, context_length, max_inputs i cijena po milijun ulaznih tokena.

Cijene označene "estimated": true je procjena aplikacije za generator čija cijena 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);