The same keys as the rest of the API, in the format every OpenAI SDK and coding tool already speaks: a base URL, a key and a model name. Setting up a particular tool? See Client setup.
| Setting | Value |
|---|---|
| Base URL | https://www.israelgpt.site/api/v1 |
| API key | Your key from the dashboard: igpt_ and 43 characters. Sent as "Authorization: Bearer <key>". |
| Model | yahoobot-1 for coding tools and general use. israelbot-1 for IsraelGPT itself. |
| Endpoints | POST /chat/completions and GET /models. Nothing else from OpenAI’s API exists here. |
curl https://www.israelgpt.site/api/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "yahoobot-1",
"messages": [
{ "role": "system", "content": "You are a concise coding assistant." },
{ "role": "user", "content": "Write a Python function that reverses a string." }
]
}'import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ISRAELGPT_API_KEY,
baseURL: "https://www.israelgpt.site/api/v1",
});
const stream = await client.chat.completions.create({
model: "yahoobot-1",
messages: [
{ role: "system", content: "You are a concise coding assistant." },
{ role: "user", content: "Write a Python function that reverses a string." },
],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://www.israelgpt.site/api/v1")
reply = client.chat.completions.create(
model="yahoobot-1",
messages=[
{"role": "system", "content": "You are a concise coding assistant."},
{"role": "user", "content": "Write a Python function that reverses a string."},
],
)
print(reply.choices[0].message.content)"Give to your AI agent" copies a full plain-text spec of this API (auth, parameters, response shape, errors) — paste it into Claude Code, Cursor, or any coding assistant and ask it to wire up the integration for you.
The official OpenAI libraries work unchanged: set base_url / baseURL and the key. Without a base URL they talk to OpenAI, not to us.
| Model | What it is | Your system message | Tools | Streaming | Longest reply |
|---|---|---|---|---|---|
| yahoobot-1 | A plain assistant and coder. Your system message is the only system prompt. Tool calling, true streaming. The model for Cline, Roo Code, Aider and Continue. | Is the whole system prompt. IsraelGPT adds nothing, so a coding tool’s own instructions work as written. | Yes | As the model writes | 128,000 tokens |
| israelbot-1 | IsraelGPT's own personality. Your system message is added as extra instructions that cannot override its rules. No tools; replies are limited to 2,000 tokens. | Added as extra instructions after IsraelGPT’s rules. It can set format, language and task; it cannot override the rules. | No | The reply is finished first, then sent as a stream | 2,000 tokens |
GET /models lists both, with the prompt and reply sizes your key may use. It costs nothing against your limits, so a tool may call it as often as it likes (within a modest per-address allowance).
yahoobot-1 has no IsraelGPT personality or prompt. What it will and won't do comes from the model itself plus the checks below. israelbot-1 keeps IsraelGPT's personality and its rules, and because an OpenAI client can't carry IsraelGPT's signatures, earlier assistant messages are shown to it as quotes from your app rather than its own words (the same protection the native API gives). For long multi-turn chats, that makes yahoobot-1 the better fit.
Tool calling (OpenAI's tools, tool_choice and tool messages) works with yahoobot-1, streamed or not; israelbot-1 answers 400 tools_not_supported. Cline and Roo Code need none of it by default. The full round trip, every rule and every limit are on Tool calling.
| Header | Value |
|---|---|
| Authorization | Bearer YOUR_API_KEY (required) |
| Content-Type | application/json (required) |
| User-Agent | Whatever your tool sends. The key’s request log on the dashboard shows it. |
The body is OpenAI’s. A field not listed here is ignored (every client sends a few). The listed ones behave like this:
| Field | Status | What it does |
|---|---|---|
| model | supported | "yahoobot-1" or "israelbot-1". Anything else is a 404 model_not_found. |
| messages | supported | Roles system, developer (treated as system), user, assistant and tool. Content is a string, or an array of {"type":"text"} parts (joined with newlines). Control characters other than tab and newlines are removed. |
| stream | supported | true: server-sent events in OpenAI's chunk format, ending with "data: [DONE]". |
| stream_options | supported | {"include_usage": true} adds a final chunk with the token counts. Without it no usage chunk is sent. |
| temperature | supported | 0 to 1.5 (values outside are clamped). Default 0.6. |
| top_p | supported | 0 to 1. |
| max_tokens | supported | Lowers the reply cap; it can never raise it above the plan's output limit or the model's. |
| max_completion_tokens | supported | The same as max_tokens; if both are sent, the smaller wins. |
| stop | supported | A string or up to 4 strings. Ignored on israelbot-1, which has stop sequences of its own. |
| seed | supported | Passed to the model; determinism is best effort. |
| presence_penalty | supported | -2 to 2. |
| frequency_penalty | supported | -2 to 2. |
| tools | supported | yahoobot-1 only (israelbot-1 answers 400 tools_not_supported). Function tools only; see the tool calling section. |
| tool_choice | supported | yahoobot-1 only: "none", "auto", "required", or {"type":"function","function":{"name":"..."}}. |
| parallel_tool_calls | supported | yahoobot-1 only. true or false. |
| n | rejected | Only 1. Any other number is a 400 unsupported_parameter. |
| functions | rejected | The old function-calling fields are refused with a 400 that points to "tools". |
| function_call | rejected | The old function-calling fields are refused with a 400 that points to "tool_choice". |
| response_format | ignored | No structured-output mode; ask for JSON in the prompt. |
| logprobs | ignored | Not offered. |
| top_logprobs | ignored | Not offered. |
| logit_bias | ignored | Not offered. |
| user | ignored | Accepted; nothing is done with it. |
| store | ignored | Nothing is stored for you to retrieve. |
| metadata | ignored | Accepted; nothing is done with it. |
| reasoning_effort | ignored | Accepted; nothing is done with it. |
| service_tier | ignored | Accepted; nothing is done with it. |
supported: used as described. ignored: accepted so a client that always sends it keeps working; it has no effect. rejected: refused with a 400 that says what to send instead. This table and the code that checks requests are generated from one list, and a test fails if they disagree.
With temperature left out, replies use 0.6; with max_tokens left out, the reply is capped at 4,096 tokens or your plan’s limit if that is lower.
system, developer (treated as system), user, assistant, tool. A conversation needs at least one message that isn’t a system message.content is a string, or an array of {"type":"text","text":"..."} parts, joined with newlines. Image, audio and file parts are refused (400 unsupported_content): text only.{
"id": "chatcmpl-8f2c1e4a9b3d7f01-TLV",
"object": "chat.completion",
"created": 1790000000,
"model": "yahoobot-1",
"choices": [{
"index": 0,
"message": { "role": "assistant", "content": "def reverse(s): return s[::-1]" },
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 41, "completion_tokens": 12, "total_tokens": 53 }
}| finish_reason | Meaning |
|---|---|
| stop | The reply ended on its own. |
| length | It hit max_tokens (or your plan’s reply limit). Ask it to continue. |
| tool_calls | The model wants your tools run: see Tool calling. |
| content_filter | The safety checks refused the request. content is a fixed refusal, and it is a normal 200: see Sizes, safety and errors. |
usage is what the model counted. It is what counts against your daily tokens. Prompt and reply sizes, what is checked, every error, and what isn't offered are on Sizes, safety and errors.
Send "stream": true and the answer is server-sent events in OpenAI’s chunk format, ending with data: [DONE]. Add "stream_options": {"include_usage": true} to get a last chunk with the token counts (choices empty). Without it, no usage chunk is sent.
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","created":1790000000,"model":"yahoobot-1","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","created":1790000000,"model":"yahoobot-1","choices":[{"index":0,"delta":{"content":"def"},"finish_reason":null}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","created":1790000000,"model":"yahoobot-1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-...","object":"chat.completion.chunk","created":1790000000,"model":"yahoobot-1","choices":[],"usage":{"prompt_tokens":41,"completion_tokens":12,"total_tokens":53}}
data: [DONE]: are keep-alive comments. Every SSE client ignores them.502, 429, 400...). A failure part-way sends data: {"error":{...}} and then [DONE], because the status line has already gone. The error has the same shape as every other.