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"}]}'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:
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.