NexusAI Docs v2.0

NexusAI API

Dokumentacja REST API · v2.0.0

Base URL: https://nexus-ai.click/api | TLS 1.3 enforced | SLA 99.9%
SDK:

Szybki Start

Pierwsze zapytanie do API NexusAI w 2 minuty.

1. Pobierz klucz API

Przejdź do Dashboard → Klucze API i wygeneruj nowy klucz.

2. Pierwsze zapytanie
# 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
  }'

Uwierzytelnianie

NexusAI używa kluczy API przekazywanych w nagłówku Authorization.

POST /auth/token Wymień credentials na JWT
Parametry body
emailrequiredstring
passwordrequiredstring
tenant_slugrequiredstring
Odpowiedź 200
{
  "access_token": "eyJ...",
  "expires_in": 3600,
  "token_type": "Bearer"
}

Chat Completions

Główny endpoint do komunikacji z modelami AI.

POST /chat/completions
Body Parameters
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 streaming
systemoptionalstringSystem prompt
top_poptionalnumberNucleus sampling 0–1
Request example
{
  "model": "gpt-4o",
  "messages": [
    {
      "role": "system",
      "content": "Jesteś asystentem."
    },
    {
      "role": "user",
      "content": "Pomóż mi napisać email"
    }
  ],
  "max_tokens": 512,
  "temperature": 0.7,
  "stream": false
}
Response 200
{
  "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
  }
}

Streaming SSE

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));
}
Zalety streamingu
  • • Natychmiastowa pierwsza odpowiedź (<200ms TTFB)
  • • Lepsza UX dla długich odpowiedzi
  • • Mniejsze timeouty HTTP
Format chunka
{
  "delta": "czę",
  "done": false,
  "tokens": 3
}

Embeddings

Generuj wektory semantyczne dla RAG, wyszukiwania i klasyfikacji treści.

POST /embeddings max 8192 tokenów per input
Request
{
  "model": "text-embedding-3-small",
  "input": "Tekst do embeddingu",
  "encoding_format": "float"
}
Response 200
{
  "data": [{
    "embedding": [0.123, -0.456, ...],
    "index": 0
  }],
  "usage": { "total_tokens": 12 }
}
Use case: Użyj embeddings do budowy RAG — zapisz wektory w Cloudflare Vectorize lub pgvector, wyszukaj semantycznie, dostarcz kontekst do chat completions.

Image Generation

Generuj obrazy przez DALL-E 3 lub Stable Diffusion.

POST /images/generations
promptrequiredOpis obrazu max 4000 znaków
modeloptionaldall-e-3 | dall-e-2 (default: dall-e-3)
sizeoptional1024x1024 | 1792x1024 | 1024x1792
qualityoptionalstandard | 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"
}

Speech-to-Text

Transkrypcja audio przez Whisper-1. Obsługa: mp3, mp4, mpeg, mpga, m4a, wav, webm.

POST /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 }

Tenants API

Zarządzanie organizacjami (multi-tenancy).

GET/tenantsLista wszystkich tenantówsuperadmin
POST/tenantsUtwórz nowego tenantasuperadmin
GET/tenants/:idSzczegóły tenantasuperadmin
PATCH/tenants/:idAktualizuj tenantatenant_admin
DELETE/tenants/:idUsuń tenantasuperadmin
GET/tenants/:id/statsStatystyki tenantatenant_admin

Webhooks

Zdarzenia wysyłane do Twojego endpointu. Weryfikacja przez X-Nexus-Signature (HMAC-SHA256).

Dostępne zdarzenia
tenant.created
tenant.updated
tenant.deleted
user.created
user.login
ai.quota_exceeded
billing.payment_success
billing.payment_failed
webhook.test
integration.connected
Przykładowy payload zdarzenia
// 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"
  }
}

Users API

Zarządzanie użytkownikami w ramach tenanta.

GET/admin/usersLista wszystkich użytkownikówsuperadmin
POST/auth/registerRejestracja nowego użytkownikapublic
POST/auth/loginLogowanie (zwraca JWT)public
POST/auth/logoutWylogowanieauthenticated
GET/profile/meDane zalogowanego użytkownikaauthenticated
PUT/profile/meAktualizuj profilauthenticated
POST/auth/reset-passwordŻądanie resetu hasłapublic
POST/auth/confirm-resetPotwierdź reset hasła (token)public
DELETE/admin/users/:idUsuń użytkownikasuperadmin

