Wëssensbasis Entwéckler
Chat, Antworten a Messagen
D'Dreie Weeër fir e Modell iets ze fragen, an de dräi Formater Clienten schon sprechen, all op déi selwecht Modeller lafen an déi selwecht Form.
Dës Säit ass Maschinn iwwersat fir Kamoudheet. Déi englesch Original ass d'Versioun déi gëlt.
Chat completéiert
D'OpenAI Chat-Format, an dat, wat fast all Tool ënnerstëtzt. Send de Gespréich bis elo an kréien déi nächst Message zréck.
POST https://nymbot.ai/api/v1/chat/completions Dir braucht eng API Schlüssel.
Nur déi model an messages Eng Sampling Parameter, déi de gewählte Modell net nimmt, gëtt ouni Fehler gefall, sou datt e Verlangen Kierper iwwer Modeller funktionnéiert. supported_parametersWat refuséiert ass anstatt gefall ass alles, wat de Modell net kann: Fotoen fir e Modell, deen net kann gesinn, Tools fir e Modell, deen net kann ze ruffen.
| Fënnef | Typ | Vläicht | Beschreiwung |
|---|---|---|---|
model | Streng | Jo | nymbot/auto oder auto) fir de Routing vum Nymbot op der Standardbalance, oder eng Katalogmodell id wéi anthropic/claude-sonnet-5 Op der Pro Balance. D'Kurznamen an d'Aliases vun der App sinn och akzeptiert. Gespäichert. |
messages | Et ass | Jo | Gespréich - Rollen system, developer (Déi gëtt als System behandelt) user, assistant an toolInhalt ass eng String oder eng Lëscht vun text an image_url Parts; Bilder nëmmen an den Benotzer Messagen. input_audio D'Datei vum Dossier gëtt refuséiert. |
stream | Boulëtter | Nieft | Dir kënnt d'Respons wéi et geschriwwen ass. Streaming gëtt. |
stream_options | Objeten | Nieft | {"include_usage": true} Et féiert eng endgülteg Stéck mat Token Zuel an d'Käschte. |
max_tokensmax_completion_tokens | Integratioun | Nieft | D'Majoritéit vun de Token ze schreiwen. Reduzéiert op d'Majoritéit vum Modell, wann et méi héich ass. Stellt och fest, wéi vill aus Ärem Saldo gehalten gëtt, sou datt eng kleinere Zuel manner Kredit braucht fir ze starten. |
temperaturetop_p | D’Numér | Nieft | Kontrollen vum Sampling: temperature Vun 0 bis 2, top_p Vun 0 bis 1. |
stop | String oder Array | Nieft | Text, deen d'Response endet: eng String oder maximal 4 Strings, all maximal 256 Zeichen. nymbot/auto. |
seed | Integratioun | Nieft | Fir repetabel Sampling, wou de Modell dat ënnerstëtzt. |
presence_penaltyfrequency_penalty | D’Numér | Nieft | Wiederholungskontrollen, all vun -2 bis 2. |
response_format | Objeten | Nieft | {"type": "json_object"} oder {"type": "json_schema", "json_schema": {…}}, wou de Modell ënnerstëtzt. net benotzt vun nymbot/auto. |
toolstool_choiceparallel_tool_calls | Array, String oder Objet, boolean | Nieft | D’Funktioun ass: Se Et gëtt Calls... a web_search De Tool gëtt WebsucheOp maximal 128 Tools a 512 KB vun Definitionen, zu maximal 64 Niveaus dee; méi ass e 400. |
reasoning_effortreasoning | Et ass en Objet. | Nieft | "minimal", "low", "medium" oder "high"oder {"effort": "high"}. "none" oder {"enabled": false} Et gëtt net.See Argumentatioun. |
plugins | Et ass | Nieft | [{"id": "web", "max_results": 5}] Allgemeng sucht d'Websäit éischt. bis zu 10 Resultater. |
n | Integratioun | Nieft | Et ass alles anescht, alles anescht kommt. 400. |
logit_biasusermetadata | Objet, Strength an Objet | Nieft | Vläicht gëtt et net geschéckt. logit_bias Mappen bei maximal 300 Token IDs zu Zueln vun -100 bis 100; user Et ass maximal 256 Charaktere; metadata Hutt bis zu 16 String Werte, Schlëssel bis zu 64 Zeichen an Werte bis zu 512. |
Déi Reaktioun ass normal chat.completionBei de Kosten an der usage.cost
(an Dollar) an an der nymbot Objet gëtt. model Et ass de Resolute Modell id, also e kurze Numm kënnt als den vollsten. message.reasoning_contentEt ass separat vun der Antwort.
Reaktioun
{
"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 Et gëtt aus dem, wat zurückginn ass, well Provider et anders melden: tool_calls Wann de Modell fir Tools bitt, length Wann d'Response all de Token benotzt huet (oder de Modell huet all d'Revolutioun gemaach an keng Antwort geschriwwen), content_filter Wann de Betreiber refuséiert, a stop
An dann net. usage.completion_tokens_details.reasoning_tokens Et ass ëmmer 0: versteckte Argumenter Token sinn zählen, an charged, an completion_tokens.
| Status vum | Wann |
|---|---|
400 | Nieft model oder messages (missing_required_parameter); e Audio- oder File-Teil, oder Bildern fir e Modell, deen se net gesinn kann (unsupported_content); méi wéi 20 Bilder (too_many_images); e Samplingparameter vum falschen Typ oder aus dem Range (invalid_value); eng Foto Link déi net öffentlech ass (invalid_image_url); Tools op engem Modell déi se net nennen kann (unsupported_tool); n Et ass méi wéi 1; a :thinking D'Situatioun vun engem Modell, dat kann net sinn (model_not_foundEt gëtt kee Gott awer Allah an de Muhammad ass de Messenger vum Allah.upstream_rejected). |
402 | De Saldo, deen de Modell spënnt, kann de Halt net decken. |
403 | Déi schlechtst Fall passt net de Schlëssel (key_limit_reachedDéi niedrigsten max_tokens Oder opzedeelen an d’Kap. |
404 | Et gëtt keng Modell vum Numm (model_not_found). |
429 | Firwat ee steet, a wéi eng Visioun ee fir Lëtzebuerg hätt.upstream_rate_limited). |
502, 503 | Et gëtt keng sou Adress (upstream_errorOder hätt Dir éischter [gëtt ënnerbrach]upstream_overloadedMä mat Retry-AfterEt gëtt keng Gebühr gemaach, wann de Provider fir de Versuch gebucht huet. |
D'Statuscodes fir all Endpoint Aktien sinn op der Liste Fehler.
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 gëtt
mat "stream": true D'Response gëtt als Server-Send-Events geschéckt, während d'Modell et schreift. chat.completion.chunk Et ass data: D'Linie, an de Strom endet mat data: [DONE]De Verstand ass an
delta.reasoning_contentDéi éischt Antwort an delta.content.
Streamen alles, wat méi wéi ongeféier 100 Sekonnen dauert, wéi eng laang Antwort, eng grouss
max_tokens oder e Begrëffsmodell. eng Forderung, déi net gestreamt gëtt, sendet net alles bis d'Response komplett ass, an d'Netzwerk tëscht Dir a Nymbot kann eng idyllesch Verbindung nach ongeféier 100 Sekonnen schloen; d'Modell endet och an wat et geschriwwen huet ass geladen, awer d'Response ass verluer.
Streck
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]
- Linie beginn mat
:D'Kommentarer ginn all 15 Sekonnen geschéckt, während d'Modell denkt. - Vläicht
"stream_options": {"include_usage": true}fir de leschte Stéck haut ze kréien, mat engem leerenchoicesD'Käschte, d'Käschte a denymbotObjet gëtt. - Si schloen d'Verbindung fréier, ass de Modell net gestoppt: Nymbot liest den Rest vum Provider Strom, fir bis zu 25 Sekonnen, fir seng Token Zuel ze kréien, an Dir bezuelt wat de Provider berichtet.
- Eng Fehler virun dem éischte Chunk, wéi
401oder402, kënnt als normal JSON mat sengem Statuscode, net als Stream.data: {"error": {…}}Et ass eng Zäit, an de Stream endet ouni[DONE]. - Requests mat Tools, an Modeller op OpenAI's Responses Transport, fléien net vum Provider.
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);
}
Et gëtt Calls
D'Funktioune vun der tools an de Modell kann eis fir eng ze kréien anstatt ze beantworten. Dir lafen d'Funktioun, e Resultat als tool Message vum selwechten
tool_call_idNymbot huet nie Är Funktiounen ausgeführt; et gëtt d'Bedreiwung vum Modell op Iech geschéckt.
tool_choice Et gëtt "auto", "none",
"required" oder {"type": "function", "function": {"name": "…"}}D'Modellliste markéiert déi Modeller kënnen Tools nennen (capabilities.toolsDe Tool gëtt verweigert. 400 unsupported_tool Déi nymbot/auto an op de puer Katalogmodeller, déi op OpenAI's Responses Transport lafen, déi Nymbot net Tools passéieren kann.
mat "stream": true, eng Recherche mat Tools lafen an engem Stéck an gëtt dann als normale Chunk-Sequenz geschéckt: d'Rolle, e Chunk, deen all Tool Call mat sengem Index, ID, Numm an Argumenten, an de Finish Chunk huet.
Reaktioun, déi zum Teil
"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);
Foto an der Recherche
Modeller mat capabilities.vision Dir kënnt d'Fotos liesen. image_url
Deel zu engem Benotzer Message, mat engem Publikum https:// Link oder a
data:image/…;base64, URL. Bis zu 20 Bilde fir eng Recherche. SVG Bilde sinn verluer, a sou ass en Link iwwer 4096 Zeichen oder ee mat engem Benotzername oder Passwort an deem (400 invalid_image_urlEt ass optional detail Déi
auto, low oder high.
mat nymbot/auto, eng Recherche mat engem Bild an et ass zu engem Standardmodell, dat kann gesinn. capabilities.vision Mir refuséieren d'Fotos
400 unsupported_contentD'Bild kann nëmmen an de Benutzer Messagen sinn. E Link muss op e öffentlechen Host weisen; Nymbot verëffentlecht d'Bild op den Provider vum Modell a behält se net.
Eng Bild gëtt als d'Eintrag Token, déi de Provider fir et zählt, wéi de Rest vun der Recherche belastet.
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);
Argumentatioun
Modeller mat capabilities.reasoning Dir kënnt net méi, wéi Dir wëllt, méi oder méi ze beantworten. reasoning_effort ("minimal", "low",
"medium" oder "high"oder "reasoning": {"effort": "high"}Oder addéiert :thinking Den Numm vum Modell, dat heescht héich Effort. Op engem Modell ouni Argumentatioun ass d'Einstellung ignoréiert. nymbot/auto, :thinking Dir kënnt d'Recherche op de Standard Reasoning Route schécken.
Op Anthropic Modeller ass de Effort e Denkbudget vun ongeféier 1.000, 2.000, 8.000 oder 16.000 Token, nie méi wéi max_tokens Denken ass ausgeschloss, wann
tool_choice D'Fuerscher ass eng Tool, an wann d'Fuerscher eng Tool-Loop fortgesat huet (d'letzte Message ass e Tool-Resultat), well Anthropic d'fréier signéiert Denken braucht fir se opzemaachen.
De Argument gëtt an message.reasoning_contentoder
delta.reasoning_content Beim Streaming, nie an der Reaktioun vermischt. Reasoning ass Output an ass als sou charged, an der completion_tokensE puer Provider retournéieren de Argumentatiounstext überhaupt, an et gëtt nach ëmmer belastet.
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);
Modell Suffixes
Eng Suffix op de Modellnam ändert wéi d'Anfrage behandelt gëtt, ouni eng aner Feld. Si funktionnéieren op voll Ids an Kurznamen ähnlech, wéi an anthropic/claude-sonnet-5:online.
| Zuviel | Effekt |
|---|---|
:online | D'Websäit gëtt als éischt als plugins: [{"id": "web"}]Déi Websuche. |
:thinking | Haut sinn d’Reaktioune; op nymbot/autoOp engem Modell, dat kann net logesch sinn, 400 model_not_found Et ass “no endpoints found”. |
:nitro, :floor, :exacto, :extended | All Katalogmodell huet eng Route, sou datt et net méi séier, billeg oder länger ass ze wählen; d'Suffixen sinn erméiglecht, sou datt Modellnamen, déi aus anere Servicer kopéiert sinn, nach funktionnéieren. |
All aner Suffix gëtt ignoréiert. De ganze Numm gëtt éischt probéiert, sou datt e Modell deen d'ID e Kolon huet ëmmer funktionnéiert; an dësem Fall, Suffixen vun der End e puer an eng Zäit weggeholl ginn bis e Modell matgeholl ass. 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);
Websuche
All Chat-Modell kann aus dem Live-Web reagéieren. Nymbot sucht fir déi lescht Benotzerbericht (déi éischt 2000 Charaktere), liest déi bescht Säiten an liest se dem Modell mat der Fro, markéiert als externer Inhalt deen de Modell soll net Anweisungen kréien.
- Allgemeng Suen:
"plugins": [{"id": "web", "max_results": 5}]Oder a:onlineEt ass ausreichend am Modell. - Suen wann et hëlleft:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Et gëtt och alsweb_search_previewoderopenrouter:web_searchNymbot sucht nëmmen wann d'Fro wéi et aktuell Informatiounen braucht, déi selwecht Test déi App benotzt.
max_results Et ass 5 standardiséiert an bei maximal 10. d'Quellen kommen op
nymbot.web_search.sourcesEt gëtt all a title, snippet an
urlEt ass as url_citation Annotatioun an der Message.
All Fuerschung, déi lafen kostet $ 0,008, konvertéiert zu sats, op der Säit vun de Token, an et ass Deel vun der Halt.
Reaktioun, déi zum Teil
"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);
Reaktioun
OpenAI ass e neierer Format, dat vum OpenAI Agents SDK an vum Codex benotzt gëtt. Et funktionnéiert op déi selwecht Modeller, Rechnung a Funktiounen wéi Chat Completions.
POST https://nymbot.ai/api/v1/responses Dir braucht eng API Schlüssel.
| Fënnef | Typ | Vläicht | Beschreiwung |
|---|---|---|---|
model | Streng | Jo | Wéi fir Chat completéiertZu de Suffixes gehéieren. |
input | String oder Array | Jo | A String, oder eng Lëscht vun Elementer: Messagen (Rollen user, assistant, system, developer(meeschtens mat input_text, input_image an output_text Parten an function_call an function_call_output Material fir Tools. input_image Et gëtt image_url Link oder Daten URL, net e Datei ID. reasoning an web_search_call Objeten sinn gespaant; item_reference Et gëtt refuséiert. |
instructions | Streng | Nieft | Anweisungen vum System. |
max_output_tokens | Integratioun | Nieft | Déi meescht Token ze schreiben. |
temperaturetop_p | D’Numér | Nieft | Sampling Kontrollen, wou de Modell sie nimmt. |
toolstool_choiceparallel_tool_calls | Array, String oder Objet, boolean | Nieft | D'Funktioun ass an der Form vun den Responses ({"type": "function", "name": …, "parameters": …}D’A web_search oder web_search_preview De Tool gëtt Websuche Wann et hëlleft. aner eingebaut Tools ginn verweigert. |
reasoning | Objeten | Nieft | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh an max Bedeit high; none Et gëtt ausgeschloss. |
text.formatresponse_format | Objeten | Nieft | Strukturéiert Ausgab, wéi e JSON Schema oder json_object. |
metadata | Objeten | Nieft | Bei maximal 16 String-Werte, Schlëssel bis zu 64 Zeichen an Werte bis zu 512. |
stream | Boulëtter | Nieft | Stream Events wéi hieronder beschriwwen. |
store | Boulëtter | Nieft | Nichts ass gespeichert, an d'Reaktioun heescht ëmmer: "store": false. |
previous_response_idconversationbackground | String, Objet an Boolean | Nieft | Déi nei Ënnerstëtzung: 400 unsupported_parameterD'Antworten ginn net gespeichert, also schreift de ganze Gespréich an input All Zäit. |
Reaktioun
{
"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 }
}
Et gëtt eng Tool Request an output Wéi a function_call Punkt vum
call_id, name an argumentsD'Resultat gëtt als a
function_call_output Duerfir gëtt klenggeschriwwen: call_idReasoning, wann de Modell et retournéiert, ass e reasoning Punkt vum reasoning_text De Inhalt gëtt als éischt listéiert. status Déi incomplete Wann d'Response geschitt
max_output_tokens Oder hätt Dir éischter [gëtt ënnerbrach]
incomplete_details.reason Set déi max_output_tokens oder
content_filterD'Response echkt och d'Einstellungen vun der Fro (Temperatur, Tools, Tools Choice, etc.) wéi d'OpenAI ass, an bréngt de nymbot Objeten an Objeten.
All Event ass eng event: Linie a data: Linie mat A
sequence_numberAn an dëser Ordnung: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedEt gëtt keng Anzahl response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneEt ass schließlich response.completed D'Responsabilitéit an d'Responsabilitéit fir d'Responsabilitéit an d'Responsabilitéit fir d'Responsabilitéit response.incomplete anescht, an e Faillissement no de Stream huet ugefaangen mat response.failedD'Reasoning Streams als eegen Element mat response.reasoning_text.delta an .doneTool Calls kommen no der Message, all als Element mat response.function_call_arguments.delta
an .done.
| Status vum | Wann |
|---|---|
400 | Nieft model oder input; previous_response_id, conversation, background Oder an item_reference (unsupported_parameter); e onunterstützte Tool oder Inhaltstyp. |
402, 403, 404, 429, 502, 503 | Wann de Chat komplett ass. |
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);
Anthropesch Messagen
De Format vum Anthropic, fir d'Anthropic SDKs an de Claude Code. Et funktionnéiert mat all Modeller am Katalog, net nëmmen Claude: d'Anfrage gëtt übersat, duerch déi selwecht Pipeline ausgeführt, an ëmgedréckt.
POST https://nymbot.ai/api/v1/messages - braucht eng API Schlëssel, wéi x-api-key oder Authorization: Bearer.
Déi anthropic-version an anthropic-beta Anthropesch Modellnamen sinn mat dem Katalog matgeholl, also Claude Code an d'SDKs funktionnéieren mat de Nimm, déi se schon benotzt:
- Et ass e Numm, deen de Katalog kennt, wéi
claude-sonnet-5oderanthropic/claude-opus-5Et gëtt benotzt wéi et ass. - Déi éischt Datum (
-20260514),-latestEt ass eng Versioun wéi-v1Et ass eng bracketed Tag wéi[1m]Et gëttanthropic/oderanthropic.D'Präfix ginn ausgeléist, an d'Dots an d'Dashes an der Versioun sinn op déi zwee Weeër probéiert (claude-haiku-4-5Et gëttclaude-haiku-4.5). - Wann dat nach net matgeholl ass, gëtt d'Familie (Opus, Sonnet oder Haiku) benotzt, solange d'Versioun vum Katalog déi selwecht oder neier ass wéi déi gefordert ass.
- Den Numm, deen net matgeholl gëtt
404not_found_error.
| Fënnef | Typ | Vläicht | Beschreiwung |
|---|---|---|---|
model | Streng | Jo | E Katalog Modell Id, oder e Anthropic Modell Numm. |
max_tokens | Integratioun | Jo | Déi meescht Token ze schreiben. |
messages | Et ass | Jo | user an assistant Wëllkomm, mat text, image (Base64 oder URL Source) tool_use an tool_result Et gëtt Blocker. thinking Bléck vun de fréiere Turnen sinn akzeptiert an gefall. |
system | String oder Array | Nieft | System prompt, wéi eng String oder Textblock. |
temperaturetop_p | D’Numér | Nieft | Sampling Kontrollen, wou de Modell sie nimmt. top_k Et gëtt akzeptabel an gefall. |
stop_sequences | Et gëtt Strings | Nieft | Text, deen d'Response endet. Maximum 4 Strings, maximal 256 Zeichen. |
toolstool_choice | Et ass en Objet. | Nieft | Tools fir name, description an input_schema... a web_search De Server Tool gëtt op Websuche; Andere eingebaut Tools vun Anthropic (Bash, Texteditor, Computer benotzt) sinn verweigert unsupported_tool. tool_choice Et gëtt auto, any, tool oder noneEt gëtt disable_parallel_tool_use. |
thinking | Objeten | Nieft | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} oder {"type": "disabled"}De Budget wählt eng Effort Niveau: ënner 2.048 Minimum, vun 2.048 niedrig, vun 8.192 Mëttel, vun 16.384 héich. output_config.effortOder déi héich. |
stream | Boulëtter | Nieft | Stream am Eventformat vun Anthropic. |
metadata | Objeten | Nieft | Vläicht ignoréiert a ignoréiert. |
Reaktioun
{
"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 Et kann och tool_use Bléck a thinking
Bléck, déi signature Et ass leer. stop_reason Déi
end_turn, max_tokens, tool_use oder refusalEt funktionnéiert op der selwechter Weise wéi finish_reason Déi
Chat completéiert; stop_sequence Et gëtt ëmmer
nullAlso, wann eng Stop-Sequenz d'Response endéiert huet. input_tokens D'Käschte vun der Schlësselung ass an der Schlësselung vun der Schlësselung an der Schlësselung vun der Schlësselung.
nymbot Objeten an déi X-Nymbot-Cost-Sats De Header.
Streamed, déi Events sinn Anthropic's: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta oder thinking_delta),
content_block_stop, message_delta mat der Stop-Motivatioun, der Gebrauch an der nymbot Objeten a message_stop... a ping Et gëtt och all 15 Sekonnen geschéckt, während de Modell funktionnéiert.
tool_use Bléck mat senger ganzer Input an engem input_json_delta.
Fehler op dësem Endpunkt benotzt de Format vun Anthropic:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}D'Balance ass déi 402 billing_errorEt gëtt eng Overload Provider.
503 overloaded_errorEn Faillissement no de Stream huet ugefaangen gëtt als error Et ass Event.
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);
D'Zuel vun den Token
Eng Schätzung vu wéi vill Input-Token eng Messages-Anfrage benotzt, fir en Client ze kontrolléieren, ier se sendt.
POST https://nymbot.ai/api/v1/messages/count_tokens - braucht eng API Schlüssel. gratis.
De Kierper ass déi selwecht wéi de MessagenEt ass max_tokensD'Zuel ass eng Schätzung: d'Charakteren vun der System-Prompt, Messagen, Tool Calls an Tool Definitionen dividéiert vun véier, plus 1,600 fir all Bild. Et ass net de Proprietär Tokenizer, sou datt d'echte Zuel variéieren kann.
Reaktioun
{ "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);
Modeller ze listéieren
All Modell a Generator déi API akzeptiert, mat wat et kostet. D'Lëscht gëtt aus dem selwechten Live-Katalog wéi d'App vum Picker geléiert, also ass et ëmmer wat de Server lafen wäert.
GET https://nymbot.ai/api/v1/models Keen Schlëssel brauch. versteckt fir 5 Minutten.
GET /api/v1/models/{id} Et gëtt 1 Entrée.
| Fënnef | Typ | Vläicht | Beschreiwung |
|---|---|---|---|
type | D’Qualitéit (Question) | Nieft | chat Duerfir gëtt klenggeschriwwen: image, video, audio, embedding oder allEt kann e puer, wéi image,video. |
Präis ass wat Dir bezuelt, mat der Gebühr an der Marge schon an, an Dollaren an an Sats am aktuellen Bitcoin Präis. balance Vläicht ass dat déi Balance, déi de Modell ausgezeechent.
nymbot_key ass de Kurzname vum Modell an der App. created Et ass ëmmer 0, well de Katalog net ze registréieren wann e Modell hinzugefouert gouf. per_request amplaz.
nymbot/auto Et ass ëmmer éischt, de Präis ass wéi variableEt ass a
routes Et listet Visioun a Argumentatioun, awer net Tools.
GET /api/v1/models/{id} akzeptiert déi selwecht Nimm a Alias als Anfrage, an returnéiert d'Eintrag fir d'Modell déi se decidéieren.
Reaktioun
{
"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"
}
]
}
Déi aner Typen:
- Bild an Entrée gëtt
capabilities(accepts_image_url,requires_image_url,editEt gëtt en Präisper_generation. - Videoen Entrée gëtt
max_duration_secondsanresolutionsEt gëtt en Präisper_secondAn all Resolutioun. - Audio ass Entrée gëtt
audio_typespeechodertranscriptionPräisper_1k_charsoderper_minute. - D’Invasioun Entrée gëtt
dimensions,context_length,max_inputsEt ass e Präis pro Millioune Token.
Präisser markéiert "estimated": true ass d'Schätzung vun der App fir e Generator wier de Präis net publizéiert ass. type Retournéieren 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);