Lewati ke konten
Kembali ke Nymbot

Basis pengetahuan pengembang

Chat, Jawaban dan Pesan

Tiga cara untuk meminta sesuatu kepada model, dalam tiga format klien sudah berbicara, semuanya berjalan pada model yang sama dan dihitung dengan cara yang sama.

Chatting yang lengkap

OpenAI chat format, dan yang hampir semua alat mendukung. kirim percakapan sejauh ini dan dapatkan pesan berikutnya kembali.

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

Hanya model Dan messages Parameter sampling yang tidak diambil oleh model yang dipilih diturunkan tanpa kesalahan, sehingga satu request body bekerja di seluruh model. supported_parametersApa yang ditolak daripada ditinggalkan adalah apa yang model tidak bisa lakukan sama sekali: gambar untuk model yang tidak dapat melihat, alat untuk model yang tidak dapat memanggil mereka.

BidangJenisDiperlukandeskripsi
modelStringnyaYanymbot/auto ( atau auto) untuk routing Nymbot pada saldo standar, atau id model katalog seperti anthropic/claude-sonnet-5 pada saldo Pro. nama pendek dan alias aplikasi juga diterima. Cukup.
messagesarrayYaPercakapan dan Peran system, developer (Dilakukan dengan cara sistem) user, assistant Dan toolKonten adalah string atau daftar text Dan image_url bagian; gambar hanya dalam pesan pengguna. input_audio dan bagian file ditolak.
streamBooleanTidakKirimkan jawaban seperti yang tertulis. lihat streamingnya.
stream_optionsobyekTidak{"include_usage": true} menambahkan potongan terakhir dengan jumlah token dan biaya.
max_tokens
max_completion_tokens
IntegrasiTidakSebagian besar token yang harus ditulis.Dimendong ke maksimum model jika lebih tinggi.Juga menetapkan berapa banyak yang dipegang dari saldo Anda, sehingga jumlah yang lebih kecil membutuhkan lebih sedikit kredit untuk memulai.
temperature
top_p
JumlahTidakPengendalian sampel : temperature dari 0 sampai 2, top_p dari 0 sampai 1.
stopstring atau arrayTidakTeks yang mengakhiri jawaban: string atau paling banyak 4 string, masing-masing paling banyak 256 karakter. nymbot/auto.
seedIntegrasiTidakUntuk pengambilan sampel berulang, di mana model mendukungnya.
presence_penalty
frequency_penalty
JumlahTidakKontrol pengulangan, masing-masing dari -2 hingga 2.
response_formatobyekTidak{"type": "json_object"} atau {"type": "json_schema", "json_schema": {…}}, di mana model mendukung. tidak digunakan oleh nymbot/auto.
tools
tool_choice
parallel_tool_calls
array, string atau object, booleanTidakPanggilan kerja. lihat Alat Panggilan. a web_search Alat ini beralih pencarian webMaksimal 128 alat dan 512 KB definisi, tertanam di paling banyak 64 tingkat mendalam; lebih 400.
reasoning_effort
reasoning
String dan ObjectTidak"minimal", "low", "medium" atau "high"atau {"effort": "high"}. "none" atau {"enabled": false} Lakukan hal ini. lihat Argumentasi.
pluginsarrayTidak[{"id": "web", "max_results": 5}] selalu mencari web pertama.Hingga 10 hasil.
nIntegrasiTidak1.Segala sesuatu yang lain kembali 400.
logit_bias
user
metadata
Pengertian String, ObjectTidakditerima dan tidak dikirimkan. logit_bias peta dengan maksimal 300 token id ke angka dari -100 hingga 100; user Maksimalnya 256 karakter. metadata memegang hingga 16 nilai string, kunci hingga 64 karakter dan nilai hingga 512.

Jawabannya adalah biasa chat.completionDengan biaya di usage.cost (dalam dolar) dan dalam nymbot dengan objek. model adalah id model yang diselesaikan, sehingga nama pendek kembali sebagai nama lengkap. message.reasoning_contentterpisah dari jawaban.

Jawaban