Billing API

Zarządzanie subskrypcjami, fakturami i płatnościami przez Stripe.

GET/billing/plansLista dostępnych planów cenowychpublic
GET/billing/subscriptionAktualny status subskrypcjiauthenticated
POST/billing/upgradeZmień plan (trigger checkout)authenticated
GET/billing/invoicesLista faktur tenantaauthenticated
GET/billing/invoices/:id/downloadPobierz fakturę PDFauthenticated
POST/billing/stripe-webhookWebhook Stripe (HMAC-SHA256)stripe_signed
GET/billing/mrr-statsStatystyki MRR/ARRsuperadmin
GET/billing/portalURL Stripe Customer Portalauthenticated
Stripe Events obsługiwane: invoice.payment_succeeded, invoice.payment_failed, customer.subscription.created, customer.subscription.updated, customer.subscription.deleted

Usage & Analytics

Metryki użycia AI, tokenów i aktywnościplatformy.

GET/admin/statsStatystyki globalne (tenants, users, AI)superadmin
GET/admin/ai-usageSzczegółowe użycie AI per tenantsuperadmin
GET/tenant-panel/settingsUstawienia + Health Score tenantatenant_admin
GET/admin/health-scoresHealth Score wszystkich tenantówsuperadmin
POST/admin/recalculate-health-scoresPrzelicz Health Scores (async)superadmin

Addons / Marketplace API

Instalacja i zarządzanie dodatkami z Marketplace per tenant. Limity: Starter=2, Business=10, Enterprise=∞.

GET/tenant-panel/addonsLista zainstalowanych addonówtenant_admin
POST/tenant-panel/addonsZainstaluj addon (addon_id, config)tenant_admin
DELETE/tenant-panel/addons/:addon_idOdinstaluj addontenant_admin
GET/admin/modulesKatalog wszystkich dostępnych modułówsuperadmin
POST/admin/modulesDodaj nowy moduł do katalogusuperadmin
POST /tenant-panel/addons — przykład
{
  "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"
}

Architektura Platformy

NexusAI działa w 100% na Cloudflare Workers — edge runtime, zero cold starts, globalny deployment.

Cloudflare Workers

Edge runtime — kod wykonuje się w 300+ lokalizacjach na świecie. <10ms TTFB. Brak serwera, brak cold startów.

Cloudflare D1

SQLite na edge. Multi-tenant izolacja przez tenant_slug w każdej tabeli. ACID, pełne transakcje, <5ms latency.

JWT + RBAC

HS256 JWT, 5 ról: superadmin > tenant_admin > admin > member > viewer. Każdy endpoint sprawdza rolę.

AI Adapter Pattern

Jeden interfejs, 3 providery: OpenAI / Gemini / Claude. Fallback do demoAiResponse() gdy brak klucza.

Resend (email)

Transakcyjny email: welcome, trial_expiring, quota_warning, payment_confirmed. HMAC podpis zdarzeń.

Stripe (billing)

Webhook HMAC-SHA256, 5 event typów. Customer Portal, subscription lifecycle, automatyczne faktury.

Stack techniczny
Runtime
Cloudflare Workers (V8)
Framework
Hono v4 (TypeScript)
Database
Cloudflare D1 (SQLite)
Auth
JWT HS256 + bcrypt
Email
Resend API
Billing
Stripe API
Frontend
Vanilla JS + Tailwind CDN
Build
Vite + @hono/vite-cloudflare-pages
Deploy
wrangler pages deploy

Bezpieczeństwo

Enterprise-grade security wbudowane w każdą warstwę platformy.

Uwierzytelnianie & Autoryzacja
JWT HS256 z 24h expiry
bcrypt (12 rounds) dla haseł
RBAC 5 poziomów uprawnień
Audit log dla każdej akcji
Rate limiting per IP/tenant
CORS per domain whitelist
Szyfrowanie & Dane
TLS 1.3 enforced (Cloudflare)
AES-256-CBC dla kluczy API AI
HMAC-SHA256 dla webhook sig
Secrets w Cloudflare Workers
Stripe Webhook timestamp check
SQL injection: prepared statements
Audit Log — schemat zdarzenia
{
  "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"
}

