OpenAI-yhteensopiva API
Viimeksi päivitetty 11 marrask. 2026
Mikä se on
OpenAI-yhteensopivan API:n avulla työkalu, joka tukee OpenAI:n chat completions -muotoa, voi käyttää ToRunin keskustelumalleja ToRun-tililtäsi maksettuina. Koodausagentti, kuten opencode, voi käyttää ToRunia mallintarjoajanaan ToRunin MCP-työkalujen rinnalla.
Osoite ja kirjautuminen
| Perus-URL | https://mcp.torun.ai/v1 |
| Kirjautuminen | Authorization: Bearer <your developer key> |
Käytä samaa kehittäjäavainta kuin MCP-palvelimelle: katso Kehittäjäavaimet. Avain, joka on luotu ennen OpenAI-yhteensopivan API:n lisäämistä, saa vastauksen 403 insufficient_scope. Avaimen oikeudet eivät koskaan muutu, joten luo uusi avain.
API:lla on kaksi päätepistettä, GET /v1/models ja POST /v1/chat/completions. Mikä tahansa muu polku /v1:n alla vastaa 404 not_found.
Mallit
GET /v1/models luettelee ensin mallin torun/auto ja sitten jokaisen tekstimallin, jota tilauksesi voi käyttää, mallin tunnisteen mukaan. Jokaisesta mallista kerrotaan:
- kuinka paljon tekstiä se voi lukea (
context_length) ja kuinka pitkän vastauksen se voi kirjoittaa (max_completion_tokens), - voiko se kutsua työkaluja (
supports_tools) ja lukea kuvia (supports_vision), - sen hinta Runs-yksiköinä miljoonaa tokenia kohden (
pricing:inputjaoutput).
torun/auto antaa ToRunin valita mallin jokaiselle pyynnölle: kuvia lukevan mallin, kun pyynnössä on kuva, ja työkaluja kutsuvan mallin, kun se lähettää tools-kentän.
Chat completions
POST /v1/chat/completions hyväksyy:
messages, rooleillasystem,developer(käsitellään kuinsystem),user,assistantjatool,toolsjatool_choice(auto,none,requiredtai yksi nimetty funktio): työkalusi omat työkalut palaavat sille työkalukutsuina, eikä ToRun koskaan aja niitä,response_formatarvollajson_object.json_schemahyväksytään ja vastaus tulee JSON-muodossa, mutta itse skeemaa ei pakoteta,temperature(0–2),top_p(0–1),max_completion_tokenstaimax_tokens,stop(enintään 4 jonoa),seedjareasoning_effort,streamjastream_options.include_usage.
Arvoa 1 suurempi n, logprobs, top_logprobs, ääni ja kaikki muu tuloste kuin teksti hylätään vastauksella 400 unsupported_parameter sen sijaan, että ne ohitettaisiin.
Kuvat
Lähetä kuva upotettuna muodossa data:image/...;base64,... image_url-osassa, enintään 20 Mt pyyntöä kohden. Linkkinä lähetetty kuva hylätään vastauksella 400 image_url_not_supported: ToRun ei hae sitä. Kuvat käyvät läpi turvatarkistuksen, kuten sovelluksessa.
Suoratoisto
Kun "stream": true on käytössä, vastaus saapuu server-sent events -tapahtumina chat.completion.chunk-muodossa:
- Ensimmäinen osa sisältää roolin
assistant, ja työkalukutsut suoratoistetaan omanindex-arvonsa kanssa. - Kun lähetettävää ei ole, kommenttirivi
: keepalivesaapuu 15 sekunnin välein; SSE-jäsentimet ohittavat sen. data: [DONE]päättää onnistuneen virran.- Kun
stream_options.include_usageon käytössä, viimeisen osanchoiceson tyhjä ja se sisältääusage-kentän. - Virran alkamisen jälkeinen virhe saapuu yhtenä
data: {"error": ...}-tapahtumana ilman[DONE]-riviä.
Kutsu ilman suoratoistoa pysäytetään 110 sekunnin jälkeen vastauksella 504 timeout. Lähetä pitkät pyynnöt asetuksella "stream": true.
Käyttö
usage sisältää kentät prompt_tokens, completion_tokens, total_tokens, prompt_tokens_details.cached_tokens ja completion_tokens_details.reasoning_tokens sekä kentän torun_credits: mitä kutsu maksoi Runs-yksiköinä.
Käyttö opencodessa
Kehittäjille-sivun opencode-määritys lisää ToRunin mallintarjoajaksi MCP-palvelimen rinnalle:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"torun": {
"npm": "@ai-sdk/openai-compatible",
"name": "ToRun",
"options": { "baseURL": "https://mcp.torun.ai/v1", "apiKey": "{env:TORUN_API_KEY}" },
"models": { "torun/auto": { "name": "ToRun Auto" } }
}
}
}
Mikä tahansa muu OpenAI:n keskustelu-API:a tukeva työkalu toimii samalla tavalla. Sivun OpenAI API -välilehti näyttää tämän kutsun:
curl https://mcp.torun.ai/v1/chat/completions \
-H "Authorization: Bearer $TORUN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "torun/auto", "messages": [{"role": "user", "content": "Hello"}]}'
Miten kutsut maksetaan
API-kutsut maksavat yhtä monta Runs-yksikköä kuin sama käyttö sovelluksessa. Niistä maksavat vain maksetut varat: ensin maksullisen tilauksesi kiintiö ja sitten lompakkosi, jos olet sallinut sen avaimelle. Ilmainen kiintiö ei koskaan maksa API-kutsuja. Avaimen kuukausi- ja päiväraja ovat voimassa, ja vastaukset käyvät läpi turvatarkistuksen samoin kuin keskusteluvastaukset.
Rajat
Jokainen avain voi lähettää tälle API:lle 60 pyyntöä minuutissa ja ajaa 4 completions-pyyntöä samanaikaisesti. Sen ylittyessä API vastaa 429 rate_limit_exceeded ja Retry-After-otsakkeen.
Virheet
Jokainen virhe on muotoa {"error": {"message": ..., "type": ..., "param": ..., "code": ...}}. message on kielellä, jota pyynnön Accept-Language-otsake pyytää.
| Tila | Koodi | Merkitys |
|---|---|---|
| 400 | invalid_json, missing_parameter, invalid_parameter, unsupported_parameter |
Pyyntö on virheellinen tai käyttää parametria, jota ToRun ei tue. |
| 400 | image_url_not_supported |
Kuva lähetettiin linkkinä; lähetä se upotettuna. |
| 400 | content_blocked |
Turvatarkistus esti sisällön. |
| 400 | upstream_rejected |
Mallin tarjoaja hylkäsi pyynnön; viestissä kerrotaan syy. |
| 401 | invalid_api_key |
Avain puuttuu, on kirjoitettu väärin tai on peruttu. |
| 402 | insufficient_credits, wallet_spend_not_allowed, spending_cap_reached |
Tili tai avain ei voi maksaa kutsua. |
| 403 | insufficient_scope |
Avain on luotu ennen tämän API:n lisäämistä; luo uusi avain. |
| 403 | model_not_available |
Malli ei kuulu tilaukseesi. |
| 403 | account_suspended, no_developer_access |
Tili on jäädytetty tai sillä ei ole kehittäjäoikeuksia. |
| 404 | model_not_found |
Mallin tunniste ei ole GET /v1/models -luettelossa. |
| 404 | not_found |
/v1:n alla ei ole tällaista polkua. |
| 429 | rate_limit_exceeded |
Liian monta kutsua; odota Retry-After-otsakkeessa annettu aika. |
| 500 | internal_error |
Jokin meni vikaan ToRunin päässä. |
| 502 | upstream_error, empty_reply |
Mallin tarjoaja epäonnistui tai lähetti tyhjän vastauksen. |
| 503 | upstream_error, cap_unreadable, scan_unavailable |
Kutsun tarvitsema palvelu ei ole hetkeen käytettävissä; yritä uudelleen. |
| 504 | timeout |
Kutsu ilman suoratoistoa kesti yli 110 sekuntia. |
Pyyntö, jota ei voi maksaa, saa vastauksen 402 eikä 429, jotta asiakas ei yritä sitä uudelleen yhä uudestaan.