{
  "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 ini dikembangkan dari apa yang datang kembali, karena penyedia melaporkan secara berbeda: tool_calls Ketika Anda meminta alat, length ketika jawaban menggunakan setiap token yang diizinkan (atau model menghabiskan mereka semua berpendapat dan tidak menulis jawaban), content_filter Jika pembeli menolak, dan stop Kalau tidak usage.completion_tokens_details.reasoning_tokens selalu 0: token argumen tersembunyi dihitung, dan dihitung, dalam completion_tokens.

StatusnyaKapan
400Tidak model atau messages (missing_required_parameter); bagian audio atau file, atau gambar untuk model yang tidak dapat melihatnya (unsupported_content); lebih dari 20 gambar (too_many_images(Baca juga: Cara Menghilangkan Jerawat dengan Cepat atau Tidak Cepat)invalid_value); link gambar yang tidak umum (invalid_image_url); alat pada model yang tidak dapat menyebutnya (unsupported_tool); n Tidak lebih dari 1; a :thinking Sesuai dengan definisi yang tidak dapat disimpulkan (model_not_found(Jika pemohon menolak permohonan tersebut)upstream_rejected).
402Saldo yang dihabiskan oleh model tidak dapat menutupi kepemilikan.
403yang paling buruk tidak sesuai dengan cap kunci (key_limit_reached) yang lebih rendah max_tokens atau mengangkat kepala.
404Tidak ada model dengan nama itu (model_not_found).
429Pembatasan tarif kunci, atau dari penyedia (upstream_rate_limited).
502, 503Penyedia tidak dapat (upstream_error(Jika ada yang berlebihan)upstream_overloaded, dengan Retry-AfterTidak ada yang dikenakan biaya kecuali penyedia menghitung untuk percobaan.

Kode status setiap saham endpoint tercantum di bawah kesalahan.

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

Streamingnya

dengan "stream": true jawaban datang sebagai peristiwa yang dikirim oleh server sementara model menuliskannya. chat.completion.chunk adalah a data: garis, dan aliran berakhir dengan data: [DONE]Alasan masuk ke dalam delta.reasoning_contentJawabannya dalam delta.content.

Stream apa pun yang mungkin memakan waktu lebih dari sekitar 100 detik, seperti jawaban panjang, max_tokens Sebuah permintaan yang tidak ditransmisikan tidak mengirimkan apa-apa sampai jawaban selesai, dan jaringan antara Anda dan Nymbot dapat menutup koneksi kosong setelah sekitar 100 detik; model masih selesai dan apa yang ditulisnya diisi, tetapi jawaban hilang.

Streamnya

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]
  • Garis yang dimulai dengan : komentar tetap hidup, dikirim setiap 15 detik sementara model sedang berpikir. klien SSE melewatkannya.
  • Minta untuk "stream_options": {"include_usage": true} untuk mendapatkan potongan terakhir di atas, dengan satu kosong choices, token menghitung, biaya dan nymbot dengan objek.
  • Biaya diselesaikan setelah aliran berakhir.Jika Anda menutup koneksi lebih awal, model tidak dihentikan: Nymbot membaca sisa aliran penyedia, hingga 25 detik, untuk mendapatkan jumlah token, dan Anda membayar apa yang dilaporkan penyedia.
  • Kesalahan yang terjadi pada bagian pertama, seperti 401 atau 402, kembali sebagai JSON biasa dengan kode statusnya, bukan sebagai aliran. data: {"error": {…}} peristiwa, dan aliran berakhir tanpa [DONE].
  • Permintaan dengan alat, dan model pada transportasi Responses OpenAI, tidak mengalir dari penyedia. mereka masih menjawab dengan aliran yang valid, dikirim setelah jawaban 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

Mengidentifikasi fungsi dalam tools dan model dapat meminta seseorang untuk dipanggil alih-alih menjawab. Anda menjalankan fungsi, menambahkan hasilnya sebagai tool Pesan yang sama dengan tool_call_idNymbot tidak pernah menjalankan fungsi Anda; itu mengirimkan permintaan model kembali kepada Anda.

tool_choice Mengambil "auto", "none", "required" atau {"type": "function", "function": {"name": "…"}}Daftar model menandai model mana yang dapat disebut alat (capabilities.toolsAlat tersebut ditolak dengan 400 unsupported_tool adalah nymbot/auto dan pada beberapa model katalog yang berjalan pada transportasi Responses OpenAI, yang tidak dapat ditransfer oleh Nymbot.

dengan "stream": true, permintaan dengan alat berjalan dalam satu potongan dan kemudian dikirim sebagai urutan potongan normal: peran, satu potongan membawa setiap panggilan alat dengan indeks, id, nama dan argumen, dan potongan akhir.

Jawabannya, sebagian

"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 dapat membaca gambar. tambahkan image_url bagian ke pesan pengguna, dengan publik https:// Link atau a data:image/…;base64, WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB400 invalid_image_url1) Opsi yang detail adalah auto, low atau high.

dengan nymbot/auto, permintaan dengan gambar di dalamnya diarahkan ke model standar yang dapat dilihat. capabilities.vision Menolak gambar dengan 400 unsupported_contentGambar hanya dapat berada dalam pesan pengguna. link harus menunjuk ke host publik; Nymbot mengirimkan gambar ke penyedia model dan tidak menyimpannya.

Sebuah gambar dikenakan biaya sebagai token input yang dihitung oleh penyedia untuk itu, seperti sisanya dari 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);

Argumentasi

Model dengan capabilities.reasoning dapat berpikir sebelum mereka menjawab. meminta lebih atau kurang dari itu dengan reasoning_effort ("minimal", "low", "medium" atau "high") atau "reasoning": {"effort": "high"}atau menambahkan :thinking untuk nama model, yang berarti usaha tinggi. Pada model tanpa alasan pengaturan diabaikan. dengan nymbot/auto, :thinking Mengirimkan permintaan ke rute pertimbangan standar.

Pada model Anthropic upaya menjadi anggaran pemikiran sekitar 1.000, 2.000, 8.000 atau 16.000 token, tidak lebih dari max_tokens memungkinkan, maka pemikiran akan terhenti ketika tool_choice memaksa sebuah alat, dan ketika permintaan melanjutkan lingkaran alat (pesan terakhirnya adalah hasil alat), karena Anthropic membutuhkan pemikiran yang ditandatangani sebelumnya untuk melanjutkan.

Argumen itu kembali ke dalam message.reasoning_contentatau delta.reasoning_content ketika streaming, tidak pernah dicampur ke dalam jawaban. Reasoning adalah output dan dibebankan sebagai demikian, dalam completion_tokensBeberapa penyedia tidak mengembalikan teks argumen sama sekali, dan itu masih dikenakan biaya.

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 yang cukup

Sufi pada nama model mengubah cara permintaan diproses, tanpa bidang lain. mereka bekerja pada ID lengkap dan nama pendek sama, seperti dalam anthropic/claude-sonnet-5:online.

CukupEfeknya
:onlineMencari situs web pertama, seperti plugins: [{"id": "web"}]Yaitu pencarian web.
:thinkingPenilaian yang tinggi; pada nymbot/autopada suatu model yang tidak dapat berakal, 400 model_not_found dengan “ tidak ada titik akhir yang ditemukan”.
:nitro, :floor, :exacto, :extendedSetiap model katalog memiliki satu rute, jadi tidak ada rute yang lebih cepat, lebih murah atau lebih lama untuk dipilih; suffix diperbolehkan sehingga nama model yang disalin dari layanan lain masih berfungsi.

Semua suffix lainnya diabaikan. Nama keseluruhan dicoba terlebih dahulu, sehingga model yang idnya benar-benar berisi kolon masih berfungsi; jika tidak, suffix diambil dari ujung satu per satu sampai model cocok. Nama model mungkin tidak lebih dari 200 karakter panjang dengan tidak lebih dari 4 suffix; yang lebih panjang 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);

