Docs

Use it anywhere.

Chat in the browser, or point any app that speaks the OpenAI API at Incognito. This page covers keys, models, pricing, errors and the local proxy.

Quick start

  1. Open the app. It keeps your memberships in this browser, encrypted, on this device only; download a backup from Backup so you don't lose them.
  2. Buy questions with USDC or SOL. For the most privacy, pay from a wallet that isn't tied to you.
  3. Chat in the app, or make a key under Keys for other apps.

API

The API is OpenAI-compatible. Set the base URL and use a key from the app:

Base URL   https://…/v1
API key    incog_…   (from the app; lasts 24 hours)

Python

from openai import OpenAI

client = OpenAI(base_url="https://…/v1", api_key="incog_…")
reply = client.chat.completions.create(
    model="smart",
    messages=[{"role": "user", "content": "Hello"}],
)

JavaScript

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://…/v1", apiKey: "incog_…" });
const reply = await client.chat.completions.create({
  model: "smart",
  messages: [{ role: "user", content: "Hello" }],
  stream: true,
});

curl

curl https://…/v1/chat/completions \
  -H "Authorization: Bearer incog_…" -H "Content-Type: application/json" \
  -d '{"model":"smart","messages":[{"role":"user","content":"Hello"}]}'

GET /v1/models lists the models with their pricing. Streaming ("stream": true) works as usual. Fields that would buy extra compute, like n or best_of, are ignored, and max_tokens is capped.

Pricing

A question costs 0.002 USDC. A request costs:

questions = model multiplier × ceil(prompt tokens ÷ 4,000)

A normal message to a standard model costs 1 question. Long documents and bigger models cost a few more. Every reply carries the charge in the X-Questions-Charged header.

Errors

StatusCodeMeaning
401invalid_api_keyUnknown or expired key. Make a new one in the app.
402out_of_questionsThe key can't cover this request. The response includes needed and remaining.
400policy_violationRefused under the acceptable use policy. The request is still charged.
413prompt_too_longOver the model's prompt limit. Nothing is charged.
429rate_limitedToo many open requests on one key, or the hourly limit below.
502/503upstream_errorThe model or safety check was unavailable. The request is refunded.

Limits

Local proxy

For the most privacy, run the Incognito proxy on your own machine with Tor running. Point apps at http://127.0.0.1:8765/v1 with any API key: each conversation gets its own freshly minted key and its own Tor circuit, so conversations can't be linked to each other or to your IP address. It adds random delays and decoy requests so your activity pattern doesn't stand out.

node src/main.mjs --import incognito-backup.json   # first run: import your vault backup
node src/main.mjs                                   # then use http://127.0.0.1:8765/v1