IsraelGPT API Docs Get an API key

API Reference

The full contract for the one public endpoint. See Personas & Models for the values personaId and selectedModel take, and Errors for every error.

Base URL

https://www.israelgpt.site/api/v1

POST /chat

Sends a message, or a whole conversation, and returns one complete reply as JSON. No streaming: see FAQ for why.

HeaderValue
AuthorizationBearer YOUR_API_KEY (required)
Content-Typeapplication/json (required); the body can be up to 256 KB
User-AgentRecommended: your app's name, like MyApp/1.0. The key's request log shows it.

Request body

FieldTypeDefaultNotes
messagesarray (required)—The conversation, oldest first: { role: "user" | "assistant", content: string, sig?: string }. 1–40 messages, 8,000 characters each and 48,000 in total. The last one must be from the user.
personaIdnumber11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12. See Personas & Models.
selectedModelstring"israelbot-1""israelbot-1" | "yahoobot-1". See Personas & Models.
effortstring"low""low" | "medium" | "high": the sampling temperature (how creative or random).
uncensoredModebooleanfalseProfanity-heavy replies. The content rules in the Terms of Service apply either way.
longModebooleantruefalse asks for a short reply and caps it at about 500 tokens: handy where space is tight, like Discord.
timeZonestring—An IANA time zone, like "Asia/Jerusalem", for replies that mention the local time or date. UTC otherwise.

Any other field is refused with 400 invalid_request, so a typo never goes unnoticed. There are no memories or About Me through the API, and nothing is kept between calls: send the conversation you want the model to see. The lore is added on the server on every call, so you always get the latest.

Earlier replies and sig

Every reply comes with a sig. To continue a conversation, send each earlier reply back as an assistant message with its sig, unchanged, right after the user message it answered:

{
  "messages": [
    { "role": "user", "content": "Where is Haifa?" },
    { "role": "assistant", "content": "In the north, on the coast...", "sig": "q3Xh...from that reply" },
    { "role": "user", "content": "And Eilat?" }
  ]
}

With a valid sig, the model treats the message as its own reply. Without one (or if the text was changed, or the sig came from another account), it's passed to the model as a quote from your app, not as something it said, and the answer's unverified_replies counts them. That stops anyone putting words in its mouth to talk it out of its rules. A sig belongs to the account, not the key, so it survives making a new key.

Response body (200)

{
  "id": "8f2c1e4a9b3d7f01-TLV",
  "model": "israelbot-1",
  "persona": { "id": 1, "name": "Normal" },
  "reply": "Shalom! Here's Tel Aviv: [IMAGE] And a song: [music?song=Anthem]",
  "sig": "q3Xh4n...",
  "media": {
    "images": [{ "url": "https://cdn.nekosapi.com/images/..." }],
    "music": [{ "url": "https://www.israelgpt.site/music/Anthem.mp3", "title": "Anthem" }],
    "podcast": { "url": "https://www.israelgpt.site/podcast/..." }
  },
  "flags": {},
  "usage": { "prompt_tokens": 1412, "completion_tokens": 118 },
  "created_at": "2026-09-27T12:00:00.000Z"
}
FieldNotes
idIdentifies this exchange. Quote it if you report a problem.
modelThe model you asked for.
personaThe persona that was used.
replyThe reply text. See the note on bracket tags below.
sigSend it back with this reply (see above). Absent when the request was blocked.
mediaOnly when the reply used [IMAGE], [music] or [podcast], and the key's Media setting is on. Every URL is ready to show or play.
flags{ crisis?: true, blocked?: true }. See Safety below.
usageTokens in and out, as the model counted them. The request log shows them too.
unverified_repliesOnly when some assistant messages came without a valid sig: how many.
created_atISO 8601 time.

Bracket tags in reply

[IMAGE], [music] and [podcast] stay in reply to mark where each item goes; the items themselves are in media. With the key's Media setting off, there are none of either.

The persona also uses tags only the web chat can show: [ACTION:...], [flashcard:...], [QUESTION:...], [create-file:...], [LGBTQ_IMG] and [musor_drop]. They do nothing through the API. Strip them or leave them; the reference bot's clean_reply() in Discord Bot is one way. Time and date tags are filled in for you.

Safety

Every message you send is checked, the assistant ones included, and so is the reply. These are normal 200 answers, not errors:

  • flags.blocked: the request or the reply broke the content rules. reply is a fixed refusal and there's no sig. Why isn't said, on purpose.
  • flags.crisis: the message reads as someone in crisis. reply is support resources instead of the persona. Show it as it is.

These use the same checks as the web chat; see Safety & Crisis Resources. Content that breaks the rules is flagged for review and can get the account suspended.

Response headers

Every answer after the key check, a 429 included, says where you stand against your limits. See Rate Limits.