Пређи на садржај
Nazad na Nymbot

База знања Развијачи

Чат, одговори и поруке

Три начина да питате модел нешто, у три формата клијенти већ говоре, сви раде на истим моделима и рачунају на исти начин.

Цхат завршетак

ОпенАИ цхат формат, и онај који скоро сваки алат подржава. Пошаљите разговор до сада и вратите следећу поруку.

POST https://nymbot.ai/api/v1/chat/completions Potreban vam je API ključ.

samo model и messages Параметар узорковања који изабрани модел не узима пада без грешке, тако да једно тело захтева ради преко модела. supported_parametersОно што је одбијено уместо бачено је оно што модел уопште не може да уради: слике за модел који не може да види, алате за модел који их не може позвати.

ПољеТипПотребнаОпис
modelStringДаnymbot/auto (или auto) за Нимбот рутирање на стандардној равнотежи, или каталог модел идентификатор као што су anthropic/claude-sonnet-5 на Про балансу. Прихватају се и кратка имена и надимци апликације. Довољно.
messagesАрејДаРазговор - улоге system, developer (третира се као систем), user, assistant и toolSadržaj je niz ili lista text и image_url делови; слике само у порукама корисника. input_audio и делови датотека су одбијени.
streamБоулијанНеПошаљите одговор као што је написано. погледајте Стриминг.
stream_optionsобјектаНе{"include_usage": true} додаје коначни део са бројевима токена и трошковима.
max_tokens
max_completion_tokens
интегритетНеНајвише токена за писање. Смањен на максимум модела ако је већи. Такође поставља колико се држи из вашег биланса, тако да мањи број треба мање кредита да би започео.
temperature
top_p
БројНеКонтрола узорака: temperature од 0 до 2, top_p од 0 до 1.
stopString или ArrayНеТекст који завршава одговор: низ или највише 4 низа, од којих сваки има највише 256 карактера. nymbot/auto.
seedинтегритетНеЗа понављајуће узорковање, где га модел подржава.
presence_penalty
frequency_penalty
БројНеКонтроле понављања, свака од -2 до 2.
response_formatобјектаНе{"type": "json_object"} или {"type": "json_schema", "json_schema": {…}}, где га модел подржава. Не користи nymbot/auto.
tools
tool_choice
parallel_tool_calls
мапа, струка или објекат, боолеанНефункција позива. види Алат позива• А web_search алат се претвара WEB претраживањеНајвише 128 алата и 512 КБ дефиниција, уграђених на највише 64 нивоа дубине; више је 400.
reasoning_effort
reasoning
Стринг, објекатНе"minimal", "low", "medium" или "high", или {"effort": "high"}. "none" или {"enabled": false} Искључи га. види Разумевање.
pluginsАрејНе[{"id": "web", "max_results": 5}] увек претражује веб први. до 10 резултата.
nинтегритетНеSamo 1. sve ostalo se vraća 400.
logit_bias
user
metadata
Објект, Структура, ОбјектНеПрихваћено и не послато. logit_bias мапе са највише 300 токен идентификатора на бројеве од -100 до 100; user највише 256 карактера; metadata ima najviše 16 vrednosti niza, ključeve do 64 karaktera i vrednosti do 512.

Odgovor je običan chat.completion, са трошковима у usage.cost (у доларима) и у nymbot Objekat je . model је решени модел id, тако да се кратко име враћа као пуно. ако је модел размишљао пре него што је одговорио, његово размишљање је у message.reasoning_contentodvojeno od odgovora.

Odgovor