Multi-Tenancy

Każdy tenant ma izolowany zakres danych w tej samej bazie D1. Identyfikacja przez tenant_slug.

Tabele D1 (shared schema)
tenants (slug PK, plan, status, quota)
users (tenant_slug FK, role, email)
ai_messages (tenant_slug, model, tokens)
tenant_addons (tenant_slug, addon_id)
invoices (tenant_slug, amount, status)
webhooks (tenant_slug, url, events)
email_notifications (tenant_slug, type)
audit_log (tenant_slug, action, user_id)
Plany i limity
PlanAI Req/miesAddonsUsers
starter1 00025
business50 0001025
enterprise
Quota sprawdzana per request. Przy 80% wysyłany email ostrzeżenia, przy 100% — blokada z HTTP 429.

White-Label Customization

Każdy tenant może w pełni dostosować branding — kolory, logo, domeny, e-maile nadawcze.

GET/admin/whitelabel/:slugPobierz konfigurację brandingu tenantasuperadmin
PUT/admin/whitelabel/:slugZaktualizuj branding (colors, logo, domain)superadmin
GET/tenant-panel/brandingWłasny branding zalogowanego tenantatenant_admin
PUT/tenant-panel/brandingAktualizuj własny brandingtenant_admin
PUT /tenant-panel/branding — payload
{
  "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."
}

Health Score API

Algorytm 5-sygnałowy (0–100 pkt) oceniający kondycję tenanta. Przeliczany automatycznie (cron) i on-demand.

Sygnały Health Score
AI Activity (7d)30 pkt

≥10 wiad. = max; proporcjonalnie poniżej

Quota Utilization20 pkt

40–80% = max; <10% lub >90% = 0

Team Size20 pkt

≥3 users = max; 2 = 10; 1 = 0

Webhooks Active15 pkt

≥1 aktywny webhook = max

Onboarding Done15 pkt

aiModel + billingEmail ustawione = max

🔴
Critical
0–39
Natychmiastowa akcja
🟠
Poor
40–59
Wymaga uwagi
🟡
Fair
60–79
Dobry kierunek
🟢
Excellent
80–100
Zdrowy tenant
GET /tenant-panel/settings — health_score fragment response
{
  "healthScore":  73,
  "healthGrade":  "Fair",
  "healthStatus": "🟡",
  "signals": {
    "ai_activity":    24,
    "quota_util":     20,
    "team_size":      10,
    "webhooks":       15,
    "onboarding":     4
  }
}

Cron & Scheduled Jobs

Automatyczne zadania uruchamiane przez Cloudflare Workers Cron Triggers i endpoint HTTP.

Harmonogram cron (wrangler.jsonc)
"triggers": {
  "crons": ["0 3 * * *", "0 */6 * * *"]
}
trial_warnings
Codziennie 03:00
Alerty email dla tenantów na trial expiring w 1d i 3d
onboarding_reminders
Codziennie 03:00
D+3 email dla tenantów bez aktywności onboardingowej
health_scores
Co 6 godzin
Przelicz Health Score wszystkich aktywnych tenantów
quota_warnings
Co 6 godzin
Email ostrzeżenie przy 80% i 100% quota utilization
GET /admin/cron HTTP trigger (wymaga CRON_SECRET w nagłówku X-Cron-Secret)

Migracje Bazy Danych

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"
Schemat głównych tabel
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)
);

Self-Hosting Guide

Wdrożenie własnej instancji NexusAI na koncie Cloudflare. Wymaga: konto Cloudflare (free tier wystarczy).

Krok 1: Klonuj i zainstaluj
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.
Krok 2: Utwórz zasoby Cloudflare
# 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
Krok 3: Ustaw sekrety i wdróż
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
Potrzebujesz pomocy z self-hostingiem? Napisz: hello@nexus-ai.click

RBAC — Role i uprawnienia

NexusAI stosuje 5-poziomowy RBAC (Role-Based Access Control). Każdy endpoint sprawdza rolę przez middleware requireRole().

