Kennisbasis De ûntwikkelers
Chat, antwurden en berichten
Der binne trije manieren om in model wat te fragen, yn de trije formaten kliïnten al praat, alle rjochtsje op itselde modellen en fakturearre de selde manier.
Dizze side is masine-oerset foar it gemak. It Ingelske orizjineel is de ferzje dy't jildt.
Chat kompletten
De OpenAI chat-formaat, en dy't hast alle tools stypje. Sende de konversaasje hjoed en krije de folgjende berjocht werom.
POST https://nymbot.ai/api/v1/chat/completions Der is gjin fire key nedich.
Allegearre model en messages In samplingparameter dat it keazen model net nimt wurdt droppen sûnder in fout, dus ien fraachorganisme wurket oer modellen. supported_parametersWat wurdt ferstoar ynsteld, is alles wat it model net kin dwaan: foto's foar in model dy't net sjogge, gereedschappen foar in model dy't se net kinne rjochtsje.
| De fjild | De type | Neffens | Beskriuwing |
|---|---|---|---|
model | Strjitte | Ja | nymbot/auto (Of auto) foar Nymbot's routing op de standertbalans, of in katalogusmodel id lykas anthropic/claude-sonnet-5 Op 'e Pro-balans. De app's korte namen en alias's binne ek akseptearre. Ynfloed. |
messages | Yn array | Ja | De konversaasje, rollen system, developer (Beheard as in systeem) user, assistant en toolContent is in string of in list fan text en image_url part; foto's allinich yn brûkersboarnen. input_audio De bestannen binne ôfwiisd. |
stream | Boolean | No yn | Skriuw de antwurd yn as it skriuwt. Yn streaming. |
stream_options | It Object | No yn | {"include_usage": true} It giet om in finale ferheging fan de kosten en de kosten. |
max_tokensmax_completion_tokens | Yntegraasje | No yn | De measte tokens om te skriuwen. Lowered nei it maksimum fan it model as heger. Sette ek hoeveel wurdt hâlden út jo saldo, dus in kleiner tal nedich minder krediet om te begjinnen. |
temperaturetop_p | Nûmer | No yn | Kontrôle foar sampling: temperature Yn 0 oant 2, top_p Yn 0 oant 1. |
stop | String of array | No yn | Tekst dy't de antwurd eindigt: in string of maksimaal 4 strings, elk maksimaal 256 karakters. nymbot/auto. |
seed | Yntegraasje | No yn | Foar herhaalbare sampling, dêr't it model it stypje. |
presence_penaltyfrequency_penalty | Nûmer | No yn | Kontrollen wurde herhaald, elk fan -2 oant 2. |
response_format | It Object | No yn | {"type": "json_object"} Of {"type": "json_schema", "json_schema": {…}}It model wurdt net brûkt troch de nymbot/auto. |
toolstool_choiceparallel_tool_calls | array, string of object, boolean | No yn | Yn de funksje. see Tool foar CallsYn A web_search De tool wurdt Web ûndersykOp maksimaal 128 tools en 512 KB fan definysjes, ynset op maksimaal 64 niveaus djippe; mear is in 400. |
reasoning_effortreasoning | Ynstrumint, Object | No yn | "minimal", "low", "medium" Of "high"Yn {"effort": "high"}. "none" Of {"enabled": false} It giet om it sjen. Begjin. |
plugins | Yn array | No yn | [{"id": "web", "max_results": 5}] Algemien ûndersykje it web earst. oant 10 resultaten. |
n | Yntegraasje | No yn | Allegearre alles komt werom. 400. |
logit_biasusermetadata | Ynstrumint, String en Object | No yn | It is ynsteld en net útsteld. logit_bias kaarten op maksimaal 300 token ids nei nummers fan -100 oant 100; user Der binne maksimaal 256 karakters. metadata Hâldt maksimaal 16 string waarden, sleutels maksimaal 64 karakters en waarden maksimaal 512. |
It antwurd is normaal. chat.completionYn de kosten yn usage.cost
(in dollars) en yn de nymbot It Object. model is de oploste model id, dus in koarte namme komt werom as de folsleine. message.reasoning_contentDe antwurd is ôfskeid.
Antwurd
{
"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 is útwurke út wat kom werom, sûnt providers rapportearje it ferskillende: tool_calls As de model foar de gereedschappen frege, length as it antwurd alle tokens brûkt (of it model alle redenen spile en gjin antwurd skreaun), content_filter As de provider weigeret, en stop
Anders yn. usage.completion_tokens_details.reasoning_tokens is altyd 0: hidden reasoning tokens wurde telde, en laden, yn completion_tokens.
| Status fan | As |
|---|---|
400 | No yn model Of messages (missing_required_parameterIt earste krantsje kaam út yn april Nadere informatie (unsupported_contentOer klasseboek en aktiviteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(too_many_imagesOer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(invalid_valueIt earste krantsje kaam út yn april Nadere informatie (invalid_image_urlIt earste krantsje kaam út yn april Nadere informatie (unsupported_tool); n Yn oare gefallen; a :thinking Oer klasseboek en aktiviteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(model_not_foundIt eardere eilân Wieringen is gjin part fan de gemeente.upstream_rejected). |
402 | De saldo dy't it model spile, kin de hâlding net dekken. |
403 | Oer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(key_limit_reachedYn de leafde max_tokens Of hege de haadstêd. |
404 | It earste krantsje kaam út yn april (model_not_found). |
429 | Oer klasseboek en aktiviteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(upstream_rate_limited). |
502, 503 | It earste krantsje kaam út yn april (upstream_errorIt earste krantsje kaam út yn april (upstream_overloadedYn Retry-AfterNiks wurdt belutsen as de provider ferbûn foar de poging. |
De statuscodes fan elke endpoint aksjes binne listed ûnder De fouten.
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);
Strjitte
Yn "stream": true De respons komt as server-sendende eveneminten wylst it model it skriuwt. chat.completion.chunk Yn A data: De line, en de stream endet mei data: [DONE]De redenen komme yn
delta.reasoning_contentDe antwurd yn delta.content.
Stream alles dy't mear as oer 100 sekonden kin nedich, lykas in lange antwurd, in grutte
max_tokens Of in redeneringsmodel. In fraach dy't net streamen wurdt, sendt niks oant it antwurd is foltôge, en it netwurk tusken jo en Nymbot kin in leauwe ferbûn ferstjoere nei sa'n 100 sekonden; it model is noch foltôge en wat it skreaun is geladen, mar it antwurd is verloren.
Strjitte
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]
- Lijnen begjinne mei
:Der binne alle 15 sekonden kommentaasjes útstjoerd, wylst it model denkt. - Skriuw dy yn
"stream_options": {"include_usage": true}om de lêste kruk oer te krijen, mei in legechoicesDe kosten, de kosten en denymbotIt Object. - De lading fertsjintwurdiget nei de stream endet. As jo de ferheging ferstjoere earst, wurdt it model net stoppe: Nymbot liedt de rest fan 'e provider's stream, foar maksimaal 25 sekonden, om syn token tellen te krijen, en jo betelle wat de provider rapportearret.
- In fergeliking foar de earste chunk, lykas
401Of402, komt werom as ordinêre JSON mei syn statuscode, net as in stream.data: {"error": {…}}De stêd begjint en de stêd begjint[DONE]. - Requests mei tools, en modellen op OpenAI's Responses ferfier, net streamen út de 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);
}
It Tool Calls
Skriuw dy yn foar funksjes yn tools En it model kin freegje om in te rjochtsjen ynstee fan antwurd. tool In berjocht mei itselde
tool_call_idNymbot wurket noch altyd jo funksjes; it ferstjoert de model's fraach werom nei jo.
tool_choice Yn "auto", "none",
"required" Of {"type": "function", "function": {"name": "…"}}Oer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(capabilities.toolsDe gereedschappen wurde weigerd. 400 unsupported_tool Yn nymbot/auto en op de pear katalogemodellen dy't rjochtsje op OpenAI's Responses-transport, dy't Nymbot kinne net ferwiderje.
Yn "stream": true, in fraach mei tools rûn yn ien stuk en wurdt dan ferstjoerd as in normale chunk sequency: de rol, ien chunk drage elke tool call mei syn indeks, id, namme en arguminten, en de finish chunk.
It antwurd is deels
"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's yn in aanvraag
Modellen mei capabilities.vision Kinne jo foto's lêze. image_url
part oan in brûkersbericht, mei in publyk https:// Link en A
data:image/…;base64, Oer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(400 invalid_image_urlYn optionele detail Yn
auto, low Of high.
Yn nymbot/auto, in fraach mei in ôfbylding yn it wurdt rjochte nei in standert model dat kin sjen. capabilities.vision Skriuw dy yn foar foto's mei
400 unsupported_contentFoto's kinne allinich yn brûkersûndersiken wurde. In link sil nei in iepenbiere hûs rjochtsje; Nymbot ferstjoert it ôfbyld oan de provider fan it model en bewarret it net.
In ôfbylding wurdt belegge as de input tokens de provider telle foar it, lykas de rest fan de fraach.
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);
Begjin
Modellen mei capabilities.reasoning Dêrby kinne se yn 'e ûndersyk mear of minder antwurdje. reasoning_effort ("minimal", "low",
"medium" Of "high"Yn "reasoning": {"effort": "high"}Of oanfolling :thinking Op in model sûnder redenering is de setup ignored. nymbot/auto, :thinking De útfiering fan de standert rûte.
Op Anthropic modellen wurdt de ynspanning in gedachtebudget fan likernôch 1,000, 2,000, 8,000 of 16,000 tokens, nimmer mear as max_tokens Yn it gefal is de gedachte ôfsteld as
tool_choice Yn 'e foarbyld, en doe't de fraach nei in tool loop (sin lêste berjocht is in tool resultaat), omdat Anthropic nedich de eardere signearre gedachte om it te hâlden.
De redenering komt werom yn message.reasoning_contentYn
delta.reasoning_content Yn it gefal is der noch in oanspraak, dêr't de oanspraak yn it gefal is. completion_tokensSommige leveransiers keapje de redeneringstekst net yn alle gefallen, en it wurdt noch betelle.
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);
Model fan suffixes
In oanfolling op 'e modelnaam feroarje hoe't de fraach wurdt behannele, sûnder in oare fjild. anthropic/claude-sonnet-5:online.
| It genôch | Effekt |
|---|---|
:online | Sykje it web earst, lykas plugins: [{"id": "web"}]Yn Web ûndersyk. |
:thinking | Hoge redenering ynspannings; op nymbot/autoOp in model dy't gjin reden kin meitsje, 400 model_not_found It earste krantsje kaam út yn “no endpoints found”. |
:nitro, :floor, :exacto, :extended | Elke katalogusmodel hat ien rûte, dus der is gjin flugger, goedkoper of langer ien om te keapjen; de oanfollings binne gefoel, dus modelnamen dy't kopiearre wurde fan oare tsjinsten noch wurkje. |
Elke oare sufleks wurdt negearre. De hiele namme wurdt earst probearre, dus in model dy't syn id echt in kolon befettet, noch wurkje; ynfolling dat, sufleksjes wurde út de end ien op in tiid tafoege oant in model matches. In model namme kin op maksimaal 200 karakters lang wêze mei op maksimaal 4 sufleksjes; in langer ien wurdt ferwiderd mei 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);
Web ûndersyk
Ien chatmodel kin antwurde fan it live web. Nymbot leit foar de lêste brûkersbericht (yn syn earste 2000 karakters), liedt de bêste siden en jout se oan it model mei de fraach, markearre as eksterne ynhâld dat it model gjin ynstruksjes moat nimme fan.
- Altijd ûndersyk:
"plugins": [{"id": "web", "max_results": 5}]Yn A:onlineYn it foarbyld. - Sjoch doe't it helpt:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]It wurdt ek akseptearre asweb_search_previewOfopenrouter:web_searchNymbot ûndersykje allinich doe't de fraach lykwols aktuele ynformaasje nedich hat, itselde test dat de app brûkt.
max_results is 5 by default en op maksimaal 10. De bronnen komme werom yn
nymbot.web_search.sourcesElk mei in title, snippet en
urlEn as url_citation Noot yn de boodschap.
Elke ûndersyk dy't rûn kostet $ 0,008, konvertearre nei sats, op 'e top fan' e tokens, en it is ûnderdiel fan 'e hâld.
It antwurd is deels
"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);
Antwurd brûkt
It is it nijere format fan OpenAI, brûkt troch de OpenAI Agents SDK en troch Codex. It rûn op itselde modellen, billing en funksjes as Chat Completions.
POST https://nymbot.ai/api/v1/responses Der is gjin fire key nedich.
| De fjild | De type | Neffens | Beskriuwing |
|---|---|---|---|
model | Strjitte | Ja | As foar Chat komplettenYnklusyf de suffixes. |
input | String of array | Ja | In string, of in list fan items: berichten (roles) user, assistant, system, developerYn input_text, input_image en output_text De delen, en function_call en function_call_output It giet om gereedschappen. input_image Hâldt in image_url Link of data URL, net in file id. reasoning en web_search_call De items binne skippe; item_reference Hy is nei. |
instructions | Strjitte | No yn | Ynstruksje foar systeem. |
max_output_tokens | Yntegraasje | No yn | De meast te skriuwen. |
temperaturetop_p | Nûmer | No yn | Sampling kontrollen, wêr't it model harren nimt. |
toolstool_choiceparallel_tool_calls | array, string of object, boolean | No yn | It earste krantsje kaam út yn april Nadere informatie ({"type": "function", "name": …, "parameters": …}Yn A web_search Of web_search_preview De tool wurdt Web ûndersyk De oare ynboude tools wurde ferwiderd. |
reasoning | It Object | No yn | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh en max Meitsje high; none Hâld it út. |
text.formatresponse_format | It Object | No yn | Structured output, as in JSON-skema of json_object. |
metadata | It Object | No yn | Op maksimaal 16 string waarden, sleutels maksimaal 64 karakters en waarden maksimaal 512. |
stream | Boolean | No yn | Stream eveneminten as beskreaun hjirûnder. |
store | Boolean | No yn | Niks is opslaan, en it antwurd is altyd: "store": false. |
previous_response_idconversationbackground | String, Object en Boolean | No yn | No ynsteld wurde: 400 unsupported_parameterReactions are not stored, dus send de hiele konversaasje yn input Elke kear. |
Antwurd
{
"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 }
}
In foarbyld ferkeapet yn output As a function_call It item mei
call_id, name en argumentsSende it resultaat werom as a
function_call_output It stuit mei itselde call_idAs it model it weromkomt, is it in reasoning It item mei reasoning_text De titel is opnommen earst. status Yn incomplete As it antwurd komt
max_output_tokens Of de provider weigerde, mei
incomplete_details.reason Sette dy max_output_tokens Of
content_filterDe antwurd ek echoet de ynstellings fan 'e fraach (temperatuer, gereedschap, gereedschapskearjen, ensfh) as OpenAI's do, en draait de nymbot It kostet objekten.
Yn elk evenemint is in event: De line en a data: De line mei a
sequence_numberYn dizze orde: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedYn elke oantal response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneYn de finale response.completed Yn 't gefal en yn 't gefal is in antwurd yn 't gefal response.incomplete Yn 't gefal, en in mislukking nei de stream begûn mei response.failedIt giet om it meitsjen fan eigen ûnderwerpen mei response.reasoning_text.delta en .doneTool roepen komme nei it berjocht, elk as in item mei response.function_call_arguments.delta
en .done.
| Status fan | As |
|---|---|
400 | No yn model Of input; previous_response_id, conversation, background Of in item_reference (unsupported_parameter); in oanpaste tool of content type. |
402, 403, 404, 429, 502, 503 | As foar chat kompletten. |
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);
Anthropyske berichten
Anthropic's format, foar de Anthropic SDK's en Claude Code. It wurket mei alle modellen yn 'e katalogus, net allinnich Claude: de fraach wurdt vertaald, útfierd troch itselde pipeline, en vertaald werom.
POST https://nymbot.ai/api/v1/messages - in API-sleutel is nedich, as x-api-key Of Authorization: Bearer.
De anthropic-version en anthropic-beta Anthropyske modelnamen wurde oanpast oan de katalogus, dus Claude Code en de SDKs wurkje mei de nammen dy't se al brûke:
- In namme dy't de katalogus ken, lykas
claude-sonnet-5Ofanthropic/claude-opus-5It wurdt brûkt as it is. - It earste krantsje kaam út yn april (
-20260514),-latestYn in ferzje as-v1Yn 'e foarbyld fan 'e tag as[1m]En inanthropic/Ofanthropic.Oer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(claude-haiku-4-5Finneclaude-haiku-4.5). - As dat noch niks matches, wurdt de famylje (Opus, Sonnet of Haiku) brûkt, solle de ferzje fan de katalogus itselde of nijere is as de ferzje foar.
- In namme dy't niks fûn komt werom
404not_found_error.
| De fjild | De type | Neffens | Beskriuwing |
|---|---|---|---|
model | Strjitte | Ja | In katalogus model id, of in Anthropic model namme. |
max_tokens | Yntegraasje | Ja | De meast te skriuwen. |
messages | Yn array | Ja | user en assistant Hjoed, mei text, image (base64 of URL bron) tool_use en tool_result De blokken. thinking Blokken út eardere beurten wurde akseptearre en droegen. |
system | String of array | No yn | System prompt, as in string of tekstblokken. |
temperaturetop_p | Nûmer | No yn | Sampling kontrollen, wêr't it model harren nimt. top_k It wurdt akseptearre en fersoarge. |
stop_sequences | Ynstrumint Strings | No yn | De tekst dy't de antwurd eindigt, hat maksimaal 4 strings, elk maksimaal 256 karakters. |
toolstool_choice | Ynstrumint, Object | No yn | Ynstrumint mei name, description en input_schemaYn A web_search De server-tool wurdt op Web ûndersykAnthropic's oare ynboude tools (bash, tekst-editor, kompjûter gebrûk) wurde weigere mei unsupported_tool. tool_choice Yn auto, any, tool Of noneYn disable_parallel_tool_use. |
thinking | It Object | No yn | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} Of {"type": "disabled"}De budget kiest in ynspanningsnivo: ûnder 2.048 minimum, fan 2.048 low, fan 8.192 medium, fan 16.384 hege. output_config.effortOf in hege. |
stream | Boolean | No yn | Stream yn Anthropic's event format. |
metadata | It Object | No yn | It is akseptearre en negearre. |
Antwurd
{
"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 Hy kin ek hâlde tool_use Blokken en A thinking
De blokken, dy't signature Hy is leech. stop_reason Yn
end_turn, max_tokens, tool_use Of refusalHy wurket op itselde manier as finish_reason Yn
Chat kompletten; stop_sequence It is altyd
nullYn 't gefal is de antwurd ferbettere. input_tokens Der binne in soad foarbylden dy't yn 'e ûndersyk binne, dy't yn 'e ûndersyk binne.
nymbot It object en de X-Nymbot-Cost-Sats De header.
Streamed, de eveneminten binne Anthropic's: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta Of thinking_delta),
content_block_stop, message_delta De reden foar it gebrûk en de nymbot De kosten fan it bedriuw, en message_stopYn A ping It systeem wurdt ek alle 15 sekonden ferstjoerd wylst it model wurket. Tool roepen komme nei de tekst, elk as in
tool_use Blok mei syn hiele yntrodusearre yn ien input_json_delta.
Feroaringen op dit eindpunt brûke it format fan Anthropic:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}It is in korte balans. 402 billing_errorIn oantal leveransiers
503 overloaded_errorIn mislukking nei it begjin fan 'e stream wurdt ferstjoerd as in error Yn evenemint.
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);
Count Tokens
In schatting fan hoeveel input tokens in Messages-ferhâlding brûkt, dus in kliïnt kin kontrolearje foardat it ferstjoert.
POST https://nymbot.ai/api/v1/messages/count_tokens Jo moatte in API key. frije.
It lichem is itselde as foar BeskriuwingYn max_tokensDe telle is in schatting: de karakters fan 'e systeem prompt, berichten, tool calls en tool definysjes dividearre troch fjouwer, plus 1,600 foar elke ôfbylding. It is net de eigen tokenizer fan' e provider, dus de echte telle kin ferskille.
Antwurd
{ "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);
List fan modellen
Elke model en generator dy't de API aksepteart, mei wat it kostet. De list wurdt learde út itselde live katalogus as de picker fan 'e app, dus it is altyd wat de server sil rjochtsje.
GET https://nymbot.ai/api/v1/models — no need a key. Skriuw dy yn foar 5 minuten.
GET /api/v1/models/{id} Der is 1 yntrekking.
| De fjild | De type | Neffens | Beskriuwing |
|---|---|---|---|
type | Ynstruksje foar Query | No yn | chat Yn de ûndersteande image, video, audio, embedding Of allDer binne ferskate foarbylden, lykas image,video. |
Prizen binne wat jo betelje, mei de fergoeding en marge al yn, yn dollars en yn sats oan de hjoeddeistige Bitcoin priis. balance Dat betsjut wat it model spile.
nymbot_key is de koarte namme fan it model yn de app. created is altyd 0 omdat de katalogus net registrearret doe't in model is bygean. per_request ynstee.
nymbot/auto It is altyd earst, priis as variableYn A
routes It list listet visioanen en redenen, mar net tools.
GET /api/v1/models/{id} akseptearret de selde namen en alias's as in fraach, en keart de yntrekking foar it model dy't se oplosse.
Antwurd
{
"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"
}
]
}
De oare soarten:
- Ynbeelding De yntredings binne
capabilities(accepts_image_url,requires_image_url,editEn in priisper_generation. - De video De yntredings binne
max_duration_secondsenresolutionsEn in priisper_secondYn elke resolúsje. - Yn audio De yntredings binne
audio_typespeechOftranscriptionDe priisper_1k_charsOfper_minute. - Ynbrekken De yntredings binne
dimensions,context_length,max_inputsEn in priis per miljoen input tokens.
Priser markearre "estimated": true is de estimat fan 'e app foar in generator wier priis is net publisearre. type Wêrom 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);