Langkau ke kandungan
Kembali ke Nymbot

Pangkalan pengetahuan Pengembang

Chat, tanggapan dan mesej

Tiga cara untuk meminta sesuatu kepada model, dalam tiga format pelanggan sudah bercakap, semua berjalan pada model yang sama dan dibayar dengan cara yang sama.

Chat Penyelesaian

Format OpenAI chat, dan yang hampir semua alat menyokong. hantar perbualan sejauh ini dan dapatkan mesej seterusnya kembali.

POST https://nymbot.ai/api/v1/chat/completions Anda memerlukan kunci api.

sahaja model dan messages parameter sampel yang model yang dipilih tidak diambil diturunkan tanpa kesilapan, jadi satu badan permintaan berfungsi di antara model. supported_parametersApa yang ditolak daripada ditinggalkan ialah apa yang model tidak boleh lakukan sama sekali: gambar untuk model yang tidak boleh melihat, alat untuk model yang tidak boleh memanggil mereka.

LapanganJenisdiperlukanPenerangan
modelString yangyanymbot/auto ( atau auto) untuk routing Nymbot pada baki standard, atau id model katalog seperti anthropic/claude-sonnet-5 pada keseimbangan Pro. Nama pendek dan alias aplikasi juga diterima. boleh berakhir dalam Cukuplah.
messagesRangkaianyaPerbincangan : Peranan system, developer (Dibaca sebagai sistem yang digunakan), user, assistant dan toolKandungan ialah string atau senarai text dan image_url bahagian; imej hanya dalam mesej pengguna. input_audio dan bahagian fail ditolak.
streambooleanTidakHantar jawapan seperti yang ditulis.Selengkapnya Streaming yang.
stream_optionsobjekTidak{"include_usage": true} menambahkan bahagian akhir dengan bilangan token dan kos.
max_tokens
max_completion_tokens
IntegraTidakSebahagian besar token untuk ditulis. diturunkan kepada maksimum model jika lebih tinggi. juga menetapkan berapa banyak yang disimpan daripada baki anda, jadi nombor yang lebih kecil memerlukan kredit yang lebih sedikit untuk bermula.
temperature
top_p
NomborTidakPengawal sampel : temperature daripada 0 kepada 2, top_p daripada 0 kepada 1.
stopstring atau arrayTidakTeks yang mengakhiri jawapan: satu string atau maksimum 4 string, masing-masing tidak lebih daripada 256 watak. nymbot/auto.
seedIntegraTidakUntuk sampel berulang, di mana model menyokongnya.
presence_penalty
frequency_penalty
NomborTidakPengawal pengulangan, setiap daripada -2 kepada 2.
response_formatobjekTidak{"type": "json_object"} atau {"type": "json_schema", "json_schema": {…}}, di mana model menyokong ia.Tidak digunakan oleh nymbot/auto.
tools
tool_choice
parallel_tool_calls
array, string atau objek, booleanTidakPerkhidmatan Pendaftaran. lihat Alat Panggilan. a web_search Alat bertukar kepada Pencarian webMaksimum 128 alat dan 512 KB definisi, tertanam pada maksimum 64 tahap kedalaman; lebih 400.
reasoning_effort
reasoning
Tindakan, objekTidak"minimal", "low", "medium" atau "high"atau {"effort": "high"}. "none" atau {"enabled": false} Pastikan ia keluar.Selengkapnya Penyelesaian.
pluginsRangkaianTidak[{"id": "web", "max_results": 5}] sentiasa mencari web pertama. sehingga 10 hasil.
nIntegraTidak1. apa-apa yang lain akan kembali 400.
logit_bias
user
metadata
objek, string dan objekTidakditerima dan tidak dihantar. logit_bias peta pada maksimum 300 ID token kepada nombor dari -100 hingga 100; user mempunyai maksimum 256 watak; metadata memegang sehingga 16 nilai string, kunci sehingga 64 watak dan nilai sehingga 512.

Jawapannya ialah biasa chat.completionDengan kos dalam usage.cost (dalam dolar) dan dalam nymbot objek yang model ialah id model yang diselesaikan, jadi nama pendek kembali sebagai nama penuh. message.reasoning_contentterpisah daripada jawapan.

Jawapan

