OpenAI-compatible API · priced by a live market
AI inference.You set the limit.
Every account starts with $1 of credit as a free trial. No card is needed.
Clearing level · market-preview · preview
Per 1M tokens: $0.0167 cache-hit · $0.1665 cache-miss · $0.3330 output
A preview of the market, which opens soon. Its prices are simulated until then; fixed-price models run today.
Level, last 24 hours
Test price limit $0.0453
- Cleared at once
- 66%
- Longest wait
- 6h 49m
- Mean charge
- $0.0425
Drag the test price limit. It sets nothing, and the figures read the last 24 hours on this market.
Fixed-price models
Three published prices per 1M tokens
Each of these models is sold at published prices for cache-hit input, cache-miss input and output. A request is charged its tokens at those prices.
- kimi-k3
- Cache-hit
- $0.1000
- Cache-miss
- $1.0000
- Output
- $5.0000
- glm-5.3
- Cache-hit
- $0.0750
- Cache-miss
- $0.7500
- Output
- $2.2500
- glm-5.3-flash
- Cache-hit
- $0.0200
- Cache-miss
- $0.1000
- Output
- $0.3000
- deepseek-v4.1-flash
- Cache-hit
- $0.0100
- Cache-miss
- $0.1000
- Output
- $0.4000
How the price is set
A bid line, a fill, and the gap between them
You pay the clearing level
- Bid
- Your price limit. The request rests in the book at it.
- Charge
- The level at execution, up to your price limit.
- Receipt
- Level, bid and charge, in usage.x_market.
Where the capacity comes from
Dedicated nodes run full, and shared nodes are topped off
Keeping utilization at 100% instead of 30% allows us to offer a far better average price, as well as speed and reliability.
1 A dedicated node
100%in use
2 A partner's node, topped off
95%topped off at 02:00 · their traffic 5%
Drop-in for the OpenAI SDK
One base URL and one parameter, in every tool
Change the base URL and add a price limit. With a default on your API key or account, the parameter is optional.
import osfrom openai import OpenAI client = OpenAI( base_url=( "https://api.openfill.ai/v1" ), api_key=os.environ[ "OPENFILL_API_KEY" ],) r = client.chat.completions.create( model="market-preview", messages=[ {"role": "user", "content": "hi"} ], extra_body={"price_limit": 0.10},)print(r.choices[0].message.content)print(r.usage)import OpenAI from "openai"; const client = new OpenAI({ baseURL: "https://api.openfill.ai/v1", apiKey: process.env.OPENFILL_API_KEY,}); const r = await client.chat.completions.create( { model: "market-preview", messages: [{ role: "user", content: "hi" }], }, { headers: { "X-Price-Limit": "0.10" } },);console.log(r.choices[0].message.content);console.log(r.usage);curl "https://api.openfill.ai/v1/chat/completions" \ -H "Authorization: Bearer $OPENFILL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "market-preview", "messages": [ {"role": "user", "content": "hi"} ], "price_limit": 0.10 }'# The base URL without /v1; Claude Code appends /v1/messagesexport ANTHROPIC_BASE_URL="https://api.openfill.ai"export ANTHROPIC_AUTH_TOKEN="$OPENFILL_API_KEY"export ANTHROPIC_API_KEY="" # Every model slot by hand: discovery keeps only ids that name Claudeexport ANTHROPIC_MODEL="market-preview"export ANTHROPIC_DEFAULT_SONNET_MODEL="market-preview"export ANTHROPIC_DEFAULT_HAIKU_MODEL="market-preview"export CLAUDE_CODE_SUBAGENT_MODEL="market-preview" # The price limit and the wait, merged into every request bodyexport CLAUDE_CODE_EXTRA_BODY='{"price_limit": 0.10, "max_wait": 600}'export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1claude# ~/.codex/config.tomlmodel_provider = "openfill"model = "market-preview"model_context_window = 262144web_search = "disabled"show_raw_agent_reasoning = true [model_providers.openfill]name = "OpenFill"base_url = "https://api.openfill.ai/v1"env_key = "OPENFILL_API_KEY"wire_api = "responses"http_headers = { "X-Price-Limit" = "0.10" }// opencode.json{ "$schema": "https://opencode.ai/config.json", "provider": { "openfill": { "npm": "@ai-sdk/openai-compatible", "name": "OpenFill", "options": { "baseURL": "https://api.openfill.ai/v1", "apiKey": "{env:OPENFILL_API_KEY}", "headers": { "X-Price-Limit": "0.10" } }, "models": { "market-preview": { "name": "market-preview" } } } }}# Cline, Roo Code and Kilo Code# Settings > API Provider: OpenAI Compatible Base URL https://api.openfill.ai/v1API Key (your OPENFILL_API_KEY)Model ID market-preview # These tools send requests without a price# limit. Set one on the key, on Bidding.# A key from API keys, shown once when madeexport OPENFILL_API_KEY="of_live_..." # Any tool that reads the OpenAI variablesexport OPENAI_BASE_URL="https://api.openfill.ai/v1"export OPENAI_API_KEY="$OPENFILL_API_KEY" # The price limit comes from the key or the# account default, set on Bidding.curl -s "$OPENAI_BASE_URL/models" \ -H "Authorization: Bearer $OPENAI_API_KEY"import { createOpenAICompatible } from "@ai-sdk/openai-compatible";import { generateText } from "ai"; const openfill = createOpenAICompatible({ name: "openfill", baseURL: "https://api.openfill.ai/v1", apiKey: process.env.OPENFILL_API_KEY, headers: { "X-Price-Limit": "0.10" },}); const { text } = await generateText({ model: openfill.chatModel("market-preview"), prompt: "hi",});console.log(text);import osfrom langchain_openai import ChatOpenAI llm = ChatOpenAI( model="market-preview", base_url="https://api.openfill.ai/v1", api_key=os.environ["OPENFILL_API_KEY"], default_headers={"X-Price-Limit": "0.10"},)print(llm.invoke("hi").content)import osfrom litellm import completion r = completion( model="openai/market-preview", api_base="https://api.openfill.ai/v1", api_key=os.environ["OPENFILL_API_KEY"], messages=[ {"role": "user", "content": "hi"} ], extra_headers={"X-Price-Limit": "0.10"},)print(r.choices[0].message.content)import osfrom openai import AsyncOpenAIfrom agents import ( Agent, Runner, set_default_openai_api, set_default_openai_client, set_tracing_disabled,) set_default_openai_client(AsyncOpenAI( base_url="https://api.openfill.ai/v1", api_key=os.environ["OPENFILL_API_KEY"], default_headers={"X-Price-Limit": "0.10"},))set_default_openai_api("chat_completions")set_tracing_disabled(True) agent = Agent(name="assistant", model="market-preview")print(Runner.run_sync(agent, "hi").final_output)Until the market opens, the same call runs today on any fixed-price model: put its id in place of market-preview.
An additional layer in the inference stack
Above the serving stack · under your code · any engine, any hardware
- RouterSends an admitted request to a servervLLM Routerllm-dDynamo RouterSGLang RouterATOM Mesh
- Inference engineRuns the model: prefill, then decodevLLMSGLangTensorRT-LLMATOM
- KV cacheKeeps prompt state close to the acceleratorLMCacheMooncake StoreSGLang HiCachevLLM OffloadingDynamo KVBMMORI-UMBP
- Data movementMoves bytes between accelerators, host memory and storageNIXLMooncakeMORI-IOmemcpyCUDAHIP
- Accelerators and storageHBM on the accelerator, then DRAM, NVMe and remote storageNVIDIAAMDHuaweiCambriconHBMDRAMNVMeRemote FS