Cruxy
  • Enterprise
  • Pricing
  • Docs
ContactGet started
Get started

Products

  • All products
  • Cruxy
  • Memory
  • Vaults
  • Artifacts
  • Cruxy Code
  • Moderation API
  • Cruxy Cowork
  • Cruxy Bench
  • Cruxy Guard

Models

  • Auto
  • Fast · Mira
  • Balanced · Vaani
  • Deep · Kavi

Developers

  • Overview
  • Docs
  • API reference
  • Model reference
  • API pricing
  • Status

Pricing

  • All plans
  • Free
  • Core
  • Advanced
  • Pro
  • Enterprise

Company

  • About
  • Contact sales
  • Sign in
  • Report a vulnerability

Legal

  • Security
  • Trust
  • Privacy
  • Terms
  • Usage policy
  • Cookies

Cruxy. The AI that works with you.

[email protected]© 2026 Mycrux Private Limited
Language: English
  • EnglishEnglish
  • हिन्दीHindi
  • EspañolSpanish
  • FrançaisFrench
  • DeutschGerman
  • Português (Brasil)Portuguese (Brazil)
  • ItalianoItalian
  • 简体中文Chinese (Simplified)
  • 日本語Japanese
  • 한국어Korean
  • РусскийRussian
  • TürkçeTurkish
  • Bahasa IndonesiaIndonesian
  • Tiếng ViệtVietnamese
  • বাংলাBengali
  • తెలుగుTelugu
  • தமிழ்Tamil
  • मराठीMarathi
  • العربيةArabic
  • اردوUrdu
  • فارسیPersian

Developers

Build what comes next.

One base URL, one key and three model sizes behind it. An OpenAI-compatible API for chat, Cruxy's own routes when you want memory, vaults, files and evals, and a CLI that works in your repo.

Get started freeRead the quickstart
import OpenAI from 'openai';

const cruxy = new OpenAI({
  baseURL: 'https://api.cruxy.ai/v1',
  apiKey: process.env.CRUXY_API_KEY,
});

const res = await cruxy.chat.completions.create({
  model: 'auto',
  messages: [{ role: 'user', content: 'Summarize this ticket' }],
});
import os
from openai import OpenAI

cruxy = OpenAI(
    base_url="https://api.cruxy.ai/v1",
    api_key=os.environ["CRUXY_API_KEY"],
)

res = cruxy.chat.completions.create(
    model="auto",
    messages=[{"role": "user", "content": "Summarize this ticket"}],
)
curl https://api.cruxy.ai/v1/chat/completions \
  -H "Authorization: Bearer $CRUXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "auto",
       "messages": [{"role": "user",
                     "content": "Summarize this ticket"}]}'
Response · chat.completion
{
  "id": "chatcmpl-8f3a1c2d",
  "object": "chat.completion",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Checkout fails on UPI when the cart
          holds a gift card. Steps to reproduce and
          a fix are below."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 212,
    "completion_tokens": 96,
    "total_tokens": 308
  }
}

The request is real. The reply is illustrative and trimmed to its shape.

Base URL
api.cruxy.ai/v1
Models
kavi · vaani · mira · auto
Streaming
OpenAI's SSE, ends with [DONE]
Errors
A stable code on every one

The platform

Everything you can build on. All of it live, all of it documented.

Chat APILiveOpenAI-compatible chat completions on three model sizes. Streaming, tool calling and a reasoning_effort you set per request.Chat guideCruxy CodeLiveA coding agent for your terminal. Reads your codebase, edits files with a diff before each approval, runs your tests and opens pull requests.Explore Cruxy CodeEvals APILiveSuites of cases you define, runs you start, results you read back. Point an evaluation harness at the OpenAI-compatible routes, or use the evals routes directly.API referenceEmbeddings, rerank and moderationLivecruxy-embed turns text into vectors, cruxy-rerank orders candidates against a query, and cruxy-guard classifies text against content-safety categories.CookbookDocsLiveA quickstart, a guide for every route, a cookbook with retrieval, tool loops and streaming in the browser, and the full API reference.Read the docsStatusLiveLive probes and incidents, on their own domain, so you can check us before you check your code.See status

