التحميل
التحميل
ادمج Vortixy Chat في مشاريعك بمفتاح Bearer واحد. نفس حصص خطتك. أنشئ مفتاحًا في لوحة التحكم → واجهة API الخاصة بك
Vortixy هي مساحة عمل هادئة بالذكاء الاصطناعي للدراسة والكتابة والبحث والتخطيط والعمل اليومي. تتيح واجهة API العامة نفس الدردشة التي تستخدمها في /chat لتستدعيها من تطبيقك أو سكربتك أو مساحة عملك. كل مفتاح يرث حدود خطتك الحالية — Free و Go $2 و Pro $5 أو Max $9 — وجميع الحصص مشتركة بين الويب وواجهة API.
https://www.vortixy.net/api/v1Authorization: Bearer vtx_live_...application/jsonأرسل مفتاحك في ترويسة Authorization. لا تكشفه أبدًا في كود العميل أو معاملات الاستعلام.
curl https://www.vortixy.net/api/v1/chat \
-H "Authorization: Bearer vtx_live_abc123..." \
-H "Content-Type: application/json" \
-d '{"message":"Hello Vortixy"}'النطاقات: chat, images, search, tasks, usage. المفاتيح تشارك حصص خطتك.
أرسل رسالة مع تاريخ المحادثة اختياريًا، وفعّل البحث على الويب أو اضبط عمق التفكير. يُحتسب من حدود الرسائل والرموز اليومية لخطتك.
جاهز للشات بوت: أضف system لشخصية البوت (8k حرف)، stream:true لدلتا NDJSON، webSearch للمصادر الحية. كل استدعاء يخصم الرموز والطلبات وعمليات بحث web — مشتركة مع الويب (إعادة تعيين 00:00 UTC).
جميع حقول JSON لـ POST /api/v1/chat. الحقل الوحيد المطلوب هو message — الباقي اختياري.
| الحقل | النوع | مطلوب | الوصف |
|---|---|---|---|
| message | string | yes | رسالة المستخدم (1–32,000 حرف). |
| history | array | no | الأدوار السابقة: [{ role: 'user' | 'assistant', content: string }] (حد أقصى 20). |
| system | string | no | شخصية البوت / التعليمات (حد أقصى 8k). يقبل أيضًا الاسم المستعار instructions. |
| provider | string | no | gemini (مُدار، افتراضي). لـ BYOK، احفظ مفتاحك في Dashboard → الإعدادات → مفاتيح الذكاء الاصطناعي ثم استخدم provider openai / anthropic / deepseek / gemini مع معرّف نموذج BYOK. |
| model | string | no | معرّف النموذج — انظر الجدول أدناه. يجب أن يكون مسموحًا للمزود + خطتك. |
| thinkingLevel | enum | no | none | low | medium | high | xhigh | max (xhigh/max فقط لـ GPT-5.6). |
| webSearch | boolean | no | true لتفعيل البحث الحي على الويب. يُحتسب ضمن الحصة اليومية. |
| stream | boolean | no | true لبث NDJSON (delta → done). الافتراضي false (JSON). |
نصيحة: احذف provider/model لاستخدام أفضل نموذج لخطتك. اضبط stream:true للشات بوت.
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 | الوصف |
|---|---|
| none | بدون تفكير — الأسرع، أقل استهلاك للرموز. |
| low | تفكير خفيف — إجابات سريعة مع بعض التأمل. |
| medium | تفكير متوازن — جيد لمعظم المهام. |
| high | تفكير عميق — للتحليل والتخطيط المعقد. |
| xhigh | عميق جدًا — للنماذج الحدودية فقط، للمشاكل الصعبة. |
| max | الحد الأقصى — يستخدم ميزانية التفكير كاملة، الأبطأ والأغلى. |
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.
| النموذج | المزود | Access | التفكير | السياق |
|---|---|---|---|---|
| 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.
تختلف نوافذ السياق حسب النموذج وتصل إلى 1M (3.8/3.7) / 256k رمز. ويخضع كل طلب أيضًا لحد الخطة: Free 10k أو Go 20k أو Pro 35k أو Max 50k رمز. بعد تجاوز 85% من الميزانية المطبقة، تُضغط الأدوار القديمة تلقائيًا. الواجهة العامة بلا حالة؛ أعد إرسال السجل في `history` مع كل استدعاء.
السياق القابل للاستخدام هو الأقل بين حد خطتك (10k/20k/35k/50k رمز) ونافذة النموذج (حتى 1M (3.8/3.7) / 256k). في التكاملات، أرسل فقط السجل الذي يتسع ولخّص الأدوار الأقدم؛ قد تُرفض الطلبات الكبيرة جدًا.
// 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}'البث يرسل delta → done (NDJSON، Content-Type: application/x-ndjson). مع webSearch:true تحصل أيضًا على مصادر موثقة عبر بحث الويب (يُحتسب في الحصة اليومية).
يسرد النماذج التي يمكن لخطتك الحالية استخدامها (مقيّدة بالخطة، بدون تكلفة حصة). استخدمه لملء منتقي النماذج في الشات بوت.
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 وضع Fast فقط؛ وتشمل Go وPro وMax أوضاع Fast وSmart وAuto — الحصص تتدرج مع الخطة (12k/50k/120k/250k رمز يوميًا، 5/20/50/100 طلب). نماذج BYOK تحتاج مفتاحك ولا تُعرض هنا.
أحضر مفتاحك الخاص لـ OpenAI أو Anthropic أو DeepSeek أو Gemini. اضبطه مرة واحدة في التطبيق واستخدمه في كل مكان — الويب والواجهة يشاركان نفس المفاتيح المحفوظة ونفس الحصص اليومية (إعادة الضبط 00:00 UTC).
مثال BYOK
# 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.modelإذا كان المفتاح مفقودًا ستتلقى 403 byokMissing — أضفه في Dashboard وحاول مجددًا. طلبات BYOK تُحتسب أيضًا ضمن الرموز / الطلبات / عمليات البحث لخطتك.
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.
أنشئ صورًا بجودة قياسية أو عالية. يُحتسب من حد الصور اليومي لخطتك.
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" (سريع، منخفض التكلفة) أو "quality" (تفاصيل عالية). يُحتسب ضمن الحصة اليومية للصور (Free 2/يوم، Go 8، Pro 30، Max 60).
تحقق من خطتك الحالية والحصص المتبقية دون إنفاق الرموز.
curl https://www.vortixy.net/api/v1/usage -H "Authorization: Bearer vtx_live_..."{ "plan":"pro","limits":{"aiTokensPerDay":120000,"aiRequestsPerDay":50},"resetsInSeconds": 43200 }أضف webSearch: true للسماح لـ Vortixy بجلب معلومات حديثة من الويب عند الحاجة. يُقسّم وضع البحث المتعمق الأسئلة المعقدة إلى استفسارات متوازية ويعيد المصادر المُستشهد بها.
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 (افتراضي، بدون ويب) | true (بحث ويب متقدم، 5 نتائج، مصادر موثقة). كل استدعاء true يُحتسب 1 ضمن الحصة اليومية للبحث (Free 10/يوم، Go 25/يوم، Pro 50/يوم، Max 100/يوم).
ابقَ منظمًا مع المشاريع والمهام المجدولة. أدرها من لوحة التحكم أو الدردشة — يحترم الـ API نفس حدود الخطة للمساحات والملفات والمهام.
مثال: قل في الدردشة "ذكّرني كل اثنين الساعة 9 صباحًا لتلخيص أسبوعي" — سينشئ Vortixy مهمة مجدولة يمكنك عرضها في لوحة التحكم.
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/openapiجميع الأخطاء تتبع RFC 9457 مع رسالة مترجمة. تحقق من حقل code للمعالجة البرمجية.
{ "error": "You reached the daily quota. Try again after 2h.", "code": "quotaExceeded", "retryAfter": 7200 }| Status | Code | When |
|---|---|---|
| 400 | validation | JSON غير صالح أو حقل خارج النطاق |
| 401 | apiKeyInvalid | مفتاح Bearer مفقود أو غير صالح |
| 403 | planRequired | النموذج غير مسموح لخطتك |
| 403 | byokMissing | مفتاح BYOK لهذا المزود مفقود — احفظه في لوحة التحكم → الإعدادات → مفاتيح AI |
| 429 | quotaExceeded | تم الوصول للحد اليومي للرموز / الطلبات / عمليات البحث |
| 502 | aiEngineFailed | خطأ في النموذج المصدر |
الترويسات: RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, Retry-After, WWW-Authenticate on 401.
انسخ والصق وشغّل. Node 18+ يأتي مع fetch — لا حزم إضافية.
// 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"])