Nymbot mencari pesan pengguna terakhir (seribu karakter pertama), membaca halaman terbaik dan memberikannya ke model dengan pertanyaan, ditandai sebagai konten eksternal model tidak boleh mengambil instruksi dari.

  • Selalu Mencari: "plugins": [{"id": "web", "max_results": 5}]atau a :online cukup pada modelnya.
  • Mencari Ketika Membantu: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Juga diterima sebagai web_search_preview atau openrouter:web_searchNymbot hanya mencari ketika pertanyaan tampaknya membutuhkan informasi saat ini, tes yang sama yang digunakan oleh aplikasi.

max_results adalah 5 secara default dan pada maksimum 10. sumber kembali ke nymbot.web_search.sourcesMasing-masing dengan a title, snippet Dan urlDan sebagai url_citation Catatan pada pesan.

Setiap pencarian yang berjalan biaya $ 0,008, dikonversi ke sats, di atas token, dan itu adalah bagian dari hold. halaman yang dibaca adalah token input juga, jadi jawaban dari web biaya lebih dari pertanyaan yang sama diminta dingin, kadang-kadang beberapa kali lebih.

Jawabannya, sebagian

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

Jawaban API

OpenAI adalah format yang lebih baru, yang digunakan oleh OpenAI Agents SDK dan oleh Codex.

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