{
  "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 telah dibangunkan daripada apa yang kembali, kerana pembekal melaporkan ia berbeza: tool_calls Apabila anda telah meminta alat, length apabila jawapan menggunakan setiap token yang dibenarkan (atau model menghabiskan mereka semua berfikir dan tidak menulis sebarang jawapan), content_filter Apabila pembekal menolak, dan stop sebaliknya usage.completion_tokens_details.reasoning_tokens sentiasa 0: token pertimbangan tersembunyi dikira, dan dikurangkan, dalam completion_tokens.

Statusbila
400Tidak model atau messages (missing_required_parameter); bahagian audio atau fail, atau imej untuk model yang tidak boleh melihatnya (unsupported_content); lebih daripada 20 gambar (too_many_images(Bahasa Inggeris) Perbezaan antara pengambilan sampel dan pengambilan sampel (invalid_value); pautan imej yang tidak awam (invalid_image_url); alat pada model yang tidak boleh memanggil mereka (unsupported_tool); n selain daripada 1; a :thinking Perkara-perkara yang tidak boleh dipertimbangkan (model_not_found); atau pembekal menolak permintaan (upstream_rejected).
402Keseimbangan yang model membelanjakan tidak boleh menutupi kepemilikan.
403Kes yang paling teruk tidak sesuai dengan cap kunci (key_limit_reached(Lebih rendah max_tokens atau menaikkan cap.
404Tiada model dengan nama itu (model_not_found).
429Pihak berkuasa atau penyedia perkhidmatan (upstream_rate_limited).
502, 503Pembekal gagal (upstream_error(atau yang telah disemak)upstream_overloaded, dengan Retry-AfterTiada apa-apa dikenakan bayaran kecuali pembekal dikenakan bayaran untuk percubaan.

Kod status setiap saham endpoint disenaraikan di bawah Kesilapan.

cURL

curl https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "anthropic/claude-sonnet-5",
    "messages": [
      {"role": "system", "content": "Answer in one short paragraph."},
      {"role": "user", "content": "What is a Lightning invoice?"}
    ],
    "max_tokens": 400
  }'

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

reply = client.chat.completions.create(
    model="anthropic/claude-sonnet-5",
    messages=[
        {"role": "system", "content": "Answer in one short paragraph."},
        {"role": "user", "content": "What is a Lightning invoice?"},
    ],
    max_tokens=400,
)
print(reply.choices[0].message.content)
print(reply.usage.cost)

JavaScript

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const reply = await client.chat.completions.create({
  model: "anthropic/claude-sonnet-5",
  messages: [
    { role: "system", content: "Answer in one short paragraph." },
    { role: "user", content: "What is a Lightning invoice?" },
  ],
  max_tokens: 400,
});
console.log(reply.choices[0].message.content);
console.log(reply.usage.cost);

Streaming yang

dengan "stream": true jawapan datang sebagai peristiwa yang dihantar oleh pelayan manakala model menulisnya. chat.completion.chunk ialah a data: garis, dan aliran ini berakhir dengan data: [DONE]sebab-sebab masuk ke dalam delta.reasoning_contentJawapannya ialah dalam delta.content.

Stream apa-apa yang mungkin mengambil lebih daripada kira-kira 100 saat, seperti jawapan yang panjang, max_tokens Permintaan yang tidak disiarkan tidak menghantar apa-apa sehingga jawapan selesai, dan rangkaian antara anda dan Nymbot mungkin menutup sambungan kosong selepas kira-kira 100 saat; model masih selesai dan apa yang ditulis diisi, tetapi jawapan hilang.

Stream

data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}

data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"content":"A Lightning invoice"},"finish_reason":null}]}

: keep-alive

data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}

data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[],"usage":{"prompt_tokens":1240,"completion_tokens":380,"total_tokens":1620,"cost":0.01895},"nymbot":{"balance":"pro","charged_credits":0.162,"charged_sats":16.2,"balance_credits":412.425,"balance_sats":41242.5}}

data: [DONE]
  • baris yang bermula dengan : adalah maklumbalas terus hidup, dihantar setiap 15 saat semasa model sedang berfikir.
  • Minta untuk "stream_options": {"include_usage": true} untuk mendapatkan bahagian terakhir di atas, dengan kosong choices, token mengira, kos dan nymbot objek yang
  • Pembayaran diselesaikan selepas aliran berakhir.Jika anda menutup sambungan lebih awal, model tidak dihentikan: Nymbot membaca sisa aliran pembekal, sehingga 25 saat, untuk mendapatkan bilangan token, dan anda membayar apa yang dilaporkan pembekal.Tanpa bilangan itu, bayaran dianggarkan daripada input anda dan apa yang ditulis, ditambah seluruh pengeluaran output untuk model itu sebab-sebab.
  • Kesilapan sebelum bahagian pertama, seperti 401 atau 402, kembali sebagai JSON biasa dengan kod statusnya, bukan sebagai aliran. data: {"error": {…}} peristiwa, dan aliran berakhir tanpa [DONE].
  • Permintaan dengan alat, dan model pada pengangkutan Responses OpenAI, tidak aliran daripada pembekal. mereka masih menjawab dengan aliran yang sah, dihantar apabila jawapan selesai.