Chat

Two routes, one set of models. Use the one your client already speaks.

Chat guide
POST /v1/chat/completions

OpenAI-compatible

Point any OpenAI client or evaluation harness at https://api.cruxy.ai/v1 with your Cruxy key. Standard chat.completion objects, OpenAI's SSE and OpenAI's error envelope, with a stable Cruxy code inside it.

  • temperature, top_p, max_tokens and reasoning_effort are honoured
  • Fields the gateway does not use are ignored, not refused, so a harness that sends them still runs
  • A reproducible run of your messages and the model. No memory, no vaults, no files
POST /api/v1/chat

Cruxy chat

The same models with everything the Cruxy app has: memory recall and capture, vaults and standing rules, files by id, and usage.cost on every reply.

  • memory: { recall, capture } per request, rules on or off, a vault_id
  • usage.cost with the tier, the amount and the currency on every response
  • cruxy.request_id to look the call up in your logs and pair it with feedback
const stream = await cruxy.chat.completions.create({
  model: 'auto',
  stream: true,
  messages: [{ role: 'user', content: 'Draft the release note' }],
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
}
stream = cruxy.chat.completions.create(
    model="auto",
    stream=True,
    messages=[{"role": "user", "content": "Draft the release note"}],
)

for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="")
curl -N https://api.cruxy.ai/v1/chat/completions \
  -H "Authorization: Bearer $CRUXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "auto", "stream": true,
       "messages": [{"role": "user",
                     "content": "Draft the release note"}]}'

STREAMING

Set stream to true and the reply arrives as OpenAI's server-sent events: chat.completion.chunk frames with content or tool-call deltas, then [DONE].

If the upstream fails mid-stream, the stream ends with an error frame instead of [DONE], so your client can tell a cut-off from a finish. Tool calling works on both routes: send the functions the model may call, run the ones it returns and feed the results back.

Tool calling guide

The API

Every route, one line each. Paths as the reference lists them.

Full API reference
GROUPROUTESWHAT IT DOESDOCS
Chat
  • POST /v1/chat/completions
  • POST /api/v1/chat
  • POST /api/v1/tokens/count
OpenAI-compatible chat completions, Cruxy's own chat with memory, vaults, rules and files, and a token counter.Chat guide
Models
  • GET /v1/models
  • GET /api/v1/models
The tier catalog, as an OpenAI list or with Cruxy's own metadata: context window, pricing, tool support and reasoning defaults.Model reference
Tool calling
  • "tools": [ ... ] on every chat route
Send the functions the model may call, run the calls it returns and feed the results back.Tool calling guide
Embeddings and rerank
  • POST /api/v1/embeddings
  • POST /api/v1/rerank
Turn text into vectors with cruxy-embed and order candidate documents against a query with cruxy-rerank.Embeddings guide
Moderation
  • POST /api/v1/moderations
Classify text against content-safety categories with cruxy-guard and act on the flagged boolean.Moderation guide
Files
  • POST /api/v1/files
  • GET /api/v1/files/{id}/content
Upload, list, download and delete files, then attach them to Cruxy chat requests by id.API reference
Evals
  • POST /api/v1/evals/suites
  • POST /api/v1/evals/suites/{id}/runs
Suites of cases you define, runs you start, and results you read back.API reference
Feedback
  • POST /api/v1/feedback
Report the outcome of a prior call by its request id: accepts, rejects, thumbs and test results.Feedback guide
Memory, vaults and rules
  • GET /api/v1/memories
  • POST /api/v1/vaults
  • PUT /api/v1/rules
Read and delete memories, manage vaults and their members, and set standing rules for an account or a vault.API reference
Limits and logs
  • GET /api/v1/limits
  • GET /api/v1/logs/{request_id}
Your per-key and per-organisation request ceilings, and the log of your requests by request id.Errors reference
Keys and organisation
  • POST /api/v1/device/code
  • GET /api/v1/org/members
  • POST /api/v1/workspaces