{
  "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 је израђен из онога што се вратило, пошто провајдери извештавају другачије: tool_calls Када је модел тражио алате, length када је одговор користио сваки дозвољени токен (или их је модел потрошио на размишљање и написао ниједан одговор), content_filter када је понуђач одбио, и stop inače usage.completion_tokens_details.reasoning_tokens увек је 0: скривени размишљачки токени се рачунају и наплаћују, у completion_tokens.

статусКада
400Не model или messages (missing_required_parameter); аудио или фајл део, или слике за модел који их не може видети (unsupported_content); више од 20 фотографија (too_many_images); параметар узорковања погрешног типа или ван опсега (invalid_value); линк на слику који није јавни (invalid_image_url); алати на моделу који их не може назвати (unsupported_tool); n осим 1; а :thinking супфикс на моделу који не може да размишља (model_not_found); или провајдер је одбио захтев (upstream_rejected).
402Биланс који модел троши не може покрити држање.
403Најгори случај није у складу са кључном капицом (key_limit_reached) нижи max_tokens Или подигните главу.
404Не постоји модел са овим именом (model_not_found).
429ограничење стопе кључа, или провајдера (upstream_rate_limited).
502, 503Понуђач није успео (upstream_error) или је преоптерећен (upstream_overloaded, са Retry-AfterНишта се не наплаћује осим ако провајдер није наплатио за покушај.

Кодови статуса сваке акције у крајњој тачки су наведени испод Грешке.

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

Стриминг

са "stream": true Одговор долази као догађај који је послао сервер док га модел пише. chat.completion.chunk је а data: линија, а ток се завршава са data: [DONE]Razum dolazi u delta.reasoning_contentOdgovor u delta.content.

Стреам било шта што може трајати више од око 100 секунди, као што је дуг одговор, велики max_tokens Захтев који се не емитује не шаље ништа док одговор није комплетан, а мрежа између вас и Нимбота може затворити празну везу након око 100 секунди; модел и даље завршава и оно што је написао се наплаћује, али одговор је изгубљен.

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]
  • Линије које почињу са : Komentari se šalju svakih 15 sekundi dok model razmišlja.SSE klijenti ih preskaču.
  • Pitajte za "stream_options": {"include_usage": true} да бисте добили последњи комад изнад, са празним choices, токен рачуна, трошкови и nymbot Objekat je .
  • Набавка се исплати након што се ток заврши.Ако рано затворите везу, модел се не зауставља: Нимбот чита остатак провајдерског тока, до 25 секунди, да би добио свој број токена, а ви плаћате оно што провајдер извештава.
  • Грешка пре првог комада, као што је 401 или 402, се враћа као обичан ЈСОН са својим кодом стања, а не као ток. data: {"error": {…}} догађај, а ток се завршава без [DONE].
  • Захтеви са алатима и моделима на Транспорту Одговора ОпенАИ-а, не преносе се од провајдера.

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

Алат позива

Опишите функције у tools и модел може да затражи да се неко позове уместо да одговори. Покрените функцију, додајте њен резултат као tool Порука са истим tool_call_idНимбот никада не покреће ваше функције; он преноси захтев модела назад вама.

tool_choice узети "auto", "none", "required" или {"type": "function", "function": {"name": "…"}}Листа модела означује које моделе могу позвати алате (capabilities.tools) Алати се одбијају са 400 unsupported_tool је nymbot/auto и на неколико каталогских модела који се покрећу на Транспорту Отговора ОпенАИ-а, на које Нимбот не може проћи алате.

са "stream": true, захтев са алатима ради у једном комаду и затим се шаље као нормална секвенца: улога, један комад који носи сваки позив за алат са својим индексом, идентификатором, именом и аргументима и завршним комадом.

Odgovor, delimično

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

Слике у захтеву

Модели са capabilities.vision Možeš da čitaš slike.Dodaj image_url део у корисничку поруку, са било којом публиком https:// линк или а data:image/…;base64, URL. До 20 слика по захтеву. СВГ слике су одбијене, а тако је линк преко 4.096 карактера или један са корисничким именом или лозинком у њему (400 invalid_image_url) је опционо detail је auto, low или high.

са nymbot/auto, захтев са сликом у њему се усмерава на стандардни модел који може да види. capabilities.vision Одбијање фотографија са 400 unsupported_contentСлике могу бити само у корисничким порукама. Линк мора указати на јавни хост; Нимбот преноси слику провајдеру модела и не чува је.

Слика се наплаћује као улазни токен који провајдер рачуна за њега, као и остатак захтева.

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

Razumevanje

Модели са capabilities.reasoning Možete da razmislite pre nego što odgovorite.Zatražite više ili manje od toga reasoning_effort ("minimal", "low", "medium" или "high") или "reasoning": {"effort": "high"}или додати :thinking на име модела, што значи висок напор. На моделу без размишљања подешавање се игнорише. nymbot/auto, :thinking шаље захтев на стандардни пут размишљања.

На антрополошким моделима напор постаје буџет за размишљање од око 1.000, 2.000, 8.000 или 16.000 токена, никада више од max_tokens дозвољава. размишљање је напуштено када tool_choice присиљава алат, а када захтјев настави алат лук (његова последња порука је алат резултат), јер Антхропиц треба раније потписано размишљање да га настави.

Razum se vraća u message.reasoning_content, или delta.reasoning_content када стреаминг, никада не мешају у одговор. Разлог је излаз и наплаћује се као такав, унутар completion_tokensНеки провајдери уопште не враћају текст размишљања, а и даље се наплаћује.

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

Модел suffixes

Суфикс на имену модела мења начин на који се поступа са захтевом, без другог поља. anthropic/claude-sonnet-5:online.

ДовољноUticaj
:onlineПретражујете веб прво, као plugins: [{"id": "web"}]Овде WEB претраживање.
:thinkingВисок расуђивање напор; на nymbot/auto, пут размишљања.На моделу који не може разумети, 400 model_not_found са “no endpoints found”.
:nitro, :floor, :exacto, :extendedСваки модел каталога има један пут, тако да нема бржег, јефтинијег или дужег за одабир; суфикси су дозвољени тако да имена модела копирана из других услуга и даље раде.

Сваки други суфикс се игнорише. Цело име се испроба прво, тако да модел чији идентификатор заиста садржи колону и даље ради; у супротном, суфикси се узимају од краја један по један док се модел не поклапа. 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 traži poslednju korisničku poruku (njihovih prvih 2.000 karaktera), čita najbolje stranice i daje ih modelu sa pitanjem, označenim kao spoljni sadržaj iz koga model ne treba da uzima uputstva.

  • Uvek tražite: "plugins": [{"id": "web", "max_results": 5}], или а :online Довољно је на моделу.
  • Pronađite kada pomaže: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Такође је прихваћен као web_search_preview или openrouter:web_searchНимбот претражује само када се чини да питање треба тренутне информације, исти тест који апликација користи.

max_results је 5 подразумевано и највише 10. извори се враћају у nymbot.web_search.sources, сваки са а title, snippet и urlИ као url_citation Анотације на поруку.

Свака претрага која ради кошта 0,008 долара, конвертована у sats, на врху токена, и то је део држања.Странице које читају су и улазни токени, тако да одговор са веба кошта више од истог питања постављеног хладно, понекад неколико пута више.

Odgovor, delimično

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

Odgovori API

Новији формат ОпенАИ-а, који користи ОпенАИ Агентс СДК и Кодекс. Ради на истим моделима, фактурисању и функцијама као и Цхат Цомплетионс.

POST https://nymbot.ai/api/v1/responses Potreban vam je API ključ.

ПољеТипПотребнаОпис
modelStringДакао за Цхат завршетакУкључују се и суфикси.
inputString или ArrayДаString, ili lista stavki: poruke (rolovi user, assistant, system, developer) са input_text, input_image и output_text деловима и function_call и function_call_output Предмети за алате. input_image Uzmi jedan image_url линк или URL података, а не идентификатор датотеке. reasoning и web_search_call објекти су прескочени; item_reference je odbijen.
instructionsStringНеУпутства за систем.
max_output_tokensинтегритетНеНајвише токена за писање.
temperature
top_p
БројНеУзорак контроле, где их модел узима.
tools
tool_choice
parallel_tool_calls
мапа, струка или објекат, боолеанНеФункционални алати, у облику Одговори ({"type": "function", "name": …, "parameters": …}) а web_search или web_search_preview алат се претвара WEB претраживање када помаже. Други уграђени алати су одбијени.
reasoningобјектаНе{"effort": "minimal" | "low" | "medium" | "high"}. xhigh и max znači high; none Okrenite ga.
text.format
response_format
објектаНеСтруктурирани излаз, као ЈСОН шема или json_object.
metadataобјектаНеVratio se nepromenjen u odgovoru. na najviše 16 vrednosti niza, ključeve do 64 karaktera i vrednosti do 512.
streamБоулијанНеСтреам догађаји као што је описано испод.
storeБоулијанНеIgnorisano.Ništa se ne čuva, a odgovor uvek kaže "store": false.
previous_response_id
conversation
background
String, Object и BooleanНеНије подржана: 400 unsupported_parameterОдговори се не чувају, тако да пошаљите цео разговор у input Svaki put

Odgovor

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

Захтев за алат се појављује у output као а function_call Точка са call_id, name и argumentsПошаљите резултат као а function_call_output Ставка са истим call_idRazumevanje, kada ga model vrati, je reasoning Точка са reasoning_text садржај, први је наведен. status је incomplete Kada odgovor udari max_output_tokens или да одбије, са incomplete_details.reason Поставите max_output_tokens или content_filterОдговор такође одјекује подешавања захтјева (температура, алати, избор алата и тако даље) као што то чини ОпенАИ, и носи nymbot Трошкови објекта

Стреамед, сваки догађај је event: линија и а data: Линија са а sequence_numberU ovom redosledu: response.created, response.in_progress, response.output_item.added, response.content_part.addedСваки број од response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.doneИ на крају response.completed са употребом и трошковима. Одговор с кратким крајевима response.incomplete уместо тога, и неуспех након што је ток почео са response.failedРазумијевање токова као свој предмет са response.reasoning_text.delta и .donePozivi na alatke dolaze posle poruke, svaka kao stavka sa response.function_call_arguments.delta и .done.

статусКада
400Не model или input; previous_response_id, conversation, background ili jedan item_reference (unsupported_parameter); неподржан алат или тип садржаја.
402, 403, 404, 429, 502, 503Што се тиче цхат завршетака.

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

Антрополошке поруке

Антхропиц'с формат, за Антхропиц СДКс и Клод Цоде. Ради са сваким моделом у каталогу, не само Клод: захтев се преводи, покреће кроз исту цев и преводи назад.

POST https://nymbot.ai/api/v1/messages - потребан је API кључ, као x-api-key или Authorization: Bearer.

Тхе anthropic-version и anthropic-beta Антропска имена модела су усклађена са каталогом, тако да Клод Цоде и СДК раде са именима које већ користе:

  • Име које каталог зна, као што је claude-sonnet-5 или anthropic/claude-opus-5Користи се као што јесте.
  • У овом случају, датум (-20260514), -latest, верзија таг као што је -v1, бракетирани дан као што је [1m] i jedan anthropic/ или anthropic. префикс су уклоњени, а тачке и тачке у верзији су испробане на оба начина (claude-haiku-4-5 Пронађи claude-haiku-4.5).
  • Ако се то и даље не поклапа, користи се породица (Опус, Сонет или Хаику), све док је верзија каталога иста или новија од оне за коју је затражено.
  • Име које се не подудара ништа враћа 404 not_found_error.
ПољеТипПотребнаОпис
modelStringДаКаталогски идентификатор модела или антрополошки назив модела.
max_tokensинтегритетДаНајвише токена за писање.
messagesАрејДаuser и assistant Повратак, са text, image (base64 или изворни URL) tool_use и tool_result Блоковић thinking Блокови из претходних кругова су прихваћени и спуштени.
systemString или ArrayНеСистемски позив, као низа или текстуални блокови.
temperature
top_p
БројНеУзорак контроле, где их модел узима. top_k Прихваћен је и одбачен.
stop_sequencesАрсенал СтрингсНеТекст који завршава одговор. Највише 4 низа, сваки највише 256 карактера.
tools
tool_choice
Арсенал, ОбјектНеАлати са name, description и input_schema• А web_search Сервер алат се претвара на WEB претраживањеДруги уграђени алати Антхропиц-а (баш, текстуални уредник, употреба рачунара) су одбијени са unsupported_tool. tool_choice узети auto, any, tool или none, и disable_parallel_tool_use.
thinkingобјектаНе{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} или {"type": "disabled"}Буџет бира ниво напора: испод 2.048 минимално, од 2.048 ниско, од 8.192 средње, од 16.384 високо. output_config.effortИли је високо.
streamБоулијанНеСтреам у формату догађаја Anthropic.
metadataобјектаНеПрихваћен и игнорисан.

Odgovor

{
  "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 Такође можете држати tool_use Блокови и а thinking Блоцк, чији signature je prazna. stop_reason је end_turn, max_tokens, tool_use или refusalРадили су на исти начин као finish_reason је Цхат завршетак; stop_sequence uvek je null, чак и када је секвенца заустављања завршила одговор. input_tokens рачуна само свеже уносе; кеширани унос је у два поља кеша. nymbot Објект и X-Nymbot-Cost-Sats хејдер

Стреамиран, догађаји су антрополошки: message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta или thinking_delta), content_block_stop, message_delta уз разлог заустављања, употребе и nymbot Цена објекта, и message_stop• А ping такође се шаље сваких 15 секунди док модел ради. позиви алата долазе након текста, сваки као tool_use блок са свим својим уносом у једној input_json_delta.

Greške na ovoj krajnjoj tački koriste Anthropic format: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Кратка равнотежа је 402 billing_errorПреоптерећени провајдер 503 overloaded_errorНеуспех након што је ток почео шаље се као error догађаја .

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

Бројање токена

Процена колико улазних токена би захтев за поруке користио, тако да клијент може да провери пре него што пошаље.

POST https://nymbot.ai/api/v1/messages/count_tokens Potreban vam je API ključ.

Тело је исто као и Порукеbez max_tokens; име модела мора да се реши. Бројање је процена: знакови системског позива, порука, позива алата и дефиниције алата подељени су са четири, плус 1,600 за сваку слику. То није сопствени токенизер провајдера, тако да се прави број може разликовати.

Odgovor

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

Листа модела

Сваки модел и генератор који АПИ прихвата, са оним што кошта.Списак се чита из истог директног каталога као и апликациони пикер, тако да је увек оно што ће сервер покренути.

GET https://nymbot.ai/api/v1/models — није потребан кључ. Скривено пет минута.

GET /api/v1/models/{id} Враћа се један улаз.

ПољеТипПотребнаОпис
typeString (потражња)Неchat (Одлука о дефолту image, video, audio, embedding или allНеколико се може дати, као image,video.

Цене су оно што плаћате, са накнадом и маргином већ у, у доларима и у стопама по тренутној цени Битцоин-а. balance каже који баланс модел троши. nymbot_key је кратко име модела у апликацији. created uvek je 0, jer katalog ne beleži kada je model dodan. per_request уместо тога.

nymbot/auto Увек је прво, цена као variable, са а routes Листа која даје стопе сваког стандардног путања.Напише визију и размишљање, али не и алате.

GET /api/v1/models/{id} прихвата иста имена и надимке као захтев, и враћа унос за модел на који се одлуче.

Odgovor

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

Остали типови :

  • слике Улаз има capabilities (accepts_image_url, requires_image_url, edit) и цена per_generation.
  • Видео Улаз има max_duration_seconds и resolutionsИ једна цена per_second za svaku rezoluciju.
  • Аудио Улаз има audio_type speech или transcriptionцена per_1k_chars или per_minute.
  • Уграђивање Улаз има dimensions, context_length, max_inputs и цена по милиону улазних токена.

Цене означене "estimated": true је процена апликације за генератор чија цена није објављена. type Враћање 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);