cURL

curl -N https://nymbot.ai/api/v1/chat/completions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nymbot/auto",
    "stream": true,
    "stream_options": {"include_usage": true},
    "messages": [{"role": "user", "content": "Write a haiku about sats."}]
  }'

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

stream = client.chat.completions.create(
    model="nymbot/auto",
    stream=True,
    stream_options={"include_usage": True},
    messages=[{"role": "user", "content": "Write a haiku about sats."}],
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
    elif chunk.usage:
        print("\ncost:", chunk.usage.cost)

JavaScript

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const stream = await client.chat.completions.create({
  model: "nymbot/auto",
  stream: true,
  stream_options: { include_usage: true },
  messages: [{ role: "user", content: "Write a haiku about sats." }],
});
for await (const chunk of stream) {
  if (chunk.choices.length) process.stdout.write(chunk.choices[0].delta.content || "");
  else if (chunk.usage) console.log("\ncost:", chunk.usage.cost);
}

Alat Panggilan

Menyatakan fungsi dalam tools dan model boleh meminta seseorang untuk dipanggil bukannya menjawab. anda menjalankan fungsi, menambah hasilnya sebagai tool Mesej yang sama tool_call_idNymbot tidak pernah menjalankan fungsi anda; ia menghantar permintaan model kembali kepada anda.

tool_choice mengambil "auto", "none", "required" atau {"type": "function", "function": {"name": "…"}}Senarai model menandakan model mana yang boleh dipanggil alat (capabilities.tools) Alat-alat yang ditolak dengan 400 unsupported_tool ialah nymbot/auto dan pada beberapa model katalog yang berjalan pada pengangkutan Responses OpenAI, yang Nymbot tidak boleh melepaskan alat kepada.

dengan "stream": true, permintaan dengan alat berjalan dalam satu potongan dan kemudian dihantar sebagai siri potongan biasa: peranan, satu potongan membawa setiap panggilan alat dengan indeks, id, nama dan argumen, dan potongan akhir.

Jawapannya, sebahagian daripada

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

Gambar dalam permintaan

Model dengan capabilities.vision boleh baca gambar. tambahkan image_url sebahagian kepada mesej pengguna, dengan sama ada khalayak https:// link atau a data:image/…;base64, Pihak berkuasa telah mengesahkan bahawa ia tidak boleh digunakan untuk memindahkan maklumat yang disenaraikan di laman web ini, tetapi ia boleh digunakan untuk memindahkan maklumat yang disenaraikan di laman web ini, dan ia boleh digunakan untuk memindahkan maklumat yang disenaraikan di laman web ini. (400 invalid_image_url• Pilihan detail ialah auto, low atau high.

dengan nymbot/auto, permintaan dengan imej di dalamnya diarahkan kepada model standard yang boleh dilihat. capabilities.vision Menolak gambar dengan 400 unsupported_contentGambar hanya boleh berada dalam mesej pengguna. pautan mesti menunjuk kepada tuan awam; Nymbot menghantar imej kepada pembekal model dan tidak menyimpannya.

Sebuah imej dikenakan bayaran sebagai token input yang dihitung oleh pembekal untuknya, seperti yang lain daripada permintaan.

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

Penyelesaian

Model dengan capabilities.reasoning boleh berfikir sebelum mereka menjawab. minta lebih atau kurang daripada itu dengan reasoning_effort ("minimal", "low", "medium" atau "high") atau "reasoning": {"effort": "high"}atau menambah :thinking kepada nama model, yang bermaksud usaha yang tinggi. Pada model tanpa alasan seting diabaikan. nymbot/auto, :thinking menghantar permintaan kepada laluan alasan standard.

Pada model Anthropic usaha menjadi bajet pemikiran kira-kira 1,000, 2,000, 8,000 atau 16,000 token, tidak lebih daripada max_tokens Berfikir boleh dihentikan apabila tool_choice memaksa alat, dan apabila permintaan itu berterusan loop alat (pesan terakhirnya adalah hasil alat), kerana Anthropic memerlukan pemikiran yang ditandatangani sebelum ini untuk meneruskan.

Pendapat ini kembali ke dalam message.reasoning_contentatau delta.reasoning_content apabila streaming, tidak pernah dicampur dalam jawapan. Penyelesaian adalah output dan dikenakan sebagai sedemikian, di dalam completion_tokensSesetengah pembekal tidak mengembalikan teks alasan sama sekali, dan ia masih dikenakan bayaran.

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 Perbezaan

Sufiks pada nama model mengubah cara permintaan dikendalikan, tanpa medan lain.Mereka bekerja pada ID penuh dan nama pendek sama, seperti dalam anthropic/claude-sonnet-5:online.

CukuplahKesan
:onlineMencari laman web pertama, seperti plugins: [{"id": "web"}]Tag: lihat Pencarian web.
:thinkingPenilaian yang tinggi; pada nymbot/auto, jalan berfikir. pada model yang tidak boleh berfikir, 400 model_not_found dengan “no endpoints found”.
:nitro, :floor, :exacto, :extendedSetiap model katalog mempunyai satu laluan, jadi tidak ada laluan yang lebih cepat, lebih murah atau lebih lama untuk dipilih; pengikut dibenarkan supaya nama model yang disalin dari perkhidmatan lain masih berfungsi.

Mana-mana suffix lain diabaikan. Nama keseluruhan diuji terlebih dahulu, jadi model yang idnya benar-benar mengandungi kolon masih berfungsi; jika tidak, suffix diambil daripada hujung satu pada satu masa sehingga model cocok. Nama model boleh menjadi tidak lebih daripada 200 watak panjang dengan tidak lebih daripada 4 suffix; yang lebih lama ditolak dengan 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);