BidangJenisDiperlukandeskripsi
modelStringnyaYasebagai untuk Chatting yang lengkapTermasuk juga dengan suffix.
inputstring atau arrayYaSebuah string, atau daftar item: pesan (peran user, assistant, system, developer) dengan input_text, input_image Dan output_text bagian, dan function_call Dan function_call_output Barang untuk alat. input_image mengambil sebuah image_url link atau data URL, bukan file id. reasoning Dan web_search_call Barang-barang yang ditinggalkan item_reference yang ditolak.
instructionsStringnyaTidakdengan instruksi sistem.
max_output_tokensIntegrasiTidakyang paling banyak ditulis.
temperature
top_p
JumlahTidakSampling controls, di mana model mengambilnya.
tools
tool_choice
parallel_tool_calls
array, string atau object, booleanTidakFungsi-fungsi yang digunakan dalam formulir respon ({"type": "function", "name": …, "parameters": …}) a web_search atau web_search_preview Alat ini beralih pencarian web Ketika itu membantu. alat-alat built-in lainnya ditolak.
reasoningobyekTidak{"effort": "minimal" | "low" | "medium" | "high"}. xhigh Dan max berarti high; none Beralih dari itu.
text.format
response_format
obyekTidakHasil yang terstruktur, seperti skema JSON atau json_object.
metadataobyekTidakMengembalikan tidak berubah dalam tanggapan. pada paling banyak 16 nilai string, kunci hingga 64 karakter dan nilai hingga 512.
streamBooleanTidakStream acara seperti yang dijelaskan di bawah ini.
storeBooleanTidakTidak ada yang disimpan, dan jawaban selalu mengatakan "store": false.
previous_response_id
conversation
background
String, Object dan BooleanTidakTidak didukung : 400 unsupported_parameterJawaban tidak disimpan, jadi kirimkan seluruh percakapan ke input Setiap kali

Jawaban

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

Sebuah tool request muncul di output sebagai a function_call Item dengan call_id, name Dan argumentsMengembalikan hasilnya sebagai a function_call_output Item dengan sama call_idReasoning, ketika model mengembalikannya, adalah reasoning Item dengan reasoning_text yang terdaftar terlebih dahulu. status adalah incomplete Ketika jawabannya memukul max_output_tokens atau penyerang yang menolak, dengan incomplete_details.reason Mengatur 2 max_output_tokens atau content_filterTanggapan juga mencerminkan pengaturan permintaan (temperatur, alat, pilihan alat dan sebagainya) seperti yang dilakukan OpenAI, dan membawa nymbot Biaya untuk objek.

Setiap event, setiap event adalah sebuah event: garis dan a data: garis dengan a sequence_numberDalam urutan ini: response.created, response.in_progress, response.output_item.added, response.content_part.addedSetiap bilangan dari response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.doneDan akhirnya response.completed dengan penggunaan dan biaya. sebuah jawaban memotong akhir pendek dengan response.incomplete sebaliknya, dan kegagalan setelah aliran dimulai dengan response.failedMenggambarkan aliran-aliran sebagai item sendiri dengan response.reasoning_text.delta Dan .doneAlat panggilan datang setelah pesan, masing-masing sebagai item dengan response.function_call_arguments.delta Dan .done.

StatusnyaKapan
400Tidak model atau input; previous_response_id, conversation, background atau sebuah item_reference (unsupported_parameter); alat atau jenis konten yang tidak didukung.
402, 403, 404, 429, 502, 503Untuk menyelesaikan chat.

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 antropologis

Format Anthropic, untuk Anthropic SDK dan Claude Code. berfungsi dengan setiap model dalam katalog, tidak hanya Claude: permintaan diterjemahkan, berjalan melalui pipa yang sama, dan diterjemahkan kembali.

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

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

  • Sebuah nama yang dikenal sebagai katalog, seperti claude-sonnet-5 atau anthropic/claude-opus-5yang digunakan sebagaimana adanya.
  • Jika ada tanggal (-20260514), -latest, versi tag seperti -v1Dengan kata lain, sebuah tag seperti [1m] dan sebuah anthropic/ atau anthropic. Penelitian ini bertujuan untuk mengidentifikasi faktor-faktor yang mempengaruhi dan mengidentifikasi faktor-faktor yang mempengaruhi dan mengidentifikasi faktor-faktor yang mempengaruhi (claude-haiku-4-5 Temukan claude-haiku-4.5).
  • Jika itu masih tidak cocok, keluarga (Opus, Sonnet atau Haiku) digunakan, asalkan versi katalog sama atau lebih baru dari yang diminta.
  • Nama yang tidak cocok kembali 404 not_found_error.
