Preskočiť na obsah
Späť na Nymbot

Znalostná báza Vývojári

Chat, odpovede a správy

Tri spôsoby, ako sa opýtať modelu niečo, v troch formátoch klienti už hovoria, všetky bežia na rovnakých modeloch a účtované rovnakým spôsobom.

Chat dokončenie

OpenAI chat formát, a ten, ktorý takmer každý nástroj podporuje. Odoslať konverzáciu doteraz a získať ďalšiu správu späť.

POST https://nymbot.ai/api/v1/chat/completions Potrebujete API kľúč.

iba model a messages Vzorkovací parameter, ktorý vybraný model neberie, sa spúšťa bez chyby, takže telo jednej požiadavky pracuje cez modely. supported_parametersTo, čo sa odmieta namiesto toho, aby sa stratilo, je niečo, čo model nemôže urobiť vôbec: obrázky pre model, ktorý nemôže vidieť, nástroje pre model, ktorý ich nemôže zavolať.

PoľnétypPotrebnéPopis
modelStringováánonymbot/auto (alebo auto) pre smerovanie Nymbotu na štandardnej bilancii alebo katalógový model id, ako je napríklad anthropic/claude-sonnet-5 na Pro zostatku. Akceptujú sa aj krátke mená a prezývky aplikácie. Stačí.
messagesArrayánoRozhovor - úlohy system, developer (zobrazuje sa ako systém) user, assistant a toolObsah je reťazec alebo zoznam text a image_url časti; obrázky iba v používateľských správach. input_audio Súbory sú odmietnuté.
streamboľavýniePošlite odpoveď tak, ako je napísaná. pozri Streamovanie.
stream_optionsObjektynie{"include_usage": true} pridáva konečnú časť s počtom tokenov a nákladmi.
max_tokens
max_completion_tokens
integernieNajviac žetónov na písanie. Znížená na maximum modelu, ak je vyššia. Tiež určuje, koľko je držané z vášho zostatku, takže menšie číslo potrebuje menej úveru na začiatok.
temperature
top_p
ČíslonieSamplingové kontroly : temperature od 0 do 2, top_p od 0 do 1.
stopString alebo arraynieText na konci odpovede: reťazec alebo maximálne 4 reťazce, z ktorých každý má maximálne 256 znakov. nymbot/auto.
seedintegerniePre opakované vzorkovanie, kde ho model podporuje.
presence_penalty
frequency_penalty
ČíslonieOpakované kontroly, každé od -2 do 2.
response_formatObjektynie{"type": "json_object"} alebo {"type": "json_schema", "json_schema": {…}}, kde model podporuje.Nepoužíva sa nymbot/auto.
tools
tool_choice
parallel_tool_calls
Array, String alebo Object, BooleannieFunkcia volania. pozri Nástrojové hovory. a web_search Nástroj sa otáča web vyhľadávanieNa maximálne 128 nástrojov a 512 KB definícií, vložených na maximálne 64 úrovniach hĺbky; viac je 400.
reasoning_effort
reasoning
Stretnutie, objektnie"minimal", "low", "medium" alebo "high"alebo {"effort": "high"}. "none" alebo {"enabled": false} Odstráňte ho. pozri Rozumenie.
pluginsArraynie[{"id": "web", "max_results": 5}] vždy najprv vyhľadáva web. Až 10 výsledkov.
nintegernie1. všetko ostatné sa vracia 400.
logit_bias
user
metadata
Objekt, String alebo ObjektniePrijaté a neodosielané. logit_bias mapy s maximálne 300 identifikátormi tokenov na čísla od -100 do 100; user maximálne 256 znakov; metadata uchováva maximálne 16 hodnôt reťazcov, kľúče až do 64 znakov a hodnoty až do 512.

Odpoveď je obyčajná chat.completionV prípade, že náklady v usage.cost (v dolároch) a v nymbot Na objekty. model je vyriešený model id, takže krátky názov sa vráti ako celý. Ak model uvažoval pred odpoveďou, jeho uvažovanie je v message.reasoning_contentoddelené od odpovede.

