Loading
Loading
Integrate Vortixy Chat into your projects with one Bearer key — chat, images and usage endpoints with the same quotas as your plan. Docs and examples included. Create key in Dashboard → Your API
Vortixy is a calm AI workspace for study, writing, research, planning and everyday work. The public API exposes the same Chat you use at /chat so you can call it from your own app, script or workspace. Every key inherits the limits of your current plan — Free, Go $2, Pro $5 or Max $9 — and all quotas are shared between web and API.
https://www.vortixy.net/api/v1Authorization: Bearer vtx_live_...application/jsonSend your key in the Authorization header. Never expose it in client-side code or query params.
curl https://www.vortixy.net/api/v1/chat \
-H "Authorization: Bearer vtx_live_abc123..." \
-H "Content-Type: application/json" \
-d '{"message":"Hello Vortixy"}'Scopes: chat, images, search, tasks, usage. Keys share your plan quotas.
Send a message, optionally include conversation history, enable web search, or adjust the thinking depth. Counts against your plan's daily message and token limits.
Chatbot-ready: add system for your bot persona (8k chars), stream:true for NDJSON deltas, webSearch for live sources. Every call deducts tokens, requests and web searches — shared with web (00:00 UTC reset).
All JSON fields for POST /api/v1/chat. Only message is required — everything else is optional.
| Field | Type | Required | Description |
|---|---|---|---|
| message | string | yes | User message (1–32,000 chars). |
| history | array | no | Prior turns: [{ role: 'user' | 'assistant', content: string }] (max 20). |
| system | string | no | Bot persona / instructions (max 8k chars). Also accepts instructions alias. |
| provider | string | no | gemini (managed, default). For BYOK, save your key in Dashboard → Settings → AI keys, then use provider openai / anthropic / deepseek / gemini with a BYOK model id. |
| model | string | no | Model ID — see table below. Must be allowed for provider + your plan. |
| thinkingLevel | enum | no | none | low | medium | high | xhigh | max (xhigh/max only for GPT-5.6). |
| webSearch | boolean | no | true to enable live web search. Counts toward daily search quota. |
| stream | boolean | no | true for NDJSON streaming (delta → done). Default false (JSON). |
Tip: omit provider/model to use the best model for your plan. Set stream:true for chatbots.
Reasoning is now automatic per mode — Fast uses low, Smart uses high, Auto chooses intelligently based on your question. You no longer need to pick a level. The API still accepts thinkingLevel but it is optional and overridden by the mode.
| Level | Description |
|---|---|
| none | No reasoning — fastest, lowest token use. |
| low | Light reasoning — quick answers with a little thought. |
| medium | Balanced reasoning — good for most tasks. |
| high | Deep reasoning — for complex analysis and planning. |
| xhigh | Very deep — frontier models only, for hard problems. |
| max | Maximum — uses the full thinking budget, slowest and most expensive. |
Fast → low/medium, Smart → medium/high, Auto → chooses low→high per query. No user selector needed — the system is intelligent per moment.
Pick a mode, not a model. Vortixy routes intelligently to make the most of your quota — no need to choose a specific model. All modes share your plan quotas (00:00 UTC).
| Mode | When to use | Thinking | Speed |
|---|---|---|---|
| Fast | Quick answers for simple tasks — fastest, most efficient. | low / medium | Fastest |
| Smart | Thorough reasoning for complex tasks — deeper, step-by-step. | medium / high | Thorough |
| Auto | Vortixy chooses the best mode automatically per question (heuristic, zero extra cost). | auto (low → high) | Auto-chooses |
Smart has an animated glow when selected (shimmer border). Auto is the default — recommended for most tasks.
Save your provider key once in Dashboard → Settings → AI keys (AES-256-GCM encrypted, never exposed) — then call with provider + model. Same 00:00 UTC quotas as managed.
| Model | Provider | Access | Thinking | Context |
|---|---|---|---|---|
| gemini-3.8-flash:byok | gemini | Free — needs key | none, low, medium, high | 1049k |
| gemini-3.7-flash:byok | gemini | Free — needs key | none, low, medium, high | 1049k |
| gemini-3.6-flash:byok | gemini | Free — needs key | none, low, medium, high | 256k |
| gpt-5.6-sol | openai | Free — needs key | none, low, medium, high, xhigh, max | 256k |
| gpt-5.6-terra | openai | Free — needs key | none, low, medium, high, xhigh, max | 256k |
| gpt-5.6-luna | openai | Free — needs key | none, low, medium, high, xhigh, max | 256k |
| claude-fable-5 | anthropic | Free — needs key | none, high | 256k |
| claude-opus-5 | anthropic | Free — needs key | none, high | 256k |
| claude-sonnet-5 | anthropic | Free — needs key | none, high | 256k |
| claude-haiku-4-5 | anthropic | Free — needs key | none, high | 200k |
| deepseek-v4-pro | deepseek | Free — needs key | none, high | 256k |
| deepseek-v4-flash | deepseek | Free — needs key | none, high | 256k |
BYOK catalog: gpt-5.6-sol/terra/luna (openai), claude-opus-5/fable-5/sonnet-5/haiku-4-5 (anthropic), deepseek-v4-pro/flash (deepseek), gemini-3.8-flash:byok / gemini-3.7-flash:byok (gemini). All available on Free when key is present — no upgrade needed.
Model context windows vary and reach up to 1M (3.8/3.7) / 256k (rest) tokens. Each request is also limited by your plan: Free 10k, Go 20k, Pro 35k, or Max 50k tokens. In Vortixy Chat (/chat), older turns are automatically compacted above 85% of the applicable budget. The public API (/api/v1/chat) is stateless: store history in your app and resend it in `history` on every call.
The usable context per request is the lower of your plan limit (10k/20k/35k/50k tokens) and the selected model window (up to 1M (3.8/3.7) / 256k (rest)). For integrations, send only history that fits that applicable budget and summarize older turns yourself; oversized requests may be rejected instead of silently accepted.
// Basic — only required field
{ "message": "Explain quantum computing simply" }
// With system persona (chatbot) — 8k chars
{
"message": "What do you sell?",
"system": "You are a friendly shop assistant for Acme. Answer briefly in Spanish."
}
// With history — multi-turn conversation
{
"message": "And what about entanglement?",
"history": [
{ "role": "user", "content": "Hi" },
{ "role": "assistant", "content": "Hello! How can I help?" },
{ "role": "user", "content": "Explain quantum computing" }
]
}
// Full request — all variants together
{
"message": "Latest AI breakthroughs with sources",
"history": [{ "role": "user", "content": "Hi" }],
"system": "You are Acme support. Be concise.",
"provider": "gemini", // managed (default) — BYOK dashboard-only for other providers
"model": "gemini-3.5-flash", // any available managed model from the table above
"thinkingLevel": "high", // none | low | medium | high | xhigh | max
"webSearch": true, // true = live web grounding + sources[]
"stream": false // false = JSON, true = NDJSON deltas
}// 200 OK — non-streaming response
{
"answer": "Quantum computing uses qubits...",
"model": "gemini-3.5-flash",
"usage": { "tokensEstimated": 42, "tokensReserved": 42, "webSearch": true },
"sources": [{ "title": "Quantum computing — Wikipedia", "url": "https://en.wikipedia.org/wiki/Quantum_computing" }],
"plan": "pro"
}// Streaming (NDJSON) — ideal for chatbots
const res = await fetch("https://www.vortixy.net/api/v1/chat", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.VORTIXY_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ message: "Hello!", system: "Be concise.", stream: true, thinkingLevel: "medium" })
});
for await (const line of res.body.pipeThrough(new TextDecoderStream()).pipeThrough(splitNDJSON())) {
const evt = JSON.parse(line);
if (evt.type === "delta") process.stdout.write(evt.delta);
if (evt.type === "sources") console.log("sources", evt.sources);
if (evt.type === "done") console.log("\nusage", evt.usage);
}
// curl variants — pick the one you need
// 1) Basic
curl -X POST https://www.vortixy.net/api/v1/chat -H "Authorization: Bearer $VORTIXY_API_KEY" -H "Content-Type: application/json" -d '{"message":"Hello"}'
// 2) With web search + high thinking
curl -X POST https://www.vortixy.net/api/v1/chat -H "Authorization: Bearer $VORTIXY_API_KEY" -H "Content-Type: application/json" -d '{"message":"Latest AI news","webSearch":true,"thinkingLevel":"high"}'
// 3) Chatbot persona + streaming (NDJSON)
curl -N -X POST https://www.vortixy.net/api/v1/chat -H "Authorization: Bearer $VORTIXY_API_KEY" -H "Content-Type: application/json" -d '{"message":"Hi","system":"You are Acme bot.","stream":true}'Streaming emits delta → done (NDJSON, Content-Type: application/x-ndjson). With webSearch:true you also get grounded sources (counts against your daily web-search quota).
List models your current plan can use (plan-gated, no quota cost). Use it to populate a model picker in your chatbot.
curl https://www.vortixy.net/api/v1/models -H "Authorization: Bearer vtx_live_..."// 200 OK — example for Pro plan (more models on Max, fewer on Free)
{
"plan": "pro",
"defaultModel": "gemini-3.5-flash",
"models": [
{ "id": "gemini-3.5-flash", "label": "Gemini 3.5 Flash", "provider": "gemini", "thinkingLevels": ["none","low","medium","high"] },
{ "id": "gemini-3.5-flash-lite", "label": "Gemini 3.5 Flash Lite", "provider": "gemini", "thinkingLevels": ["none","low","medium","high"] },
{ "id": "gemini-3.1-flash-lite", "label": "Gemini 3.1 Flash Lite", "provider": "gemini", "thinkingLevels": ["none","low","medium","high"] }
]
}Note: gemini-3.8-flash/gemini-3.7-flash/gemini-3.6-flash temporarily paused (effective 3.5+lite) — example shows effective models only.
Free includes Fast mode only; Go, Pro and Max include Fast, Smart and Auto modes — quotas scale with plan (12k/50k/120k/250k tokens per day, 5/20/50/100 requests). BYOK models need your provider key and are not listed here.
Bring your own key for OpenAI, Anthropic, DeepSeek or Gemini. Configure once in the app, use everywhere — web and API share the same stored keys and the same daily quotas (00:00 UTC reset).
BYOK example
# 1) Save your provider key once in Vortixy (Dashboard → Settings → AI keys)
# OpenAI sk-..., Anthropic sk-ant-..., DeepSeek sk-..., Gemini AQ./AIza...
# 2) Call the API with the same Vortixy Bearer key, but specify the BYOK provider+model
curl https://www.vortixy.net/api/v1/chat \
-H "Authorization: Bearer vtx_live_..." \
-H "Content-Type: application/json" \
-d '{
"message": "Explain quantum computing with deep reasoning",
"provider": "openai",
"model": "gpt-5.6-terra",
"thinkingLevel": "high",
"stream": false
}'
# Anthropic example
curl https://www.vortixy.net/api/v1/chat \
-H "Authorization: Bearer vtx_live_..." \
-H "Content-Type: application/json" \
-d '{"message":"Write a haiku about the sea","provider":"anthropic","model":"claude-opus-5"}'
# DeepSeek example
curl https://www.vortixy.net/api/v1/chat \
-H "Authorization: Bearer vtx_live_..." \
-H "Content-Type: application/json" \
-d '{"message":"Solve this algorithm","provider":"deepseek","model":"deepseek-v4-pro","thinkingLevel":"high"}'// JS — BYOK via Vortixy API (same quotas, same Bearer key)
const res = await fetch("https://www.vortixy.net/api/v1/chat", {
method: "POST",
headers: {
Authorization: "Bearer " + process.env.VORTIXY_API_KEY,
"Content-Type": "application/json"
},
body: JSON.stringify({
message: "Deep research with my own OpenAI key",
provider: "openai",
model: "gpt-5.6-sol",
thinkingLevel: "xhigh", // xhigh/max only on GPT-5.6 — works via BYOK
webSearch: true,
stream: false
})
});
const data = await res.json();
// data.answer, data.sources, data.usage, data.modelIf the key is missing you receive 403 byokMissing — add it in Dashboard and retry. BYOK requests still deduct tokens/requests/searches from your plan.
BYOK catalog: gpt-5.6-sol / terra / luna (openai), claude-opus-5 / fable-5 / sonnet-5 / haiku-4-5 (anthropic), deepseek-v4-pro / flash (deepseek), gemini-3.8-flash:byok / gemini-3.7-flash:byok / gemini-3.6-flash:byok (gemini). Managed Gemini models stay available without BYOK.
Generate images in standard or quality mode. Counts against your plan's daily image limit.
curl https://www.vortixy.net/api/v1/images \
-H "Authorization: Bearer vtx_live_..." \
-H "Content-Type: application/json" \
-d '{"prompt":"a cozy minimalist living room, warm light","quality":"quality"}'{ "image": { "mimeType": "image/png", "base64": "..." }, "remaining": 49 }quality: "standard" (fast, low cost) or "quality" (high detail). Counts against your daily image quota (Free 2/day, Go 8, Pro 30, Max 60).
Check your current plan and remaining quotas without spending tokens.
curl https://www.vortixy.net/api/v1/usage -H "Authorization: Bearer vtx_live_..."{ "plan":"pro","limits":{"aiTokensPerDay":120000,"aiRequestsPerDay":50},"resetsInSeconds": 43200 }Add webSearch: true to let Vortixy fetch live information from the web when it helps. Research mode breaks complex questions into parallel sub-queries and returns cited sources.
await fetch("https://www.vortixy.net/api/v1/chat", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.VORTIXY_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ message: "Latest AI breakthroughs with sources", webSearch: true })
});webSearch: false (default, no web) | true (advanced web search, 5 results, cited sources). Each true call counts 1 toward your daily web-search quota (Free 10/day, Go 25/day, Pro 50/day, Max 100/day).
Stay organized with Projects and scheduled tasks. Manage them from Dashboard or Chat — the API respects the same plan limits for spaces, files, and tasks.
Example: say "Remind me every Monday at 9 am to summarize my week" in Chat — Vortixy creates a scheduled task you can view in Dashboard.
Guarda conversaciones en Vortixy para no reenviar el historial cada vez. Mismo límite que tu plan (Free 30, Go 100, Pro 300, Max 400).
GET /api/v1/chats # lista tus chats
POST /api/v1/chats # {title} -> crea uno
GET /api/v1/chats/:id # detalle
PATCH /api/v1/chats/:id # {title} renombra
DELETE /api/v1/chats/:id
GET /api/v1/chats/:id/messages?limit=50
POST /api/v1/chats/:id/messages # {role, content}// POST /api/v1/chats
{ "title": "Mi proyecto Tesis" }
// -> { "chat": { "id": "uuid", "title": "Mi proyecto Tesis" } }
// POST /api/v1/chats/uuid/messages
{ "role": "user", "content": "Hola" }Sube PDFs, Word, texto o imágenes (20 MiB) para usarlos luego en el chat. Cuenta como artefacto diario (Free 3/día, Go 10/día, Pro 25/día, Max 60/día).
curl https://www.vortixy.net/api/v1/files \
-H "Authorization: Bearer vtx_live_..." -F file=@tarea.pdf
# JSON alternativo
curl -X POST https://www.vortixy.net/api/v1/files \
-H "Authorization: Bearer vtx_live_..." -H "Content-Type: application/json" \
-d '{"name":"tarea.pdf","mimeType":"application/pdf","base64":"..."}'GET /api/v1/files?limit=20 -> { "files": [{ "id": "...", "name": "tarea.pdf" }] }Crea espacios con instrucciones fijas. Límites Free 1 / Go 3 / Pro 8 / Max 15.
GET /api/v1/projects
POST /api/v1/projects # {title, subject, instructions}
GET /api/v1/projects/:id
PATCH /api/v1/projects/:id
DELETE /api/v1/projects/:idGenera flashcards o quiz desde un texto (Free 2/día, Go 5/día, Pro 12/día, Max 20/día). Luego puedes exportar a Anki.
curl https://www.vortixy.net/api/v1/study/generate \
-H "Authorization: Bearer vtx_live_..." -H "Content-Type: application/json" \
-d '{"content":"texto largo de apuntes...","kind":"flashcards","count":10}'{ "kind": "flashcards", "items": [{ "front": "¿Qué es...?", "back": "Es..." }] }Mismo chat pero con formato OpenAI: {messages:[{role,content}]}. Ideal para usar cualquier SDK de OpenAI cambiando solo la URL base a https://www.vortixy.net/api/v1.
// OpenAI SDK
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://www.vortixy.net/api/v1",
apiKey: process.env.VORTIXY_API_KEY
});
const res = await client.chat.completions.create({
model: "gemini-3.5-flash",
messages: [{role:"user", content:"Hola"}]
});
console.log(res.choices[0].message.content);curl https://www.vortixy.net/api/v1/chat/completions \
-H "Authorization: Bearer vtx_live_..." -H "Content-Type: application/json" \
-d '{"messages":[{"role":"user","content":"Hola"}],"stream":false}'Vortixy expone un espejo 100% compatible con el formato de OpenAI Chat Completions (2026). Cambia solo baseURL y tu apiKey — el mismo código funciona con el SDK oficial de OpenAI, Vercel AI SDK, LangChain o cualquier cliente compatible. Streaming usa SSE estándar data: {...} + data: [DONE] (como OpenAI 2026). Las mismas cuotas del plan (tokens/requests/búsquedas) se comparten con /api/v1/chat.
// OpenAI JS SDK — sin cambiar lógica
import OpenAI from "openai";
const vortixy = new OpenAI({
baseURL: "https://www.vortixy.net/api/v1",
apiKey: process.env.VORTIXY_API_KEY, // vtx_live_...
});
const res = await vortixy.chat.completions.create({
model: "gemini-3.5-flash",
messages: [
{ role: "system", content: "Eres un tutor amable." },
{ role: "user", content: "Explícame fotosíntesis en 3 bullets" }
],
stream: false,
// web_search / webSearch también soportado (alias):
// web_search: true
});
console.log(res.choices[0].message.content);
// res.usage => { prompt_tokens, completion_tokens, total_tokens }
// res.sources => [{title, url}] si webSearch:true
// Streaming SSE (igual que OpenAI 2026)
const stream = await vortixy.chat.completions.create({
model: "gemini-3.5-flash",
messages: [{ role: "user", content: "Hola" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content || "");
}// Vercel AI SDK (2026)
import { createOpenAI } from "@ai-sdk/openai";
const vortixy = createOpenAI({
baseURL: "https://www.vortixy.net/api/v1",
apiKey: process.env.VORTIXY_API_KEY,
});
const { text } = await generateText({
model: vortixy("gemini-3.5-flash"),
prompt: "Resume este PDF en 5 puntos",
});curl https://www.vortixy.net/api/v1/chat/completions \
-H "Authorization: Bearer vtx_live_..." -H "Content-Type: application/json" \
-d '{
"model": "gemini-3.5-flash",
"messages": [{"role":"user","content":"Hola"}],
"stream": false
}'
# con búsqueda web (alias 2026 tolerante):
# "web_search": true o "webSearch": true -> grounding Tavily + sources[]
# Python
# from openai import OpenAI
# client = OpenAI(base_url="https://www.vortixy.net/api/v1", api_key="vtx_live_...")
# res = client.chat.completions.create(model="gemini-3.5-flash", messages=[{"role":"user","content":"Hola"}])Nota 2026: formato idéntico a OpenAI — id: chatcmpl-..., object: chat.completion, choices[0].message, usage y streaming data: {choices: [{delta: {content: "..."}}]} + data: [DONE]. Envelope SSE estándar (OpenAI-compatible). 401 sin Bearer, 429 con Retry-After/RateLimit-*.
Recibe avisos en tu servidor cuando algo pasa. Máx 5 por cuenta.
GET /api/v1/webhooks # lista
POST /api/v1/webhooks # {url, events:["chat.completed","task.completed","quota.warning"]}
DELETE /api/v1/webhooks?id=uuidSpec completo en GET /api/v1/openapi para importar en Postman, Insomnia o generar SDK.
curl https://www.vortixy.net/api/v1/openapiAll errors follow RFC 9457 with a localized message. Check the code field for programmatic handling.
{ "error": "You reached the daily quota. Try again after 2h.", "code": "quotaExceeded", "retryAfter": 7200 }| Status | Code | When |
|---|---|---|
| 400 | validation | Bad JSON or field out of range |
| 401 | apiKeyInvalid | Missing or invalid Bearer key |
| 403 | planRequired | Model not allowed for your plan |
| 403 | byokMissing | BYOK key missing for this provider — save it in Dashboard → Settings → AI keys |
| 429 | quotaExceeded | Daily tokens / requests / searches hit |
| 502 | aiEngineFailed | Upstream model error |
Headers: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, Retry-After, WWW-Authenticate on 401.
Copy, paste, and run. Node 18+ has fetch built in — no extra package needed.
// Node 18+ — no install needed
const res = await fetch("https://www.vortixy.net/api/v1/chat", {
method: "POST",
headers: {
Authorization: "Bearer " + process.env.VORTIXY_API_KEY,
"Content-Type": "application/json"
},
body: JSON.stringify({
message: "Turn these notes into a plan: ...",
system: "You are a concise assistant.",
thinkingLevel: "medium",
webSearch: false,
stream: false
})
});
const data = await res.json();
console.log(data.answer);
// Streaming chatbot
const streamRes = await fetch("https://www.vortixy.net/api/v1/chat", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.VORTIXY_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ message: "Hello!", stream: true })
});
for await (const chunk of streamRes.body) {
// parse NDJSON lines: {type:"delta", delta:"..."} -> {type:"done", answer:"..."}
}
// Image
const imgRes = await fetch("https://www.vortixy.net/api/v1/images", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.VORTIXY_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ prompt: "minimalist logo for Vortixy", quality: "quality" })
});
const { image } = await imgRes.json();
// image.base64 -> save as PNG
// Python — same API
// import requests
// r = requests.post("https://www.vortixy.net/api/v1/chat",
// headers={"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"},
// json={"message": "Hello!", "thinkingLevel": "high", "webSearch": True})
// print(r.json()["answer"])