BidangJenisDiperlukandeskripsi
modelStringnyaYaSebuah ID model katalog, atau nama model antropologis.
max_tokensIntegrasiYayang paling banyak ditulis.
messagesarrayYauser Dan assistant berbalik, dengan text, image (base64 atau sumber URL) tool_use Dan tool_result dengan blok. thinking blok dari putaran sebelumnya diterima dan ditinggalkan.
systemstring atau arrayTidakSistem prompt, seperti string atau blok teks.
temperature
top_p
JumlahTidakSampling controls, di mana model mengambilnya. top_k diterima dan ditinggalkan.
stop_sequencesMenggunakan StringsTidakTeks yang mengakhiri jawaban. maksimal 4 string, masing-masing maksimal 256 karakter.
tools
tool_choice
Array dan ObjectTidakAlat dengan name, description Dan input_schema. a web_search Server Tool beralih ke pencarian webAlat-alat built-in Anthropic lainnya (bash, editor teks, penggunaan komputer) ditolak dengan unsupported_tool. tool_choice Mengambil auto, any, tool atau nonedan disable_parallel_tool_use.
thinkingobyekTidak{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} atau {"type": "disabled"}Anggaran memilih tingkat upaya: di bawah 2.048 minimum, dari 2.048 rendah, dari 8.192 sedang, dari 16.384 tinggi. output_config.effortatau yang tinggi.
streamBooleanTidakStream dalam format acara Anthropic.
metadataobyekTidakditerima dan diabaikan.

Jawaban

{
  "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 Bisa juga memegang tool_use blok dan a thinking Blok yang mana signature adalah kosong stop_reason adalah end_turn, max_tokens, tool_use atau refusalbekerja dengan cara yang sama seperti finish_reason adalah Chatting yang lengkap; stop_sequence Selalu ada null, bahkan ketika urutan stop mengakhiri jawaban. input_tokens hanya menghitung input segar; input cache berada di dua bidang cache. nymbot objek dan yang X-Nymbot-Cost-Sats dengan header.

Streamed, acara ini adalah 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 Biaya objek, dan message_stop. a ping juga dikirim setiap 15 detik saat model bekerja. panggilan alat tiba setelah teks, masing-masing sebagai tool_use blok dengan seluruh inputnya dalam satu input_json_delta.

Kesalahan pada titik akhir ini menggunakan format Anthropic: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Keseimbangan yang pendek adalah 402 billing_errorPenyedia yang Overloaded 503 overloaded_errorKegagalan setelah aliran telah dimulai dikirim 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);

Menghitung Token

Perkiraan berapa banyak token input yang akan digunakan oleh permintaan Pesan, sehingga klien dapat memeriksa sebelum mengirimkannya.

POST https://nymbot.ai/api/v1/messages/count_tokens Anda membutuhkan kunci API gratis.

Tubuh adalah sama dengan Pesandan tanpa max_tokensJumlah adalah perkiraan: karakter dari sistem prompt, pesan, panggilan alat dan definisi alat dibagi oleh empat, ditambah 1.600 untuk setiap gambar. Ini bukan tokenizer penyedia sendiri, sehingga jumlah sebenarnya dapat berbeda. Kunci yang telah mencapai capnya masih dapat menggunakannya.

Jawaban

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

Daftar Model

Setiap model dan generator yang diterima API, dengan biaya apa pun. daftar dibaca dari katalog langsung yang sama dengan picker aplikasi, sehingga selalu apa yang akan berjalan server.

GET https://nymbot.ai/api/v1/models - Tidak diperlukan kunci. disembunyikan selama lima menit.

GET /api/v1/models/{id} Mengembalikan satu entri.

BidangJenisDiperlukandeskripsi
typeMenggunakan string (query)Tidakchat (Dalam hal yang demikian, image, video, audio, embedding atau allBeberapa dapat diberikan, seperti image,video.

Harga adalah apa yang Anda bayar, dengan biaya dan margin yang sudah ada, dalam dolar dan dalam sats pada harga Bitcoin saat ini. balance Mengidentifikasi model mana yang dihabiskan. nymbot_key adalah nama model pendek dalam aplikasi. created selalu 0 karena katalog tidak mencatat kapan model ditambahkan. per_request alih-alih.

nymbot/auto selalu diutamakan, dengan harga yang variableDengan a routes Daftar yang memberikan tarif dari setiap rute standar. daftar visi dan argumen, tetapi tidak alat.

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

Jawaban

{
  "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 lainnya :

  • gambar Masuknya ada capabilities (accepts_image_url, requires_image_url, edit) dan harga per_generation.
  • Video yang Masuknya ada max_duration_seconds Dan resolutionsDan harga yang per_second untuk setiap resolusi.
  • Audio yang Masuknya ada audio_type speech atau transcriptionHarga yang per_1k_chars atau per_minute.
  • Embedded Masuknya ada dimensions, context_length, max_inputs dan harga per juta input token.

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