Hierarchia ról (od najwyższej do najniższej)
superadmin 99 Pełny dostęp do wszystkich zasobów i tenantów. Tylko wewnętrzny.
tenant_admin 3 Zarządza swoim tenantem: użytkownicy, ustawienia, billing, AI.
admin 3 Alias tenant_admin. Może zapraszać użytkowników i konfigurować.
partner 2 Resellerzy — dostęp do panelu partnera i referrali.
member 1 Standardowy użytkownik — AI chat, analytics (read), profil.
viewer 0 Read-only — dashboard, raporty. Bez możliwości tworzenia.
Sprawdzanie roli w middleware (backend/rbac.ts)
// 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();
  };
}
Mapowanie ról → endpointy
ZasóbGETPOST/PUTDELETE
/api/admin/*superadminsuperadminsuperadmin
/api/tenant-panel/*memberadminadmin
/api/tenant-panel/membersmemberadminadmin
/api/tenant-panel/ai/*membermember
/api/auth/*publicpublic
/api/profilemembermember

Refresh Tokens

NexusAI implementuje rotating refresh tokens — access token wygasa po 24h, refresh token po 30 dniach i jest rotowany przy każdym użyciu.

Schemat tokenów
accessToken
JWT HS256 · wygasa po 24h · payload: sub, email, role, tenant_slug
refreshToken
Losowy hex 64-znakowy · wygasa po 30 dniach · single-use (rotating)
Przechowywanie
accessToken: localStorage · refreshToken: localStorage (lub httpOnly cookie dla max security)
Rotacja refresh token
1.Klient wysyła refreshToken do POST /api/auth/refresh
2.Backend weryfikuje token w tabeli refresh_tokens
3.Stary token jest usuwany (single-use), nowy generowany
4.Zwracane: nowy accessToken + nowy refreshToken
!Użycie przeterminowanego lub skradzionego tokenu inwaliduje całą sesję
POST /api/auth/refresh
// 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

2FA TOTP — Implementacja

NexusAI wspiera TOTP (Time-based One-Time Password) zgodny z RFC 6238 — kompatybilny z Google Authenticator, Authy, 1Password.

Flow aktywacji 2FA
1Użytkownik klika Włącz 2FA w Ustawieniach → Bezpieczeństwo
2Backend generuje TOTP secret (base32) i zwraca QR code PNG (POST /api/auth/totp/setup)
3Użytkownik skanuje QR w Google Authenticator / Authy
4Użytkownik wpisuje 6-cyfrowy kod — backend weryfikuje (POST /api/auth/totp/verify)
52FA aktywowane — przy kolejnym logowaniu wymagany kod TOTP
POST /api/auth/totp/setup — response
{
  "secret":     "JBSWY3DPEHPK3PXP",            // base32 secret
  "qrDataUrl": "data:image/png;base64,...",  // PNG QR code
  "otpauthUrl": "otpauth://totp/NexusAI%20Platform:user@email.pl?secret=..."
}
TOTP Schema w D1
-- 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 — Internals

Rate limiting implementowany przez middleware w Cloudflare Workers używając in-memory Map (per Worker instance). Limit per IP i per tenant.

Konfiguracja limitów (backend/rbac.ts)
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
Uwaga: In-memory rate limiting działa per Worker instance. Dla enterprise-grade ograniczeń użyj Cloudflare Rate Limiting Rules na poziomie sieci (WAF).

Webhook Signature Verification

Każdy webhook wysyłany przez NexusAI jest podpisany HMAC-SHA256. Weryfikacja chroni przed fałszywymi requestami i replay attacks.

Nagłówki webhook requestu
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.succeeded
Content-Typeapplication/json
Weryfikacja w Node.js/JavaScript
const 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...
});
Weryfikacja w Python
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)

Zmienne środowiskowe

Kompletna lista zmiennych wymaganych do uruchomienia NexusAI. Przechowywane jako Cloudflare Workers Secrets.

Wymagane
JWT_SECRETSekret do podpisywania JWT. Min. 32 znaki losowe. Np. openssl rand -hex 32
D1 database_idID bazy D1 z wrangler.jsonc (pobierz z npx wrangler d1 create nexusai-prod)
Billing & Email
STRIPE_SECRET_KEYKlucz Stripe sk_live_... — płatności, subskrypcje, Customer Portal
STRIPE_WEBHOOK_SECRETwhsec_... do weryfikacji Stripe webhooków HMAC-SHA256
RESEND_API_KEYre_... — transakcyjny email (welcome, trial, quota). Bezpłatny tier: 3k/mies.
AI Providers
OPENAI_API_KEYsk-... GPT-4o, GPT-4 Turbo. Bez klucza: tryb demo z demoAiResponse()
ANTHROPIC_API_KEYsk-ant-... Claude 3.5 Sonnet / Opus / Haiku
GEMINI_API_KEYAIza... Google Gemini 1.5 Pro / Flash
Opcjonalne
CRON_SECRETSekret do autoryzacji HTTP triggera cron (X-Cron-Secret header)
ENCRYPTION_KEY32-znakowy klucz AES-256 do szyfrowania kluczy AI tenantów w D1
Ustawienie sekretów przez wrangler CLI
npx 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

Pełne API — tabela endpointów

Kompletna lista endpointów. Base URL: https://nexus-ai.click/api

Auth
POST/api/auth/loginLogowanie — zwraca accessToken + refreshToken
POST/api/auth/registerRejestracja partnera
POST/api/auth/refreshRotating refresh token
POST/api/auth/forgot-passwordWyślij reset link email
POST/api/auth/reset-passwordReset hasła tokenem
POST/api/auth/totp/setupGeneruj QR dla 2FA TOTP
POST/api/auth/totp/verifyWeryfikuj 6-cyfrowy kod TOTP
AI Engine
POST/api/tenant-panel/ai/chatChat completion (OpenAI/Claude/Gemini)
GET/api/tenant-panel/ai/usageQuota: tokensUsed, quotaUsedPercent, todayRequests
GET/api/tenant-panel/ai/historyHistoria konwersacji (ostatnie 50)
GET/api/tenant-panel/ai/providersDostępne modele AI dla tenanta
Tenant Panel
GET/api/tenant-panel/settingsUstawienia tenanta + Health Score
PUT/api/tenant-panel/settingsAktualizacja ustawień
GET/api/tenant-panel/membersLista członków + pending invitations
POST/api/tenant-panel/members/inviteWyślij zaproszenie email
GET/api/tenant-panel/analyticsStatystyki użycia AI i aktywności
GET/api/tenant-panel/invoicesLista faktur i historia płatności
GET/api/tenant-panel/brandingWhite-label branding (kolory, logo, domena)
GET/api/tenant-panel/webhooksSkonfigurowane webhooki
GET/api/tenant-panel/addonsZainstalowane addony z Marketplace
Superadmin
GET/api/admin/tenantsLista wszystkich tenantów z filtrowaniem
POST/api/admin/tenantsUtwórz nowy tenant
GET/api/admin/usersLista wszystkich użytkowników
POST/api/admin/usersDodaj użytkownika do tenanta
GET/api/admin/email-logHistoria 100 ostatnich emaili transakcyjnych
GET/api/admin/audit-logPełny audit log akcji
GET/api/admin/cronRęczny trigger cron (wymaga X-Cron-Secret)
POST/api/admin/send-trial-warningsWyślij alerty trial expiry
POST/api/admin/send-onboarding-remindersWyślij przypomnienia onboarding D+3

Rate Limits

Plan Req/min Req/dzień Tokeny/miesiąc Concurrent
Starter601 0001 000 0005
Business30010 00010 000 00020
Enterprise1 500100 000Unlimited100
Nagłówki odpowiedzi: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Po przekroczeniu limitu zwracamy 429 Too Many Requests.

Kody błędów

400Bad RequestNieprawidłowe parametry zapytania
401UnauthorizedBrak lub nieprawidłowy klucz API
403ForbiddenBrak uprawnień do zasobu
404Not FoundZasób nie istnieje
429Too Many RequestsPrzekroczono limit zapytań
500Internal Server ErrorBłąd po stronie serwera
503Service UnavailableBackend AI tymczasowo niedostępny

SDK & Biblioteki

Oficjalne SDK do integracji z NexusAI API.

🐍
Python SDK
pip install nexusai-python
v2.0.11.2k
🟡
JavaScript SDK
npm install @nexusai/sdk
v2.1.0890
🐘
PHP SDK
composer require nexusai/sdk
v1.5.0342
🦫
Go SDK
go get github.com/nexusai/go-sdk
v1.2.0567
Java SDK
maven: com.nexusai:sdk:2.0
v2.0.0234
💎
Ruby SDK
gem install nexusai
v1.3.0178
Narzędzia deweloperskie
API Playground →