コンテンツへスキップ
cheapllm.shop 無料キー ダッシュボード
Currently facing a lot of demand - Slowdowns may occur - Sorry for the inconvenience
Docs / how to hook up

2 行で接続。

すべて 1 ページに。あなたのコードがすでに OpenAI チャット API に対応していれば、セクション 01 を読めば完了です。

クイックスタート

設定値
ベース URLhttps://cheapllm.shop/v1
API キーダッシュボードから取得したsk-cheap-...
モデルdeepseek-v4.1-flash-1017
curl https://cheapllm.shop/v1/chat/completions \
  -H "Authorization: Bearer $CHEAPLLM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4.1-flash-1017",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

Windows の PowerShell の場合:

Invoke-RestMethod -Method Post -Uri "https://cheapllm.shop/v1/chat/completions" `
  -Headers @{ Authorization = "Bearer $env:CHEAPLLM_API_KEY" } -ContentType "application/json" `
  -Body '{"model": "deepseek-v4.1-flash-1017", "messages": [{"role": "user", "content": "Hello!"}]}'

Python

from openai import OpenAI

client = OpenAI(base_url="https://cheapllm.shop/v1", api_key="sk-cheap-...")

resp = client.chat.completions.create(
    model="deepseek-v4.1-flash-1017",
    messages=[{"role": "user", "content": "Hello!"}],
)
print(resp.choices[0].message.content)

Node / TypeScript

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://cheapllm.shop/v1", apiKey: process.env.CHEAPLLM_API_KEY });

const resp = await client.chat.completions.create({
  model: "deepseek-v4.1-flash-1017",
  messages: [{ role: "user", content: "Hello!" }],
});
console.log(resp.choices[0].message.content);

SDK なし、素の fetch

