Siirry sisältöön
Palaa sivulle Nymbot

Tietopohja Kehittäjät

Chat, vastaukset ja viestit

Kolme tapaa kysyä mallilta jotain, kolmessa muodossa asiakkaat puhuvat jo, kaikki toimivat samoilla malleilla ja laskutetaan samalla tavalla.

Chat täydentää

OpenAI chat-muoto, ja lähes jokainen työkalu tukee. Lähetä keskustelu tähän mennessä ja saada seuraava viesti takaisin.

POST https://nymbot.ai/api/v1/chat/completions Tarvitset vain API-avaimen

Vain model ja messages Valittu malli ei ota näytteenottoparametria, joka pudotetaan ilman virhettä, joten yksi pyyntö toimii mallien välillä. supported_parametersMitä hylätään sen sijaan, että hylätään, on jotain, mitä malli ei voi tehdä ollenkaan: kuvia mallista, joka ei näe, työkaluja mallille, joka ei voi kutsua niitä.

kenttäTyyppiVaadittuKuvaus
modelStringissäKyllänymbot/auto (tai auto) Nymbotin reititykselle vakiotaseen tai luettelon mallitunnisteeseen, kuten anthropic/claude-sonnet-5 Pro tasapaino. Sovelluksen lyhyet nimet ja aliasit hyväksytään myös. riittää.
messagesArmeijaKylläKeskustelu - roolit system, developer (käsitelty kuten järjestelmä) user, assistant ja toolSisältö on rivi tai luettelo text ja image_url osat; kuvat vain käyttäjän viesteissä. input_audio Osa tiedostoista on hylätty.
streamboolilainenEiLähetä vastaus sellaisena kuin se on kirjoitettu. Streamaaminen.
stream_optionsesineitäEi{"include_usage": true} lisää lopullisen osan, jossa on token-laskelmat ja kustannukset.
max_tokens
max_completion_tokens
integroituaEiSuurin osa tokeneista kirjoitetaan. Alennettu mallin enimmäismäärään, jos se on korkeampi. Se asettaa myös, kuinka paljon saldoasi pidetään, joten pienempi määrä tarvitsee vähemmän luottoa aloittaakseen.
temperature
top_p
MääräEiNäytteenottoa koskevat valvontatoimet: temperature 0 ja 2 välillä, top_p 0 ja 1 välillä.
stopstring tai arrayEiTeksti, joka päättyy vastaukseen: string tai enintään 4 stringia, joista kukin on enintään 256 merkkiä. nymbot/auto.
seedintegroituaEiToistuvaan näytteenottoon, jossa malli tukee sitä.
presence_penalty
frequency_penalty
MääräEiToistuvat ohjaukset, joista jokainen on -2 -2.
response_formatesineitäEi{"type": "json_object"} tai {"type": "json_schema", "json_schema": {…}}, jossa malli tukee sitä. Ei käytetä nymbot/auto.
tools
tool_choice
parallel_tool_calls
Array, String tai Object, BooleanEiKäyttöohjeet - katso Työkalut soittaa• A web_search Työkalu kääntyy WEB etsintäEnintään 128 työkalua ja 512 KB määritelmiä, jotka on sijoitettu enintään 64 tasoon syvällä; enemmän on 400.
reasoning_effort
reasoning
Kiinnitys, objektiiviEi"minimal", "low", "medium" tai "high"tai {"effort": "high"}. "none" tai {"enabled": false} Käännä se pois. katso perustelut.
pluginsArmeijaEi[{"id": "web", "max_results": 5}] aina etsii ensin verkossa.Jopa 10 tulosta.
nintegroituaEi1. Kaikki muu tulee takaisin 400.
logit_bias
user
metadata
objektiivi, objektiivi, objektiiviEiHyväksytty ja ei lähetetty. logit_bias kartat enintään 300 token ID: llä numeroihin -100: sta 100: een; user enintään 256 merkkiä; metadata enintään 16 merkkijonon arvoa, enintään 64 merkin avaimet ja enintään 512 arvoa.

Vastaus on tavallinen chat.completionKun kustannukset ovat usage.cost Yhdysvaltain dollareissa ja nymbot kohteen kanssa. model on ratkaistu malli id, joten lyhyt nimi tulee takaisin täydellisenä. message.reasoning_contenterillään vastauksesta.