odpoveď

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

finish_reason je vypracovaný z toho, čo sa vrátilo, pretože poskytovatelia to hlásia inak: tool_calls Keď sa modely pýtajú nástroje, length keď odpoveď použila každý povolený token (alebo model ich strávil všetkými uvažovaním a nenapísal žiadnu odpoveď), content_filter keď poskytovateľ odmietol, a stop V opačnom prípade usage.completion_tokens_details.reasoning_tokens je vždy 0: skryté tokeny sú spočítané a účtované v completion_tokens.

statusuKedy
400nie model alebo messages (missing_required_parameter); zvuková alebo súborová časť alebo obrázky pre model, ktorý ich nemôže vidieť (unsupported_content); viac ako 20 obrázkov (too_many_images); vzorkový parameter nesprávneho typu alebo mimo rozsahu (invalid_value); odkaz na obrázok, ktorý nie je verejný (invalid_image_url); nástroje na modeli, ktorý ich nemôže nazvať (unsupported_tool); n Iné ako 1; a :thinking Príkladom je príklad, ktorý sa nedá vysvetliť (model_not_found(alebo poskytovateľ požiadavku zamietol)upstream_rejected).
402Zostatok, ktorý model vynakladá, nemôže pokrývať držbu.
403Najhorší prípad nezodpovedá krytu kľúča (key_limit_reached) nižšie max_tokens Alebo zdvihnúť hlavu.
404Žiadny model s týmto názvom (model_not_found).
429V prípade, že je kľúčová čiastková hranica alebo poskytovateľ (upstream_rate_limited).
502, 503Poskytovateľ zlyhal (upstream_error) alebo je preťažený (upstream_overloaded, s Retry-AfterNič nie je účtované, pokiaľ poskytovateľ neúčtuje za pokus.

Stavové kódy každej koncovej akcie sú uvedené pod Chyby.

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

Streamovanie

s "stream": true odpoveď prichádza ako udalosť odoslaná serverom, zatiaľ čo model ju píše. chat.completion.chunk je a data: line, a prúd končí s data: [DONE]Rozum prichádza do delta.reasoning_contentOdpoveď v delta.content.

Streamujte čokoľvek, čo môže trvať viac ako približne 100 sekúnd, napríklad dlhú odpoveď, veľkú max_tokens Žiadosť, ktorá nie je streamovaná, neodosiela nič, kým odpoveď nie je kompletná, a sieť medzi vami a Nymbotom môže uzavrieť prázdne spojenie po približne 100 sekundách; model stále končí a to, čo napísal, je načítané, ale odpoveď je stratená.

Streamovanie

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]
  • Línia začínajúca s : sú pripomienky naživo, odoslané každých 15 sekúnd, zatiaľ čo model premýšľa.
  • Opýtajte sa "stream_options": {"include_usage": true} dostať posledný kúsok hore, s prázdnym choices, token počíta, náklady a nymbot Na objekty.
  • Ak zatvoríte pripojenie skôr, model sa nezastaví: Nymbot číta zvyšok prúdu poskytovateľa, až do 25 sekúnd, aby získal jeho počet tokenov, a platíte to, čo poskytovateľ hlásí.
  • Chyba pred prvým chunkom, ako napríklad 401 alebo 402, sa vracia ako obyčajný JSON so svojím stavovým kódom, nie ako prúd. data: {"error": {…}} udalosť, a prúd končí bez [DONE].
  • Žiadosti s nástrojmi a modely na OpenAI odpovede dopravy, nie prúdi z poskytovateľa. stále odpovedajú s platným prúdom, odoslaný po odpovedi je kompletný.

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

Nástroj volania