const r = await fetch("https://cheapllm.shop/v1/chat/completions", {
  method: "POST",
  headers: { "Authorization": `Bearer ${KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({ model: "deepseek-v4.1-flash-1017", messages: [{ role: "user", content: "Hello!" }] }),
});
const data = await r.json();

キー

キーは Authorization: Bearer sk-cheap-... として送信します。クライアントによっては x-api-key ヘッダーも使用できます。

  • ダッシュボードで最大 25 個のキーを作成できます。アプリやチームメンバーごとに 1 つずつ。
  • キーは作成時に一度だけ表示されます。当社が保存するのはフィンガープリントのみです。
  • 失効は次のリクエストから有効になります。
  • CORS は開放されているため、ブラウザアプリから API を直接呼び出せます。ただし、公開 Web ページ内にキーを含めないでください。誰でも読み取れてしまいます。

チャット補完

POST /v1/chat/completions は OpenAI エンドポイントと同じボディを受け付けます。よく使われるフィールドは次のとおりです:

フィールド備考
modeldeepseek-v4.1-flash-1017。任意ですが、これが唯一の必須項目です。
messages必須。system、user、assistant、tool のロール。
streamサーバー送信イベントには true。以下を参照してください。
max_tokens回答の上限。推論も含みます。
temperature、top_p通常どおりのサンプリング。
stop文字列または文字列のリスト。
tools、tool_choice、response_formatそのままモデルに渡されます。

レスポンスには prompt_tokens と completion_tokens を含む usage オブジェクトと、お問い合わせの際に引用いただける x-request-id ヘッダーが含まれます。

ストリーミング

"stream": true を指定すると text/event-stream が得られます。チャンクごとに 1 行の data: {...} と、最後に data: [DONE] が返ります。トークン数を含む最終チャンクを得るには "stream_options": {"include_usage": true} を追加してください。

stream = client.chat.completions.create(
    model="deepseek-v4.1-flash-1017",
    messages=[{"role": "user", "content": "Count to five, slowly."}],
    stream=True,
    stream_options={"include_usage": True},
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
    elif chunk.usage:
        print("\n", chunk.usage)

接続を閉じると生成が停止するため、キャンセルしたリクエストは時間を消費しなくなります。

推論

モデルは回答する前に考えます。思考は回答とは別に届くため、出力を汚すことはありません:

場所推論回答
ストリーミングdelta.reasoning_content(delta.reasoning も可)delta.content
非ストリーミングmessage.reasoning_contentmessage.content
推論トークンは completion_tokens と max_tokens にカウントされます。回答が途中で切れる場合は max_tokens を増やしてください。

モデル

GET /v1/models lists what's on the menu. Today that's one model:

{"object": "list", "data": [{"id": "deepseek-v4.1-flash-1017", "object": "model", "owned_by": "cheapllm"}]}

Model names containing deepseek are routed to it too, so tools with a hard-coded DeepSeek model name just work.

Limits

Free tier

During the beta every account is free, with no rate limit. When the beta ends, every account keeps a permanent free tier, with no card: at least 5,000 input tokens and 1,000 output tokens per hour (5,000 and 1,000 today), counted per account over a rolling hour, all keys together. These numbers can go up, never below that minimum. Past the free tier, usage is billed at $0.005 per million input tokens, $0.001 per million cached input tokens and $0.14 per million output tokens, with no rate limit. We'll email every account before the beta ends.

Rate and size limits

ThingLimit
Requests per minuteNone
Tokens per minuteNone
Parallel requestsNone
Request body4 MB
Keys per account25
When traffic spikes we queue your request and retry for up to 30 seconds before answering 503. That's not a limit on you, it means the kitchen is full for a moment. Retry after the number of seconds in Retry-After; the official SDKs do this on their own.

Errors

Errors come back as {"error": {"message", "type", "code"}}, like OpenAI's.

StatusMeaningWhat to do
400Bad body, e.g. no messagesRead the message, fix the request
401Missing, wrong or revoked keyCheck the header, or make a new key
404Unknown model or endpointUse deepseek-v4.1-flash-1017
413Body over 4 MBTrim the prompt
503Kitchen full, even after our retriesRetry after Retry-After seconds
504Generation took too longLower max_tokens or stream

Anthropic and Responses formats

Tools built for the Anthropic Messages API (Claude Code, the Anthropic SDKs) can use the same model. Point them at https://cheapllm.shop; they call POST /v1/messages. The key works as x-api-key or Authorization: Bearer. Any model name is accepted and routed to deepseek-v4.1-flash-1017.

curl https://cheapllm.shop/v1/messages \
  -H "x-api-key: $CHEAPLLM_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model": "deepseek-v4.1-flash-1017", "max_tokens": 1024,
       "messages": [{"role": "user", "content": "Hello!"}]}'

Supported: text, images, system prompts, tool use and tool results, streaming events, stop sequences. Thinking blocks are not returned. POST /v1/messages/count_tokens returns an estimate.

Tools built for the OpenAI Responses API (Codex CLI, recent OpenAI SDK code) can call POST /v1/responses on https://cheapllm.shop/v1: text and image input, instructions, function and custom tools, streaming events. Stateless only (store and previous_response_id are not kept).

Can't find it here? : it has read these docs and knows the 40 integrations.

Your tools

Step-by-step settings for Claude Code, OpenCode, Codex CLI, DeepSeek Harness, Cline, Roo Code, Kilo Code, Continue, Copilot, Cursor, Zed and many more are on the integrations page. In short: anything with an "OpenAI-compatible" or "custom base URL" setting works with the base URL, your key and the model name above.

Environment variables

export OPENAI_BASE_URL=https://cheapllm.shop/v1
export OPENAI_API_BASE=https://cheapllm.shop/v1   # older libraries
export OPENAI_API_KEY=sk-cheap-...

Windows (PowerShell; setx keeps them for new windows):

setx OPENAI_BASE_URL "https://cheapllm.shop/v1"
setx OPENAI_API_BASE "https://cheapllm.shop/v1"
setx OPENAI_API_KEY "sk-cheap-..."

Or let the installer pick, install and configure your tools (all 40 from the integrations page): curl -fsSL https://cheapllm.shop/setup.sh | sh on macOS and Linux, irm https://cheapllm.shop/setup.ps1 | iex in Windows PowerShell.

Open WebUI

Admin settings, Connections, OpenAI API: add a connection with the base URL and your key. The model appears in the picker.

LibreChat

endpoints:
  custom:
    - name: "cheapllm"
      apiKey: "${CHEAPLLM_API_KEY}"
      baseURL: "https://cheapllm.shop/v1"
      models:
        default: ["deepseek-v4.1-flash-1017"]

Continue (VS Code, JetBrains)

models:
  - name: cheapllm
    provider: openai
    model: deepseek-v4.1-flash-1017
    apiBase: https://cheapllm.shop/v1
    apiKey: sk-cheap-...

Aider

aider --openai-api-base https://cheapllm.shop/v1 --openai-api-key sk-cheap-... \
      --model openai/deepseek-v4.1-flash-1017

Cursor

Settings, Models: paste your key in the OpenAI API key field, turn on "Override OpenAI Base URL" with the base URL, then add the model name as a custom model.

LangChain

from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="deepseek-v4.1-flash-1017", base_url="https://cheapllm.shop/v1", api_key="sk-cheap-...")

Vercel AI SDK

import { createOpenAICompatible } from "@ai-sdk/openai-compatible";
const cheapllm = createOpenAICompatible({ name: "cheapllm", baseURL: "https://cheapllm.shop/v1", apiKey: process.env.CHEAPLLM_API_KEY });
const model = cheapllm("deepseek-v4.1-flash-1017");

Stuck? Write to [email protected] with the x-request-id of the failing call.