Skip to content
Docs · 2026-05-25

TL;DR — Any client built for OpenAI works with jusInfer. Set base_url to https://api.jusinfer.com/v1 and api_key to a jinf_ token. Both /v1/chat/completions and /v1/responses are supported. Streaming, tool use, vision, and JSON mode all pass through.

OpenAI-compatible drop-in

If your tool can talk to api.openai.com, it can talk to jusInfer. Change two lines of config — base_url and api_key — and you're routed through jusInfer with no other code changes. We support both the Chat Completions API (/v1/chat/completions) and the Responses API (/v1/responses).

TL;DR

base_url:  https://api.jusinfer.com/v1
api_key:   jinf_your_key_here   (mint at https://jusinfer.com/developer)
model:     jusInfer-auto        (or any provider/model — we'll route it)

That's the entire integration.

Per-tool quickstart

Cursor

Settings → Models → Override OpenAI Base URL: https://api.jusinfer.com/v1
Settings → Models → OpenAI API key: jinf_…

Toggle "Use custom OpenAI key for all models" → on.

Aider

export OPENAI_API_BASE="https://api.jusinfer.com/v1"
export OPENAI_API_KEY="jinf_..."
aider --model openai/jusInfer-auto

Cline (VS Code extension)

Cline Settings → API Provider: "OpenAI Compatible"
  Base URL: https://api.jusinfer.com/v1
  API Key:  jinf_...
  Model:    jusInfer-auto

Continue (VS Code / JetBrains)

~/.continue/config.json:

{
  "models": [{
    "title": "jusInfer",
    "provider": "openai",
    "apiBase": "https://api.jusinfer.com/v1",
    "apiKey": "jinf_...",
    "model": "jusInfer-auto"
  }]
}

Goose (Block)

goose configure
# Provider: OpenAI
# Host: https://api.jusinfer.com
# API key: jinf_...
# Model: jusInfer-auto

OpenAI SDK (Python)

from openai import OpenAI

client = OpenAI(
    base_url="https://api.jusinfer.com/v1",
    api_key="jinf_...",
)

resp = client.chat.completions.create(
    model="jusInfer-auto",
    messages=[{"role": "user", "content": "Refactor this function for readability."}],
)
print(resp.choices[0].message.content)

OpenAI SDK (Node)

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.jusinfer.com/v1",
  apiKey: process.env.JUSINFER_API_KEY,
});

const resp = await client.chat.completions.create({
  model: "jusInfer-auto",
  messages: [{ role: "user", content: "Explain this stack trace." }],
});
console.log(resp.choices[0].message.content);

curl

curl https://api.jusinfer.com/v1/chat/completions \
  -H "Authorization: Bearer jinf_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jusInfer-auto",
    "messages": [{"role":"user","content":"Hello"}],
    "stream": true
  }'

What we forward, normalize, or override

FeatureBehavior
modeljusInfer-auto lets us pick; a specific id (e.g. anthropic/claude-sonnet-4.5) is honored
messagespassed through
tools / function_callnormalized between OpenAI and Anthropic shapes automatically
stream: trueSSE forwarded transparently; usage frame included at end
temperature, top_p, max_tokenspassed through (clamped to model limits)
seed, logprobspassed if upstream supports; ignored if not
usage.cost (response)set by jusInfer in microdollars, even when upstream doesn't report it

Responses API

The newer Responses endpoint (/v1/responses) is supported with the same auth and base URL. Use it if your harness prefers stateful conversations:

curl https://api.jusinfer.com/v1/responses \
  -H "Authorization: Bearer jinf_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jusInfer-auto",
    "input": "Write a Python function to compute Fibonacci."
  }'

Errors you might see

StatusCodeWhat it means
401INVALID_KEYWrong / revoked / expired jinf_ token
402INSUFFICIENT_CREDITSWallet is empty — top up at /developer → Billing
403SEAT_REQUIRED>1 member, no seat sub — subscribe in Billing
429RATE_LIMITPer-key or per-tenant RPM — wait or raise the cap
502UPSTREAM_ERRORUpstream model temporarily down; retry

Agent-readable raw markdown: /docs/openai-drop-in.md