What Doubleword is, how the tiers differ, and how to make a first call
llms.txt, the GitHub org page, the skill repo, and the marketing homepage.llms.txt (my count). Most are indexed here by title and description only.| Tier | How you call it | Latency | List price vs realtime* | Best for |
|---|---|---|---|---|
| Realtime | Shared, rate-limited. Chat Completions, or Responses with service_tier: "priority"; background: true to submit and poll | Immediate | baseline | Testing, prototyping, prompt iteration. Model pages note "realtime availability is limited" |
| Async | service_tier: "flex" on Responses (or Chat Completions), or Autobatcher AsyncOpenAI | Minutes; target <1 min to first token, with stated exceptions | ≈25% lower (middle half of models: 24–25%) | Agents, background pipelines, production work that tolerates short delay |
| Batch | JSONL upload, or Autobatcher BatchOpenAI | Up to 24h (SLA) | ≈50% lower (≈33% below async) | Datasets, evals, bulk generation |
| Dedicated Realtime | Reserved capacity; contact sales (◷ index text) | Immediate | custom, per-token | Production realtime without shared rate limits |
*Computed from the models table: median of (1 − tier price ÷ realtime price) on output tokens across the 31 models that have a realtime price. Input tokens give the same medians. Intro page itself says only "Standard / Reduced / Lowest pricing".
Decision aid built for this deck from the intro, async and batch pages; the docs themselves do not publish one. Not every model exists in every tier: 5 of 36 have no realtime price.
base_url="https://api.doubleword.ai/v1" and api_key. Anthropic SDK: base_url="https://api.doubleword.ai" (no /v1) and auth_token=, not api_key=, because Doubleword reads Authorization: Bearer.DOUBLEWORD_API_KEY. Model ID: shown on each model page, not in the table (e.g. deepseek-ai/DeepSeek-V4-Flash).Realtime · Chat Completions
import os
from openai import OpenAI
c = OpenAI(
base_url="https://api.doubleword.ai/v1",
api_key=os.environ["DOUBLEWORD_API_KEY"])
r = c.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash",
messages=[{"role":"user",
"content":"Hello"}])
print(r.choices[0].message.content)Async · Responses + poll
from time import sleep
resp = c.responses.create(
model="deepseek-ai/DeepSeek-V4-Flash",
input="Explain relativity.",
service_tier="flex",
background=True) # returns "queued"
while resp.status in ("queued",
"in_progress"):
sleep(2)
resp = c.responses.retrieve(resp.id)
print(resp.output_text)Async · Chat Completions, blocking
# from the Daytona integration page:
# flex on chat.completions blocks until
# done; background=True is a
# Responses-only feature.
r = c.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash",
service_tier="flex",
messages=[{"role":"user",
"content":"Hello"}])Async-polling shape is the docs' own example with the model swapped. The Chat Completions + flex shape is from the Daytona integration page; the async page itself documents flex only on Responses.
openai package for responses not stated.36 models · three tiers · input / cache read / output per 1M tokens
| Model (links to its page) | Realtime in / cache / out | Async in / cache / out | Batch in / cache / out | Cache vs input (async) | Reasoning table |
|---|
Prompt caching · reasoning effort · Anthropic compatibility · tools and more
cache_control: {"type":"ephemeral","ttl":"5m"|"1h"} to a content block or tool. Guaranteed reads, sliding TTL, up to 4 breakpoints, shared across an org's keys. Minimum prefix is model-specific (1,024 tokens on most).| Endpoint | Implicit | Explicit |
|---|---|---|
/v1/chat/completions | ✅ | ✅ markers + auto-placement |
/v1/messages | ✅ | ✅ markers + auto-placement |
/v1/responses | ✅ | auto-placement only |
/v1/completions | ✅ | no (single string) |
"messages": [{"role":"system","content":[{
"type":"text","text":"<~2,000 tokens>",
"cache_control":{"type":"ephemeral","ttl":"1h"}}]},
{"role":"user","content":"How do I reset my password?"}]
# check usage.cache_read_input_tokens and
# usage.prompt_tokens_details.cached_tokens
cache_pricing.enabled), but the pricing table shows a cache price for every model, including 7 where it equals the input price; one sentence has a typo ("it is does not require"). ✅ Notable: every integration page has its own caching section, and Google ADK and Pi say plainly that they cannot set the marker today.none, minimal, low, medium, high, xhigh, max (OpenAI-compatible). v5 showed three.reasoning_effort. Responses: reasoning.effort.thinking, thinking_token_budget or chat_template_kwargs./no_think to the latest user prompt; it is Qwen-specific, not an effort value.thinking config is mapped to reasoning effort (Anthropic page).curl https://api.doubleword.ai/v1/chat/completions \
-H "Authorization: Bearer $DOUBLEWORD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-V4-Flash",
"messages": [{"role":"user",
"content":"Solve this carefully."}],
"reasoning_effort": "medium",
"max_completion_tokens": 16384
}'
none. GPT OSS 20B: low/medium/high only. Not in the table: Kimi K3, Inkling, Hy3, MiMo, DeepSeek V4 Pro 0813 and 15 others.from anthropic import Anthropic
client = Anthropic(
base_url="https://api.doubleword.ai", # no /v1
auth_token=KEY) # NOT api_key=
m = client.messages.create(
model="deepseek-ai/DeepSeek-V4-Flash",
max_tokens=1024,
messages=[{"role":"user","content":"Hi"}],
extra_body={"service_tier":"flex"}) # optional
api_key= makes the SDK send x-api-key; Doubleword authenticates on Authorization: Bearer.
GET /v1/models in Anthropic shape (with anthropic-version), flex tier via service_tier: "flex" in extra_body, caching on /v1/messages./v1/messages/batches is not available. Use the OpenAI-format Batch API with "url": "/v1/messages" on every JSONL line and endpoint="/v1/messages"; results come back as Anthropic messages.auto / standard_only service tiers are accepted but do nothing.auth_token vs api_key trap is called out in a note.dottxt model variants (Qwen3.5 9B, 35B A3B, 397B A17B) exist; their purpose isn't explained on the pages I read.embeddings.create().dottxt adds. Both are worth reading the source pages for.Autobatcher · batch lifecycle · dw CLI · agent skills
# pip install autobatcher | npm install autobatcher
from autobatcher import AsyncOpenAI # or BatchOpenAI
client = AsyncOpenAI(
api_key=KEY,
base_url="https://api.doubleword.ai/v1")
r = await client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash",
messages=[{"role":"user","content":"Hi"}])
| Option | Default |
|---|---|
batch_size / batchSize | 1000 |
batch_window_seconds | 10 |
poll_interval_seconds | 5 |
chat.completions.create() and embeddings.create() only. No Responses API (v5 said otherwise); everything else passes through to the OpenAI client.completion_window option in the current table (v3/v4 had one).f = client.files.create(file=open("in.jsonl","rb"), purpose="batch")
b = client.batches.create(
input_file_id=f.id,
endpoint="/v1/chat/completions",
completion_window="24h",
metadata={"description": "daily eval job"})
# output_file_id and error_file_id exist immediately
r = requests.get(f".../v1/files/{b.output_file_id}/content",
headers=H)
if r.headers.get("X-Incomplete") == "true":
resume = r.headers["X-Last-Line"] # ?offset={resume}
X-Incomplete and X-Last-Line headers tell you where to resume with ?offset=. The page notes this differs from OpenAI.url is typically /v1/chat/completions; /v1/messages is also accepted (Anthropic page).$INPUT_FILE_ID inside single quotes, so it is invalid JSON as written; file and output IDs differ between snippets (a stray character); example model placeholder differs from other pages. Missing: batch-sizing guidance, retry and error-file handling./dw-cli: introduction, installation, authentication, quickstart, batches, streaming, real-time, JSONL format, local file tools, projects, examples, command reference, accounts, API keys & webhooks, usage & analytics, global flags./inference-api/dw-cli and on GitHub Pages: three places.dw whoami may fail because API keys lack admin API access. The skill probes with a tiny realtime call instead.dw whoami # browser login only
dw models list # needs full platform login
dw realtime "$MODEL" "Reply with OK." \
--temperature 0 --max-tokens 2 --no-stream
pip install dw-cli from the March crawl; use the Installation page instead.GET /batches?include=analytics and GET /batches/{id}/analytics were undocumented and needed direct httpx calls. The CLI now has a "Usage & Analytics" page I did not read; ? unverified whether it covers them.| Source (read 5 Oct) | Repo | Agents named | Contents | Update command |
|---|---|---|---|---|
| Docs page, live fetch | doublewordai/doubleword-skill | Claude Code only | SKILL.md + examples.py | npx skills update doubleword-skill |
| GitHub README (MIT, 5★, 17 commits) | doublewordai/doubleword-skill | Claude Code, Cursor, Codex, Hermes, OpenClaw | SKILL.md + references/ (CLI recipes, models & pricing); needs the dw CLI | npx skills update doubleword |
| Search-indexed copy of the same docs URL | doublewordai/batch-skill | Claude Code, Cursor, Windsurf, Codex | "12 models", dw CLI, three modes | npx skills update doubleword |
| Older staging copy | doublewordai/batch-skill | Claude Code, Cursor, Windsurf, Codex | batch API + autobatcher | npx skills update doubleword-batch |
doubleword-skill. It is the repo the live docs and GitHub both point to. v3–v5 of this deck cited batch-skill; I did not confirm whether that name still redirects.anthropic/claude-3-5-sonnet in examples, which isn't a Doubleword model. ◷ Community skills from the March crawl (NnamdiOdozi/dw_batch_skill, OpenClaw v1/v2, Termo.ai) were not re-checked.dw CLI and needs DOUBLEWORD_API_KEY; README says both.Framework guides, most with their own prompt-caching section
CrewAI · LangChain / LangGraph · LlamaIndex · PydanticAI · OpenAI Agents SDK · Microsoft Agent Framework · Google ADK · Agno · smolagents · atomic-agents · Mastra · Vercel AI SDK · Rig (Rust)
OpenClaw · Opencode (GLM-5.2, 1M context) · Pi (community provider; toggle realtime/flex) · Warp · Daytona (code on flex, run in parallel sandboxes)
Arize AX · Arize Phoenix · Langsmith · Qdrant · BetterDB · mem0 · Supermemory · Experiential
before_llm_call hook; Mastra enables it with cache: {ttl} on the provider.13 tutorials (index lists them; descriptions from the site index)
| Workbook | What the index says |
|---|---|
| Async Agents | Agentic workloads on the async tier |
| Doubleword Agent Swarm newer | Self-designing swarm: orchestrator, bounded-context workers, adversarial verifiers, synthesizer; Open Responses API with the dw CLI |
| Agentic PR Review Bot newer | Self-hosted GitHub PR review bot on opencode and async inference; chat completions and Open Responses samples |
| Data Processing Pipelines | LLM steps inside ETL |
| Structured Data Extraction | Unstructured text to schema |
| Semantic Search Without Embeddings | Search at scale using LLMs directly instead of embedding models |
| Daily Research Paper Digest | Automated arXiv digest that "costs $1/year" via the Batch API |
| Image Summarization | Vision models in batch |
| Embeddings | Batch embeddings for search and RAG |
| Model Evals | Evaluation suites |
| Synthetic Data Generation · Dataset Compilation | Training-data creation and curation |
| Classifying Security Vulnerabilities | Model ensembles for vulnerability triage |
The Agent Swarm and PR Review Bot pages are described as new relative to v4; "newer" is my inference from their absence in March, not a dated claim.
Billing · organizations · webhooks · support
batch.completed / batch.failed events. ◷ The old signature-verification snippet is omitted here because it was not re-verified (it contained a likely hmac.new mistake).Control Layer · Inference Stack · GitHub · customers · research
/control-layer. The site's llms.txt lists 11 pages: overview, getting started, 7 how-tos (API, endpoints, users & groups, health monitoring, production, model pricing, payments), configuration reference, "how billing works". It is simply absent from the top nav (Inference API and CLI only).doublewordai/control-layer: Rust, Apache-2.0, 92★, updated 13 Aug 2026. Vendor claim: "450× less overhead than LiteLLM" (benchmark not re-run here).wget the repo's docker-compose.yml, docker compose up -d, open localhost:3001; needs PostgreSQL; image ghcr.io/doublewordai/control-layer:latest; OpenAI-compatible at /ai/v1. A Helm chart repo exists (control-layer-chart).SECRET_KEY (openssl rand -base64 32) and change default credentials before exposing it.doublewordai/inference-stack ("easiest & most performant way to run genAI infrastructure in your private environment"; Go templates, 10★).llms.txt, and a usage page returned 404 in my earlier session. So its docs are gone or moved; I could not confirm which.zerodp (zero-copy data parallel for MoE serving), inference-lab (an LLM inference simulator, not a request daemon as v3/v4 said).| Repo | What GitHub says | Lang · license · stars |
|---|---|---|
| control-layer | "World's fastest AI model gateway (450× less overhead than LiteLLM)"; updated 13 Aug 2026 | Rust · Apache-2.0 · 92 |
| autobatcher | Drop-in AsyncOpenAI replacement that transparently batches requests | Python · (license not shown) · 22 |
| doubleword-skill | Claude Code skill for the Doubleword Batch API | MIT · 5 |
| inference-stack | Run genAI infrastructure in your private environment | Go Template · 10 |
| zerodp | Zero-copy data parallelism for MoE serving via CUDA IPC | Python · 10 |
| inference-lab | High-performance LLM inference simulator | Rust · MIT · 6 |
| control-layer-chart | Helm chart for the Control Layer | Go Template · Apache-2.0 |
| outlet · outlet-postgres · doubleword-arize · forks (dynamo, kagent, uccl) | Axum request-capture middleware, Postgres plugin, Arize integration; forks of Dynamo, kagent, UCCL | various |
Only 10 of 68 repos are visible on the org's first page; the rest were not enumerated. The dw CLI repo and the use-cases / qlm repos listed in v5 were not confirmed and have been removed.
Detail · nPlan · OpenMed · Ken AI · Element Materials · UnaGo AI · Dataiku · NXL · University of Colorado Boulder. Featured in Sky News, Sifted, Forbes, Bloomberg, TechCrunch.
All case studies (Kelp, NXL, Ken AI, UnaGo AI, Dataiku) · Seen in the Wild
Multipliers are the vendor's headline claims. The older conceptual pages (why batch matters, batched endpoints, parallel primitives, ZeroDP) now sit in the docs Archive section: why batch · batched endpoints · parallel primitives · ZeroDP. The "Behind the Stack" episodes 4, 8, 9 cited in v4 are not in llms.txt.
Discrepancies · scorecard · what changed from v5 · what to re-check
| # | Sev | Where | What disagrees |
|---|---|---|---|
| D1 | high | Skill | Live docs page, GitHub README and the search-indexed copy of the same docs URL differ on repo name (doubleword-skill vs batch-skill), agents supported, file layout and update command. |
| D2 | high | Flex tier | Async page: starts within a minute, priced above batch. Anthropic page: "~1 hour SLA at batch pricing". Intro: flex works on Responses or Chat Completions; async page shows only Responses. |
| D3 | med | Docs nav | Sidebar differs between pages (three deploy builds seen): "Dedicated Realtime" missing on some, 24 vs 26 integrations, different model lists. |
| D4 | med | Control Layer / Inference Stack | Control Layer hidden from nav yet indexed (11 pages), linked from GitHub and marketing, and referenced by 8 integration descriptions. Inference Stack marketed but absent from the docs index. |
| D5 | med | Marketing → docs | Homepage "Docs" links go to docs.doubleword.ai/batches (older path pattern); /batches/skill is still indexed. |
| D6 | med | Staging site | docs-stag.doubleword.ai is indexed by search engines and serves older and newer variants of pages. |
| D7 | med | Catalog | Marketing "Popular Models" lists Qwen3.5 35B A3B (not in docs table); docs table has 5 models the marketing list lacks (3 dottxt variants, GPT OSS 120B, Gemma 4 26B). |
| D8 | med | Reasoning | Support table lists 19 of 36 models; Kimi K3 and 16 others absent, while the DeepSeek V4 Flash page shows its own efforts. |
| D9 | med | Pricing | Qwen3.5 9B dottxt: async/batch output price above realtime output price. |
| D10 | low | Caching | 7 models show cache-read = input price; unclear if caching unsupported or undiscounted. Support is flagged via catalog metadata not visible in the table. |
| D11 | low | Models page | Intro still says "Batch API is priced per model"; "—" unexplained; model IDs only on per-model pages. |
| D12 | low | Batch page | cURL body has unquoted $INPUT_FILE_ID (invalid JSON); IDs inconsistent across snippets. |
| D13 | low | Intro | No code; cost row qualitative ("Reduced", "Lowest"). |
| D14 | low | CLI docs | Three locations: /dw-cli, /inference-api/dw-cli, GitHub Pages. |
| D15 | low | Skill mirrors | Third-party mirrors serve stale copies; one uses anthropic/claude-3-5-sonnet in examples. |
docs.doubleword.ai/llms.txt indexes every page, each page has a .md twin and a "Copy Markdown" action. That is excellent for agent consumption, and it's only mentioned in the skill README, not the docs intro.| Area | Clarity | Examples | Prereqs | Basis |
|---|---|---|---|---|
| Intro / overview | B+ | C | B- | read in full |
| Async inference | A- | A | B | read in full |
| Batch inference | A | A- | A- | read in full |
| Models & pricing | A- | B- | B+ | read in full |
| Prompt caching | A | A | A- | read in full |
| Reasoning effort | A- | B | B+ | read in full |
| Anthropic compatibility | A | A- | A | read in full |
| Autobatcher | A | B+ | A- | read in full |
| Skill (docs + README) | C+ | B | C | read in full |
| Integrations | A- | A | B+ | 7 via snippets |
| Navigation & cross-site consistency | C | — | — | observed |
| Agent-readiness (llms.txt, .md) | A | — | — | read llms.txt |
| Control Layer, CLI, webhooks, orgs, data sources, dedicated realtime | not re-graded | ◷ March scores stale | ||
Grades are my judgment on clarity of what the page does, presence of runnable examples, and whether prerequisites are stated. They are opinions, not measurements.
| v5 claim | Status | Evidence / fix |
|---|---|---|
| Control Layer and Inference Stack "removed from docs" | ↻ corrected | Control Layer: 11 pages in llms.txt. Inference Stack: not in index (docs location unconfirmed) |
| Async "up to 50% off", batch "up to 75% off" | ↻ removed | Computed from table: ≈25% and ≈50% below realtime |
| Pricing table (several rows from memory) | ↻ rebuilt | All 36 rows copied from the Models page |
| "$30K / $15.8K / $2.1K", "20M free tokens", "miss the SLA, job is free" | ? dropped | Not on any Oct 2026 page read; homepage now cites $5.8K vs $24K |
reasoning_effort low/medium/high; Inkling and Kimi K3 supported | ↻ corrected | Seven levels; Inkling and Kimi K3 are not in the support table |
| Caching "works with Chat Completions" | ↻ corrected | Implicit + explicit; four endpoints; write multipliers; 4 breakpoints |
| Anthropic compat "supports tool use" | ↻ corrected | Not stated on the page; auth_token, no native batch endpoint added |
Skill repo batch-skill; works in Cursor, Windsurf, Codex | ↻ corrected | doubleword-skill; docs say Claude Code only, README lists five agents |
Autobatcher: Python only, supports Responses, completion_window | ↻ corrected | Python + TypeScript; chat + embeddings only; option removed |
Batch completion_window "1h or 24h" | ↻ corrected | Page: "set the completion window to 24h" |
inference-lab = batched request daemon; dw, qlm, use-cases repos | ↻ corrected | inference-lab is a simulator; the other three repos not confirmed, removed |
| Reasoning example used Inkling model ID | ↻ corrected | Inkling ID was a guess; examples now use a verified ID |
| "Built from 80+ pages" | ↻ removed | 14 read in full, ~12 via snippets, ~140 indexed |
| 36 models, 26 integrations, 13 workbooks | ✔ held up | Counted from the Models table, sidebar and llms.txt |
| Prompt caching, reasoning, Anthropic, S3 data sources "exist" | ✔ held up | Pages found and read (S3 page index-only) |
| Analytics endpoints undocumented | ? unverified | CLI has a "Usage & Analytics" page not yet read |
batch-skill still redirects to doubleword-skilldocs.doubleword.ai/llms.txt for the page list; most pages have a .md twin.Links checked against the live sidebar and llms.txt
Console · Models & pricing
Intro · Dedicated Realtime
Realtime · Async · Batch
Prompt caching · Reasoning effort
Tool calling · Anthropic API
Data Sources · API reference
JSONL files · API keys
Webhooks · Support
Autobatcher · CLI docs · Skill
Workbooks index · Agent Swarm · PR Review Bot
Integrations (26)
Account & billing · Organizations
Control Layer (docs): overview · getting started · production · config
Archive: why batch · parallel primitives
Homepage · Pricing · Savings calculator
Case studies · Seen in the Wild
Technical blog · AI dictionary
Trust Center · Pipeline builder
GitHub org · doubleword-skill · autobatcher · control-layer
For agents: docs llms.txt · site llms.txt · add .md to any docs URL
llms.txt; marketing links come from the homepage footer