Dokumentacja REST API · v2.0.0
https://nexus-ai.click/api
|
TLS 1.3 enforced
|
SLA 99.9%
Pierwsze zapytanie do API NexusAI w 2 minuty.
Przejdź do Dashboard → Klucze API i wygeneruj nowy klucz.
# Wyślij wiadomość do AI curl https://nexus-ai.click/api/tenant-panel/ai/chat \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -H "X-Tenant: twoj-slug" \ -d '{ "model": "gpt-4o", "messages": [{"role": "user", "content": "Hello!"}], "max_tokens": 256 }'
NexusAI używa kluczy API przekazywanych w nagłówku Authorization.
/auth/token
Wymień credentials na JWT
emailrequiredstringpasswordrequiredstringtenant_slugrequiredstring{
"access_token": "eyJ...",
"expires_in": 3600,
"token_type": "Bearer"
}
Główny endpoint do komunikacji z modelami AI.
/chat/completions
modelrequiredstringID modelu: gpt-4o, claude-3-opus, ...messagesrequiredarrayTablica wiadomości [{role, content}]max_tokensoptionalintegerLimit tokenów odpowiedzi (default: 1024)temperatureoptionalnumberLosowość 0–2 (default: 1)streamoptionalbooleanServer-sent events streamingsystemoptionalstringSystem prompttop_poptionalnumberNucleus sampling 0–1{
"model": "gpt-4o",
"messages": [
{
"role": "system",
"content": "Jesteś asystentem."
},
{
"role": "user",
"content": "Pomóż mi napisać email"
}
],
"max_tokens": 512,
"temperature": 0.7,
"stream": false
}
{
"id": "chatcmpl-abc123",
"model": "gpt-4o",
"choices": [{
"message": {
"role": "assistant",
"content": "Cześć! Jak mogę..."
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 87,
"total_tokens": 111
}
}
Odpowiedź AI w czasie rzeczywistym przez Server-Sent Events. Ustaw stream: true w body zapytania.
// Browser EventSource example const es = new EventSource('/api/tenant-panel/chat/stream?token=xxx'); es.onmessage = e => { const chunk = JSON.parse(e.data); process.stdout.write(chunk.delta || ''); if (chunk.done) es.close(); }; // Node.js fetch streaming const res = await fetch('/api/tenant-panel/chat', { method: 'POST', headers: { Authorization: 'Bearer xxx', 'Content-Type': 'application/json' }, body: JSON.stringify({ model: 'gpt-4o', message: 'Hello', stream: true }) }); const reader = res.body.getReader(); while (true) { const { done, value } = await reader.read(); if (done) break; console.log(new TextDecoder().decode(value)); }
{
"delta": "czę",
"done": false,
"tokens": 3
}Generuj wektory semantyczne dla RAG, wyszukiwania i klasyfikacji treści.
/embeddings
max 8192 tokenów per input
{
"model": "text-embedding-3-small",
"input": "Tekst do embeddingu",
"encoding_format": "float"
}
{
"data": [{
"embedding": [0.123, -0.456, ...],
"index": 0
}],
"usage": { "total_tokens": 12 }
}
Generuj obrazy przez DALL-E 3 lub Stable Diffusion.
/images/generations
promptrequiredOpis obrazu max 4000 znakówmodeloptionaldall-e-3 | dall-e-2 (default: dall-e-3)sizeoptional1024x1024 | 1792x1024 | 1024x1792qualityoptionalstandard | hd (tylko dall-e-3)noptionalLiczba obrazów 1–4 (dall-e-2: max 10){
"url": "https://...cdn.../img.png",
"revised_prompt": "...",
"model": "dall-e-3"
}
Transkrypcja audio przez Whisper-1. Obsługa: mp3, mp4, mpeg, mpga, m4a, wav, webm.
/audio/transcriptions
multipart/form-data
# cURL example curl https://nexus-ai.click/api/audio/transcriptions \ -H "Authorization: Bearer YOUR_KEY" \ -F "file=@audio.mp3" \ -F "model=whisper-1" \ -F "language=pl" # Response { "text": "Transkrypcja audio...", "duration": 3.24 }
Zarządzanie organizacjami (multi-tenancy).
/tenantsLista wszystkich tenantówsuperadmin/tenantsUtwórz nowego tenantasuperadmin/tenants/:idSzczegóły tenantasuperadmin/tenants/:idAktualizuj tenantatenant_admin/tenants/:idUsuń tenantasuperadmin/tenants/:id/statsStatystyki tenantatenant_adminZdarzenia wysyłane do Twojego endpointu. Weryfikacja przez X-Nexus-Signature (HMAC-SHA256).
// POST https://twoja-domena.pl/webhook { "event": "ai.quota_exceeded", "tenant": "twoj-slug", "timestamp": "2025-07-14T10:00:00Z", "data": { "used": 1000, "limit": 1000, "model": "gpt-4o" } }
Zarządzanie użytkownikami w ramach tenanta.
/admin/usersLista wszystkich użytkownikówsuperadmin/auth/registerRejestracja nowego użytkownikapublic/auth/loginLogowanie (zwraca JWT)public/auth/logoutWylogowanieauthenticated/profile/meDane zalogowanego użytkownikaauthenticated/profile/meAktualizuj profilauthenticated/auth/reset-passwordŻądanie resetu hasłapublic/auth/confirm-resetPotwierdź reset hasła (token)public/admin/users/:idUsuń użytkownikasuperadminZarządzanie subskrypcjami, fakturami i płatnościami przez Stripe.
/billing/plansLista dostępnych planów cenowychpublic/billing/subscriptionAktualny status subskrypcjiauthenticated/billing/upgradeZmień plan (trigger checkout)authenticated/billing/invoicesLista faktur tenantaauthenticated/billing/invoices/:id/downloadPobierz fakturę PDFauthenticated/billing/stripe-webhookWebhook Stripe (HMAC-SHA256)stripe_signed/billing/mrr-statsStatystyki MRR/ARRsuperadmin/billing/portalURL Stripe Customer PortalauthenticatedMetryki użycia AI, tokenów i aktywnościplatformy.
/admin/statsStatystyki globalne (tenants, users, AI)superadmin/admin/ai-usageSzczegółowe użycie AI per tenantsuperadmin/tenant-panel/settingsUstawienia + Health Score tenantatenant_admin/admin/health-scoresHealth Score wszystkich tenantówsuperadmin/admin/recalculate-health-scoresPrzelicz Health Scores (async)superadminInstalacja i zarządzanie dodatkami z Marketplace per tenant. Limity: Starter=2, Business=10, Enterprise=∞.
/tenant-panel/addonsLista zainstalowanych addonówtenant_admin/tenant-panel/addonsZainstaluj addon (addon_id, config)tenant_admin/tenant-panel/addons/:addon_idOdinstaluj addontenant_admin/admin/modulesKatalog wszystkich dostępnych modułówsuperadmin/admin/modulesDodaj nowy moduł do katalogusuperadmin{
"addon_id": "ai-chat",
"config": { "model": "gpt-4o", "temperature": 0.7 }
}
// Response 201
{
"ok": true,
"addon_id": "ai-chat",
"installed_at": "2026-07-16T10:00:00Z"
}
NexusAI działa w 100% na Cloudflare Workers — edge runtime, zero cold starts, globalny deployment.
Edge runtime — kod wykonuje się w 300+ lokalizacjach na świecie. <10ms TTFB. Brak serwera, brak cold startów.
SQLite na edge. Multi-tenant izolacja przez tenant_slug w każdej tabeli. ACID, pełne transakcje, <5ms latency.
HS256 JWT, 5 ról: superadmin > tenant_admin > admin > member > viewer. Każdy endpoint sprawdza rolę.
Jeden interfejs, 3 providery: OpenAI / Gemini / Claude. Fallback do demoAiResponse() gdy brak klucza.
Transakcyjny email: welcome, trial_expiring, quota_warning, payment_confirmed. HMAC podpis zdarzeń.
Webhook HMAC-SHA256, 5 event typów. Customer Portal, subscription lifecycle, automatyczne faktury.
Enterprise-grade security wbudowane w każdą warstwę platformy.
{
"id": 42,
"user_id": 7,
"tenant_slug": "acme",
"action": "CREATE",
"resource": "tenant",
"detail": "Created tenant: acme (business)",
"ip": "1.2.3.4",
"created_at": "2026-07-16T10:00:00Z"
}
Każdy tenant ma izolowany zakres danych w tej samej bazie D1. Identyfikacja przez tenant_slug.
| Plan | AI Req/mies | Addons | Users |
|---|---|---|---|
| starter | 1 000 | 2 | 5 |
| business | 50 000 | 10 | 25 |
| enterprise | ∞ | ∞ | ∞ |
Każdy tenant może w pełni dostosować branding — kolory, logo, domeny, e-maile nadawcze.
/admin/whitelabel/:slugPobierz konfigurację brandingu tenantasuperadmin/admin/whitelabel/:slugZaktualizuj branding (colors, logo, domain)superadmin/tenant-panel/brandingWłasny branding zalogowanego tenantatenant_admin/tenant-panel/brandingAktualizuj własny brandingtenant_admin{
"primaryColor": "#6366f1",
"accentColor": "#a78bfa",
"logoUrl": "https://cdn.example.com/logo.png",
"customDomain": "app.twoja-firma.pl",
"senderName": "Twoja Firma AI",
"senderEmail": "noreply@twoja-firma.pl",
"footerText": "© 2026 Twoja Firma. Powered by NexusAI."
}
Algorytm 5-sygnałowy (0–100 pkt) oceniający kondycję tenanta. Przeliczany automatycznie (cron) i on-demand.
≥10 wiad. = max; proporcjonalnie poniżej
40–80% = max; <10% lub >90% = 0
≥3 users = max; 2 = 10; 1 = 0
≥1 aktywny webhook = max
aiModel + billingEmail ustawione = max
{
"healthScore": 73,
"healthGrade": "Fair",
"healthStatus": "🟡",
"signals": {
"ai_activity": 24,
"quota_util": 20,
"team_size": 10,
"webhooks": 15,
"onboarding": 4
}
}
Automatyczne zadania uruchamiane przez Cloudflare Workers Cron Triggers i endpoint HTTP.
"triggers": { "crons": ["0 3 * * *", "0 */6 * * *"] }
/admin/cron
HTTP trigger (wymaga CRON_SECRET w nagłówku X-Cron-Secret)
Cloudflare D1 — migracje przez wrangler CLI. Środowiska: local (SQLite) i production (D1).
# Zastosuj migracje lokalnie (dev) npx wrangler d1 migrations apply webapp-production --local # Zastosuj migracje do produkcji npx wrangler d1 migrations apply webapp-production # Uruchom seed danych testowych npx wrangler d1 execute webapp-production --local --file=./seed.sql # Zapytanie ad-hoc do produkcyjnej D1 npx wrangler d1 execute webapp-production --command="SELECT COUNT(*) FROM tenants"
CREATE TABLE tenants (
slug TEXT PRIMARY KEY,
name TEXT NOT NULL,
plan TEXT DEFAULT 'starter',
status TEXT DEFAULT 'trial',
billing_email TEXT,
ai_model TEXT,
ai_provider TEXT DEFAULT 'openai',
quota INTEGER DEFAULT 1000,
tokens_used INTEGER DEFAULT 0,
trial_ends_at TEXT,
health_score INTEGER DEFAULT 0,
created_at TEXT DEFAULT (datetime('now'))
);
CREATE TABLE tenant_addons (
id INTEGER PRIMARY KEY AUTOINCREMENT,
tenant_slug TEXT NOT NULL,
addon_id TEXT NOT NULL,
config TEXT,
installed_at TEXT DEFAULT (datetime('now')),
UNIQUE(tenant_slug, addon_id)
);
Wdrożenie własnej instancji NexusAI na koncie Cloudflare. Wymaga: konto Cloudflare (free tier wystarczy).
git clone https://github.com/nexusai/platform.git
cd platform
npm install
cp .dev.vars.example .dev.vars
# Edytuj .dev.vars — ustaw STRIPE_SECRET_KEY, RESEND_API_KEY etc.
# Zaloguj się do Cloudflare npx wrangler login # Utwórz bazę D1 npx wrangler d1 create nexusai-production # Skopiuj database_id do wrangler.jsonc # Zastosuj migracje npx wrangler d1 migrations apply nexusai-production
npx wrangler secret put STRIPE_SECRET_KEY
npx wrangler secret put RESEND_API_KEY
npx wrangler secret put JWT_SECRET
npx wrangler secret put CRON_SECRET
# Build i deploy
npm run build
npx wrangler pages deploy dist --project-name nexusai
NexusAI stosuje 5-poziomowy RBAC (Role-Based Access Control). Każdy endpoint sprawdza rolę przez middleware requireRole().
// Definicja poziomów (im wyższy numer, tym więcej uprawnień) const ROLE_LEVELS: Record<string, number> = { viewer: 0, member: 1, partner: 2, admin: 3, tenant_admin: 3, superadmin: 99 }; function requireRole(minRole: string) { return async (c: Context, next: Next) => { const payload = verifyJWT(c.req.header('Authorization')); if (!payload) return c.json({ error: 'Unauthorized' }, 401); if (ROLE_LEVELS[payload.role] < ROLE_LEVELS[minRole]) { return c.json({ error: 'Forbidden' }, 403); } c.set('user', payload); await next(); }; }
| Zasób | GET | POST/PUT | DELETE |
|---|---|---|---|
| /api/admin/* | superadmin | superadmin | superadmin |
| /api/tenant-panel/* | member | admin | admin |
| /api/tenant-panel/members | member | admin | admin |
| /api/tenant-panel/ai/* | member | member | – |
| /api/auth/* | public | public | – |
| /api/profile | member | member | – |
NexusAI implementuje rotating refresh tokens — access token wygasa po 24h, refresh token po 30 dniach i jest rotowany przy każdym użyciu.
localStorage · refreshToken: localStorage (lub httpOnly cookie dla max security)refreshToken do POST /api/auth/refreshrefresh_tokensaccessToken + nowy refreshToken// Request { "refreshToken": "eyJhb..." } // Response 200 { "accessToken": "eyJhbGci...", // wygasa za 24h "refreshToken": "d8f3a1...", // wygasa za 30 dni (nowy!) "expiresIn": 86400 } // Error — token wygasły lub użyty ponownie { "error": "Invalid or expired refresh token" } // HTTP 401
NexusAI wspiera TOTP (Time-based One-Time Password) zgodny z RFC 6238 — kompatybilny z Google Authenticator, Authy, 1Password.
POST /api/auth/totp/setup)POST /api/auth/totp/verify){
"secret": "JBSWY3DPEHPK3PXP", // base32 secret
"qrDataUrl": "data:image/png;base64,...", // PNG QR code
"otpauthUrl": "otpauth://totp/NexusAI%20Platform:user@email.pl?secret=..."
}
-- Kolumny w tabeli users ALTER TABLE users ADD COLUMN totp_secret TEXT DEFAULT NULL; ALTER TABLE users ADD COLUMN totp_verified INTEGER DEFAULT 0; -- Kody odzysku (generowane po stronie klienta, 8 kodów XXXX-XXXX) -- Nie przechowywane w DB — użytkownik sam je zapisuje
Rate limiting implementowany przez middleware w Cloudflare Workers używając in-memory Map (per Worker instance). Limit per IP i per tenant.
const RATE_LIMITS = { auth: { maxRequests: 10, windowSec: 60 }, // Login / register ai: { maxRequests: 100, windowSec: 60 }, // AI chat completions api: { maxRequests: 300, windowSec: 60 }, // Ogólne API contact: { maxRequests: 5, windowSec: 300 }, // Formularz kontaktowy profile: { maxRequests: 30, windowSec: 60 }, // Aktualizacja profilu admin: { maxRequests: 200, windowSec: 60 }, // Panel admina }; // Nagłówki HTTP zwracane przy każdym odpowiedzi: X-RateLimit-Limit: 100 // max requestów w oknie X-RateLimit-Remaining: 87 // pozostało w bieżącym oknie X-RateLimit-Reset: 1720000060 // Unix timestamp resetu
Każdy webhook wysyłany przez NexusAI jest podpisany HMAC-SHA256. Weryfikacja chroni przed fałszywymi requestami i replay attacks.
X-NexusAI-Signaturesha256=<HMAC-SHA256 hex digest body>X-NexusAI-TimestampUnix timestamp requestu (rejectuj jeśli >5 min)X-NexusAI-EventTyp zdarzenia np. ai.quota.exceeded, payment.succeededContent-Typeapplication/jsonconst crypto = require('crypto'); function verifyWebhook(body, signature, secret) { const expected = 'sha256=' + crypto .createHmac('sha256', secret) .update(body, 'utf8') .digest('hex'); // timingSafeEqual — ochrona przed timing attacks return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(signature) ); } app.post('/webhooks/nexusai', (req, res) => { const sig = req.headers['x-nexusai-signature']; if (!verifyWebhook(req.rawBody, sig, process.env.WEBHOOK_SECRET)) return res.status(401).json({ error: 'Invalid signature' }); // Przetwórz zdarzenie... });
import hmac, hashlib def verify_webhook(body: bytes, signature: str, secret: str) -> bool: expected = 'sha256=' + hmac.new( secret.encode(), body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature)
Kompletna lista zmiennych wymaganych do uruchomienia NexusAI. Przechowywane jako Cloudflare Workers Secrets.
JWT_SECRETSekret do podpisywania JWT. Min. 32 znaki losowe. Np. openssl rand -hex 32D1 database_idID bazy D1 z wrangler.jsonc (pobierz z npx wrangler d1 create nexusai-prod)STRIPE_SECRET_KEYKlucz Stripe sk_live_... — płatności, subskrypcje, Customer PortalSTRIPE_WEBHOOK_SECRETwhsec_... do weryfikacji Stripe webhooków HMAC-SHA256RESEND_API_KEYre_... — transakcyjny email (welcome, trial, quota). Bezpłatny tier: 3k/mies.OPENAI_API_KEYsk-... GPT-4o, GPT-4 Turbo. Bez klucza: tryb demo z demoAiResponse()ANTHROPIC_API_KEYsk-ant-... Claude 3.5 Sonnet / Opus / HaikuGEMINI_API_KEYAIza... Google Gemini 1.5 Pro / FlashCRON_SECRETSekret do autoryzacji HTTP triggera cron (X-Cron-Secret header)ENCRYPTION_KEY32-znakowy klucz AES-256 do szyfrowania kluczy AI tenantów w D1npx wrangler secret put JWT_SECRET > Enter a secret value: •••••••••••••••• ✓ Success! Uploaded secret JWT_SECRET npx wrangler secret put STRIPE_SECRET_KEY npx wrangler secret put RESEND_API_KEY npx wrangler secret put OPENAI_API_KEY # Lista wszystkich ustawionych sekretów npx wrangler secret list
Kompletna lista endpointów. Base URL: https://nexus-ai.click/api
/api/auth/loginLogowanie — zwraca accessToken + refreshToken/api/auth/registerRejestracja partnera/api/auth/refreshRotating refresh token/api/auth/forgot-passwordWyślij reset link email/api/auth/reset-passwordReset hasła tokenem/api/auth/totp/setupGeneruj QR dla 2FA TOTP/api/auth/totp/verifyWeryfikuj 6-cyfrowy kod TOTP/api/tenant-panel/ai/chatChat completion (OpenAI/Claude/Gemini)/api/tenant-panel/ai/usageQuota: tokensUsed, quotaUsedPercent, todayRequests/api/tenant-panel/ai/historyHistoria konwersacji (ostatnie 50)/api/tenant-panel/ai/providersDostępne modele AI dla tenanta/api/tenant-panel/settingsUstawienia tenanta + Health Score/api/tenant-panel/settingsAktualizacja ustawień/api/tenant-panel/membersLista członków + pending invitations/api/tenant-panel/members/inviteWyślij zaproszenie email/api/tenant-panel/analyticsStatystyki użycia AI i aktywności/api/tenant-panel/invoicesLista faktur i historia płatności/api/tenant-panel/brandingWhite-label branding (kolory, logo, domena)/api/tenant-panel/webhooksSkonfigurowane webhooki/api/tenant-panel/addonsZainstalowane addony z Marketplace/api/admin/tenantsLista wszystkich tenantów z filtrowaniem/api/admin/tenantsUtwórz nowy tenant/api/admin/usersLista wszystkich użytkowników/api/admin/usersDodaj użytkownika do tenanta/api/admin/email-logHistoria 100 ostatnich emaili transakcyjnych/api/admin/audit-logPełny audit log akcji/api/admin/cronRęczny trigger cron (wymaga X-Cron-Secret)/api/admin/send-trial-warningsWyślij alerty trial expiry/api/admin/send-onboarding-remindersWyślij przypomnienia onboarding D+3| Plan | Req/min | Req/dzień | Tokeny/miesiąc | Concurrent |
|---|---|---|---|---|
| Starter | 60 | 1 000 | 1 000 000 | 5 |
| Business | 300 | 10 000 | 10 000 000 | 20 |
| Enterprise | 1 500 | 100 000 | Unlimited | 100 |
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Po przekroczeniu limitu zwracamy 429 Too Many Requests.
400Bad RequestNieprawidłowe parametry zapytania401UnauthorizedBrak lub nieprawidłowy klucz API403ForbiddenBrak uprawnień do zasobu404Not FoundZasób nie istnieje429Too Many RequestsPrzekroczono limit zapytań500Internal Server ErrorBłąd po stronie serwera503Service UnavailableBackend AI tymczasowo niedostępnyOficjalne SDK do integracji z NexusAI API.
pip install nexusai-pythonnpm install @nexusai/sdkcomposer require nexusai/sdkgo get github.com/nexusai/go-sdkmaven: com.nexusai:sdk:2.0gem install nexusai