Vastaus

{
  "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 on kehitetty siitä, mitä tuli takaisin, koska palveluntarjoajat raportoivat siitä eri tavalla: tool_calls Kun työkalut pyydetään, length kun vastaus käytti kaikkia sallittuja tunnisteita (tai malli käytti niitä kaikkia perustelemalla eikä kirjoittanut vastausta), content_filter Jos asiakas kieltäytyy, ja stop Toisin sanoen usage.completion_tokens_details.reasoning_tokens on aina 0: piilotetut päättelymerkit lasketaan ja laskutetaan completion_tokens.

TilanneMilloin
400Ei model tai messages (missing_required_parameter); äänen tai tiedoston osa tai kuvat mallille, joka ei näe niitä (unsupported_contentYli 20 kuvaa (too_many_images); näyteparametrin väärä tyyppi tai poissa alueesta (invalid_value); kuva linkki, joka ei ole julkinen (invalid_image_url); työkalut mallissa, joka ei voi kutsua niitä (unsupported_tool); n muut kuin 1; a :thinking Lisäys malliin, joka ei pysty perustelemaan (model_not_found) tai palveluntarjoaja hylkäsi pyynnön (upstream_rejected).
402Mallin käyttämä saldo ei voi kattaa hallussapitoa.
403Huonoin tapaus ei sovi avaimen korkkiin (key_limit_reachedAlempana max_tokens Tai nostaa päätä.
404Ei ole mallia tällä nimellä (model_not_found).
429Avaimen hinnankorko tai palveluntarjoajan (upstream_rate_limited).
502, 503Toimittaja on epäonnistunut (upstream_error) tai on ylikuormitettu (upstream_overloaded, jossa Retry-AfterMitään ei veloiteta, ellei palveluntarjoaja ole veloittanut yrityksestä.

Tilakoodit jokainen Endpoint osakkeet on lueteltu alla virheitä.

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

Streamaaminen

kanssa "stream": true vastaus saapuu palvelimen lähettäminä tapahtumina, kun malli kirjoittaa sen. chat.completion.chunk on a data: linja, ja virta päättyy data: [DONE]Ymmärtäminen tulee sisään delta.reasoning_contentVastaus on tässä delta.content.

Suorita suoratoistoa, joka voi kestää yli 100 sekuntia, kuten pitkä vastaus tai suuri vastaus. max_tokens Pyyntö, jota ei lähetetä suoratoistona, ei lähetä mitään, ennen kuin vastaus on valmis, ja verkko sinun ja Nymbotin välillä voi sulkea tyhjän yhteyden noin 100 sekunnin kuluttua; malli on edelleen valmis ja se, mitä se kirjoitti, ladataan, mutta vastaus on kadonnut.

virtaa

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]
  • Linjat alkavat : ovat pysyviä kommentteja, jotka lähetetään 15 sekunnin välein, kun malli ajattelee.
  • Pyydä "stream_options": {"include_usage": true} päästä viimeiseen osaan yläpuolella, jossa on tyhjä choices, token laskee, kustannukset ja nymbot kohteen kanssa.
  • Jos suljet yhteyden etukäteen, malli ei pysähdy: Nymbot lukee loput palveluntarjoajan virta, jopa 25 sekuntia, saada sen tunnusluvut, ja maksat mitä palveluntarjoaja raportoi.
  • Virhe ennen ensimmäistä osumaa, kuten 401 tai 402, palaa tavalliseksi JSON:ksi sen tilakoodilla, ei virtalähteenä. data: {"error": {…}} tapahtuma, ja virta päättyy ilman [DONE].
  • Pyynnöt työkaluilla ja malleilla OpenAI:n vastausliikenteessä eivät virtaa palveluntarjoajalta.

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

Työkalut soittaa

Kuvaile toimintoja tools ja malli voi pyytää soitettavaksi sen sijaan, että vastaisi. Käytät toimintoa ja lisäät sen tuloksen tool Viesti samalla tavalla tool_call_idNymbot ei koskaan suorita toimintoja; se lähettää mallin pyynnön takaisin sinulle.

tool_choice ottaa "auto", "none", "required" tai {"type": "function", "function": {"name": "…"}}Malliluettelo merkitsee, mitkä mallit voivat kutsua työkaluja (capabilities.toolsTyökalut hylätään 400 unsupported_tool on nymbot/auto ja niillä harvoilla luettelomalleilla, jotka toimivat OpenAI: n Responses-liikenteessä, joille Nymbot ei voi välittää työkaluja.

kanssa "stream": true, pyyntö, jossa on työkaluja, toimii yhdessä kappaleessa ja lähetetään sitten tavanomaisena kappaleen jaksona: rooli, yksi kappale, joka kuljettaa jokaista työkalukutsua sen indekseillä, ID: llä, nimellä ja argumentteilla sekä loppuosa.

Vastaus on osittain

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

Kuvat pyynnöstä

Mallien kanssa capabilities.vision Voit lukea kuvia. Lisää image_url osaksi käyttäjän viestiä, jossa on yleisö https:// linkki tai a data:image/…;base64, URL. Enintään 20 kuvaa per pyyntö. SVG-kuvat hylätään, ja niin on linkki yli 4 096 merkkiä tai yksi käyttäjänimellä tai salasanalla (400 invalid_image_url) on valinnainen detail on auto, low tai high.

kanssa nymbot/auto, pyyntö, jossa on kuva, reititetään standardimallille, joka voi nähdä. capabilities.vision kieltäytyy ottamasta kuvia 400 unsupported_contentLinkin on osoitettava julkiselle isännälle; Nymbot välittää kuvan mallin tarjoajalle eikä säilytä sitä.

Kuva veloitetaan palveluntarjoajan laskemina syöttötokeneinä, kuten muu pyyntö.

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

perustelut

Mallien kanssa capabilities.reasoning voi miettiä ennen kuin he vastaavat. pyydä enemmän tai vähemmän siitä reasoning_effort ("minimal", "low", "medium" tai "high") tai "reasoning": {"effort": "high"}tai lisätä :thinking mallin nimeen, mikä tarkoittaa suurta vaivaa. Mallissa ilman perusteluja asetus jätetään huomiotta. nymbot/auto, :thinking lähettää pyynnön vakiomuotoiseen perustelusuuntaan.

Anthropic-malleissa ponnistelu muuttuu ajattelun budjetiksi, joka on noin 1 000, 2 000, 8 000 tai 16 000 tokenia, ei koskaan enemmän kuin max_tokens Ajattelu on jätetty pois, kun tool_choice pakottaa työkalun, ja kun pyyntö jatkuu työkalurivin (viestin viimeinen viesti on työkalun tulos), koska Anthropic tarvitsee aikaisemmin allekirjoitetun ajattelun jatkaa sitä.

Perustelut palaavat sisään message.reasoning_contenttai delta.reasoning_content kun suoratoisto, ei koskaan sekoita vastaukseen. Perustelut ovat tulosta ja laskutetaan sellaisenaan, sisällä completion_tokensJotkut palveluntarjoajat eivät palauta perustelutekstiä lainkaan, ja se veloitetaan edelleen.

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

Täydentävät mallit

Mallin nimen seuraaja muuttaa sitä, miten pyyntö käsitellään, ilman muuta kenttää.Ne toimivat täydellisillä tunnuksilla ja lyhyillä nimillä samalla tavalla, kuten anthropic/claude-sonnet-5:online.

riittääVaikutus
:onlineEtsi verkossa ensin, kuten plugins: [{"id": "web"}]Näe WEB etsintä.
:thinkingKorkean tason harjoittelua; on nymbot/autoSellaiseen malliin, jossa ei ole järkeä, 400 model_not_found ja “no endpoints found”
:nitro, :floor, :exacto, :extendedJokaisella katalogimallilla on yksi reitti, joten ei ole nopeampaa, halvempaa tai pidempää reittiä valita; seuraajat ovat sallittuja, joten mallin nimet, jotka on kopioitu muista palveluista, toimivat edelleen.

Kaikki muut jäljennökset jätetään huomiotta. Koko nimi yritetään ensin, joten malli, jonka ID todella sisältää paksusuolen, toimii edelleen; jos näin ei ole, jäljennökset poistetaan lopusta yksi kerrallaan, kunnes malli vastaa. 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 etsii viimeistä käyttäjän viestiä (ensimmäiset 2000 merkkiä), lukee parhaat sivut ja antaa ne mallille kysymyksellä, joka on merkitty ulkoiseksi sisällöksi, josta mallin ei pitäisi ottaa ohjeita.

  • Aina etsimässä: "plugins": [{"id": "web", "max_results": 5}]tai a :online Täydentää mallia varten.
  • Etsi, kun se auttaa: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Hyväksytään myös kuin web_search_preview tai openrouter:web_searchNymbot etsii vain, kun kysymys näyttää tarvitsevan ajankohtaisia tietoja, sama testi sovellus käyttää.

max_results on 5 oletusarvoisesti ja enintään 10. Lähteet palaavat nymbot.web_search.sourcesJokaisella on a title, snippet ja urlJa niin kuin url_citation merkinnät viestiin liittyen.

Jokainen käynnissä oleva haku maksaa 0,008 dollaria, muunnettu satsiksi, tokenien yläpuolella, ja se on osa pidätystä. Sivut, joita se lukee, ovat myös syöttötokeneitä, joten vastaus webistä maksaa enemmän kuin sama kysymys kysyi kylmä, joskus useita kertoja enemmän.

Vastaus on osittain

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

Vastaukset API

OpenAI: n uudempi muoto, jota käyttävät OpenAI Agents SDK ja Codex. Se toimii samoilla malleilla, laskutuksella ja ominaisuuksilla kuin Chat Completions.

POST https://nymbot.ai/api/v1/responses Tarvitset vain API-avaimen

kenttäTyyppiVaadittuKuvaus
modelStringissäKylläNiin kuin Chat täydentääLisäosat ovat mukana.
inputstring tai arrayKylläSarake tai luettelo kohteista: viestit (roolit user, assistant, system, developer) kanssa input_text, input_image ja output_text osia ja function_call ja function_call_output Esineitä työkaluja varten. input_image Ota yksi image_url linkki tai datan URL, ei tiedoston id. reasoning ja web_search_call esineitä on poistettu; item_reference on kieltäytynyt
instructionsStringissäEiJärjestelmän ohjeet .
max_output_tokensintegroituaEiEniten kirjoituksia kirjoittamiseen.
temperature
top_p
MääräEiNäytteenotto ohjaimet, jossa malli ottaa ne.
tools
tool_choice
parallel_tool_calls
Array, String tai Object, BooleanEiToiminnalliset työkalut, vastaukset muotoon ({"type": "function", "name": …, "parameters": …}) a web_search tai web_search_preview Työkalu kääntyy WEB etsintä kun se auttaa. Muut sisäänrakennetut työkalut hylätään.
reasoningesineitäEi{"effort": "minimal" | "low" | "medium" | "high"}. xhigh ja max tarkoittaa high; none Käännä se pois.
text.format
response_format
esineitäEiJärjestelmällinen tulos, kuten JSON-kaavio tai json_object.
metadataesineitäEiPalautetaan vastauksessa muuttumattomana. enintään 16 merkkijonoarvoa, enintään 64 merkkiä ja enintään 512 arvoa.
streamboolilainenEiStream tapahtumia kuten alla kuvattu.
storeboolilainenEiMikään ei ole tallennettu, ja vastaus sanoo aina "store": false.
previous_response_id
conversation
background
String, Object ja BooleanEiEi ole tuettu: 400 unsupported_parameterVastauksia ei tallenneta, joten lähetä koko keskustelu input Joka kerta

Vastaus

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

Työkalupyyntö tulee näkyviin output kuin a function_call kohdan kanssa call_id, name ja argumentsLähetä tulos takaisin a function_call_output Kohde, jolla on sama call_idKun malli palauttaa sen, se on reasoning kohdan kanssa reasoning_text Sisältö, lueteltu ensin status on incomplete Kun vastaus osuu max_output_tokens Toimittaja on kieltäytynyt tai incomplete_details.reason Aseta kaksi max_output_tokens tai content_filterVastaus myös toistaa pyynnön asetukset (lämpötila, työkalut, työkalujen valinta jne.), kuten OpenAI tekee, ja kuljettaa nymbot Objektiivin kustannukset

Vapaaehtoinen, jokainen tapahtuma on event: Linja ja a data: Linjan kanssa a sequence_numberja tässä järjestyksessä: response.created, response.in_progress, response.output_item.added, response.content_part.addedMikä tahansa määrä response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.doneja lopuksi response.completed Käyttö ja kustannukset: lyhyt vastaus response.incomplete sen sijaan, ja epäonnistuminen sen jälkeen, kun virta alkoi response.failedRationalisoimalla virrat omana kohteenaan response.reasoning_text.delta ja .doneTyökalukutsut tulevat viestin jälkeen, kukin kohteena response.function_call_arguments.delta ja .done.

TilanneMilloin
400Ei model tai input; previous_response_id, conversation, background tai item_reference (unsupported_parameter); Tukematon työkalu tai sisältötyyppi.
402, 403, 404, 429, 502, 503Mitä tulee chat-toimintoihin

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

Antrooppiset viestit

Se toimii jokaisen mallin luettelossa, ei vain Claude: pyyntö käännetään, kulkee läpi saman putken, ja käännetään takaisin.

POST https://nymbot.ai/api/v1/messages - tarvitset API-avaimen, kuten x-api-key tai Authorization: Bearer.

Sillä anthropic-version ja anthropic-beta Antrooppiset mallinimet vastaavat luetteloa, joten Claude Code ja SDK:t toimivat niiden nimien kanssa, joita he jo käyttävät:

  • Nimi, jonka luettelo tietää, kuten claude-sonnet-5 tai anthropic/claude-opus-5Sitä käytetään sellaisena kuin se on.
  • Muutoin päivämäärä (-20260514), -latestTällainen versio kuin -v1Jälkimmäisessä kappaleessa, kuten [1m] ja yksi anthropic/ tai anthropic. Tällöin esite poistetaan, ja pisteitä ja taulukoita versiossa kokeillaan molemmilla tavoilla (claude-haiku-4-5 Löytää claude-haiku-4.5).
  • Jos tämä ei vielä vastaa mitään, käytetään perhettä (Opus, Sonnet tai Haiku), kunhan luettelon versio on sama tai uudempi kuin pyydetty versio.
  • Nimi, joka ei vastaa mitään, palaa 404 not_found_error.
kenttäTyyppiVaadittuKuvaus
modelStringissäKylläLuettelo mallitunnus tai Anthropic mallin nimi.
max_tokensintegroituaKylläEniten kirjoituksia kirjoittamiseen.
messagesArmeijaKylläuser ja assistant Kääntyminen, jossa text, image (base64 tai URL lähde) tool_use ja tool_result ja blokkeja. thinking Edellisistä kierroksista tulevat lohkot hyväksytään ja pudotetaan.
systemstring tai arrayEiJärjestelmäviesti, kuten string tai tekstin lohkot.
temperature
top_p
MääräEiNäytteenotto ohjaimet, jossa malli ottaa ne. top_k Hyväksytään ja hylätään.
stop_sequencesArray of stringitMuokkaaEiTeksti, joka päättyy vastaukseen. Enintään 4 merkkijonoa, joista kukin on enintään 256 merkkiä.
tools
tool_choice
kohteet, kohteetEiTyökalut kanssa name, description ja input_schema• A web_search Server-työkalu kääntyy päälle WEB etsintäAnthropicin muut sisäänrakennetut työkalut (bash, tekstieditori, tietokoneen käyttö) hylätään unsupported_tool. tool_choice ottaa auto, any, tool tai noneja disable_parallel_tool_use.
thinkingesineitäEi{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} tai {"type": "disabled"}Budjetti valitsee ponnistelutason: alle 2,048 minimaalinen, 2,048 alhainen, 8,192 keskitasoinen, 16,384 korkea. output_config.efforttai korkealla.
streamboolilainenEiStream Anthropicin tapahtumamuodossa.
metadataesineitäEiHyväksytty ja sivuutettu.

Vastaus

{
  "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 Voidaan myös pitää tool_use Blokit ja a thinking Blokki, jonka signature Se on tyhjä. stop_reason on end_turn, max_tokens, tool_use tai refusaltyöskennellyt samalla tavalla kuin finish_reason on Chat täydentää; stop_sequence on aina null, vaikka pysähdysjärjestys lopettaisi vastauksen. input_tokens laskee vain tuoreita merkintöjä; välimuistiin tallennettuja merkintöjä on kahdessa välimuistikentässä. nymbot Objektin ja X-Nymbot-Cost-Sats ja header.

Streamed, tapahtumat ovat Anthropic: message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta tai thinking_delta), content_block_stop, message_delta Käyttötarkoitus, käyttötarkoitus ja nymbot Objektiivin kustannukset ja message_stop• A ping myös lähetetään 15 sekunnin välein, kun malli on käynnissä. Työkalukutsut saapuvat tekstin jälkeen, kukin tool_use Blokki koko sisällön kanssa yhdessä input_json_delta.

Virheet tässä päätepisteessä käyttävät Anthropicin muotoa: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Lyhyt tasapaino on 402 billing_errorYliannostunut palveluntarjoaja 503 overloaded_errorEpäonnistuminen virran käynnistymisen jälkeen lähetetään error Tapahtumassa on

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

Tokenien laskeminen

Arvio siitä, kuinka monta syöttötunnusta Viestit-pyyntö käyttää, jotta asiakas voi tarkistaa ennen lähettämistä.

POST https://nymbot.ai/api/v1/messages/count_tokens Tarvitset ilmaisen API-avaimen

Keho on sama kuin Viestejäilman max_tokens; mallin nimi on ratkaistava. Laskenta on arvio: järjestelmän kehotuksen merkit, viestit, työkalukutsut ja työkalun määritelmät jaetaan neljällä, plus 1,600 jokaiselle kuvalle. Se ei ole palveluntarjoajan oma tokenizer, joten todellinen laskenta voi vaihdella. Avain, joka on saavuttanut huippunsa, voi silti käyttää sitä.

Vastaus

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

Luettelo malleista

Jokainen malli ja generaattori API hyväksyy, mitä se maksaa. Luettelo luetaan samasta live-luettelosta kuin sovelluksen valitsija, joten se on aina mitä palvelin toimii.

GET https://nymbot.ai/api/v1/models - Ei avainta tarvita. Piilotettu viisi minuuttia.

GET /api/v1/models/{id} palauttaa yhden sisäänkäynnin.

kenttäTyyppiVaadittuKuvaus
typePyyntöjä (Query Strings)Eichat (Tämä on epäonnistumista image, video, audio, embedding tai allNiitä voi olla useita, kuten image,video.

Hinnat ovat sitä, mitä maksat, ja maksu ja marginaali ovat jo käytössä, dollareissa ja satsissa nykyisellä Bitcoin-hinnalla. balance Se kertoo, mihin malli kuluu. nymbot_key on mallin lyhyt nimi sovelluksessa. created on aina 0, koska luettelo ei rekisteröi, milloin malli lisättiin. per_request sen sijaan.

nymbot/auto Se on aina ensin, hinta kuin variable, jossa a routes Luettelo, jossa luetellaan kunkin tavanomaisen reitin hinnat.Se luettelee näkemyksen ja päättelyn, mutta ei työkaluja.

GET /api/v1/models/{id} hyväksyy samat nimet ja aliasit pyynnönä ja palauttaa mallin merkinnän, johon he päättävät.

Vastaus

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

Muut tyypit :

  • kuvan Sisäänkäynnit ovat capabilities (accepts_image_url, requires_image_url, edit) ja hinta per_generation.
  • Videoita Sisäänkäynnit ovat max_duration_seconds ja resolutionsJa yksi hinta per_second jokaisen päätöslauselman osalta.
  • ääntäminen Sisäänkäynnit ovat audio_type speech tai transcriptionHinta on per_1k_chars tai per_minute.
  • Sisäänrakentaminen Sisäänkäynnit ovat dimensions, context_length, max_inputs Hinta miljoonaa tokenia kohden.

Merkityt hinnat "estimated": true on sovelluksen arvio generaattorista, jonka hintaa ei ole julkaistu. type Takaisin 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);