BotConnector

POST /v1/chat/completions

The main text route. The request body follows the OpenAI Chat Completions schema, so an existing OpenAI client works once you change the base URL and the key.

curl https://api.botconnector.id/v1/chat/completions \
  -H "Authorization: Bearer bc_live_..." \
  -H "Content-Type: application/json" \
  -d '{"model":"ling-3.0-flash-sante","messages":[{"role":"user","content":"Hello"}]}'
python
from openai import OpenAI
import os

client = OpenAI(
    base_url="https://api.botconnector.id/v1",
    api_key=os.environ["BOTCONNECTOR_API_KEY"],
)

response = client.chat.completions.create(
    model="ling-3.0-flash-sante",
    messages=[{"role": "user", "content": "Hello"}],
)

print(response.choices[0].message.content)

Model IDs

Take the model value from GET /v1/models. An ID that is not in that list for your account is not callable, even when the catalogue page shows it for another plan.

Streaming

Add "stream": true to receive the answer as a stream of events instead of one response object. The SDKs handle this the same way they do against OpenAI:

python
stream = client.chat.completions.create(
    model="ling-3.0-flash-sante",
    messages=[{"role": "user", "content": "Count to five"}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="")

When a request is rejected

Unsupported request shapes return an explicit error rather than silently falling back to another provider, so a failure in your logs always means what it says. Check the model value against GET /v1/models first; that is the usual cause.

Other surfaces

Anthropic Messages and the native OpenAI Responses API are available on separate routes. See the route table for the current public contract, or the API reference for parameters.