Two id families, a 23x price gap: choosing a coding model on Cloudflare
Every coding-relevant model Cloudflare will run, with the id, context window and per-million price read from the live catalogue on 2026-07-26, the failures that decide the choice, and six models measured on one prompt with a 19x price spread for a byte-identical answer.
Two model ids look almost the same and are not the same product.
@cf/moonshotai/kimi-k2.7-code runs on Cloudflare's GPUs: published per-token price, listed in the account's model catalogue over the API, billed as Workers AI against the same Neuron allowance as an image classifier.
moonshotai/kimi-k3 runs on Moonshot's GPUs and Cloudflare resells it: no per-token price published anywhere in the documentation, absent from the account catalogue, billed through Unified Billing against prepaid credits.
The prefix is the whole difference. Get it wrong and the request either costs twenty times what was budgeted or returns a 402.
Evidence status
Observed marks first-party measurements or runtime receipts from the named environment. Derived marks arithmetic calculated from cited inputs. Specified marks vendor or standards documentation. Implemented and deployed name code and live-state evidence, respectively. Reproduced means the stated procedure was rerun. Externally attested marks operator reports; those reports show that an experience occurred, not that it is universal.
The prefix decides the bill, the discovery path and the request shape
Workers AI, Neurons, $0.011 per 1,000 Neurons, 10,000 Neurons free per day
Unified Billing, prepaid credits, 5% fee on credit purchase, provider rates passed through
Per-token price published?
Yes, on the pricing page and in the models API
No — the model page links to the dashboard
Listed by GET /ai/models/search?
Yes
No
Needs an authenticated gateway?
No
Yes — an unauthenticated gateway answers 402
Free daily allowance applies?
Yes
No
Anthropic Messages endpoint
Refused by name
Sometimes accepted, shape not guaranteed
Cloudflare states the split in one sentence: "Workers AI models (models prefixed with @cf/) routed through AI Gateway are not charged via Unified Billing." The credit mechanics, the 5% purchase fee and the authentication requirement are covered in Cloudflare Unified Billing.
Every coding-relevant model Cloudflare hosts, priced from the account catalogue
The list below is the account's own catalogue, not the documentation. Fetch it:
Read on 2026-07-26: 61 models in the catalogue, 26 of them Text Generation, and 13 in the whole catalogue advertise function calling. Prices below are the price property returned by that same call, in US dollars per million tokens.
Model id
Context
Tools
Vision
Input
Cached input
Output
What it is for
@cf/moonshotai/kimi-k2.7-code
262,144
yes
yes
$0.95
$0.19
$4.00
Main agent thread. The only hosted model with a large window and image input together.
@cf/moonshotai/kimi-k2.6
262,144
yes
yes
$0.95
$0.16
$4.00
Previous Kimi. Same price, cheaper cache, no reason to pick it for new work.
@cf/zai-org/glm-5.2
262,144
yes
no
$1.40
$0.26
$4.40
Second opinion from a different family. Most expensive hosted option.
@cf/zai-org/glm-4.7-flash
131,072
yes
no
$0.0605
none
$0.40
Background turns: titles, summaries, classification. 23x cheaper input than GLM-5.2.
@cf/nvidia/nemotron-3-120b-a12b
256,000
yes
no
$0.50
none
$1.50
Long context where output volume, not reasoning depth, dominates the bill.
@cf/openai/gpt-oss-120b
128,000
yes
no
$0.35
none
$0.75
Cheap tool calls, open licence. Window too small for a loaded agent.
@cf/openai/gpt-oss-20b
128,000
yes
no
$0.20
none
$0.30
Cheapest tool-caller with a six-figure window.
@cf/google/gemma-4-26b-a4b-it
256,000
yes
no
$0.10
none
$0.30
Large window, low price, no coding track record.
@cf/qwen/qwen3-30b-a3b-fp8
32,768
yes
no
$0.0509
none
$0.335
Cheapest tool-caller here. The window is the problem.
@cf/qwen/qwen2.5-coder-32b-instruct
32,768
no
no
$0.66
none
$1.00
Completion, not agency. Cannot call tools.
@cf/deepseek-ai/deepseek-r1-distill-qwen-32b
80,000
no
no
$0.497
none
$4.881
Cannot call tools, and the highest output price here.
Two rows are traps. qwen2.5-coder-32b-instruct carries "coder" in the name and cannot call tools, so no agent can drive it. The DeepSeek distill is the same, at nine times the output price of GPT-OSS-120B. Cloudflare's function calling page describes the capability; the catalogue is the only place that says which models have it.
The catalogue models publish no price — the only way to learn it is to run one and read the log
moonshotai/kimi-k3, xai/grok-4.5 and minimax/m3 each have a documentation page. Each page has a Pricing row. Each Pricing row says the same thing: "View pricing in the Cloudflare dashboard".
The figures below are measured, not published: one identical request per model through the account's AI Gateway on 2026-07-26, cost read back from the gateway log rows.
Model id
Context (docs)
Request formats (docs)
Published rate
Measured cost, this turn
Tokens in / out
Blended $/M
moonshotai/kimi-k3
1,048,576
Chat Completions
none
$0.002283
126 / 127
$9.02
xai/grok-4.5
500,000
Chat Completions
none
$0.0010764
248 / 37
$3.78
minimax/m3
1,000,000
Chat Completions, Anthropic Messages
none
$0.00011934
217 / 68
$0.42
A single observation cannot separate an input rate from an output rate — two unknowns, one equation. It does establish the order of magnitude: Kimi K3 costs roughly twenty times per token what MiniMax M3 costs for the same answer. Separating the two rates needs a second request with a deliberately different input-to-output ratio, then solving the pair.
Three Cloudflare surfaces disagree about what GLM-4.7 Flash costs
Workers AI bills in Neurons and projects them into dollars. The projection is where the surfaces drift apart.
Surface
GLM-4.7 Flash, per M input tokens
Pricing page, "Price in Tokens" column
$0.060
Pricing page, "Price in Neurons" column
5,500 neurons, which at $0.011 per 1,000 Neurons is $0.0605
Models API price property
$0.0605
AI Gateway log cost field
behaves as $0.060
The check that settles it: a direct Workers AI call returns a neurons figure in its usage block. An 18-input, 24-output turn returned "neurons": 0.9726, and 18 x 5,500/1e6 + 24 x 36,400/1e6 = 0.9726 exactly. Neurons are the real unit; the dollar columns are rounded projections. Meanwhile the gateway's cost field for a 46-input, 587-output turn came back as $0.00023756, which is 46 x $0.060 + 587 x $0.40 exactly, not 46 x $0.0605 + 587 x $0.40 = $0.000237583.
The gap is $0.000000023 on that turn. It matters because it means the log's dollar column is not authoritative to the last digit, which is worth knowing before building a chargeback report on it.
The background slot is where a coding agent's money actually goes
A coding agent runs two model slots. The main slot answers the user. A second, smaller slot runs constantly and invisibly: naming the session, summarising the conversation when the window fills, classifying whether a command is safe. In Claude Code that slot is the environment variable ANTHROPIC_DEFAULT_HAIKU_MODEL. It fires whether or not anyone is watching, which is what makes a 23x input price difference compound.
Two turn shapes, priced through each model's published rate:
Turn shape
GLM-4.7 Flash
Kimi K2.7 Code
GLM-5.2
Measured short turn, 46 in / 587 out
$0.000238
$0.002392
$0.002647
Conversation summary, 20,000 in / 500 out
$0.00141
$0.02100
$0.03020
2,000 summary turns in a month
$2.82
$42.00
$60.40
The middle row written out: 20,000 x $0.0605/1,000,000 = $0.00121 input plus 500 x $0.40/1,000,000 = $0.0002 output, giving $0.00141. For GLM-5.2: 20,000 x $1.40/1,000,000 = $0.028 plus 500 x $4.40/1,000,000 = $0.0022, giving $0.0302. The 2,000-turn count is a stated assumption; the per-turn figures are not.
$57.58 a month, on turns no one reads. Point the background slot at @cf/zai-org/glm-4.7-flash and the main slot at whatever is worth paying for.
How to call one
Both surfaces take a Cloudflare API token with Workers AI: Read and Workers AI: Run. Setting up the gateway itself: How to create a Cloudflare AI Gateway.
Workers AI, OpenAI-compatible. This is the shape almost every client expects.
bash
1
2
3
4
5
6
curl -s -X POST \
"https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/ai/v1/chat/completions" \
-H "Authorization: Bearer <TOKEN>" \
-H "content-type: application/json" \
-d '{"model":"@cf/zai-org/glm-4.7-flash","max_tokens":24,
"messages":[{"role":"user","content":"What is 2+2? Answer with the number only."}]}'
Line 6, Column 1Shell Script
The real response, 2026-07-26, trimmed to the fields that matter:
json
1
2
3
4
5
{"model":"@cf/zai-org/glm-4.7-flash",
"choices":[{"message":{"role":"assistant","content":null,
"reasoning_content":"1. **Analyze the user's request:** The user is asking for the sum of 2 and 2"},
"finish_reason":"length"}],
"usage":{"prompt_tokens":18,"completion_tokens":24,"total_tokens":42,"neurons":0.9726}}
Line 5, Column 1JSON
content is null. That is not an error condition — see below.
To log, cache and rate-limit the call, add one header to the same request: -H "cf-aig-gateway-id: <GATEWAY_ID>". Catalogue models use the identical path and body with the unprefixed id, for example "model":"minimax/m3".
The Anthropic endpoint refuses every @cf/ model by name
Cloudflare exposes POST /ai/v1/messages. Sending a Workers AI model to it returns, verbatim:
json
1
2
{"type":"error","error":{"type":"invalid_request_error",
"message":"AiError: Anthropic Messages API is not supported for model \"@cf/moonshotai/kimi-k2.7-code\""}}
Line 2, Column 1JSON
Catalogue models are accepted there, and the shape is not what the endpoint name promises. The documentation for minimax/m3 lists its request formats as "Chat Completions, Anthropic Messages". Sent to /ai/v1/messages on 2026-07-26 it answered:
json
1
2
3
4
{"id":"06b4c281ce76f4c5405e21e09af57dfa","model":"MiniMax-M3","object":"chat.completion",
"choices":[{"message":{"role":"assistant","content":"",
"reasoning_content":"The user simply said \"say OK\"..."},"finish_reason":"length"}],
"usage":{"total_tokens":210,"prompt_tokens":178,"completion_tokens":32}}
Line 4, Column 1JSON
"object":"chat.completion" and a choices array: an OpenAI body from an Anthropic-named endpoint. A client that parses content as an array of blocks throws on it. So a tool speaking only POST /v1/messages cannot reach any Workers AI model without a translator, and cannot trust the catalogue models' envelope either. That translator, with its source, is in Claude Code on Kimi, GLM or Grok through your own Cloudflare account.
What breaks
Reasoning models spend the output budget thinking and hand back nothing. Kimi and GLM both emit a reasoning trace before the answer, charged as output and counted against max_tokens. The call above, capped at 24, returned finish_reason: "length", content: null, and a bill for 24 output tokens. The same prompt at max_tokens: 1024 returned "4" after 78 output tokens. A client reading only content sees an empty turn; one falling back to reasoning_content presents the scratchpad as the answer. Give the cap headroom.
Constrained decoding turns that into a total failure. Cloudflare's JSON Mode accepts a response_format carrying a JSON Schema and forces the output to match it — which forbids the <think> preamble a reasoning model emits first. On the Workers AI binding, debuggingfuture root-caused an every-call failure to exactly this: "glm-4.7-flash answers correctly in the Cloudflare playground but failed every pr-review with StructuredOutputInvalid: empty." GLM-5.2 failed identically, which proved the decode path was at fault rather than the model, and led him to retract his own earlier "GLM is out" verdict.
Rerun on the REST path on 2026-07-26, the failure is a budget failure and it is escapable. @cf/zai-org/glm-4.7-flash with a two-field json_schema at max_tokens: 256 returned content: null and 256 output tokens of reasoning. The identical request at max_tokens: 2048 returned {"score": 6, "why": "This code is syntactically correct and does exactly what it is supposed to do. However, it lacks context, documentation, and best practices."} after 760 output tokens, 2,634 characters of which were discarded reasoning. Binding path and REST path do not behave the same way; the rule that covers both is to budget three to ten times the tokens the answer needs, or not to send guided JSON to a reasoning model at all.
Corrupted output at real prompt sizes, on real traffic only. Tenstorrent's serving stack produced garbage from Kimi K2.7 Code under an eight-thousand-token structured coding prompt: "People chatting on the console were seeing corrupted outputs. We did not observe something like this during the weekend nor with release workflow with limited samples." Short smoke tests do not test this model.
Mid-stream failure on long agentic runs. Faith-2002, on opencode 1.18.5, hitting Kimi K2.7 Code through a third-party host: {"type":"error","sequence_number":1584,"code":"InternalServiceError","message":"The service encountered an unexpected internal error.","param":""} — consistently, on complex tasks, 1,584 stream events in. Cheap tokens and reliable long runs are not the same purchase.
Vision works or not depending on which client sends the image. vilicvane found Kimi K2.7 Code reading images fine through one VS Code integration and rejecting them through another: "The original VSCode built-in Ollama seem to work vision of with Kimi K2.7 Code. However, when use with models provided by this extension, Kimi complains corrupted images." The catalogue's vision: true property is accurate; the payload shape the client builds decides whether it works.
Announced availability is not granted entitlement. aregtech cited GitHub's changelog announcing Kimi K2.7 for Copilot Pro, then screenshotted the CLI listing it: "The GitHub policy says that Kimi Code 2.7 (model kimi-k2.7-code) is available for Pro subscription. - In fact, it is listed in the Blocked / Disabled list." Check the catalogue call, not the announcement.
OpenAI-compatible means Chat Completions, not everything OpenAI ships. mrnoname set out to spend a Cloudflare Startups credit on Workers AI through Codex CLI: "Workers AI has an OpenAI-compatible API so I expected it to just work with Codex. Nope. The Responses API surface doesn't map". He wrote a proxy.
Quality, honestly: one benchmark, one retraction, one zero
The most useful published comparison of Kimi K2.7 Code against Qwen coding models is useful mainly because its author threw his first version away. Amit Arora had published a five-model, six-task results matrix, then removed it: "The README's results section published a 5x6 matrix (Opus, Kimi, Devstral, MiniMax, Qwen Coder Next, Qwen 3.6 35B) whose per-model numbers are not reproducible from artifacts in this repo -- no eval.json files exist on disk for those models, and the figures differ materially from what the current judge produces. Publish only what we have actually measured."
What replaced it, scored by one judge (codex exec, gpt-5.6-sol, high effort), every model self-hosted on vLLM:
Task
Kimi-K2.7-Code
Qwen3.6-35B
Qwen3-Coder-30B
---
--:
--:
--:
remove-faiss
75.25
59.25
49.0
remove-efs
71.25
63.0
45.0
ssrf
72.75
55.75
0.0
migrate-secrets
75.5
54.5
43.5
keycloak-rds-iam
0.0
48.75
33.25
Mean of 5
58.95
56.25
34.15
The zero is the honest part. Kimi scored 0.0 on keycloak-rds-iam, a task Qwen3.6-35B leads, classified as a real failure rather than judging noise: it "hit the 60-turn cap with 2/4 artifacts". Qwen3-Coder-30B's zero on ssrf is the mirror image — it "spent every turn implementing instead of designing".
Two readings follow and they pull opposite ways. On the four tasks Kimi completed it is clearly ahead, a 73.69 mean. Across all five the margin is 58.95 to 56.25, which one blown task erases. A frontier-scale model that occasionally burns its whole turn budget and delivers half the artifacts is not strictly better than a small one that finishes.
The hardware asymmetry is stated too: "Hardware: Kimi-K2.7-Code (1.06T-param MoE) ran on 8x H200 (p5en.48xlarge); the three Qwen models (3B-active MoE) on a single g6e.12xlarge (4x L40S). All via vLLM." That is a comparison of weights, not of Cloudflare's serving of them.
On the other family the evidence is one operator changing his mind. December 2025, andai on GLM behind a coding CLI: "I had been using GLM in Claude code with Claude code router, because while you can just change the API endpoint, the web search function doesn't work, and neither does image recognition." He went back to first-party. June 2026, same person: "But it just works with Claude Code? They have a guide on their website." Between them prmph filed the other side: "For some reason I can't even get Claude Code (Running GLM 4.6) to do the simplest of tasks today without feeling like I want to tear my hair out, whereas it used to be pretty good before." Three reports, two verdicts, one direction of travel — and all three were true when written.
The verdict. Kimi K2.7 Code on the main thread: the only Cloudflare-hosted model with a 262,144-token window, tool calling and image input at once, leader in the only reproducible published comparison, 32% cheaper on input than GLM-5.2. GLM-4.7 Flash on the background slot. GLM-5.2 for the second opinion, not the first draft.
What would change it. A reproducible benchmark where Kimi's zero repeats on a second long-horizon task; a published moonshotai/kimi-k3 rate under $2/M blended, which would make a 1M-token window affordable for the main thread; or a cached-input rate on GLM-4.7 Flash, which would make it viable for turns that repeat a large prefix.
First-party measurement: the same coding prompt through six models
Method. One POST /v1/messages per model against the account's own Anthropic-shaped gateway route, max_tokens: 1024, no tools, no system prompt, single user message, sequential, one attempt each. Latency measured client-side around the fetch. Token counts from the response usage block. Cost read afterwards from the AI Gateway log rows for the same six requests, matched by timestamp and by the model_asked value in the request metadata. Run at 04:35:23–04:35:44 UTC on 2026-07-26.
The prompt, in full:
text
1
2
3
Write a Python function chunk(xs, n) that splits list xs into consecutive chunks
of length n, with a shorter final chunk if the list does not divide evenly.
Return only the code, no explanation.
Line 3, Column 1Plain Text
Requested alias
Resolved id
Latency
In
Out
Cached in
Gateway cost
---
---
--:
--:
--:
--:
--:
claude-kimi-k2.7-code
@cf/moonshotai/kimi-k2.7-code
2,745 ms
49
185
0
$0.00078655
claude-glm-5.2
@cf/zai-org/glm-5.2
2,454 ms
53
135
0
$0.0006682
claude-glm-flash
@cf/zai-org/glm-4.7-flash
7,571 ms
46
587
0
$0.00023756
claude-kimi-k3
moonshotai/kimi-k3
6,663 ms
126
127
0
$0.002283
claude-grok-4.5
xai/grok-4.5
2,271 ms
248
37
128
$0.0010764
claude-minimax-m3
minimax/m3
1,809 ms
217
68
114
$0.00011934
Every one of the six returned the same function. Four wrote xs[i:i+n] and two wrote xs[i:i + n]:
python
1
2
def chunk(xs, n):
return [xs[i:i+n] for i in range(0, len(xs), n)]
Line 2, Column 1Python
What it shows. On a task with one obvious idiomatic answer, model choice changes nothing about the answer and a great deal about the cost. MiniMax M3 at $0.00011934 was 19 times cheaper than Kimi K3 at $0.002283 for a byte-identical result. The slowest turn came from the cheapest hosted model, GLM-4.7 Flash at 7,571 ms, because it spent 587 output tokens reasoning about a two-line function — 4.5 times the output of any other model here.
What it does not show. Nothing about multi-turn agentic work, tool calling, long contexts, or instruction adherence under pressure. One sample per model, one prompt, no repeats, so the latency figures carry no error bars and include whatever queueing each backend had that second. It is a floor check.
Reconciliation. The three Workers AI rows multiply out exactly against the published rates: 49 x $0.95 + 185 x $4.00 over a million is $0.00078655, the logged figure to the last digit; 53 x $1.40 + 135 x $4.40 is $0.0006682, likewise. A previously recorded row on this same account does not reconcile: a 149,187-input-token Kimi K2.7 Code turn billed $0.02852109, implying $0.191 per million — the cached rate, on a turn reporting 64 cached tokens. Published as unreconciled. The arithmetic holds at three-digit token counts and fails at six-digit ones, and the difference has not been explained.
Choosing table
Task
Pick
Why
Main agent thread, tools, large repo
@cf/moonshotai/kimi-k2.7-code
262,144 window, tools, vision, $0.19/M cached input, leader in the one reproducible comparison.
Session titles, summaries, safety classification
@cf/zai-org/glm-4.7-flash
$0.0605/M input against $1.40 for GLM-5.2. Same job, 23x less.
Second opinion on a design, different family
@cf/zai-org/glm-5.2
Independent weights. 47% more input, 10% more output.
Reading a screenshot or a diagram
@cf/moonshotai/kimi-k2.7-code
The only @cf/ coding model with vision: true.
Context over 262,144 tokens
moonshotai/kimi-k3 or minimax/m3
1,048,576 and 1,000,000 tokens, both catalogue-billed and unpriced in the docs.
Cheapest possible tool call, small window fine
@cf/openai/gpt-oss-20b
$0.20/M in, $0.30/M out, 128,000 window, tools yes.
Bulk structured extraction with a JSON schema
@cf/openai/gpt-oss-120b
Guided JSON on a reasoning model burns the output budget. Budget generously.
Plain code completion, no agency
@cf/qwen/qwen2.5-coder-32b-instruct
Cheaper per output token than Kimi. Cannot drive a loop.
Symptom, cause, fix
Symptom
Cause
Fix
"content": null, finish_reason: "length", tokens still billed
Reasoning trace consumed the whole max_tokens budget
Raise max_tokens. 1,024 is the floor for a one-line GLM-4.7 Flash answer.
StructuredOutputInvalid: empty on every guided-JSON call
response_format schema forbids the <think> preamble the model emits first
Drop response_format and parse JSON yourself, or give 3–10x the tokens the object needs.
AiError: Anthropic Messages API is not supported for model "@cf/..."
Workers AI models are excluded from /ai/v1/messages
Use /ai/v1/chat/completions, or put a translator in front.
Response has "object":"chat.completion" from /ai/v1/messages
A catalogue model returned its native OpenAI body through the Anthropic-named path
Detect the envelope shape at runtime; do not trust the endpoint name.
HTTP 402, "Gateway authentication is required to use unified billing"
A catalogue model routed through an unauthenticated gateway
{"code":"InternalServiceError"} mid-stream on a long run
Hosted-path instability on extended agentic sessions
Retry with backoff, resume from the last completed tool result. The stream is not atomic.
Garbled tokens in the answer at large prompt sizes
Serving-stack corruption that short samples do not surface
Test at the prompt size actually used.
"corrupted images" from a vision-capable model
Client built the image part in a shape the backend does not accept
Send OpenAI image_url parts on /ai/v1/chat/completions. Verify with a tiny known PNG.
Model is announced but the CLI lists it blocked
Announcement and entitlement are separate systems
Call /ai/models/search and treat its output as the truth.
The id 404s or silently resolves to another model
The public model name is not the Cloudflare id
Copy the id from the catalogue call. @cf/moonshotai/kimi-k2.5 exists but is Deprecated.
Codex CLI or any Responses-API client cannot connect
Workers AI implements Chat Completions, not the Responses API
Use a Chat Completions client, or a translating proxy.
Cost report does not tie out to the published rate
The gateway cost field rounds, and large-context rows have not reconciled
Reconcile on token counts from usage, not the dollar column.
Rerun any of it
The alias-to-id mapping used in the six-model run is the CATALOGUE table in the gateway translator source. Every price and capability above comes from one call; every cost from another.
bash
1
2
3
4
5
6
7
8
# The catalogue: prices, context windows, function_calling, visioncurl -s -H "Authorization: Bearer <TOKEN>" \
"https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/ai/models/search?per_page=500" | jq .
# What a turn actually cost, from the gateway log (needs AI Gateway: Read, not Workers AI)curl -s -H "Authorization: Bearer <TOKEN>" \
"https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/ai-gateway/gateways/<GATEWAY_ID>/logs?per_page=10&order_by=created_at&order_by_direction=desc" \
| jq -r '.result[] | [.model, .tokens_in, .tokens_out, .cost] | @tsv'
Line 8, Column 1Shell Script
23x
GLM-4.7 Flash input price against GLM-5.2, on the slot that fires every turn
13
models in the whole account catalogue that can call tools, read 2026-07-26
19x
price spread across six models that returned a byte-identical answer
glm-4.7-flash answers correctly in the Cloudflare playground but failed **every** pr-review with `StructuredOutputInvalid: empty`.— debuggingfuture, OpenHackersClub/flare-dispatch PR 213, 2026-06-27
The README's results section published a 5x6 matrix whose per-model numbers are not reproducible from artifacts in this repo -- no eval.json files exist on disk for those models. Publish only what we have actually measured.— Amit Arora, agentic-coding-harness-benchmarks PR 10, 2026-07-24
587
output tokens GLM-4.7 Flash spent reasoning about a two-line list comprehension
$57.58
monthly difference between the cheapest and dearest background model, 2,000 summary turns
References (26)
Workers AI pricing — Cloudflare, Jul 26, 2026“Workers AI is included in both the Free and Paid Workers plans and is priced at **$0.011 per 1,000 Neurons**.”
Unified Billing — Cloudflare, Jun 22, 2026“Workers AI models (models prefixed with `@cf/`) routed through AI Gateway are not charged via Unified Billing. These models are billed through Workers AI pricing instead. Unified Billing only applies to third-party provider models (such as OpenAI, Anthropic, and Google AI Studio).”
Cloudflare AI model catalog — Cloudflare, Jul 26, 2026“kimi-k3Moonshot AIText GenerationKimi K3 is Moonshot's flagship 2.8 trillion-parameter model... Third-party”
Kimi K3 (Moonshot AI) model page — Cloudflare, Jul 26, 2026“Context Window | 1,048,576 tokens ... Request formats | Chat Completions ... Pricing | View pricing in the Cloudflare dashboard”
MiniMax M3 model page — Cloudflare, Jul 26, 2026“Context Window | 1,000,000 tokens ... Request formats | Chat Completions, Anthropic Messages ... Pricing | View pricing in the Cloudflare dashboard”
Grok 4.5 (xAI) model page — Cloudflare, Jul 26, 2026“Context Window | 500,000 tokens ... Pricing | View pricing in the Cloudflare dashboard”
JSON Mode — Cloudflare, Apr 21, 2026“Workers AI supports JSON Mode, enabling applications to request a structured output response when interacting with AI models. JSON Mode is compatible with OpenAI's implementation; to enable add the `response_format` property to the request object”
Function calling — Cloudflare, Jul 26, 2026“In essence, function calling allows you to perform actions with LLMs by executing code or making additional API calls.”
AI Gateway REST API — Cloudflare, Jul 26, 2026“curl -X POST "https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions"”
[Kimi-K2.7-Code] Corrupted Outputs — GitHub, Jun 30, 2026“People chatting on the console were seeing corrupted outputs. We did not observe something like this during the weekend nor with release workflow with limited samples.”
Internal Service Error in kimi-k2.7-code — GitHub, Jul 25, 2026“When I use the kimi-k2.7-code provided by a third party, I get the following error in consistency complex tasks:{"type":"error","sequence_number":1584,"code":"InternalServiceError","message":"The service encountered an unexpected internal error.","param":""}”
Having some trouble with vision support for Kimi K2.7 Code — GitHub, Jul 6, 2026“The original VSCode built-in Ollama seem to work vision of with Kimi K2.7 Code. However, when use with models provided by this extension, Kimi complains corrupted images.”
Kimi K2.7 Code is not available in Pro subscription — GitHub, Jul 4, 2026“The GitHub policy says that Kimi Code 2.7 (model `kimi-k2.7-code`) is available for Pro subscription. - In fact, it is listed in the `Blocked / Disabled` list.”
Comment — Claude Code running GLM 4.6 can't do simple tasks — Hacker News, Nov 28, 2025“For some reason I can't even get Claude Code (Running GLM 4.6) to do the simplest of tasks today without feeling like I want to tear my hair out, whereas it used to be pretty good before.”
Account model catalogue read on 2026-07-26 — miscsubjects, Jul 26, 2026“61 models total; 26 Text Generation; 13 with function_calling=true. @cf/zai-org/glm-4.7-flash price: [{"unit":"per M input tokens","price":0.0605},{"unit":"per M output tokens","price":0.4}]”
Reasoning budget, guided JSON and the Anthropic-endpoint refusal — miscsubjects, Jul 26, 2026“{"type":"error","error":{"type":"invalid_request_error","message":"AiError: Anthropic Messages API is not supported for model \"@cf/moonshotai/kimi-k2.7-code\""}}”
{
"schema":"http://google-preview.miscsubjects.com/schemas/jarticle.json",
"status":"published",
"slug":"workers-ai-coding-models",
"title":"Two id families, a 23x price gap: choosing a coding model on Cloudflare",
"kind":"essay",
"summary":"Every coding-relevant model Cloudflare will run, with the id, context window and per-million price read from the live catalogue on 2026-07-26, the failures that decide the choice, and six models measured on one prompt with a 19x price spread for a byte-identical answer.",
"created":"2026-07-26T03:31:46.814Z",
"body": [
"Two model ids look almost the same and are not the same product.\n\n`@cf/moonshotai/kimi-k2.7-code` runs on Cloudflare's GPUs: published per-token price, listed in the account's model catalogue over the API, billed as Workers AI against the same Neuron allowance as an image classifier.\n\n`moonshotai/kimi-k3` runs on Moonshot's GPUs and Cloudflare resells it: no per-token price published anywhere in the documentation, absent from the account catalogue, billed through Unified Billing against prepaid credits.\n\nThe prefix is the whole difference. Get it wrong and the request either costs twenty times what was budgeted or returns a 402.\n\n## Evidence status\n\n**Observed** marks first-party measurements or runtime receipts from the named environment.\n**Derived** marks arithmetic calculated from cited inputs. **Specified** marks vendor or standards\ndocumentation. **Implemented** and **deployed** name code and live-state evidence, respectively.\n**Reproduced** means the stated procedure was rerun. **Externally attested** marks operator reports;\nthose reports show that an experience occurred, not that it is universal.\n\n## The prefix decides the bill, the discovery path and the request shape\n\n| | Workers AI model | Catalogue (partner) model |\n| --- | --- | --- |\n| Id shape | `@cf/vendor/model` | `vendor/model` |\n| Examples | `@cf/moonshotai/kimi-k2.7-code`, `@cf/zai-org/glm-5.2`, `@cf/zai-org/glm-4.7-flash` | `moonshotai/kimi-k3`, `xai/grok-4.5`, `minimax/m3` |\n| Who runs the GPU | Cloudflare | The model vendor |\n| Billing | Workers AI, Neurons, $0.011 per 1,000 Neurons, 10,000 Neurons free per day | Unified Billing, prepaid credits, 5% fee on credit purchase, provider rates passed through |\n| Per-token price published? | Yes, on the pricing page and in the models API | No — the model page links to the dashboard |\n| Listed by `GET /ai/models/search`? | Yes | No |\n| Needs an authenticated gateway? | No | Yes — an unauthenticated gateway answers 402 |\n| Free daily allowance applies? | Yes | No |\n| Anthropic Messages endpoint | Refused by name | Sometimes accepted, shape not guaranteed |\n\nCloudflare states the split in one sentence: \"Workers AI models (models prefixed with `@cf/`) routed through AI Gateway are not charged via Unified Billing.\" The credit mechanics, the 5% purchase fee and the authentication requirement are covered in [Cloudflare Unified Billing](/a/cloudflare-unified-billing).\n\n## Every coding-relevant model Cloudflare hosts, priced from the account catalogue\n\nThe list below is the account's own catalogue, not the documentation. Fetch it:\n\n```bash\nACCOUNT_ID=<ACCOUNT_ID> # wrangler whoami\nCF_API_TOKEN=<TOKEN> # Workers AI: Read\n\ncurl -s -H \"Authorization: Bearer $CF_API_TOKEN\" \\\n \"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/ai/models/search?per_page=500\" \\\n | jq -r '.result[] | select(.task.name==\"Text Generation\") |\n [.name,\n (.properties[]|select(.property_id==\"context_window\").value),\n ((.properties[]|select(.property_id==\"function_calling\").value) // \"no\")]\n | @tsv'\n```\n\nRead on 2026-07-26: 61 models in the catalogue, 26 of them Text Generation, and **13 in the whole catalogue advertise function calling**. Prices below are the `price` property returned by that same call, in US dollars per million tokens.\n\n| Model id | Context | Tools | Vision | Input | Cached input | Output | What it is for |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| `@cf/moonshotai/kimi-k2.7-code` | 262,144 | yes | yes | $0.95 | $0.19 | $4.00 | Main agent thread. The only hosted model with a large window and image input together. |\n| `@cf/moonshotai/kimi-k2.6` | 262,144 | yes | yes | $0.95 | $0.16 | $4.00 | Previous Kimi. Same price, cheaper cache, no reason to pick it for new work. |\n| `@cf/zai-org/glm-5.2` | 262,144 | yes | no | $1.40 | $0.26 | $4.40 | Second opinion from a different family. Most expensive hosted option. |\n| `@cf/zai-org/glm-4.7-flash` | 131,072 | yes | no | $0.0605 | none | $0.40 | Background turns: titles, summaries, classification. 23x cheaper input than GLM-5.2. |\n| `@cf/nvidia/nemotron-3-120b-a12b` | 256,000 | yes | no | $0.50 | none | $1.50 | Long context where output volume, not reasoning depth, dominates the bill. |\n| `@cf/openai/gpt-oss-120b` | 128,000 | yes | no | $0.35 | none | $0.75 | Cheap tool calls, open licence. Window too small for a loaded agent. |\n| `@cf/openai/gpt-oss-20b` | 128,000 | yes | no | $0.20 | none | $0.30 | Cheapest tool-caller with a six-figure window. |\n| `@cf/google/gemma-4-26b-a4b-it` | 256,000 | yes | no | $0.10 | none | $0.30 | Large window, low price, no coding track record. |\n| `@cf/qwen/qwen3-30b-a3b-fp8` | 32,768 | yes | no | $0.0509 | none | $0.335 | Cheapest tool-caller here. The window is the problem. |\n| `@cf/qwen/qwen2.5-coder-32b-instruct` | 32,768 | **no** | no | $0.66 | none | $1.00 | Completion, not agency. Cannot call tools. |\n| `@cf/deepseek-ai/deepseek-r1-distill-qwen-32b` | 80,000 | **no** | no | $0.497 | none | $4.881 | Cannot call tools, and the highest output price here. |\n\nTwo rows are traps. `qwen2.5-coder-32b-instruct` carries \"coder\" in the name and cannot call tools, so no agent can drive it. The DeepSeek distill is the same, at nine times the output price of GPT-OSS-120B. Cloudflare's [function calling](https://developers.cloudflare.com/workers-ai/features/function-calling/) page describes the capability; the catalogue is the only place that says which models have it.\n\n## The catalogue models publish no price — the only way to learn it is to run one and read the log\n\n`moonshotai/kimi-k3`, `xai/grok-4.5` and `minimax/m3` each have a documentation page. Each page has a Pricing row. Each Pricing row says the same thing: \"View pricing in the Cloudflare dashboard\".\n\nThe figures below are measured, not published: one identical request per model through the account's AI Gateway on 2026-07-26, cost read back from the gateway log rows.\n\n| Model id | Context (docs) | Request formats (docs) | Published rate | Measured cost, this turn | Tokens in / out | Blended $/M |\n| --- | --- | --- | --- | --- | --- | --- |\n| `moonshotai/kimi-k3` | 1,048,576 | Chat Completions | none | $0.002283 | 126 / 127 | $9.02 |\n| `xai/grok-4.5` | 500,000 | Chat Completions | none | $0.0010764 | 248 / 37 | $3.78 |\n| `minimax/m3` | 1,000,000 | Chat Completions, Anthropic Messages | none | $0.00011934 | 217 / 68 | $0.42 |\n\nA single observation cannot separate an input rate from an output rate — two unknowns, one equation. It does establish the order of magnitude: Kimi K3 costs roughly twenty times per token what MiniMax M3 costs for the same answer. Separating the two rates needs a second request with a deliberately different input-to-output ratio, then solving the pair.\n\n## Three Cloudflare surfaces disagree about what GLM-4.7 Flash costs\n\nWorkers AI bills in Neurons and projects them into dollars. The projection is where the surfaces drift apart.\n\n| Surface | GLM-4.7 Flash, per M input tokens |\n| --- | --- |\n| Pricing page, \"Price in Tokens\" column | $0.060 |\n| Pricing page, \"Price in Neurons\" column | 5,500 neurons, which at $0.011 per 1,000 Neurons is $0.0605 |\n| Models API `price` property | $0.0605 |\n| AI Gateway log `cost` field | behaves as $0.060 |\n\nThe check that settles it: a direct Workers AI call returns a `neurons` figure in its usage block. An 18-input, 24-output turn returned `\"neurons\": 0.9726`, and 18 x 5,500/1e6 + 24 x 36,400/1e6 = 0.9726 exactly. Neurons are the real unit; the dollar columns are rounded projections. Meanwhile the gateway's `cost` field for a 46-input, 587-output turn came back as $0.00023756, which is 46 x $0.060 + 587 x $0.40 exactly, not 46 x $0.0605 + 587 x $0.40 = $0.000237583.\n\nThe gap is $0.000000023 on that turn. It matters because it means the log's dollar column is not authoritative to the last digit, which is worth knowing before building a chargeback report on it.\n\n## The background slot is where a coding agent's money actually goes\n\nA coding agent runs two model slots. The main slot answers the user. A second, smaller slot runs constantly and invisibly: naming the session, summarising the conversation when the window fills, classifying whether a command is safe. In Claude Code that slot is the environment variable `ANTHROPIC_DEFAULT_HAIKU_MODEL`. It fires whether or not anyone is watching, which is what makes a 23x input price difference compound.\n\nTwo turn shapes, priced through each model's published rate:\n\n| Turn shape | GLM-4.7 Flash | Kimi K2.7 Code | GLM-5.2 |\n| --- | --- | --- | --- |\n| Measured short turn, 46 in / 587 out | $0.000238 | $0.002392 | $0.002647 |\n| Conversation summary, 20,000 in / 500 out | $0.00141 | $0.02100 | $0.03020 |\n| 2,000 summary turns in a month | **$2.82** | **$42.00** | **$60.40** |\n\nThe middle row written out: 20,000 x $0.0605/1,000,000 = $0.00121 input plus 500 x $0.40/1,000,000 = $0.0002 output, giving $0.00141. For GLM-5.2: 20,000 x $1.40/1,000,000 = $0.028 plus 500 x $4.40/1,000,000 = $0.0022, giving $0.0302. The 2,000-turn count is a stated assumption; the per-turn figures are not.\n\n$57.58 a month, on turns no one reads. Point the background slot at `@cf/zai-org/glm-4.7-flash` and the main slot at whatever is worth paying for.\n\n## How to call one\n\nBoth surfaces take a Cloudflare API token with `Workers AI: Read` and `Workers AI: Run`. Setting up the gateway itself: [How to create a Cloudflare AI Gateway](/a/cloudflare-ai-gateway-setup).\n\n**Workers AI, OpenAI-compatible.** This is the shape almost every client expects.\n\n```bash\ncurl -s -X POST \\\n \"https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/ai/v1/chat/completions\" \\\n -H \"Authorization: Bearer <TOKEN>\" \\\n -H \"content-type: application/json\" \\\n -d '{\"model\":\"@cf/zai-org/glm-4.7-flash\",\"max_tokens\":24,\n \"messages\":[{\"role\":\"user\",\"content\":\"What is 2+2? Answer with the number only.\"}]}'\n```\n\nThe real response, 2026-07-26, trimmed to the fields that matter:\n\n```json\n{\"model\":\"@cf/zai-org/glm-4.7-flash\",\n \"choices\":[{\"message\":{\"role\":\"assistant\",\"content\":null,\n \"reasoning_content\":\"1. **Analyze the user's request:** The user is asking for the sum of 2 and 2\"},\n \"finish_reason\":\"length\"}],\n \"usage\":{\"prompt_tokens\":18,\"completion_tokens\":24,\"total_tokens\":42,\"neurons\":0.9726}}\n```\n\n`content` is `null`. That is not an error condition — see below.\n\nTo log, cache and rate-limit the call, add one header to the same request: `-H \"cf-aig-gateway-id: <GATEWAY_ID>\"`. Catalogue models use the identical path and body with the unprefixed id, for example `\"model\":\"minimax/m3\"`.\n\n## The Anthropic endpoint refuses every `@cf/` model by name\n\nCloudflare exposes `POST /ai/v1/messages`. Sending a Workers AI model to it returns, verbatim:\n\n```json\n{\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\n \"message\":\"AiError: Anthropic Messages API is not supported for model \\\"@cf/moonshotai/kimi-k2.7-code\\\"\"}}\n```\n\nCatalogue models are accepted there, and the shape is not what the endpoint name promises. The documentation for `minimax/m3` lists its request formats as \"Chat Completions, Anthropic Messages\". Sent to `/ai/v1/messages` on 2026-07-26 it answered:\n\n```json\n{\"id\":\"06b4c281ce76f4c5405e21e09af57dfa\",\"model\":\"MiniMax-M3\",\"object\":\"chat.completion\",\n \"choices\":[{\"message\":{\"role\":\"assistant\",\"content\":\"\",\n \"reasoning_content\":\"The user simply said \\\"say OK\\\"...\"},\"finish_reason\":\"length\"}],\n \"usage\":{\"total_tokens\":210,\"prompt_tokens\":178,\"completion_tokens\":32}}\n```\n\n`\"object\":\"chat.completion\"` and a `choices` array: an OpenAI body from an Anthropic-named endpoint. A client that parses `content` as an array of blocks throws on it. So a tool speaking only `POST /v1/messages` cannot reach any Workers AI model without a translator, and cannot trust the catalogue models' envelope either. That translator, with its source, is in [Claude Code on Kimi, GLM or Grok through your own Cloudflare account](/a/claude-code-on-cloudflare-ai-gateway).\n\n## What breaks\n\n**Reasoning models spend the output budget thinking and hand back nothing.** Kimi and GLM both emit a reasoning trace before the answer, charged as output and counted against `max_tokens`. The call above, capped at 24, returned `finish_reason: \"length\"`, `content: null`, and a bill for 24 output tokens. The same prompt at `max_tokens: 1024` returned `\"4\"` after 78 output tokens. A client reading only `content` sees an empty turn; one falling back to `reasoning_content` presents the scratchpad as the answer. Give the cap headroom.\n\n**Constrained decoding turns that into a total failure.** Cloudflare's [JSON Mode](https://developers.cloudflare.com/workers-ai/features/json-mode/) accepts a `response_format` carrying a JSON Schema and forces the output to match it — which forbids the `<think>` preamble a reasoning model emits first. On the Workers AI binding, debuggingfuture root-caused an every-call failure to exactly this: \"glm-4.7-flash answers correctly in the Cloudflare playground but failed **every** pr-review with `StructuredOutputInvalid: empty`.\" GLM-5.2 failed identically, which proved the decode path was at fault rather than the model, and led him to retract his own earlier \"GLM is out\" verdict.\n\nRerun on the REST path on 2026-07-26, the failure is a budget failure and it is escapable. `@cf/zai-org/glm-4.7-flash` with a two-field `json_schema` at `max_tokens: 256` returned `content: null` and 256 output tokens of reasoning. The identical request at `max_tokens: 2048` returned `{\"score\": 6, \"why\": \"This code is syntactically correct and does exactly what it is supposed to do. However, it lacks context, documentation, and best practices.\"}` after 760 output tokens, 2,634 characters of which were discarded reasoning. Binding path and REST path do not behave the same way; the rule that covers both is to budget three to ten times the tokens the answer needs, or not to send guided JSON to a reasoning model at all.\n\n**Corrupted output at real prompt sizes, on real traffic only.** Tenstorrent's serving stack produced garbage from Kimi K2.7 Code under an eight-thousand-token structured coding prompt: \"People chatting on the console were seeing corrupted outputs. We did not observe something like this during the weekend nor with release workflow with limited samples.\" Short smoke tests do not test this model.\n\n**Mid-stream failure on long agentic runs.** Faith-2002, on opencode 1.18.5, hitting Kimi K2.7 Code through a third-party host: `{\"type\":\"error\",\"sequence_number\":1584,\"code\":\"InternalServiceError\",\"message\":\"The service encountered an unexpected internal error.\",\"param\":\"\"}` — consistently, on complex tasks, 1,584 stream events in. Cheap tokens and reliable long runs are not the same purchase.\n\n**Vision works or not depending on which client sends the image.** vilicvane found Kimi K2.7 Code reading images fine through one VS Code integration and rejecting them through another: \"The original VSCode built-in Ollama seem to work vision of with Kimi K2.7 Code. However, when use with models provided by this extension, Kimi complains corrupted images.\" The catalogue's `vision: true` property is accurate; the payload shape the client builds decides whether it works.\n\n**Announced availability is not granted entitlement.** aregtech cited GitHub's changelog announcing Kimi K2.7 for Copilot Pro, then screenshotted the CLI listing it: \"The GitHub policy says that Kimi Code 2.7 (model `kimi-k2.7-code`) is available for Pro subscription. - In fact, it is listed in the `Blocked / Disabled` list.\" Check the catalogue call, not the announcement.\n\n**OpenAI-compatible means Chat Completions, not everything OpenAI ships.** mrnoname set out to spend a Cloudflare Startups credit on Workers AI through Codex CLI: \"Workers AI has an OpenAI-compatible API so I expected it to just work with Codex. Nope. The Responses API surface doesn't map\". He wrote a proxy.\n\n## Quality, honestly: one benchmark, one retraction, one zero\n\nThe most useful published comparison of Kimi K2.7 Code against Qwen coding models is useful mainly because its author threw his first version away. Amit Arora had published a five-model, six-task results matrix, then removed it: \"The README's results section published a 5x6 matrix (Opus, Kimi, Devstral, MiniMax, Qwen Coder Next, Qwen 3.6 35B) whose per-model numbers are **not reproducible from artifacts in this repo** -- no `eval.json` files exist on disk for those models, and the figures differ materially from what the current judge produces. Publish only what we have actually measured.\"\n\nWhat replaced it, scored by one judge (`codex exec`, `gpt-5.6-sol`, high effort), every model self-hosted on vLLM:\n\n| Task | Kimi-K2.7-Code | Qwen3.6-35B | Qwen3-Coder-30B |\n| --- | --: | --: | --: |\n| remove-faiss | **75.25** | 59.25 | 49.0 |\n| remove-efs | **71.25** | 63.0 | 45.0 |\n| ssrf | **72.75** | 55.75 | 0.0 |\n| migrate-secrets | **75.5** | 54.5 | 43.5 |\n| keycloak-rds-iam | 0.0 | **48.75** | 33.25 |\n| Mean of 5 | **58.95** | 56.25 | 34.15 |\n\nThe zero is the honest part. Kimi scored 0.0 on `keycloak-rds-iam`, a task Qwen3.6-35B leads, classified as a real failure rather than judging noise: it \"hit the 60-turn cap with 2/4 artifacts\". Qwen3-Coder-30B's zero on `ssrf` is the mirror image — it \"spent every turn implementing instead of designing\".\n\nTwo readings follow and they pull opposite ways. On the four tasks Kimi completed it is clearly ahead, a 73.69 mean. Across all five the margin is 58.95 to 56.25, which one blown task erases. A frontier-scale model that occasionally burns its whole turn budget and delivers half the artifacts is not strictly better than a small one that finishes.\n\nThe hardware asymmetry is stated too: \"**Hardware:** Kimi-K2.7-Code (1.06T-param MoE) ran on **8x H200** (`p5en.48xlarge`); the three Qwen models (3B-active MoE) on a single **`g6e.12xlarge`** (4x L40S). All via vLLM.\" That is a comparison of weights, not of Cloudflare's serving of them.\n\nOn the other family the evidence is one operator changing his mind. December 2025, andai on GLM behind a coding CLI: \"I had been using GLM in Claude code with Claude code router, because while you can just change the API endpoint, the web search function doesn't work, and neither does image recognition.\" He went back to first-party. June 2026, same person: \"But it just works with Claude Code? They have a guide on their website.\" Between them prmph filed the other side: \"For some reason I can't even get Claude Code (Running GLM 4.6) to do the simplest of tasks today without feeling like I want to tear my hair out, whereas it used to be pretty good before.\" Three reports, two verdicts, one direction of travel — and all three were true when written.\n\n**The verdict.** Kimi K2.7 Code on the main thread: the only Cloudflare-hosted model with a 262,144-token window, tool calling and image input at once, leader in the only reproducible published comparison, 32% cheaper on input than GLM-5.2. GLM-4.7 Flash on the background slot. GLM-5.2 for the second opinion, not the first draft.\n\n**What would change it.** A reproducible benchmark where Kimi's zero repeats on a second long-horizon task; a published `moonshotai/kimi-k3` rate under $2/M blended, which would make a 1M-token window affordable for the main thread; or a cached-input rate on GLM-4.7 Flash, which would make it viable for turns that repeat a large prefix.\n\n## First-party measurement: the same coding prompt through six models\n\n**Method.** One `POST /v1/messages` per model against the account's own Anthropic-shaped gateway route, `max_tokens: 1024`, no tools, no system prompt, single user message, sequential, one attempt each. Latency measured client-side around the `fetch`. Token counts from the response `usage` block. Cost read afterwards from the AI Gateway log rows for the same six requests, matched by timestamp and by the `model_asked` value in the request metadata. Run at 04:35:23–04:35:44 UTC on 2026-07-26.\n\nThe prompt, in full:\n\n```\nWrite a Python function chunk(xs, n) that splits list xs into consecutive chunks\nof length n, with a shorter final chunk if the list does not divide evenly.\nReturn only the code, no explanation.\n```\n\n| Requested alias | Resolved id | Latency | In | Out | Cached in | Gateway cost |\n| --- | --- | --: | --: | --: | --: | --: |\n| `claude-kimi-k2.7-code` | `@cf/moonshotai/kimi-k2.7-code` | 2,745 ms | 49 | 185 | 0 | $0.00078655 |\n| `claude-glm-5.2` | `@cf/zai-org/glm-5.2` | 2,454 ms | 53 | 135 | 0 | $0.0006682 |\n| `claude-glm-flash` | `@cf/zai-org/glm-4.7-flash` | 7,571 ms | 46 | 587 | 0 | $0.00023756 |\n| `claude-kimi-k3` | `moonshotai/kimi-k3` | 6,663 ms | 126 | 127 | 0 | $0.002283 |\n| `claude-grok-4.5` | `xai/grok-4.5` | 2,271 ms | 248 | 37 | 128 | $0.0010764 |\n| `claude-minimax-m3` | `minimax/m3` | 1,809 ms | 217 | 68 | 114 | $0.00011934 |\n\n**Every one of the six returned the same function.** Four wrote `xs[i:i+n]` and two wrote `xs[i:i + n]`:\n\n```python\ndef chunk(xs, n):\n return [xs[i:i+n] for i in range(0, len(xs), n)]\n```\n\n**What it shows.** On a task with one obvious idiomatic answer, model choice changes nothing about the answer and a great deal about the cost. MiniMax M3 at $0.00011934 was 19 times cheaper than Kimi K3 at $0.002283 for a byte-identical result. The slowest turn came from the cheapest hosted model, GLM-4.7 Flash at 7,571 ms, because it spent 587 output tokens reasoning about a two-line function — 4.5 times the output of any other model here.\n\n**What it does not show.** Nothing about multi-turn agentic work, tool calling, long contexts, or instruction adherence under pressure. One sample per model, one prompt, no repeats, so the latency figures carry no error bars and include whatever queueing each backend had that second. It is a floor check.\n\n**Reconciliation.** The three Workers AI rows multiply out exactly against the published rates: 49 x $0.95 + 185 x $4.00 over a million is $0.00078655, the logged figure to the last digit; 53 x $1.40 + 135 x $4.40 is $0.0006682, likewise. A previously recorded row on this same account does *not* reconcile: a 149,187-input-token Kimi K2.7 Code turn billed $0.02852109, implying $0.191 per million — the cached rate, on a turn reporting 64 cached tokens. Published as unreconciled. The arithmetic holds at three-digit token counts and fails at six-digit ones, and the difference has not been explained.\n\n## Choosing table\n\n| Task | Pick | Why |\n| --- | --- | --- |\n| Main agent thread, tools, large repo | `@cf/moonshotai/kimi-k2.7-code` | 262,144 window, tools, vision, $0.19/M cached input, leader in the one reproducible comparison. |\n| Session titles, summaries, safety classification | `@cf/zai-org/glm-4.7-flash` | $0.0605/M input against $1.40 for GLM-5.2. Same job, 23x less. |\n| Second opinion on a design, different family | `@cf/zai-org/glm-5.2` | Independent weights. 47% more input, 10% more output. |\n| Reading a screenshot or a diagram | `@cf/moonshotai/kimi-k2.7-code` | The only `@cf/` coding model with `vision: true`. |\n| Context over 262,144 tokens | `moonshotai/kimi-k3` or `minimax/m3` | 1,048,576 and 1,000,000 tokens, both catalogue-billed and unpriced in the docs. |\n| Cheapest possible tool call, small window fine | `@cf/openai/gpt-oss-20b` | $0.20/M in, $0.30/M out, 128,000 window, tools yes. |\n| Bulk structured extraction with a JSON schema | `@cf/openai/gpt-oss-120b` | Guided JSON on a reasoning model burns the output budget. Budget generously. |\n| Plain code completion, no agency | `@cf/qwen/qwen2.5-coder-32b-instruct` | Cheaper per output token than Kimi. Cannot drive a loop. |\n\n## Symptom, cause, fix\n\n| Symptom | Cause | Fix |\n| --- | --- | --- |\n| `\"content\": null`, `finish_reason: \"length\"`, tokens still billed | Reasoning trace consumed the whole `max_tokens` budget | Raise `max_tokens`. 1,024 is the floor for a one-line GLM-4.7 Flash answer. |\n| `StructuredOutputInvalid: empty` on every guided-JSON call | `response_format` schema forbids the `<think>` preamble the model emits first | Drop `response_format` and parse JSON yourself, or give 3–10x the tokens the object needs. |\n| `AiError: Anthropic Messages API is not supported for model \"@cf/...\"` | Workers AI models are excluded from `/ai/v1/messages` | Use `/ai/v1/chat/completions`, or put a translator in front. |\n| Response has `\"object\":\"chat.completion\"` from `/ai/v1/messages` | A catalogue model returned its native OpenAI body through the Anthropic-named path | Detect the envelope shape at runtime; do not trust the endpoint name. |\n| HTTP 402, \"Gateway authentication is required to use unified billing\" | A catalogue model routed through an unauthenticated gateway | Enable authentication on the gateway and send `cf-aig-authorization`. See [Cloudflare Unified Billing](/a/cloudflare-unified-billing). |\n| `{\"code\":\"InternalServiceError\"}` mid-stream on a long run | Hosted-path instability on extended agentic sessions | Retry with backoff, resume from the last completed tool result. The stream is not atomic. |\n| Garbled tokens in the answer at large prompt sizes | Serving-stack corruption that short samples do not surface | Test at the prompt size actually used. |\n| \"corrupted images\" from a vision-capable model | Client built the image part in a shape the backend does not accept | Send OpenAI `image_url` parts on `/ai/v1/chat/completions`. Verify with a tiny known PNG. |\n| Model is announced but the CLI lists it blocked | Announcement and entitlement are separate systems | Call `/ai/models/search` and treat its output as the truth. |\n| The id 404s or silently resolves to another model | The public model name is not the Cloudflare id | Copy the id from the catalogue call. `@cf/moonshotai/kimi-k2.5` exists but is Deprecated. |\n| Codex CLI or any Responses-API client cannot connect | Workers AI implements Chat Completions, not the Responses API | Use a Chat Completions client, or a translating proxy. |\n| Cost report does not tie out to the published rate | The gateway `cost` field rounds, and large-context rows have not reconciled | Reconcile on token counts from `usage`, not the dollar column. |\n\n## Rerun any of it\n\nThe alias-to-id mapping used in the six-model run is the `CATALOGUE` table in [the gateway translator source](https://github.com/redacted/claude-code-cloudflare-gateway). Every price and capability above comes from one call; every cost from another.\n\n```bash\n# The catalogue: prices, context windows, function_calling, vision\ncurl -s -H \"Authorization: Bearer <TOKEN>\" \\\n \"https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/ai/models/search?per_page=500\" | jq .\n\n# What a turn actually cost, from the gateway log (needs AI Gateway: Read, not Workers AI)\ncurl -s -H \"Authorization: Bearer <TOKEN>\" \\\n \"https://api.cloudflare.com/client/v4/accounts/<ACCOUNT_ID>/ai-gateway/gateways/<GATEWAY_ID>/logs?per_page=10&order_by=created_at&order_by_direction=desc\" \\\n | jq -r '.result[] | [.model, .tokens_in, .tokens_out, .cost] | @tsv'\n```"
],
"facts": {
"converted_from":"markdown",
"original_updated":"2026-07-26T05:37:32.830Z",
"register":"essay",
"category":null
},
"hero":"https://miscsubjects.com/img/up/workers-ai-coding-models-hero-card.png",
"model":"Opus 5 (Claude Code)",
"tags": [
"tooling",
"cloudflare",
"workers-ai",
"ai-gateway",
"coding-agents",
"model-pricing"
],
"sources": [
{
"id":"s1",
"type":"publisher_documentation",
"url":"https://developers.cloudflare.com/workers-ai/platform/pricing/",
"title":"Workers AI pricing",
"publisher":"Cloudflare",
"date":"2026-07-26",
"quote":"Workers AI is included in both the Free and Paid Workers plans and is priced at **$0.011 per 1,000 Neurons**.",
"summary":"The canonical per-model rate card: every @cf/ model with a Price in Tokens column and a Price in Neurons column, plus the 10,000-Neuron daily free allocation. Positive: it is the only place the two units appear side by side. Negative: its dollar column rounds GLM-4.7 Flash to $0.060 while its own neuron figure works out to $0.0605.",
"claim_ids": [
"c1",
"c3",
"c6",
"c7"
],
"quote_sha256":"5986a435cbd32a103328c42223ec3873c1e22b77b540ea4c0baa310411878372"
},
{
"id":"s2",
"type":"publisher_documentation",
"url":"https://developers.cloudflare.com/ai-gateway/features/unified-billing/",
"title":"Unified Billing",
"publisher":"Cloudflare",
"date":"2026-06-22",
"quote":"Workers AI models (models prefixed with `@cf/`) routed through AI Gateway are not charged via Unified Billing. These models are billed through Workers AI pricing instead. Unified Billing only applies to third-party provider models (such as OpenAI, Anthropic, and Google AI Studio).",
"summary":"States the billing split that the whole id-prefix distinction rests on, plus the 5% fee on credit purchases and the requirement that the gateway be authenticated. What a reader gets: the reason a catalogue id and a Workers AI id cannot be swapped freely.",
"claim_ids": [
"c1",
"c2"
],
"quote_sha256":"a24f4782d8cda5a423743b2e73bf2d352de0834ae18af1fb8940937b175c4d35"
},
{
"id":"s3",
"type":"publisher_documentation",
"url":"https://developers.cloudflare.com/ai/models/",
"title":"Cloudflare AI model catalog",
"publisher":"Cloudflare",
"date":"2026-07-26",
"quote":"kimi-k3Moonshot AIText GenerationKimi K3 is Moonshot's flagship 2.8 trillion-parameter model... Third-party",
"summary":"The combined listing of Cloudflare-hosted and third-party models, tagged 'Cloudflare-hosted' or 'Third-party'. Useful for seeing both families in one place; useless for prices, which are absent for every third-party entry.",
"claim_ids": [
"c2",
"c4"
],
"quote_sha256":"deb3bd4b4c84b5ad5fddb5b21fad4935c7b4cd172c2d5e007060ac9093bef19b"
},
{
"id":"s4",
"type":"publisher_documentation",
"url":"https://developers.cloudflare.com/ai/models/moonshotai/kimi-k3/",
"title":"Kimi K3 (Moonshot AI) model page",
"publisher":"Cloudflare",
"date":"2026-07-26",
"quote":"Context Window | 1,048,576 tokens ... Request formats | Chat Completions ... Pricing | View pricing in the Cloudflare dashboard",
"summary":"The largest context window Cloudflare will route, and a Pricing row that is a dashboard link rather than a number. Negative: no per-token rate is published for this model anywhere in the documentation.",
"claim_ids": [
"c4",
"c5"
],
"quote_sha256":"6c5efdf39009d09794c7e7a6baec4626f145ad0711db0ef5348ae4a8de456f30"
},
{
"id":"s5",
"type":"publisher_documentation",
"url":"https://developers.cloudflare.com/ai/models/minimax/m3/",
"title":"MiniMax M3 model page",
"publisher":"Cloudflare",
"date":"2026-07-26",
"quote":"Context Window | 1,000,000 tokens ... Request formats | Chat Completions, Anthropic Messages ... Pricing | View pricing in the Cloudflare dashboard",
"summary":"Lists Anthropic Messages as a supported request format for this model. Measured behaviour contradicts the envelope that implies: the endpoint answers with an OpenAI chat.completion body. Negative, and the contradiction is the point.",
"claim_ids": [
"c4",
"c9"
],
"quote_sha256":"3c1e2ac05c7c9a0408b21dadc489947963890b120e55f0ec3caec806eb4c4305"
},
{
"id":"s6",
"type":"publisher_documentation",
"url":"https://developers.cloudflare.com/ai/models/xai/grok-4.5/",
"title":"Grok 4.5 (xAI) model page",
"publisher":"Cloudflare",
"date":"2026-07-26",
"quote":"Context Window | 500,000 tokens ... Pricing | View pricing in the Cloudflare dashboard",
"summary":"Third of the three catalogue coding models, same missing price. Confirms the omission is systematic rather than an oversight on one page.",
"claim_ids": [
"c4"
],
"quote_sha256":"4b17624f7aaa7bc0f83a2a5d46906d626c7957e8f5ffca257e6ba4f0a8db5a01"
},
{
"id":"s7",
"type":"publisher_documentation",
"url":"https://developers.cloudflare.com/workers-ai/features/json-mode/",
"title":"JSON Mode",
"publisher":"Cloudflare",
"date":"2026-04-21",
"quote":"Workers AI supports JSON Mode, enabling applications to request a structured output response when interacting with AI models. JSON Mode is compatible with OpenAI's implementation; to enable add the `response_format` property to the request object",
"summary":"The feature that breaks reasoning models. Documents the response_format contract without noting that a model which emits a think preamble has nowhere to put it. Positive on syntax, silent on the failure mode.",
"claim_ids": [
"c11"
],
"quote_sha256":"6537349c5b594b9f20d667c9b2753cdf3a207782cf51bf09dad0dee50187e6dc"
},
{
"id":"s8",
"type":"publisher_documentation",
"url":"https://developers.cloudflare.com/workers-ai/features/function-calling/",
"title":"Function calling",
"publisher":"Cloudflare",
"date":"2026-07-26",
"quote":"In essence, function calling allows you to perform actions with LLMs by executing code or making additional API calls.",
"summary":"Explains the capability an agent cannot work without. Does not enumerate which models have it — that list only exists in the account catalogue call.",
"claim_ids": [
"c3"
],
"quote_sha256":"ecf235f44349ed499bc03ceb4bd7bab3c7bfbc6920e4c2efbb127371b58aefe2"
},
{
"id":"s9",
"type":"specification",
"url":"https://developers.cloudflare.com/api/resources/ai/subresources/models/methods/list/",
"title":"Cloudflare API reference: AI models list",
"publisher":"Cloudflare",
"date":"2026-07-26",
"quote":"GET /accounts/{account_id}/ai/models/search",
"summary":"The API method that returns the account's model catalogue with context_window, function_calling, vision and price properties. It is the authoritative discovery surface for @cf/ models and it returns nothing at all for catalogue models.",
"claim_ids": [
"c3",
"c4",
"c6"
],
"quote_sha256":"06b4cbdf56eca8ea7e7a04444005016d609e11f43c40143eae9e2b9d7f7fd7d2"
},
{
"id":"s10",
"type":"specification",
"url":"https://developers.cloudflare.com/ai-gateway/usage/rest-api/",
"title":"AI Gateway REST API",
"publisher":"Cloudflare",
"date":"2026-07-26",
"quote":"curl -X POST \"https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/v1/chat/completions\"",
"summary":"The endpoint contract for both /ai/v1/chat/completions and /ai/v1/messages, which is where the Anthropic-shape refusal comes from. Gives the exact path and header set a reader needs to reproduce every call on this page.",
"claim_ids": [
"c8",
"c9"
],
"quote_sha256":"67827479251e75ee7cd6e56a0b420b1ad131a2c284245711dc0d2ee563b0a561"
},
{
"id":"s11",
"type":"publisher_documentation",
"url":"https://developers.cloudflare.com/workers-ai/configuration/open-ai-compatibility/",
"title":"OpenAI compatible API endpoints",
"publisher":"Cloudflare",
"date":"2026-07-26",
"quote":"/ai/v1/chat/completions",
"summary":"Defines the compatibility surface as Chat Completions and Embeddings. Confirms by omission that the Responses API is not implemented, which is the wall the Codex proxy author hit.",
"claim_ids": [
"c15"
],
"quote_sha256":"659a0af35cb833867b05165631be924081985163e1b2c0685776d08d21467302"
},
{
"id":"s12",
"type":"repository",
"url":"https://github.com/redacted/claude-code-cloudflare-gateway",
"title":"claude-code-cloudflare-gateway",
"publisher":"GitHub",
"date":"2026-07-25",
"quote":"['claude-kimi-k2.7-code', '@cf/moonshotai/kimi-k2.7-code', 'Kimi K2.7 Code (Workers AI, 262k)']",
"summary":"MIT-licensed translator between the Anthropic Messages API and the Cloudflare AI REST surface. Its CATALOGUE table is the alias-to-id map used in the six-model measurement, so a reader can verify which real id each alias resolved to.",
"claim_ids": [
"c16"
],
"quote_sha256":"16050b6d395c3ea605f615ddab8b2965c4ec89c61faa17734ac9c6e699aac5e5"
},
{
"id":"s13",
"type":"github",
"url":"https://github.com/aarora79/agentic-coding-harness-benchmarks/pull/10",
"title":"README: publish self-hosted results (Kimi-K2.7-Code + 3 Qwen models)",
"author":"aarora79",
"publisher":"GitHub",
"date":"2026-07-24",
"quote":"**Hardware:** Kimi-K2.7-Code (1.06T-param MoE) ran on **8x H200** (`p5en.48xlarge`); the three Qwen models (3B-active MoE) on a single **`g6e.12xlarge`** (4x L40S). All via vLLM.",
"summary":"Retracted a previously published 5x6 results matrix because the per-model numbers were not reproducible from artifacts in the repo, and republished only end-to-end runs. Kimi-K2.7-Code scores a 58.95 five-task mean against Qwen3.6-35B at 56.25 and Qwen3-Coder-30B at 34.15, but scores 0.0 on keycloak-rds-iam where Qwen3.6-35B leads. Positive on Kimi, and unusually honest about hardware cost asymmetry.",
"claim_ids": [
"c13",
"c14"
],
"quote_sha256":"56d8638f26beabfbf630d07359f084582cfa0342bed3be247901620b1d6dd6b7"
},
{
"id":"s14",
"type":"github",
"url":"https://github.com/OpenHackersClub/flare-dispatch/pull/213",
"title":"fix(review-agent): stop sending guided-JSON by default — it breaks GLM on the Workers AI binding",
"author":"debuggingfuture",
"publisher":"GitHub",
"date":"2026-06-27",
"quote":"glm-4.7-flash answers correctly in the Cloudflare playground but failed **every** pr-review with `StructuredOutputInvalid: empty`.",
"summary":"Root-caused a total GLM failure on the Workers AI binding to constrained decoding: sending the schema as response_format forbids the <think> preamble a reasoning model emits first, so the engine's think-strip leaves nothing. Confirmed glm-5.2, the catalog's most expensive GLM, failed identically — proving it was the decode path, not the model. Explicitly retracts the earlier \"GLM is out\" verdict. Negative finding, positive outcome.",
"claim_ids": [
"c11"
],
"quote_sha256":"2c17ab32bbe8a5bb153756af90dbde670677e2df4cfedc1195715529234c06ba"
},
{
"id":"s15",
"type":"github",
"url":"https://github.com/tenstorrent/tt-inference-server/issues/4441",
"title":"[Kimi-K2.7-Code] Corrupted Outputs",
"author":"ipastalTT",
"publisher":"GitHub",
"date":"2026-06-30",
"quote":"People chatting on the console were seeing corrupted outputs. We did not observe something like this during the weekend nor with release workflow with limited samples.",
"summary":"Serving-side report from Tenstorrent: Kimi-K2.7-Code produced corrupted output for live console users under an ~8K-token structured coding prompt, and the release workflow's limited sampling never caught it. Negative — the failure only appears at real prompt sizes and real traffic.",
"claim_ids": [
"c12"
],
"quote_sha256":"31021bc761ccdabd734be43cc45e77166de7f39c2ace9b1802cc7f278acfdf86"
},
{
"id":"s16",
"type":"github",
"url":"https://github.com/anomalyco/opencode/issues/38813",
"title":"Internal Service Error in kimi-k2.7-code",
"author":"Faith-2002",
"publisher":"GitHub",
"date":"2026-07-25",
"quote":"When I use the kimi-k2.7-code provided by a third party, I get the following error in consistency complex tasks:{\"type\":\"error\",\"sequence_number\":1584,\"code\":\"InternalServiceError\",\"message\":\"The service encountered an unexpected internal error.\",\"param\":\"\"}",
"summary":"opencode 1.18.5 on Windows 11, Kimi-K2.7-Code via a third-party agent plan: consistently errors out on complex tasks with a mid-stream InternalServiceError at sequence_number 1584. Negative — the model is cheap but the hosted paths are not reliable on long agentic runs.",
"claim_ids": [
"c12"
],
"quote_sha256":"faf1bf3689af3f123a0af4b50ec79a8b92aba3e86bd440956fd63cb185841e39"
},
{
"id":"s17",
"type":"github",
"url":"https://github.com/ollama/ollama-vscode/issues/9",
"title":"Having some trouble with vision support for Kimi K2.7 Code",
"author":"vilicvane",
"publisher":"GitHub",
"date":"2026-07-06",
"quote":"The original VSCode built-in Ollama seem to work vision of with Kimi K2.7 Code. However, when use with models provided by this extension, Kimi complains corrupted images.",
"summary":"Same model, two client paths: vision works through the VS Code built-in Ollama integration and fails with corrupted-image complaints through the extension's own provider. Negative, and the same class of client-side payload-shape bug that breaks image reading when a coding CLI is pointed at a non-native backend.",
"claim_ids": [
"c10"
],
"quote_sha256":"8f6db23a2304f9eacddd4629fab53c53e4e0a99fad9c22e670a481e5befd3790"
},
{
"id":"s18",
"type":"github",
"url":"https://github.com/github/copilot-cli/issues/4029",
"title":"Kimi K2.7 Code is not available in Pro subscription",
"author":"aregtech",
"publisher":"GitHub",
"date":"2026-07-04",
"quote":"The GitHub policy says that Kimi Code 2.7 (model `kimi-k2.7-code`) is available for Pro subscription. - In fact, it is listed in the `Blocked / Disabled` list.",
"summary":"Copilot Pro subscriber cites the 2026-07-01 changelog announcing Kimi K2.7 availability, then screenshots the CLI showing the model in Blocked/Disabled. Negative — availability of these cheap coding models is inconsistent between the announcement and the actual entitlement.",
"claim_ids": [
"c17"
],
"quote_sha256":"e805b3558dc786df8728764f93d52258876a40587a6e1ab762cb51a2c2a4adc1"
},
{
"id":"s19",
"type":"hn",
"url":"https://news.ycombinator.com/item?id=47739925",
"title":"Show HN: Codex Workers AI Proxy – Use Cloudflare Workers AI models in Codex CLI",
"author":"mrnoname",
"publisher":"Hacker News",
"date":"2026-04-12",
"quote":"Workers AI has an OpenAI-compatible API so I expected it to just work with Codex. Nope. The Responses API surface doesn't map",
"summary":"Had a large unused Cloudflare Startups credit and wanted to spend it on Workers AI models — names Kimi K2.5, Gemma 4, GLM-4.7-Flash and GPT-OSS-120B as the interesting ones. Tried OpenCode's Cloudflare provider first and found the integration incomplete, then hit the Responses-API mismatch and had to write a proxy. Mixed: real cost motive, real breakage.",
"claim_ids": [
"c15"
],
"quote_sha256":"4789638300268e436dc0878b4df4b73101cb666ee19aae43ffd56201fc8d89f6"
},
{
"id":"s20",
"type":"hn",
"url":"https://news.ycombinator.com/item?id=46366013",
"title":"Comment on \"GLM-4.7: Advancing the Coding Capability\" — GLM in Claude Code",
"author":"andai",
"publisher":"Hacker News",
"date":"2025-12-23",
"quote":"I had been using GLM in Claude code with Claude code router, because while you can just change the API endpoint, the web search function doesn't work, and neither does image recognition.",
"summary":"Ran GLM behind a coding CLI, found its output roughly twice as long and around 30% less readable than the first-party model's. Used a router specifically because the plain base-URL swap breaks web search and image recognition, then went back to first-party. Negative — and the first half of a pair with the same author.",
"claim_ids": [
"c18"
],
"quote_sha256":"1e57944f2cc54ec4125ddeef65a6bb2120ac363696b8ae91d7a026407c8c1d16"
},
{
"id":"s21",
"type":"hn",
"url":"https://news.ycombinator.com/item?id=48568587",
"title":"Comment — z.ai GLM behind Claude Code via a bashrc alias",
"author":"andai",
"publisher":"Hacker News",
"date":"2026-06-17",
"quote":"But it just works with Claude Code? They have a guide on their website.",
"summary":"Same operator, six months later, opposite verdict: shares the working alias with GLM-5.2 on the main slot and GLM-4.7 on the background slot. Positive. The pair is the evidence that this family's usability changed rather than that either report was wrong.",
"claim_ids": [
"c18"
],
"quote_sha256":"b8679582f55bf356a9e32ab90beac9427b8b7fd4f6a5481a6dfec0e6fa4aa436"
},
{
"id":"s22",
"type":"hn",
"url":"https://news.ycombinator.com/item?id=46082971",
"title":"Comment — Claude Code running GLM 4.6 can't do simple tasks",
"author":"prmph",
"publisher":"Hacker News",
"date":"2025-11-28",
"quote":"For some reason I can't even get Claude Code (Running GLM 4.6) to do the simplest of tasks today without feeling like I want to tear my hair out, whereas it used to be pretty good before.",
"summary":"Daily-driver report of a swapped-backend setup degrading over time — the same configuration that used to work stopped handling simple tasks. Negative, and dated between the two andai comments, which is what makes the trio readable as a timeline.",
"claim_ids": [
"c18"
],
"quote_sha256":"2df0ea2130d4ff313b633c60e30e2b9144fc608118f84c3615b2f605a466ad02"
},
{
"id":"s23",
"type":"runtime_receipt",
"url":"https://miscsubjects.com/api/articles/workers-ai-coding-models",
"title":"Account model catalogue read on 2026-07-26",
"publisher":"miscsubjects",
"date":"2026-07-26",
"quote":"61 models total; 26 Text Generation; 13 with function_calling=true. @cf/zai-org/glm-4.7-flash price: [{\"unit\":\"per M input tokens\",\"price\":0.0605},{\"unit\":\"per M output tokens\",\"price\":0.4}]",
"summary":"First-party: GET /accounts/<ACCOUNT_ID>/ai/models/search?per_page=500 with a Workers AI Read token. Source of every context window, capability flag and per-million price in the model table, and of the finding that catalogue models are absent from this endpoint entirely.",
"claim_ids": [
"c10",
"c3",
"c4",
"c6"
],
"quote_sha256":"2649d24ecae210044e9dea5bcf82541dce2d2a383f5513975cfd69c5d9c091fc"
},
{
"id":"s24",
"type":"runtime_receipt",
"url":"https://miscsubjects.com/api/articles/workers-ai-coding-models",
"title":"Six models, one coding prompt, measured latency, tokens and cost",
"publisher":"miscsubjects",
"date":"2026-07-26",
"quote":"claude-kimi-k2.7-code 2745ms 49/185 $0.00078655 | claude-glm-5.2 2454ms 53/135 $0.0006682 | claude-glm-flash 7571ms 46/587 $0.00023756 | claude-kimi-k3 6663ms 126/127 $0.002283 | claude-grok-4.5 2271ms 248/37 $0.0010764 | claude-minimax-m3 1809ms 217/68 $0.00011934",
"summary":"First-party, 04:35:23-04:35:44 UTC 2026-07-26: one POST /v1/messages per model, max_tokens 1024, no tools, single user message. All six returned the identical list comprehension. Latency measured client-side; token counts from the response usage block; cost read from the matching AI Gateway log rows. Establishes the 19x price spread on byte-identical output.",
"claim_ids": [
"c16",
"c19",
"c20",
"c5"
],
"quote_sha256":"79bad95288ac01f31ff351e2e5d9aef0c70612936d40259b223f67c6d9075dcb"
},
{
"id":"s25",
"type":"runtime_receipt",
"url":"https://miscsubjects.com/api/articles/workers-ai-coding-models",
"title":"Reasoning budget, guided JSON and the Anthropic-endpoint refusal",
"publisher":"miscsubjects",
"date":"2026-07-26",
"quote":"{\"type\":\"error\",\"error\":{\"type\":\"invalid_request_error\",\"message\":\"AiError: Anthropic Messages API is not supported for model \\\"@cf/moonshotai/kimi-k2.7-code\\\"\"}}",
"summary":"First-party on 2026-07-26. GLM-4.7 Flash at max_tokens 24 returns content null with finish_reason length and the reasoning text in reasoning_content; at 1024 it returns \"4\". The same model with a two-field json_schema returns content null at max_tokens 256 and valid JSON at 2048 after 760 output tokens. /ai/v1/messages refuses @cf/ ids with the quoted error and answers minimax/m3 with an OpenAI chat.completion body.",
"claim_ids": [
"c11",
"c21",
"c8",
"c9"
],
"quote_sha256":"df6a7d65f407c03eaa24b0a43b62650c7925faa9fe4b3055734a5e3161e66e82"
},
{
"id":"s26",
"type":"runtime_receipt",
"url":"https://miscsubjects.com/api/articles/workers-ai-coding-models",
"title":"Neuron reconciliation and the row that does not reconcile",
"publisher":"miscsubjects",
"date":"2026-07-26",
"quote":"{\"prompt_tokens\":18,\"completion_tokens\":24,\"total_tokens\":42,\"neurons\":0.9726}",
"summary":"First-party: a direct Workers AI call returns a neurons figure that matches the pricing page's neuron rates exactly, while the dollar columns round. The three Workers AI rows in the six-model run multiply out to the logged cost to the last digit; a previously recorded 149,187-input-token Kimi turn billed $0.02852109 does not, implying the cached rate on a turn reporting 64 cached tokens. Published as unreconciled.",
"claim_ids": [
"c22",
"c7"
],
"quote_sha256":"75702af533b9e8c79132e5d70c77c8b5af61e5dcca68e5051988a485bfcdeecd"
}
],
"claims": [
{
"id":"c1",
"text":"A Workers AI model id begins @cf/ and is billed in Neurons under Workers AI pricing; a catalogue id has no @cf/ prefix and is billed through Unified Billing against prepaid credits.",
"section":"The prefix decides the bill, the discovery path and the request shape",
"tier":"system",
"source_ids": [
"s1",
"s2"
],
"why_material":"Choosing the wrong prefix changes the bill, the discovery method and whether the request is accepted at all.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"specified"
},
{
"id":"c2",
"text":"Unified Billing applies a 5% fee to credit purchases and does not apply to @cf/ models.",
"section":"The prefix decides the bill, the discovery path and the request shape",
"tier":"system",
"source_ids": [
"s2",
"s3"
],
"why_material":"Without it a reader budgets a catalogue model at the provider's raw rate and is short by the fee.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"specified"
},
{
"id":"c3",
"text":"On 2026-07-26 the account model catalogue held 61 models, 26 of them Text Generation, and 13 advertised function calling.",
"section":"Every coding-relevant model Cloudflare hosts, priced from the account catalogue",
"tier":"system",
"source_ids": [
"s1",
"s23",
"s8",
"s9"
],
"why_material":"An agent cannot use a model that cannot call tools, and two models with 'coder' in the name are in the group that cannot.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + specified"
},
{
"id":"c4",
"text":"The models search endpoint returns only @cf/ models; moonshotai/kimi-k3, xai/grok-4.5 and minimax/m3 return zero results from it and their documentation pages publish no per-token price.",
"section":"The catalogue models publish no price — the only way to learn it is to run one and read the log",
"tier":"system",
"source_ids": [
"s23",
"s3",
"s4",
"s5",
"s6",
"s9"
],
"why_material":"A reader who trusts the discovery endpoint will conclude these models do not exist, and a reader who reads their doc pages will find no rate to budget against.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + specified"
},
{
"id":"c5",
"text":"Measured through the account gateway on 2026-07-26, one identical short turn cost $0.002283 on moonshotai/kimi-k3, $0.0010764 on xai/grok-4.5 and $0.00011934 on minimax/m3.",
"section":"The catalogue models publish no price — the only way to learn it is to run one and read the log",
"tier":"system",
"source_ids": [
"s24",
"s4"
],
"why_material":"It is the only price information available for these three models outside the dashboard.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + specified"
},
{
"id":"c6",
"text":"The models API reports GLM-4.7 Flash input at $0.0605 per million tokens while the pricing page's token column reports $0.060.",
"section":"Three Cloudflare surfaces disagree about what GLM-4.7 Flash costs",
"tier":"system",
"source_ids": [
"s1",
"s23",
"s9"
],
"why_material":"A cost model built on one surface will not tie out against a bill computed from the other.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + specified"
},
{
"id":"c7",
"text":"The Neuron count returned in a Workers AI usage block matches the pricing page's neuron rates exactly, so Neurons are the canonical unit and the dollar columns are rounded projections.",
"section":"Three Cloudflare surfaces disagree about what GLM-4.7 Flash costs",
"tier":"system",
"source_ids": [
"s1",
"s26"
],
"why_material":"It resolves which of the three disagreeing figures a reader should reconcile against.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + specified"
},
{
"id":"c8",
"text":"POST /ai/v1/messages rejects every @cf/ model with the error 'AiError: Anthropic Messages API is not supported for model'.",
"section":"The Anthropic endpoint refuses every @cf/ model by name",
"tier":"system",
"source_ids": [
"s10",
"s25"
],
"why_material":"A client that speaks only the Anthropic Messages API cannot reach any Cloudflare-hosted model without a translator.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + specified"
},
{
"id":"c9",
"text":"minimax/m3 is documented as supporting Anthropic Messages but answers /ai/v1/messages with an OpenAI chat.completion body.",
"section":"The Anthropic endpoint refuses every @cf/ model by name",
"tier":"system",
"source_ids": [
"s10",
"s25",
"s5"
],
"why_material":"A client that trusts the endpoint name and parses content as an array of blocks throws on the real response.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + specified"
},
{
"id":"c10",
"text":"Kimi K2.7 Code is the only Cloudflare-hosted coding model with vision:true in the catalogue, and whether images work depends on the shape the client builds.",
"section":"What breaks",
"tier":"system",
"source_ids": [
"s17",
"s23"
],
"why_material":"A reader pasting screenshots into an agent has exactly one hosted model to choose and one class of bug to expect.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + externally attested"
},
{
"id":"c11",
"text":"Sending a JSON Schema as response_format to a reasoning model returns empty content when the output budget is small, and valid JSON when the budget is large.",
"section":"What breaks",
"tier":"system",
"source_ids": [
"s14",
"s25",
"s7"
],
"why_material":"It converts a reported total failure into a bounded, fixable one and names the fix.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + specified + externally attested"
},
{
"id":"c12",
"text":"Kimi K2.7 Code has independently reported failures at real prompt sizes: corrupted output on an 8K structured prompt on one serving stack, and a mid-stream InternalServiceError on long agentic runs through a hosted path.",
"section":"What breaks",
"tier":"anecdotal",
"source_ids": [
"s15",
"s16"
],
"why_material":"Both failures are invisible to short smoke tests, so a reader who validates with one will ship the bug.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"externally attested"
},
{
"id":"c13",
"text":"In the only published benchmark whose author republished after retracting unreproducible numbers, Kimi-K2.7-Code scores a 58.95 five-task mean against Qwen3.6-35B at 56.25 and Qwen3-Coder-30B at 34.15.",
"section":"Quality, honestly: one benchmark, one retraction, one zero",
"tier":"independent",
"source_ids": [
"s13"
],
"why_material":"It is the strongest available quality evidence for the model this page recommends for the main thread.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"externally attested"
},
{
"id":"c14",
"text":"In that same benchmark Kimi-K2.7-Code scores 0.0 on keycloak-rds-iam, a real failure recorded as hitting the 60-turn cap with 2 of 4 artifacts, on a task Qwen3.6-35B leads at 48.75.",
"section":"Quality, honestly: one benchmark, one retraction, one zero",
"tier":"independent",
"source_ids": [
"s13"
],
"why_material":"Without it the recommendation reads as unqualified, and the one blown task is what erases the margin.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"externally attested"
},
{
"id":"c15",
"text":"Workers AI implements the OpenAI Chat Completions surface and not the Responses API, so Responses-API clients need a proxy.",
"section":"What breaks",
"tier":"system",
"source_ids": [
"s11",
"s19"
],
"why_material":"It tells a Codex user in one line whether the integration will work before they try it.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"specified + externally attested"
},
{
"id":"c16",
"text":"Six model aliases resolved to @cf/moonshotai/kimi-k2.7-code, @cf/zai-org/glm-5.2, @cf/zai-org/glm-4.7-flash, moonshotai/kimi-k3, xai/grok-4.5 and minimax/m3, confirmed by the resolved id in each response and each gateway log row.",
"section":"First-party measurement: the same coding prompt through six models",
"tier":"system",
"source_ids": [
"s12",
"s24"
],
"why_material":"A measurement of six models is worthless if an alias silently resolved to a different model, which has happened on this account before.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed + implemented"
},
{
"id":"c17",
"text":"A model can be announced as available and simultaneously listed as blocked in the client that is supposed to serve it.",
"section":"What breaks",
"tier":"anecdotal",
"source_ids": [
"s18"
],
"why_material":"It is the reason the catalogue call, not the changelog, is the authority on availability.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"externally attested"
},
{
"id":"c18",
"text":"The same operator reported GLM behind a coding CLI as unusable in December 2025 and as working without a router in June 2026, with a third operator reporting degradation in between.",
"section":"Quality, honestly: one benchmark, one retraction, one zero",
"tier":"anecdotal",
"source_ids": [
"s20",
"s21",
"s22"
],
"why_material":"It shows the negative reports are dated rather than wrong, which is the only honest way to weigh them.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"externally attested"
},
{
"id":"c19",
"text":"All six models returned the identical two-line list comprehension for the same prompt, with a 19x spread between the cheapest and dearest turn.",
"section":"First-party measurement: the same coding prompt through six models",
"tier":"system",
"source_ids": [
"s24"
],
"why_material":"It sets the floor for what model choice buys on simple work: nothing, at up to nineteen times the price.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed"
},
{
"id":"c20",
"text":"GLM-4.7 Flash spent 587 output tokens and 7,571 ms on a two-line answer, 4.5 times the output of any other model measured.",
"section":"First-party measurement: the same coding prompt through six models",
"tier":"system",
"source_ids": [
"s24"
],
"why_material":"The cheapest input rate does not imply the cheapest turn, because the reasoning trace is billed as output.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed"
},
{
"id":"c21",
"text":"A reasoning model at max_tokens 24 returns finish_reason length with null content and still bills 24 output tokens.",
"section":"What breaks",
"tier":"system",
"source_ids": [
"s25"
],
"why_material":"It is the single most common empty-answer bug when pointing a client at these models.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed"
},
{
"id":"c22",
"text":"The three Workers AI turns reconcile to their logged cost exactly against the published per-million rates, while a previously recorded 149,187-input-token turn billed $0.02852109 does not and is published as unreconciled.",
"section":"First-party measurement: the same coding prompt through six models",
"tier":"system",
"source_ids": [
"s26"
],
"why_material":"A reader building a chargeback report needs to know the dollar column holds at small token counts and has not been shown to hold at large ones.",
"who_claims":"Opus 5 (Claude Code)",
"evidence_status":"observed"
}
],
"widgets": [
{
"type":"stat",
"value":"23x",
"label":"GLM-4.7 Flash input price against GLM-5.2, on the slot that fires every turn"
},
{
"type":"stat",
"value":"13",
"label":"models in the whole account catalogue that can call tools, read 2026-07-26"
},
{
"type":"stat",
"value":"19x",
"label":"price spread across six models that returned a byte-identical answer"
},
{
"type":"note",
"title":"The id prefix is the price",
"text":"`@cf/vendor/model` is Cloudflare's own GPU, published per-token price, listed by the models API, Neuron-billed with 10,000 free per day. `vendor/model` is the vendor's GPU resold through Unified Billing, no published price anywhere, absent from the models API, and 402 on an unauthenticated gateway."
},
{
"type":"quote",
"text":"glm-4.7-flash answers correctly in the Cloudflare playground but failed **every** pr-review with `StructuredOutputInvalid: empty`.",
"cite":"debuggingfuture, OpenHackersClub/flare-dispatch PR 213, 2026-06-27"
},
{
"type":"quote",
"text":"The README's results section published a 5x6 matrix whose per-model numbers are not reproducible from artifacts in this repo -- no eval.json files exist on disk for those models. Publish only what we have actually measured.",
"cite":"Amit Arora, agentic-coding-harness-benchmarks PR 10, 2026-07-24"
},
{
"type":"stat",
"value":"587",
"label":"output tokens GLM-4.7 Flash spent reasoning about a two-line list comprehension"
},
{
"type":"stat",
"value":"$57.58",
"label":"monthly difference between the cheapest and dearest background model, 2,000 summary turns"
},
{
"type":"note",
"title":"Catalogue models publish no price",
"text":"The documentation pages for `moonshotai/kimi-k3`, `xai/grok-4.5` and `minimax/m3` all carry a Pricing row reading \"View pricing in the Cloudflare dashboard\". The only way to learn the rate from outside the dashboard is to send a request and read the `cost` field off the gateway log row."
}
],
"type":"article",
"updated":"2026-10-08T11:33:15.410Z",
"version":1,
"hash":"834aeab8f4d5f233e23a216d0a05c266c93355fc99e3125b1ceabc59de346fa5",
"styling": {
"scope":"shared",
"how":"no value on the page is set by hand: each comes from this theme, and each theme value becomes the CSS variable named beside it. PATCH http://google-preview.miscsubjects.com/api/jarticles/theme changes them.",
"widget_style": {
"what":"every widget may carry style: {…}; these are the only keys it reads",
"rotate":"degrees, a number",
"offset_x":"pixels, a number",
"offset_y":"pixels, a number",
"pulse":"true to pulse"
},
"theme": {
"color": {
"page_bg":"#f5f5f7",
"sheet_bg":"#ffffff",
"ink":"#1d1d1f",
"soft":"#424245",
"muted":"#6e6e73",
"dim":"#86868b",
"line":"#d2d2d7",
"accent":"#0071e3",
"accent_soft":"rgba(0,113,227,0.08)",
"link":"#0066cc",
"selection":"rgba(0,113,227,0.18)",
"widget_bg":"#f5f5f7",
"widget_border":"#d2d2d7",
"card_bg":"#ffffff",
"code_bg":"#f5f5f7",
"json_bg":"#161b19",
"json_ink":"#e6e1d4",
"json_key":"#7fd3c3",
"json_string":"#e9c46a",
"json_number":"#f4a261",
"json_bool":"#c792ea",
"json_null":"#928d7e",
"json_punct":"#6b6759",
"json_bar":"#0e1512",
"kind_badge_bg":"#0e6e60",
"kind_badge_ink":"#ffffff"
},
"color_dark": {
"page_bg":"#000000",
"sheet_bg":"#1d1d1f",
"ink":"#f5f5f7",
"soft":"#d2d2d7",
"muted":"#a1a1a6",
"dim":"#86868b",
"line":"#424245",
"accent":"#2997ff",
"accent_soft":"rgba(41,151,255,0.12)",
"link":"#2997ff",
"selection":"rgba(41,151,255,0.25)",
"widget_bg":"#2c2c2e",
"widget_border":"#424245",
"card_bg":"#1d1d1f",
"code_bg":"#2c2c2e",
"json_bg":"#0a0d0c",
"json_ink":"#e6e1d4",
"json_key":"#7fd3c3",
"json_string":"#e9c46a",
"json_number":"#f4a261",
"json_bool":"#c792ea",
"json_null":"#757062",
"json_punct":"#5d665f",
"json_bar":"#060807",
"kind_badge_bg":"#4fc1ab",
"kind_badge_ink":"#0b0f0d"
},
"font": {
"display":"-apple-system,BlinkMacSystemFont,\"SF Pro Display\",\"SF Pro Text\",\"Helvetica Neue\",Helvetica,Arial,sans-serif",
"body":"-apple-system,BlinkMacSystemFont,\"SF Pro Display\",\"SF Pro Text\",\"Helvetica Neue\",Helvetica,Arial,sans-serif",
"mono":"ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace",
"google_fonts":""
},
"size": {
"body":"17px",
"small":"17px",
"eye":"17px",
"lead":"17px",
"h1":"52px",
"h2":"34px",
"h3":"22px",
"byline":"17px",
"h1_measure":"none",
"code":"17px",
"json":"17px",
"widget_title":"17px"
},
"leading": {
"body":"1.7",
"head":"1.18",
"lead":"1.5",
"json":"1.6"
},
"weight": {
"display":"700",
"head":"700",
"body":"400",
"strong":"700",
"eye":"700"
},
"tracking": {
"eye":"0.14em",
"display":"-0.03em",
"body":"-0.006em",
"badge":"0.08em"
},
"layout": {
"sheet_width":"1000px",
"text_width":"880px",
"gutter":"16px",
"sheet_padding":"56px 64px 64px",
"sheet_padding_mobile":"24px 18px 40px",
"sheet_margin":"28px auto 72px",
"block_gap":"1.15em",
"widget_gap":"28px",
"grid_gap":"14px"
},
"border": {
"sheet":"0px solid",
"sheet_radius":"30px",
"widget":"1px solid",
"widget_radius":"24px",
"card_radius":"24px",
"badge_radius":"999px",
"rule":"1px solid",
"code_radius":"18px",
"accent_bar":"3px"
},
"shadow": {
"sheet":"0 1px 1px rgba(0,0,0,.02),0 6px 26px rgba(0,0,0,.05)",
"widget":"none",
"card_hover":"0 10px 28px -16px rgba(28,27,23,0.35)"
},
"motion": {
"hover":"160ms ease"
}
}
},
"page":"http://google-preview.miscsubjects.com/a/workers-ai-coding-models",
"json":"http://google-preview.miscsubjects.com/a/workers-ai-coding-models.json",
"markdown":"http://google-preview.miscsubjects.com/a/workers-ai-coding-models.md",
"theme":"http://google-preview.miscsubjects.com/article-theme.json",
"calls": [
{
"what":"this article as a page (no key)",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/a/workers-ai-coding-models",
"headers": {}
},
{
"what":"this article as its object (no key)",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/a/workers-ai-coding-models.json",
"headers": {}
},
{
"what":"this article as Markdown (no key)",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/a/workers-ai-coding-models.md",
"headers": {}
},
{
"what":"the object with its hash, drafts too",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/api/jarticles/workers-ai-coding-models",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)"
}
},
{
"what":"one piece and that piece’s hash",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/api/jarticles/workers-ai-coding-models/at?path=facts",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)"
}
},
{
"what":"grep: every key or value that matches, with the path to change it",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/api/jarticles/workers-ai-coding-models/grep?q=owner",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)"
}
},
{
"what":"change pieces (set, merge, delete, append, insert, move); if-match is the hash",
"method":"PATCH",
"url":"http://google-preview.miscsubjects.com/api/jarticles/workers-ai-coding-models",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json",
"if-match":"<hash from the read>"
},
"body": {
"ops": [
{
"op":"set",
"path":"facts.example",
"value":1
}
]
}
},
{
"what":"replace the whole object",
"method":"PUT",
"url":"http://google-preview.miscsubjects.com/api/jarticles/workers-ai-coding-models",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json",
"if-match":"<hash>"
},
"body": {
"slug":"workers-ai-coding-models",
"title":"…"
}
},
{
"what":"fetch every source, hash what came back and check the quote is in it",
"method":"POST",
"url":"http://google-preview.miscsubjects.com/api/jarticles/workers-ai-coding-models/verify",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json"
},
"body": {}
},
{
"what":"an Obsidian-style command",
"method":"POST",
"url":"http://google-preview.miscsubjects.com/api/jarticles/cli",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json"
},
"body": {
"command":"backlinks",
"file":"workers-ai-coding-models"
}
}
]
}