Device login for a key, your organisation's members and invitations, and workspaces.Authentication guide

Operate

Limits, logs and errors you can reason about.

Errors reference
01

Limits you can read

GET /api/v1/limits returns your per-key and per-organisation chat request ceilings for each 60-second window, and the gateway sends X-RateLimit headers. There is no tokens-per-minute limit.

02

Two kinds of 429

rate_limited means requests are arriving too fast; it clears once you slow down. budget_exhausted is a spend ceiling that a retry alone will not clear.

03

Logs by request id

Every request is logged with the model, token counts, cost, timing and status, and none of the prompt or the reply. Read one back at GET /api/v1/logs/{request_id}.

04

Keys shown once

Get a key with the device-login flow. It is shown exactly once and stored only as a hash. Secrets at rest are encrypted field by field with AES-256-GCM.

Live

Cruxy Code

The same models, in your terminal.

  • Plans multi-step changes and shows every diff before you approve it
  • Asks before every edit and every command, by default
  • Runs your test command, reads the failures and keeps fixing
  • cruxy rollback restores the tree to before any turn
  • cruxy pr opens the pull request after one approval
npm i -g @cruxy/cliExplore Cruxy Code
~/web · Cruxy Code
$cruxy run "fix the failing tests in the auth module"
cruxy › fix the failing tests in the auth module
! cruxy wants to run tests: pnpm test (destructive)
$ pnpm test
in /home/dev/web
[y] once · [a] always allow test runs of exactly `pnpm test` this session · [t] reject & instruct · [n] no: a
✗ tests failed · 2 of 42 failed · 3.1s · pnpm test
✗ signs a session token src/auth/session.test.ts:18
expected "ok"
received undefined
✗ rejects an expired token src/auth/session.test.ts:41
why (inferred) TOKEN_SECRET is not set in the test environment
✓ read_file 8ms src/test/setup.ts
? cruxy wants to edit: src/test/setup.ts (mutate)

A real session, cut short. The CLI output is real; the model's replies are illustrative.

API pricing

Per token, in USD. No setup fee and no minimum.

API pricing in full

Fast· Mira

Short, high-volume calls where latency and cost matter most.

INPUT
$0.20 / 1M
OUTPUT
$0.40 / 1M
Context
64K
Max output
2K

Balanced· Vaani

Everyday calls: strong quality at lower latency and cost.

INPUT
$0.65 / 1M
OUTPUT
$1.30 / 1M
Context
128K
Max output
4K

Deep· Kavi

The hardest tasks: deep reasoning and the largest output budget.

INPUT
$0.76 / 1M
OUTPUT
$1.52 / 1M
Context
256K
Max output
8K

USD per 1M tokens, metered per request. API prices exclude GST. 18% GST is added for India-billed accounts (input credit available). With auto, you pay the rate of the model that served the call.

Questions

Good to know.

Moderation on any keyScreen input with cruxy-guard before it reaches chat. The moderation API takes any key on any plan.

Yes, for chat and the model list. https://api.cruxy.ai/v1 serves /v1/chat/completions and /v1/models in OpenAI's shapes, so existing clients and evaluation harnesses work once you change the base URL and the key. The rest of the API, from files to evals, is Cruxy's own and lives under /api/v1.

Sign up for Cruxy and create a key with the device-login flow described in the quickstart: request a device code, approve it in the browser and poll for the key. API keys come from the same account as the app, and the API is billed per token, separately from your plan.

Pass auto unless you have a reason not to. Mira is the fast size for short, high-volume calls, Vaani is the balanced default, and Kavi is the deep size for the hardest tasks. The model behind a size can change; the size id is the contract.

Any OpenAI client works for chat completions and models, in whatever language you already use. For Cruxy's own routes, the docs show the request in curl and TypeScript with fetch.

Your prompts and outputs are not used to train AI models without your explicit, separate consent. Request logs keep the model, token counts, cost and timing, and none of the content. The privacy policy has the full account.

Change the base URL. Keep your code.

Start free, pay per token, and read every limit before you hit it.

Get started freeAPI reference