Docs/Integrations

Integrations

Vercel AI SDK

Last updated May 28, 2026

Build AI UIs with the Vercel AI SDK and Cencori's first-party provider.

Cencori works directly with the Vercel AI SDK. The recommended path is the first-party cencori/vercel provider so you do not have to wire an OpenAI-compatible client manually.

1. Install Dependencies

Codetext
npm install ai cencori

2. Set Your API Key

Codetext
# .env.local
CENCORI_API_KEY=csk_...

3. Export The Provider

Codetext
// lib/cencori.ts
import { cencori } from 'cencori/vercel';
 
export { cencori };

4. Stream In Your Route Handler

Codetext
// app/api/chat/route.ts
import { streamText, convertToModelMessages, type UIMessage } from 'ai';
import { cencori } from '@/lib/cencori';
 
export async function POST(req: Request) {
  const { messages, model = 'gpt-4o' }: { messages: UIMessage[]; model?: string } = await req.json();
 
  const result = streamText({
    model: cencori(model),
    messages: await convertToModelMessages(messages),
  });
 
  return result.toUIMessageStreamResponse();
}

5. Use useChat() In The Client

Codetext
'use client';
 
import { useChat } from '@ai-sdk/react';
import { useState, type FormEvent } from 'react';
 
function getMessageText(message: { parts?: Array<{ type: string; text?: string }> }) {
  return message.parts
    ?.map((part) => (part.type === 'text' ? part.text || '' : ''))
    .join('') || '';
}
 
export default function Chat() {
  const [input, setInput] = useState('');
  const { messages, sendMessage, status } = useChat({ api: '/api/chat' });
 
  function handleSubmit(event: FormEvent<HTMLFormElement>) {
    event.preventDefault();
    if (!input.trim() || status !== 'ready') return;
 
    const text = input.trim();
    setInput('');
    void sendMessage({ text });
  }
 
  return (
    <div>
      {messages.map((message) => (
        <div key={message.id}>{getMessageText(message)}</div>
      ))}
      <form onSubmit={handleSubmit}>
        <input value={input} onChange={(event) => setInput(event.target.value)} />
      </form>
    </div>
  );
}

Alternative: OpenAI-Compatible Mode

If you must use @ai-sdk/openai, point it to Cencori's OpenAI-compatible base URL:

Codetext
import { createOpenAI } from '@ai-sdk/openai';
 
export const cencori = createOpenAI({
  baseURL: 'https://api.cencori.com/v1',
  apiKey: process.env.CENCORI_API_KEY,
});

Use this mode only when a project already depends on the OpenAI provider abstraction. For new Cencori integrations, prefer cencori/vercel.

Security

Keep CENCORI_API_KEY on the server. Do not expose it through NEXT_PUBLIC_* environment variables or browser-side fetch calls.