Skip to main content

Quickstarts

AI Gateway quickstart

Send a chat completion through api.pre.dev/v1 with curl or a stock SDK.

Send one chat completion to deepseek/deepseek-v4.1-flash-1017 and read the credits it charged.

Before you start

Copy your pre.dev API key from Integrations → Built-in in the dashboard: pre.dev/projects/integrations for your personal workspace, or the Integrations page of a team workspace. Workspace keys start with pdk_.

Store it as PREDEV_API_KEY. A Free workspace can spend 5 credits on gateway calls in total, whatever its balance; after that, calls return 402 until the workspace subscribes. See authentication and pricing.

Send a request

curl --fail-with-body https://api.pre.dev/v1/chat/completions \
  -H "Authorization: Bearer $PREDEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek/deepseek-v4.1-flash-1017",
    "messages": [{ "role": "user", "content": "Say hello in five words." }]
  }'

Install the stock SDK with npm install openai, then set baseURL:

import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.pre.dev/v1',
  apiKey: process.env.PREDEV_API_KEY!,
});

const completion = await client.chat.completions.create({
  model: 'deepseek/deepseek-v4.1-flash-1017',
  messages: [{ role: 'user', content: 'Say hello in five words.' }],
});
console.log(completion.choices[0].message.content);

Install the stock SDK with pip install openai, then set base_url:

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.pre.dev/v1",
    api_key=os.environ["PREDEV_API_KEY"],
)

completion = client.chat.completions.create(
    model="deepseek/deepseek-v4.1-flash-1017",
    messages=[{"role": "user", "content": "Say hello in five words."}],
)
print(completion.choices[0].message.content)

Install ai and @ai-sdk/openai, then create a provider with the gateway URL:

import { createOpenAI } from '@ai-sdk/openai';
import { generateText } from 'ai';

const predev = createOpenAI({
  baseURL: 'https://api.pre.dev/v1',
  apiKey: process.env.PREDEV_API_KEY!,
});

const { text } = await generateText({
  model: predev('deepseek/deepseek-v4.1-flash-1017'),
  prompt: 'Say hello in five words.',
});
console.log(text);

The gateway serves the Anthropic Messages shape at /v1/messages. The Anthropic SDK appends /v1/messages itself, so its base URL is https://api.pre.dev without /v1. Use your pre.dev key as the API key:

import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic({
  baseURL: 'https://api.pre.dev',
  apiKey: process.env.PREDEV_API_KEY!,
});

const message = await client.messages.create({
  model: 'anthropic/claude-sonnet-5',
  max_tokens: 256,
  messages: [{ role: 'user', content: 'Say hello in five words.' }],
});
console.log(message.content);

Model ids stay in catalog form (anthropic/claude-sonnet-5), not Anthropic’s native names. See Messages.

Read the response

The body is a standard chat completion response. Three headers come from the gateway:

HeaderMeaning
x-predev-request-idGateway request id, pdr_…; quote it in support requests
x-predev-credits-chargedCredits charged for this call
x-predev-credits-remainingWorkspace balance after the call; omitted when the workspace has no credit limit

Add -i to the curl command to print them. In the SDKs, use the raw-response helpers (client.chat.completions.with_raw_response in Python, .withResponse() in Node) when you need headers.

Swap the model

Reasoning models spend your max_tokens thinking. Many models reason by default. With a small max_tokens, the reply can come back as content: null with finish_reason: "length" because the whole budget went to reasoning tokens, which are still billed. For chat, summarize, or classify features, pass reasoning: { "enabled": false } (or { "effort": "low" }), or set max_tokens to at least 1024.

Change model to any id from GET /v1/models, for example anthropic/claude-sonnet-5, google/gemini-3.8-flash, or openai/gpt-6-luna. An id the catalog does not serve returns a 4xx error; check the id against the catalog.

Continue with streaming, tools and structured output, or fallbacks and advanced options.

Was this page helpful?

On this page