Mana-mana model chat boleh menjawab daripada web langsung.Nymbot mencari mesej pengguna terakhir (bahagian pertama 2,000 watak), membaca halaman terbaik dan memberikannya kepada model dengan soalan, ditandai sebagai kandungan luar model tidak boleh mengambil arahan dari.

  • Selalu Mencari: "plugins": [{"id": "web", "max_results": 5}]atau a :online suffix pada model.
  • Cari apabila ia membantu: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]juga diterima sebagai web_search_preview atau openrouter:web_searchNymbot hanya mencari apabila soalan kelihatan seperti ia memerlukan maklumat semasa, ujian yang sama yang digunakan oleh aplikasi.

max_results ialah 5 secara lalai dan pada maksimum 10. sumber kembali dalam nymbot.web_search.sourcesSetiap orang dengan a title, snippet dan urldan sebagai url_citation Nota dalam mesej.

Setiap carian yang berjalan kos $0.008, ditukar kepada sats, di atas token, dan ia adalah sebahagian daripada hold. halaman yang dibaca adalah token input juga, jadi jawapan dari web kos lebih daripada soalan yang sama diminta sejuk, kadang-kadang beberapa kali lebih.

Jawapannya, sebahagian daripada

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

Penyelesaian api

Format OpenAI yang lebih baru, yang digunakan oleh OpenAI Agents SDK dan oleh Codex. Ia berjalan pada model yang sama, pengiraan dan ciri-ciri seperti Chat Completions.

POST https://nymbot.ai/api/v1/responses Anda memerlukan kunci api.

LapanganJenisdiperlukanPenerangan
modelString yangyasebagai untuk Chat PenyelesaianTerdapat juga suffix.
inputstring atau arrayyaSatu string, atau senarai item: mesej (peranan user, assistant, system, developer) dengan input_text, input_image dan output_text Bahagian, dan function_call dan function_call_output item untuk alat. input_image mengambil sebuah image_url link atau data URL, bukan fail id. reasoning dan web_search_call barang-barang yang telah ditarik; item_reference telah ditolak.
instructionsString yangTidakarahan sistem
max_output_tokensIntegraTidakyang paling banyak untuk ditulis.
temperature
top_p
NomborTidakPengawal sampel, di mana model mengambil mereka.
tools
tool_choice
parallel_tool_calls
array, string atau objek, booleanTidakPerkara-perkara yang dimaksudkan dalam Perkara-perkara ini ({"type": "function", "name": …, "parameters": …}) a web_search atau web_search_preview Alat bertukar kepada Pencarian web apabila ia membantu. alat-alat lain yang dibina ditolak.
reasoningobjekTidak{"effort": "minimal" | "low" | "medium" | "high"}. xhigh dan max bermaksud high; none Letakkan ia off.
text.format
response_format
objekTidakHasil terstruktur, seperti skim JSON atau json_object.
metadataobjekTidakMengembalikan tidak berubah dalam respons. Pada maksimum 16 nilai string, kunci sehingga 64 watak dan nilai sehingga 512.
streambooleanTidakStream peristiwa seperti yang diterangkan di bawah.
storebooleanTidakTidak ada yang disimpan, dan jawapan sentiasa berkata "store": false.
previous_response_id
conversation
background
String, objek dan booleanTidakTidak disokong : 400 unsupported_parameterJawapan tidak disimpan, jadi hantar keseluruhan perbualan ke input Setiap kali

