NNyquest docs

Endpoints Reference

The documented, supported surface of the Nyquest API.

This is not an exhaustive list of what the backend serves. Some routes are internal, some are admin-only, and some are intentionally left out. If an endpoint is not listed here, it is not supported for external use — it can change or disappear without notice, and it is not covered by anything in these docs.

Unless an entry says otherwise, send Authorization: Bearer <token> — a JWT from the sign-in flow, or a personal API key. See Authentication.

Base URL: https://api.nyquest.ai

Public (/v1/...)

These endpoints are designed for external integration use.

Chat & models

MethodPathPurpose
POST/v1/chat/completionsOpenAI-compatible chat completion. Accepts standard OpenAI body. See OpenAI Compatibility.
GET/v1/modelsList models you can call (OpenAI-compatible shape).

Image generation

MethodPathPurpose
POST/v1/image/generateGenerate image from prompt. Body: {prompt, model, aspect_ratio?, count?}. Supports Google Imagen 4 (imagen-4.0-*) tiers.
GET/v1/image/modelsList image-capable models in catalog.
POST/v1/image/byok-modelsList image models available via your BYOK key.
GET/v1/image/galleryYour previously-generated images.
DELETE/v1/image/galleryDelete entries from gallery.

Audio generation (TTS)

MethodPathPurpose
POST/v1/audio/generateTTS from prompt. Body: {text, model, voice, tts_max_tokens?, ...}. tts_max_tokens defaults to 4096 (~3 min audio); supports 4096, 8192, 16384, or 32768.
GET/v1/audio/modelsList TTS models, incl. Google Gemini native-voice models (gemini-*-tts) with their voice lists.
POST/v1/audio/byok-voicesList voices available via your BYOK key for a model.

Music generation

MethodPathPurpose
POST/v1/music/generateGenerate an instrumental clip (Google Lyria). Body: {prompt, model?}. Returns {audio_url, cost, ...}.
GET/v1/music/modelsList music models (Lyria clip / pro) with pricing.

Video generation (async)

MethodPathPurpose
POST/v1/video/generateSubmit a video job (Google Veo). Body: {prompt, model?, aspect_ratio?}. Returns 202 + {job_id, status}. Balance is held up front.
GET/v1/video/jobs/{id}Poll a job; returns {status, video_url, cost, ...}. States include submitting, pending, running, done, failed, and submission_unknown. Confirmed failures release the hold; an unknown submission outcome requires reconciliation before retrying.
GET/v1/video/jobsList your video jobs.
GET/v1/video/modelsList video models (Veo tiers) with pricing.

Agent runs

MethodPathPurpose
POST/v1/agents/runStart a multi-step agent run. Body: {goal, project_id?, conversation_id?, max_steps?}. Returns SSE stream.
GET/v1/agents/runsList your past runs.
GET/v1/agents/runs/{id}Get run detail (final answer + timeline).
POST/v1/agents/runs/{id}/stopSoft-stop an in-flight run.

Multi-Model Splicer

Splices are started from Splicer in the app (they stream over the same SSE channel as chat); these endpoints cover discovery and history. See Multi-Model Splicer.

MethodPathPurpose
GET/v1/splicer/registryModels available to splice for your tier, with limits.
GET/v1/splicer/runs/{id}Run detail: per-model responses, consensus verdict, costs, compression savings.

Quotes (financial)

MethodPathPurpose
GET/v1/quotes?symbols=AAPL,MSFT,SPXLive equity / index / commodity / FX quotes via Stooq. 30s cache. You do not need a market-data key of your own.

Live support sessions

MethodPathPurpose
POST/v1/support/sessionsOpen a Discord-bridged support session.
POST/v1/support/sessions/{id}/messagesSend a user message in a session.
GET/v1/support/sessions/{id}/streamSSE stream of session events.
POST/v1/support/sessions/{id}/closeClose a session.

Anonymous BYOK (no auth)

Chat without an account by passing your own provider credentials per-request via X-Provider-* headers (e.g. X-Provider-Key, X-Provider-Url) on /v1/chat/completions. Keys are used in-flight and never persisted or logged. See Try Nyquest Without an Account.

MethodPathPurpose
POST/byok/anon/testProbe a provider key: confirms the key works against the upstream provider before you chat. No Bearer token required.

Account & profile (/user/...)

These manage your personal data.

Account

MethodPathPurpose
GET/user/meCurrent user profile (id, email, tier, is_pro).
GET/user/statsAggregate usage stats.
POST/user/embedEmbed text (powers in-app semantic search). Body: {text}.

Personal API keys (PATs)

MethodPathPurpose
POST/user/api-keysCreate a PAT. Returns key once; save it.
GET/user/api-keysList your PATs (no secret returned).
DELETE/user/api-keys/{id}Delete a PAT. Stops working immediately.

Conversations

MethodPathPurpose
GET/user/conversationsList conversations.
GET/user/conversations/{id}Get conversation detail.
PATCH/user/conversations/{id}Update (e.g. assign to a project: {"project_id": "..."}).
DELETE/user/conversations/{id}Delete conversation. Permanent.

Projects

MethodPathPurpose
GET/user/projectsList your projects.
POST/user/projectsCreate a project.
GET/user/projects/{id}Get project detail.
PATCH/user/projects/{id}Update project.
DELETE/user/projects/{id}Delete project (un-projects its conversations + artifacts).
GET/user/projects/{id}/conversationsList conversations in this project.

BYOK Providers

MethodPathPurpose
GET/user/providersList your saved BYOK provider configs.
POST/user/providersAdd a BYOK provider. Body: {name, provider_type, base_url, api_key}.
PUT/user/providers/{id}Update provider.
DELETE/user/providers/{id}Remove provider.
POST/user/providers/{id}/testTest the key against the upstream provider.
GET/user/providers/{id}/modelsList models reachable via that provider.

Settings

MethodPathPurpose
GET/user/settingsRead account-level settings (BYOK toggle, active provider, etc.).
PUT/user/settingsUpdate settings.

Billing (/billing/...)

MethodPathPurpose
GET/billing/accountWallet balance, is_pro, lifetime spend.
GET/billing/ledgerTransaction history (credits + debits).
GET/billing/usageToken + cost usage by date range.
GET/billing/portalReturns a URL to Stripe customer portal (manage cards, etc.).
POST/billing/add-creditsReturns a Stripe Checkout URL to fund the wallet.
POST/billing/webhookINBOUND from Stripe — not for client use.

Auth (/auth/...)

These are mainly for the web UI sign-in flow. Scripts should use PATs instead.

MethodPathPurpose
POST/auth/signupCreate account.
POST/auth/loginSign in, returns JWT.
POST/auth/refreshRefresh JWT.
POST/auth/logoutInvalidate session client-side (JWT itself stays valid until expiry).
POST/auth/forgot-passwordSend reset email.
POST/auth/reset-passwordUse reset token + new password.
GET/auth/oauth/google/startBegin Google OAuth flow.
GET/auth/oauth/google/callbackOAuth callback (browser-only).

Health

MethodPathPurpose
GET/healthLiveness probe, no auth. Returns {"status":"ok"} plus service name, version, and engine version.
GET/readyReadiness probe, no auth. Checks the database; returns ready or degraded, and 503 when the database is unreachable.
GET/health/deepDeep check across database, engine, and outbound email provider. Admin only — this one is not an open probe.

/health/ready also responds. It is a separate handler rather than an alias for /ready: same job, different response body.

Admin (/admin/...)

Admin endpoints exist but require admin status, granted only by request. Not documented publicly. If you have admin and need details, reference src/admin/mod.rs in the backend or talk to a real human.

Where to next