OpenAI-kompatibelt API
Senast uppdaterad 11 nov. 2026
Vad det är
Med det OpenAI-kompatibla API:et kan ett verktyg som stöder OpenAI:s format för chat completions använda ToRuns chattmodeller, betalade från ditt ToRun-konto. En kodningsagent som opencode kan använda ToRun som modelleverantör vid sidan av ToRuns MCP-verktyg.
Adress och inloggning
| Bas-URL | https://mcp.torun.ai/v1 |
| Inloggning | Authorization: Bearer <your developer key> |
Använd samma utvecklarnyckel som för MCP-servern: se Utvecklarnycklar. En nyckel som skapades innan det OpenAI-kompatibla API:et lades till får 403 insufficient_scope. En nyckels behörigheter ändras aldrig, så skapa en ny nyckel.
API:et har två ändpunkter, GET /v1/models och POST /v1/chat/completions. Varje annan sökväg under /v1 svarar 404 not_found.
Modeller
GET /v1/models listar först torun/auto och sedan varje textmodell som din plan kan använda, efter modell-id. För varje modell anges:
- hur mycket text den kan läsa (
context_length) och hur långt svar den kan skriva (max_completion_tokens), - om den kan anropa verktyg (
supports_tools) och läsa bilder (supports_vision), - dess pris i Runs per miljon tokens (
pricing:inputochoutput).
torun/auto låter ToRun välja en modell för varje förfrågan: en som läser bilder när förfrågan innehåller en bild, och en som anropar verktyg när den skickar tools.
Chat completions
POST /v1/chat/completions tar emot:
messages, med rollernasystem,developer(behandlas somsystem),user,assistantochtool,toolsochtool_choice(auto,none,requiredeller en namngiven funktion): ditt verktygs egna verktyg kommer tillbaka till det som verktygsanrop, och ToRun kör dem aldrig,response_formatmedjson_object.json_schemaaccepteras och svaret kommer som JSON, men själva schemat tillämpas inte,temperature(0 till 2),top_p(0 till 1),max_completion_tokensellermax_tokens,stop(upp till 4 strängar),seedochreasoning_effort,streamochstream_options.include_usage.
n större än 1, logprobs, top_logprobs, ljud och all annan utdata än text nekas med 400 unsupported_parameter i stället för att ignoreras.
Bilder
Skicka en bild inbäddad som data:image/...;base64,... i en image_url-del, upp till 20 MB per förfrågan. En bild som skickas som länk nekas med 400 image_url_not_supported: ToRun hämtar den inte. Bilder går igenom säkerhetskontrollen, som i appen.
Strömning
Med "stream": true kommer svaret som server-sent events i formatet chat.completion.chunk:
- Den första delen bär rollen
assistant, och verktygsanrop strömmas med sitt egetindex. - När det inte finns något att skicka kommer en kommentarsrad
: keepalivevar 15:e sekund; SSE-tolkare hoppar över den. data: [DONE]avslutar en lyckad ström.- Med
stream_options.include_usagehar den sista delen tomchoicesoch bärusage. - Ett fel efter att strömmen har börjat kommer som en enda händelse
data: {"error": ...}, utan[DONE].
Ett anrop utan strömning stoppas efter 110 sekunder med 504 timeout. Skicka långa förfrågningar med "stream": true.
Användning
usage innehåller prompt_tokens, completion_tokens, total_tokens, prompt_tokens_details.cached_tokens och completion_tokens_details.reasoning_tokens, samt torun_credits: vad anropet kostade i Runs.
Använda det i opencode
Opencode-konfigurationen på sidan Utvecklare lägger till ToRun som modelleverantör bredvid MCP-servern:
{
"$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" } }
}
}
}
Vilket annat verktyg som helst som stöder OpenAI:s chatt-API fungerar på samma sätt. Fliken OpenAI API på sidan visar det här anropet:
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"}]}'
Hur anrop betalas
API-anrop kostar lika många Runs som samma användning i appen. Bara betalda medel betalar för dem: först din betalda plans kvot och sedan din plånbok, om du har tillåtit det för nyckeln. Den kostnadsfria kvoten betalar aldrig för API-anrop. Nyckelns månads- och dagsgräns gäller, och svaren går igenom säkerhetskontrollen precis som chattsvar.
Gränser
Varje nyckel kan skicka 60 förfrågningar per minut till det här API:et och köra 4 completions samtidigt. Över det svarar API:et 429 rate_limit_exceeded med ett Retry-After-huvud.
Fel
Varje fel har formen {"error": {"message": ..., "type": ..., "param": ..., "code": ...}}. message är på det språk som förfrågans Accept-Language-huvud ber om.
| Status | Kod | Betydelse |
|---|---|---|
| 400 | invalid_json, missing_parameter, invalid_parameter, unsupported_parameter |
Förfrågan är felaktig eller använder en parameter som ToRun inte stöder. |
| 400 | image_url_not_supported |
En bild skickades som länk; skicka den inbäddad. |
| 400 | content_blocked |
Säkerhetskontrollen stoppade innehållet. |
| 400 | upstream_rejected |
Modelleverantören nekade förfrågan; meddelandet anger orsaken. |
| 401 | invalid_api_key |
Nyckeln saknas, är felskriven eller har återkallats. |
| 402 | insufficient_credits, wallet_spend_not_allowed, spending_cap_reached |
Kontot eller nyckeln kan inte betala för anropet. |
| 403 | insufficient_scope |
Nyckeln skapades innan det här API:et lades till; skapa en ny nyckel. |
| 403 | model_not_available |
Modellen ingår inte i din plan. |
| 403 | account_suspended, no_developer_access |
Kontot är avstängt eller har ingen utvecklaråtkomst. |
| 404 | model_not_found |
Modell-id:t finns inte i GET /v1/models. |
| 404 | not_found |
Det finns ingen sådan sökväg under /v1. |
| 429 | rate_limit_exceeded |
För många anrop; vänta den tid som anges i Retry-After. |
| 500 | internal_error |
Något gick fel hos ToRun. |
| 502 | upstream_error, empty_reply |
Modelleverantören misslyckades eller skickade ett tomt svar. |
| 503 | upstream_error, cap_unreadable, scan_unavailable |
En tjänst som anropet behöver är tillfälligt otillgänglig; försök igen. |
| 504 | timeout |
Ett anrop utan strömning tog längre än 110 sekunder. |
En förfrågan som inte kan betalas får 402 och inte 429, så att en klient inte försöker igen om och om igen.