Getting started
Switch in one minute
Already on OpenAI, Anthropic or OpenRouter? Change three things (the base URL, the key and the model ID) and the rest of your code stays as it is.
From OpenAI#
-client = OpenAI()+client = OpenAI(base_url="https://fullsendai.com/v1", api_key=os.environ["FULLSEND_API_KEY"])-reply = client.chat.completions.create(model="gpt-…", messages=messages)+reply = client.chat.completions.create(model="deepseek-v4.1-flash", messages=messages)- Chat Completions, streaming, tools, images,
response_formatandreasoning_effortcarry over. - The Responses, Assistants, Batch, Embeddings, Images and Audio endpoints don't. Code on
client.responsesneeds to move toclient.chat.completions.
From Anthropic#
-client = anthropic.Anthropic()+client = anthropic.Anthropic(base_url="https://fullsendai.com", api_key=os.environ["FULLSEND_API_KEY"])-message = client.messages.create(model="claude-…", max_tokens=1024, messages=messages)+message = client.messages.create(model="deepseek-v4.1-flash", max_tokens=1024, messages=messages)- Messages, streaming, custom tools and images carry over.
- Extended thinking, prompt caching discounts, PDF blocks, server tools and batches don't; see What's different.
From OpenRouter#
Python
-client = OpenAI(base_url="https://openrouter.ai/api/v1", api_key=os.environ["OPENROUTER_API_KEY"])+client = OpenAI(base_url="https://fullsendai.com/v1", api_key=os.environ["FULLSEND_API_KEY"])-model="deepseek/deepseek-…"+model="deepseek-v4.1-flash"- Model IDs have no vendor prefix:
deepseek-v4.1-flash, notvendor/model. The full list is on Models. - OpenRouter-only fields (
modelsfallback lists,providerrouting,transforms) and itsHTTP-RefererandX-Titleheaders aren't needed; remove them. Failing over to a backup host happens on our side. - The same key works on the Anthropic API too, for tools like Claude Code.
After you switch#
| Check | Why |
|---|---|
| Model IDs in config, not code | So you can try another model, or move off a retired one, without a deploy. |
| A spend cap on the new key | A loop stops at the cap, not at your balance. Per-key limits |
| Your retry logic | The error codes differ from your old provider's. Which errors to retry |
| Rate limits | Per key per model, and per account. Rate limits |
| Logs after the first calls | Every call shows in Logs with its tokens, cost and any error. |
Stuck? Email [email protected]System statusChangelog