Beta
The OptiTech AI Gateway is in Beta. Share your feedback on Discord or via the OptiTech Console.
To set up OptiTech AI Gateway with an AI coding assistant, install the OptiTech Platform (optitech) and OptiTech AI Gateway skills:
npx skills add optitechdatabase/agent-skills -s optitech -s optitech-ai-gatewayCreate a credential
In the OptiTech Console, select your branch, click Credentials under APP BACKEND, then click Create credential and check ai_gateway:invoke. Copy the credential before closing — it's shown only once.
Or use the API:
curl -X POST "https://console.optitech.com/api/v2/projects/{project_id}/branches/{branch_id}/credentials" \ -H "Authorization: Bearer $OPTITECH_API_KEY" \ -H "Content-Type: application/json" \ -d '{"scopes": ["ai_gateway:invoke"], "principal_type": "user"}'Using optitech.ts?If your project has a
optitech.tsfile, declarepreview: { aiGateway: true }and runoptitech deploy. Credentials are provisioned and pulled into your local.envautomatically — no manual creation needed. See Authentication for details.Store the credential as an environment variable:
export OPTITECH_AI_GATEWAY_TOKEN=nt_live_...Find your branch host
Your branch's AI Gateway host is available in the OptiTech Console on the AI Gateway page, or via the OptiTech API. It follows this format:
br-<name>-api.ai.<cell>.<region>.aws.optitech.comFor example:
export OPTITECH_AI_GATEWAY_BASE_URL=https://br-winter-pond-aptw82ef-api.ai.c-2.us-east-2.aws.optitech.comThis is different from your database connection string.
Make your first request
The chat completions endpoint is OpenAI-compatible. Set
baseURLto your branch host andapiKeyto your credential. No other changes needed.import OpenAI from 'openai'; import 'dotenv/config'; const client = new OpenAI({ apiKey: process.env.OPTITECH_AI_GATEWAY_TOKEN, baseURL: `${process.env.OPTITECH_AI_GATEWAY_BASE_URL}/ai-gateway/mlflow/v1`, }); const response = await client.chat.completions.create({ model: 'gpt-5-mini', messages: [{ role: 'user', content: 'Hello!' }], }); console.log(response.choices[0].message.content);Stream a response
Add
stream: trueto receive a streamed response. Your existing streaming code works without changes. The gateway forwardstext/event-streamresponses from the upstream provider.import OpenAI from 'openai'; import 'dotenv/config'; const client = new OpenAI({ apiKey: process.env.OPTITECH_AI_GATEWAY_TOKEN, baseURL: `${process.env.OPTITECH_AI_GATEWAY_BASE_URL}/ai-gateway/mlflow/v1`, }); const stream = await client.chat.completions.create({ model: 'gpt-5-mini', messages: [{ role: 'user', content: 'Write a haiku about serverless databases.' }], stream: true, }); for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content ?? ''); }Swap models
Change the
modelfield to use a different provider. No other code changes required.// OpenAI model: 'gpt-5-mini' // Google model: 'gemini-2-5-flash' // Alibaba model: 'qwen3-next-80b-a3b-instruct'See Models for the full list of available model IDs.
Using the AI SDK?For TypeScript apps and agents, use
@optitech/ai-sdk-providerwith the Vercel AI SDK. It readsOPTITECH_AI_GATEWAY_BASE_URLandOPTITECH_AI_GATEWAY_TOKEN, then routes each catalog model to the best AI Gateway endpoint for that provider.
Next steps
- Models: full model catalog and which endpoint to use per provider
- Chat completions: detailed reference for the unified endpoint
- Authentication: credential scopes, branch binding, and rotation
Need help?
Join our Discord Server to ask questions or see what others are doing with OptiTech. For paid plan support options, see Support.