Jawapan

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

Permintaan alat muncul dalam output sebagai a function_call item dengan call_id, name dan argumentsMengembalikan hasil sebagai a function_call_output item dengan sama call_idPertimbangan, apabila model mengembalikannya, adalah reasoning item dengan reasoning_text kandungan, disenaraikan terlebih dahulu. status ialah incomplete Apabila jawapannya mendatangkan max_output_tokens atau pembekal yang menolak, dengan incomplete_details.reason Sediakan 2 max_output_tokens atau content_filterTanggapan juga mengekalkan tetapan permintaan (suhu, alat, pilihan alat dan lain-lain) seperti yang dilakukan oleh OpenAI, dan membawa nymbot kos objek

Rujukan: Setiap peristiwa merupakan satu event: garis dan a data: baris dengan a sequence_numberDalam perintah ini: response.created, response.in_progress, response.output_item.added, response.content_part.addedSebarang bilangan daripada response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.donedan akhirnya response.completed dengan penggunaan dan kos. Satu jawapan memotong akhir pendek dengan response.incomplete sebaliknya, dan kegagalan selepas aliran bermula dengan response.failed. berfikir aliran sebagai item sendiri dengan response.reasoning_text.delta dan .donePanggilan alat datang selepas mesej, masing-masing sebagai item dengan response.function_call_arguments.delta dan .done.

Statusbila
400Tidak model atau input; previous_response_id, conversation, background atau sebuah item_reference (unsupported_parameter); alat atau jenis kandungan yang tidak disokong.
402, 403, 404, 429, 502, 503Berkenaan dengan chat completion.

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

Pesan Antropologi

Format Anthropic, untuk SDK Anthropic dan Claude Code. Ia berfungsi dengan setiap model dalam katalog, bukan sahaja Claude: permintaan diterjemahkan, berjalan melalui paip yang sama, dan diterjemahkan kembali.

POST https://nymbot.ai/api/v1/messages - memerlukan kunci API, seperti x-api-key atau Authorization: Bearer.

yang anthropic-version dan anthropic-beta Nama-nama model antropik diselaraskan dengan katalog, jadi Claude Code dan SDK bekerja dengan nama-nama yang sudah mereka gunakan:

  • Nama yang dikehendaki ialah Catalogue, seperti claude-sonnet-5 atau anthropic/claude-opus-5digunakan seperti yang ada.
  • Pada tarikh yang sama (-20260514), -latest, sebuah versi tag seperti -v1Pada masa yang sama, tarikh seperti [1m] dan sebuah anthropic/ atau anthropic. Perbezaan di antara kedua-duanya ialah pengukuran dan pengukuran (claude-haiku-4-5 Menemukan claude-haiku-4.5).
  • Jika itu masih tidak sesuai, keluarga (Opus, Sonnet atau Haiku) digunakan, selagi versi katalog adalah sama atau lebih baru daripada yang diminta.
  • Nama yang tidak sesuai dengan apa-apa kembali 404 not_found_error.
LapanganJenisdiperlukanPenerangan
modelString yangyaNama model katalog, atau nama model antropik.
max_tokensIntegrayayang paling banyak untuk ditulis.
messagesRangkaianyauser dan assistant Tukar, dengan text, image (base64 atau sumber URL) tool_use dan tool_result daripada blok. thinking blok daripada putaran terdahulu diterima dan diturunkan.
systemstring atau arrayTidakSistem prompt, seperti string atau blok teks.
temperature
top_p
NomborTidakPengawal sampel, di mana model mengambil mereka. top_k diterima dan ditinggalkan.
stop_sequencesKumpulan StringsTidakTeks yang mengakhiri jawapan Maksimum 4 helaian, maksimum 256 watak.
tools
tool_choice
Rujukan, objekTidakAlat dengan name, description dan input_schema. a web_search Server Tool berterusan Pencarian webAlat-alat lain yang dibina oleh Anthropic (bash, editor teks, penggunaan komputer) ditolak dengan unsupported_tool. tool_choice mengambil auto, any, tool atau nonedan disable_parallel_tool_use.
thinkingobjekTidak{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} atau {"type": "disabled"}Budget memilih tahap usaha: di bawah 2,048 minimum, dari 2,048 rendah, dari 8,192 menengah, daripada 16,384 tinggi. output_config.effortatau yang tinggi.
streambooleanTidakStream dalam format acara Anthropic.
metadataobjekTidakditerima dan diabaikan.

