Iris Chat

The Iris Chat API exposes Ridum's conversational AI as a stateless endpoint. Send the full message history with each request — the API does not persist conversations on your behalf.

Endpoint

POST https://iris.ridumlabs.com/api/v1/chat

Authentication

Requires a Bearer API key. See the authentication guide.

Models

ModelDescription
neoGeneral-purpose conversational model with web search grounding.
geoFast conversational model with tool support and web search.

Request body

FieldTypeDescription
modelstringRequired. neo or geo.
messagesarrayRequired. Non-empty array of message objects. The last message must have role user.
messages[].rolestringuser or assistant.
messages[].contentstringThe message text.

Response

json
{
  "message": {
    "role": "assistant",
    "content": "...",
    "model": "geo"
  }
}

Examples

Single message (curl)

bash
curl https://iris.ridumlabs.com/api/v1/chat \
  -H "Authorization: Bearer rl_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "geo",
    "messages": [
      { "role": "user", "content": "What is Ridum Labs?" }
    ]
  }'

Multi-turn conversation (JavaScript)

Because the API is stateless, append the assistant's reply to your message history and send the entire conversation on the next turn.

javascript
const API_URL = "https://iris.ridumlabs.com/api/v1/chat";
const API_KEY = process.env.RIDUM_API_KEY;

async function ask(messages) {
  const res = await fetch(API_URL, {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ model: "geo", messages }),
  });

  if (!res.ok) {
    const err = await res.json();
    throw new Error(err.error);
  }

  return (await res.json()).message;
}

const history = [
  { role: "user", content: "Hello" },
];

const reply1 = await ask(history);
history.push(reply1);

history.push({ role: "user", content: "Tell me more." });
const reply2 = await ask(history);
console.log(reply2.content);

Python

python
import os
import requests

API_URL = "https://iris.ridumlabs.com/api/v1/chat"
API_KEY = os.environ["RIDUM_API_KEY"]

def ask(messages):
    res = requests.post(
        API_URL,
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={"model": "geo", "messages": messages},
        timeout=60,
    )
    res.raise_for_status()
    return res.json()["message"]

history = [{"role": "user", "content": "Hello"}]
reply = ask(history)
print(reply["content"])

Rate limits

Requests are subject to upstream model capacity. If you receive a 429 or 503 response, wait a few seconds and retry with exponential backoff. Very long conversations may exceed the model token budget — keep history concise or summarize older turns client-side.

Limitations (v1)

  • Stateless only — client is responsible for storing message history.
  • No streaming responses. Each call returns the complete reply.
  • External integrations (Discord, Gmail, etc.) available in the Iris web app are not accessible from API requests.