Skip to content
← Back to blog

Connect your tools to the Reeva AI API in five minutes

By Reeva Team · October 2, 2026 · Updated October 15, 2026

The Reeva AI Models API speaks the OpenAI API. If a tool or library can talk to OpenAI, it can talk to Reeva: you change two settings and pick a model. Here’s how.

What you need

  • A Reeva AI API key. Choose a plan on the AI Models API page. Your first key is issued as soon as the PayPal payment clears.
  • The base URL: https://api.reeva.me/v1
  • A model name: deepseek-v4.1-flash for chat, text, code and agents, or qwen-image for images.
  • Also available: qwen3.6-35b-a3b (Qwen 3.6), a light model for short, quick tasks.
  • Embeddings, on Pro and Scale: nemotron-embed-8b for documents and nemotron-embed-8b-query for search questions.

Create a separate key for each tool, with a name you’ll recognize. You can have up to 10, and revoking one doesn’t affect the others. Keep keys in an environment variable, not in your code. The examples below read the key from REEVA_API_KEY.

Python

Install the official OpenAI library with pip install openai, then point it at Reeva:

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.reeva.me/v1",
    api_key=os.environ["REEVA_API_KEY"],
)

r = client.chat.completions.create(
    model="deepseek-v4.1-flash",
    messages=[{"role": "user",
               "content": "Summarize this email in three bullets"}],
)
print(r.choices[0].message.content)

Node.js

Install the library with npm install openai, then save this as index.mjs and run it with node index.mjs:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.reeva.me/v1",
  apiKey: process.env.REEVA_API_KEY,
});

const r = await client.chat.completions.create({
  model: "deepseek-v4.1-flash",
  messages: [{ role: "user", content: "Write a Python function that checks a number with the Luhn algorithm." }],
});
console.log(r.choices[0].message.content);

curl

A chat request:

curl https://api.reeva.me/v1/chat/completions \
  -H "Authorization: Bearer $REEVA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash",
    "messages": [{"role": "user", "content": "Translate to French: Same-day repairs, guaranteed."}]
  }'

An image:

curl https://api.reeva.me/v1/images/generations \
  -H "Authorization: Bearer $REEVA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-image",
    "prompt": "A winter campaign banner in pink and purple, no text",
    "n": 1
  }'

An image takes longer to come back than a text answer.

Coding tools

opencode, Cline, Continue, Aider and Roo Code can all use an OpenAI-compatible provider. Each one has its own settings screen or config file, but you set the same things in each:

  • Provider: OpenAI-compatible, or OpenAI with a custom base URL
  • Base URL: https://api.reeva.me/v1
  • API key: your Reeva key
  • Model: deepseek-v4.1-flash for coding, agents, quick edits and chat

In Aider, for example, it takes two environment variables and a model name:

export OPENAI_API_BASE=https://api.reeva.me/v1
export OPENAI_API_KEY=$REEVA_API_KEY
aider --model openai/deepseek-v4.1-flash

Embeddings (Pro and Scale)

Pro and Scale include embeddings on /v1/embeddings, from nvidia’s Nemotron-3-Embed-8B. The model has two ids, and a search needs both: nemotron-embed-8b for the documents you store and nemotron-embed-8b-query for the questions you search with. Using one id for both returns no error, but the search ranks the results much worse.

docs = ["Invoices are due 30 days after issue.",
        "Refunds go back to the original card."]
d = client.embeddings.create(model="nemotron-embed-8b", input=docs)
q = client.embeddings.create(model="nemotron-embed-8b-query",
                             input="When is an invoice due?")

# The vectors are normalized: a dot product is the cosine similarity.
qv = q.data[0].embedding
scores = [sum(a * b for a, b in zip(qv, x.embedding)) for x in d.data]
print(docs[scores.index(max(scores))])

The vectors have 4096 dimensions. A request takes up to 64 inputs and 120,000 characters in total. Each input is embedded up to 4,096 tokens, and longer text is cut without an error (the response’s usage.prompt_tokens stops at 4,096), so split long documents into chunks before you embed them. Your plan’s per-request size limit is for chat and does not apply here, but embedding tokens count the same as chat tokens.

Limits and errors

Tokens are unlimited, but each plan sets limits per minute, on requests at once and per request. This is what happens when you go over one.

  • HTTP 429, too many requests per minute. The window resets every minute, so retry within a minute. Mini allows 5 requests a minute, Starter 20, Pro 60 and Scale 120.
  • Too many requests at once: the request waits. It starts as soon as one of your own running requests finishes. If no slot frees up within two minutes, it is refused with HTTP 429. Mini runs 1 request at a time, Starter 2, Pro 4 and Scale 8.
  • HTTP 429, too many images in one request. One request can ask for up to 3 images (n) on Mini, 10 on Starter and 16 on Pro and Scale. A bigger n is refused at once; ask for fewer.
  • Fair use. Heavy use slows your requests down. Only extreme use sustained over a full day is paused until it eases; requests get HTTP 429 during the pause.
  • HTTP 400, request_too_large. The request is bigger than your plan allows: 32k tokens on Mini and 128k on Starter and Pro. Scale has no cap of its own, only DeepSeek v4.1’s 256k-token context. The size counts your prompt plus the max_tokens you ask for, and it is checked before the request runs. Shorten the prompt or lower max_tokens. Qwen 3.6 has its own limit of 32k tokens per request on every plan; a request over it is also refused with HTTP 400. gpt-oss-20b has been retired, and requests that name it are refused. Use deepseek-v4.1-flash for code and agents.
  • HTTP 401. The key isn’t valid, for example because it was revoked.

The OpenAI SDKs for Python and Node.js retry a 429 on their own, with backoff.

Next steps

Choose your plan on the AI Models API page, or read the launch announcement for the full plan comparison.