Jawapan

{
  "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 juga boleh mengekalkan tool_use blok dan a thinking Blok yang mana signature ialah kosong. stop_reason ialah end_turn, max_tokens, tool_use atau refusalBeliau bekerja dengan cara yang sama seperti finish_reason ialah Chat Penyelesaian; stop_sequence sentiasa null, walaupun apabila satu urutan berhenti mengakhiri jawapan. input_tokens hanya mengandungi input segar; input cache berada dalam kedua-dua medan cache. nymbot Objek dan X-Nymbot-Cost-Sats kepada header

Streamed, peristiwa-peristiwa ini ialah Anthropic's: message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta atau thinking_delta), content_block_stop, message_delta dengan alasan berhenti, penggunaan dan nymbot kos objek, dan message_stop. a ping juga dihantar setiap 15 saat semasa model sedang bekerja. panggilan alat tiba selepas teks, masing-masing sebagai tool_use blok dengan semua input dalam satu input_json_delta.

Kesilapan pada titik akhir ini menggunakan format Anthropic: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Keseimbangan yang pendek ialah 402 billing_errorPembekal yang berlebihan 503 overloaded_errorKegagalan selepas aliran telah bermula dihantar sebagai error peristiwa yang

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

Mengikut Token

Perkiraan berapa banyak token input permintaan Mesej akan digunakan, supaya klien boleh semak sebelum ia menghantar.

POST https://nymbot.ai/api/v1/messages/count_tokens - memerlukan kunci API. percuma

badan yang sama seperti untuk Mesejdan tanpa max_tokens; nama model perlu diselesaikan. bilangan adalah perkiraan: watak-watak prompt sistem, mesej, panggilan alat dan definisi alat dibahagikan oleh empat, ditambah 1,600 untuk setiap imej. Ia bukan tokenizer penyedia sendiri, jadi bilangan sebenar boleh berbeza. Kunci yang telah mencapai capnya masih boleh menggunakannya.

Jawapan

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

Senarai Model

Setiap model dan generator yang diterima oleh API, dengan apa yang ia kos. senarai dibaca daripada katalog langsung yang sama seperti pemilih aplikasi, jadi ia sentiasa apa yang pelayan akan menjalankan.

GET https://nymbot.ai/api/v1/models — tiada kunci diperlukan. disembunyikan selama lima minit.

GET /api/v1/models/{id} Kembalikan satu entri

LapanganJenisdiperlukanPenerangan
typePenyelesaian (Query)Tidakchat (Dalam hal yang demikian, image, video, audio, embedding atau allSebahagian daripada mereka boleh diberikan, seperti image,video.

Harga adalah apa yang anda bayar, dengan yuran dan margin yang sudah ada, dalam dolar dan dalam sats pada harga Bitcoin semasa. balance menunjukkan kepada mana model itu membelanjakan. nymbot_key ialah nama pendek model dalam app. created selalu 0 kerana katalog tidak mencatat apabila model telah ditambahkan. per_request sebaliknya.

nymbot/auto sentiasa terlebih dahulu, dibayar sebagai variableDengan a routes senarai yang memberikan kadar setiap laluan standard. ia senarai visi dan alasan, tetapi bukan alat.

GET /api/v1/models/{id} menerima nama dan alias yang sama sebagai permintaan, dan mengembalikan entri untuk model yang mereka tentukan.

Jawapan

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

Jenis lain :

  • imej Masuk mempunyai capabilities (accepts_image_url, requires_image_url, edit) dan harga per_generation.
  • Video yang Masuk mempunyai max_duration_seconds dan resolutionsdan harga yang per_second untuk setiap resolusi.
  • Audio Masuk mempunyai audio_type speech atau transcriptionHarga yang per_1k_chars atau per_minute.
  • embedded Masuk mempunyai dimensions, context_length, max_inputs dan harga per juta token input.

Harga yang ditandai "estimated": true adalah perkiraan aplikasi untuk generator yang harga tidak diterbitkan. type Kembali 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);