Popíšte funkcie v tools a model môže požiadať o volanie namiesto odpovedania. spustíte funkciu, pridáte jej výsledok ako tool Správa s rovnakým tool_call_idNymbot nikdy nespustí vaše funkcie; odovzdá požiadavku modelu späť vám.

tool_choice berie "auto", "none", "required" alebo {"type": "function", "function": {"name": "…"}}Zoznam modelov označuje, ktoré modely môžu volať nástroje (capabilities.toolsNástroje sú odmietnuté 400 unsupported_tool je nymbot/auto a na niekoľkých katalógových modeloch, ktoré bežia na doprave OpenAI Responses, na ktoré Nymbot nemôže preniesť nástroje.

s "stream": true, žiadosť s nástrojmi beží v jednom kúsku a potom sa odošle ako normálna sekvencia kusov: úloha, jeden kus, ktorý nesie každý výzva nástroja s jeho indexom, id, názov a argumenty a konečný kus.

Odpoveď, čiastočne

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

Obrázky v žiadosti

Modely s capabilities.vision môžete čítať obrázky. pridať image_url časť na používateľskú správu, buď s publikom https:// Link alebo A data:image/…;base64, URL. Až 20 obrázkov na žiadosť. SVG obrázky sú zamietnuté, a tak je odkaz viac ako 4 096 znakov alebo jeden s užívateľským menom alebo heslom v ňom (400 invalid_image_url) je voliteľný detail je auto, low alebo high.

s nymbot/auto, žiadosť s obrázkom v ňom sa presmeruje na štandardný model, ktorý môže vidieť. capabilities.vision Odmietnuť obrázky s 400 unsupported_contentObrázky môžu byť len v používateľských správach. Odkaz musí poukázať na verejný hostiteľ; Nymbot odovzdá obrázok poskytovateľovi modelu a nezachováva ho.

Obrázok je účtovaný ako vstupné tokeny, ktoré pre neho poskytovateľ počíta, rovnako ako zvyšok žiadosti.

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

odôvodnenie

Modely s capabilities.reasoning môžete premýšľať predtým, než odpovedia. požiadajte o viac alebo menej z toho s reasoning_effort ("minimal", "low", "medium" alebo "high") alebo "reasoning": {"effort": "high"}alebo pridať :thinking na názov modelu, čo znamená vysoké úsilie. Na modeli bez odôvodnenia je nastavenie ignorované. nymbot/auto, :thinking odošle žiadosť na štandardnú trasu odôvodnenia.

Na antropických modeloch sa úsilie stáva rozpočtom na myslenie približne 1 000, 2 000, 8 000 alebo 16 000 žetónov, nikdy viac ako max_tokens myšlienok, keď je to ponechané tool_choice vynúti nástroj a keď požiadavka pokračuje v obvode nástrojov (jeho posledná správa je výsledkom nástroja), pretože Anthropic potrebuje predtým podpísané myslenie, aby ju obnovil.

Rozum sa vracia späť do message.reasoning_contentalebo delta.reasoning_content pri streamovaní, nikdy nezmiešané do odpovede. Rozum je výstup a je účtovaný ako taký, vo vnútri completion_tokensNiektorí poskytovatelia nevrátia zdôvodňujúci text vôbec a stále sa účtuje.

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

Modelové suffixy

Prispôsobenie názvu modelu mení spôsob, akým sa žiadosť spracováva, bez ďalšieho poľa. Pracujú na plných id a krátkych menách rovnako, ako v anthropic/claude-sonnet-5:online.

Dostatokúčinok
:onlineVyhľadávanie na webe ako prvé plugins: [{"id": "web"}]- vidieť web vyhľadávanie.
:thinkingVysoká úroveň úsilia; na nymbot/autona model, ktorý nemôže rozumieť, 400 model_not_found s “ žiadny koncový bod nájdený”
:nitro, :floor, :exacto, :extendedKaždý model katalógu má jednu trasu, takže nie je rýchlejšia, lacnejšia alebo dlhšia na výber; prívesky sú povolené, takže názvy modelov skopírované z iných služieb stále fungujú.

Akýkoľvek iný prídavok je ignorovaný. Celý názov sa najprv vyskúšal, takže model, ktorého id skutočne obsahuje hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý 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 vyhľadá poslednú používateľskú správu (jeho prvých 2000 znakov), číta najlepšie stránky a dáva ich modelu s otázkou, označenú ako vonkajší obsah, z ktorého by model nemal brať pokyny.

  • Vždy hľadať: "plugins": [{"id": "web", "max_results": 5}]alebo a :online Stačí na model.
  • Hľadať, keď to pomáha: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Taktiež bol prijatý ako web_search_preview alebo openrouter:web_searchNymbot vyhľadáva len vtedy, keď sa zdá, že otázka potrebuje aktuálne informácie, rovnaký test, ktorý aplikácia používa.

max_results je 5 v predvolenom nastavení a maximálne 10. zdroje sa vrátia do nymbot.web_search.sourcesKaždý s a title, snippet a urla ako url_citation Poznámky k posolstvu.

Každé vyhľadávanie, ktoré beží, stojí $ 0,008, prevedené na sats, na vrchole žetónov, a je to súčasť držby.Stránky, ktoré číta, sú tiež vstupné žetóny, takže odpoveď z webu stojí viac ako rovnaká otázka položená chladne, niekedy niekoľkonásobne viac.

Odpoveď, čiastočne

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

Odpoveď API

Novší formát OpenAI, ktorý používa OpenAI Agents SDK a Codex. Beží na rovnakých modeloch, fakturácii a funkciách ako Chat Completions.

POST https://nymbot.ai/api/v1/responses Potrebujete API kľúč.

PoľnétypPotrebnéPopis
modelStringováánoAko pre Chat dokončenieSúčasťou sú aj suffixy.
inputString alebo arrayánoReťazec alebo zoznam položiek: správy (roly user, assistant, system, developer) s input_text, input_image a output_text časti a function_call a function_call_output Položky pre nástroje. input_image Vezmite si image_url odkaz alebo dátovú adresu URL, nie súbor id. reasoning a web_search_call predmety sú vynechané; item_reference Je to odmietnuté.
instructionsStringovániePokyny pre systém.
max_output_tokensintegernieNajviac tokenov na písanie.
temperature
top_p
ČíslonieSampling ovládacie prvky, kde ich model berie.
tools
tool_choice
parallel_tool_calls
Array, String alebo Object, BooleannieFunkčné nástroje, vo forme odpovedí ({"type": "function", "name": …, "parameters": …}) a web_search alebo web_search_preview Nástroj sa otáča web vyhľadávanie Iné vstavané nástroje sú odmietnuté.
reasoningObjektynie{"effort": "minimal" | "low" | "medium" | "high"}. xhigh a max znamená high; none Odstráňte to.
text.format
response_format
ObjektynieŠtruktúrovaný výstup, ako schéma JSON alebo json_object.
metadataObjektynieVrátené nezmenené v odpovedi Pri maximálne 16 hodnotách reťazca, kľúče až 64 znakov a hodnoty až 512.
streamboľavýnieStream udalosti ako je popísané nižšie.
storeboľavýnieNič nie je uložené, a odpoveď vždy hovorí "store": false.
previous_response_id
conversation
background
String, objekt a boolnieNie sú podporované: 400 unsupported_parameterOdpovede nie sú uložené, takže odošlite celú konverzáciu do input Každú chvíľu

odpoveď

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

Žiadosť o nástroj sa zobrazí v output ako a function_call Položka s call_id, name a argumentsOdoslať výsledok späť ako a function_call_output Položka s rovnakým call_idRozumenie, keď ho model vráti, je reasoning Položka s reasoning_text obsah, ktorý je uvedený ako prvý. status je incomplete Keď odpoveď zasiahne max_output_tokens alebo poskytovateľ odmietol, s incomplete_details.reason Nastaviť 2 max_output_tokens alebo content_filterOdpoveď tiež odzrkadľuje nastavenia požiadavky (teplota, nástroje, výber nástrojov atď.), ako to robí OpenAI, a prenáša nymbot Náklady na objekt.

Streamované, každá udalosť je event: Linka a A data: Linka s A sequence_numberv tomto poradí: response.created, response.in_progress, response.output_item.added, response.content_part.addedAkýkoľvek počet response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.donea nakoniec response.completed s použitím a nákladmi. odpoveď skracovať krátke konce s response.incomplete miesto, a zlyhanie po tom, čo prúd začal s response.failedRozumenie prúdov ako vlastného predmetu s response.reasoning_text.delta a .doneNástrojové hovory prichádzajú po správe, každá ako položka s response.function_call_arguments.delta a .done.

statusuKedy
400nie model alebo input; previous_response_id, conversation, background alebo jeden item_reference (unsupported_parameter); nepodporovaný nástroj alebo typ obsahu.
402, 403, 404, 429, 502, 503Pokiaľ ide o chatové dokončenia.

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

Antropické posolstvá

Funguje s každým modelom v katalógu, nielen s Claude: žiadosť sa preloží, spustí sa cez ten istý potrubie a preloží sa späť.

POST https://nymbot.ai/api/v1/messages - potrebuje kľúč API, ako x-api-key alebo Authorization: Bearer.

na anthropic-version a anthropic-beta Antropické názvy modelov sa zhodujú s katalógom, takže Claude Code a SDK pracujú s názvami, ktoré už používajú:

  • Názov, ktorý katalóg pozná, ako napríklad claude-sonnet-5 alebo anthropic/claude-opus-5Používa sa tak, ako je.
  • V opačnom prípade dátum (-20260514), -latest, verzia tag ako -v1, bracketed tag ako [1m] a jeden anthropic/ alebo anthropic. Predpony sú odstránené a bodky a dosky vo verzii sa skúšajú oboma spôsobmi (claude-haiku-4-5 nájsť claude-haiku-4.5).
  • Ak sa to stále nezhoduje, použije sa rodina (Opus, Sonnet alebo Haiku), pokiaľ je verzia katalógu rovnaká alebo novšia ako tá požadovaná.
  • Meno, ktoré sa nezhoduje s ničím, sa vráti 404 not_found_error.
PoľnétypPotrebnéPopis
modelStringováánoNázov katalógového modelu alebo názov antropického modelu.
max_tokensintegeránoNajviac tokenov na písanie.
messagesArrayánouser a assistant Vráťme sa, s text, image (base64 alebo zdroj URL), tool_use a tool_result a blokov. thinking Bloky z predchádzajúcich kol sa prijímajú a klesajú.
systemString alebo arraynieSystem prompt, ako reťazec alebo textové bloky.
temperature
top_p
ČíslonieSampling ovládacie prvky, kde ich model berie. top_k bol prijatý a zrušený.
stop_sequencesNastavenie stringovnieText, ktorý končí odpoveďou. Maximálne 4 reťazce, z ktorých každý má maximálne 256 znakov.
tools
tool_choice
Objekty, objektynieNástroje s name, description a input_schema. a web_search Serverové nástroje sa otáčajú web vyhľadávanieOstatné vstavané nástroje spoločnosti Anthropic (bash, textový editor, používanie počítača) sú odmietnuté unsupported_tool. tool_choice berie auto, any, tool alebo none, a disable_parallel_tool_use.
thinkingObjektynie{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} alebo {"type": "disabled"}Rozpočet si vyberá úroveň úsilia: pod 2 048 minimálne, z 2 048 nízke, z 8 192 stredné, z 16 384 vysoké. output_config.effortAlebo aj vysoko.
streamboľavýnieStream v formáte podujatia spoločnosti Anthropic.
metadataObjektyniePrijaté a ignorované.

odpoveď

{
  "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 Môže tiež držať tool_use Blokovanie a thinking Blok, ktorý signature je prázdny stop_reason je end_turn, max_tokens, tool_use alebo refusalpracoval rovnakým spôsobom ako finish_reason je Chat dokončenie; stop_sequence Vždy je null, aj keď stopová sekvencia ukončila odpoveď. input_tokens počíta iba čerstvé vstupy; vstupy vo vyrovnávacej pamäti sa nachádzajú v dvoch poliach vyrovnávacej pamäte. nymbot Objekt a jeho X-Nymbot-Cost-Sats a header

Streamované, udalosti sú Anthropic's: message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta alebo thinking_delta), content_block_stop, message_delta s dôvodom zastavenia, použitie a nymbot náklady na objekt, a message_stop. a ping sa tiež odosiela každých 15 sekúnd, kým model pracuje. Výzvy nástrojov prichádzajú po texte, každý ako tool_use blok s celým jeho vstupom v jednom input_json_delta.

Chyby na tomto koncovom bode používajú formát Anthropic: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Krátka rovnováha je 402 billing_errorPreťažený poskytovateľ 503 overloaded_errorZlyhanie po spustení prúdu sa odošle ako error udalosťou .

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

Počítanie tokenov

Odhad toho, koľko vstupných tokenov by požiadavka na správy použila, takže klient môže skontrolovať pred odoslaním.

POST https://nymbot.ai/api/v1/messages/count_tokens - potrebuje API kľúč. zadarmo

Telo je rovnaké ako Posolstvábez max_tokens; názov modelu sa musí vyriešiť. Počítanie je odhad: znaky systémovej výzvy, správy, volania nástrojov a definície nástrojov rozdelené štyrmi, plus 1600 pre každý obrázok. Nie je to vlastný tokenizér poskytovateľa, takže skutočný počet sa môže líšiť. Kľúč, ktorý dosiahol svoj limit, ho stále môže používať.

odpoveď

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

Zoznam modelov

Každý model a generátor API akceptuje, s tým, čo to stojí.Zoznam je čítaný z rovnakého živého katalógu ako vyberateľ aplikácie, takže je to vždy to, čo server bude bežať.

GET https://nymbot.ai/api/v1/models - žiadny kľúč potrebný. skryté na päť minút.

GET /api/v1/models/{id} Vráti sa 1 vstup.

PoľnétypPotrebnéPopis
typeString (požiadavka)niechat (z dôvodu nedodržania podmienok), image, video, audio, embedding alebo allNiektoré môžu byť použité, ako image,video.

Ceny sú to, čo platíte, s poplatkom a maržou už v dolároch a v sadzbách za aktuálnu cenu Bitcoinu. balance Hovorí o tom, akú bilanciu model vynakladá. nymbot_key je krátky názov modelu v aplikácii. created je vždy 0, pretože katalóg nezaznamenáva, kedy bol model pridaný. per_request namiesto toho.

nymbot/auto je vždy prvý, cena ako variable, s a routes Zoznam, ktorý uvádza sadzby každej štandardnej trasy.Zoznamuje víziu a uvažovanie, ale nie nástroje.

GET /api/v1/models/{id} prijíma rovnaké mená a prezývky ako žiadosť a vráti záznam pre model, na ktorý sa rozhodnú.

odpoveď

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

Ostatné typy :

  • Obrázok Vstupy majú capabilities (accepts_image_url, requires_image_url, edit) a cena per_generation.
  • Videá Vstupy majú max_duration_seconds a resolutionsa cenou per_second pre každé rozhodnutie.
  • audiokniha Vstupy majú audio_type speech alebo transcription- cena per_1k_chars alebo per_minute.
  • Vložiť Vstupy majú dimensions, context_length, max_inputs Cena za milión vstupných tokenov.

Ceny označené "estimated": true je odhad aplikácie pre generátor, ktorého cena nie je zverejnená. type Vrátenie 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);