Measured workflow ·
Using our own inference API to draft an article: seven recorded calls
We used Rynler to produce a brief, draft four sections, and audit those sections with a second model. An AI coding agent assembled and corrected this article against request records and the Rynler billing ledger. This is a record of one writing workflow. It does not establish typical latency, model quality, reliability, or the cost of publishing an article.
Seven calls completed on 26 September 2026. Their confirmed Rynler wallet debits total $0.003349441, approximately €0.00293733 at the reference rate described below. An earlier HTTP 502 remains unresolved, so the final campaign cost is unknown. These figures exclude editing work and any future calls.
What we sent
The six drafting calls used xiaomi/mimo-v2.6-flash. The seventh used xiaomi/mimo-v2.6-pro to audit the generated sections. Each request went to https://api.rynler.com/v1/chat/completions with one user message, temperature: 0.2, max_tokens: 2048, stream: false, a server-side API key, and a fresh idempotency key. The client made no automatic retries.
The first successful call returned a draft with finish_reason: length: it reached the output limit. That draft also invented an editorial team and human review steps. We kept it in the evidence but discarded its narrative. We then generated a short brief and four bounded sections. Each of those responses ended with finish_reason: stop; that field establishes completion, not factual correctness.
The quickstart and API reference explain the request surface. For this run we used plain Node HTTP calls, not an SDK migration test. Rynler's SSE output is buffered until upstream completion and validation. Native tool calling and the Responses API are unsupported; the vision capability endpoint reported available:false, reason vision_disabled, on the evidence date. None of those paths was exercised here.
What the records show
The client saved each exact prompt, its SHA-256 hash, request parameters, response model, usage, finish reason, and monotonic request duration. Duration starts just before the POST and ends after the response has been processed; it includes network and server work and excludes preflight checks. It is not time to first token. Output tokens are the API's reported completion usage, not a word count.
| Stage | MiMo variant | Input tokens | Output tokens | Client seconds | Wallet debit, USD | Finish |
|---|---|---|---|---|---|---|
| Truncated seed | Flash | 117 | 2048 | 50.879 | 0.000530838 | length |
| Brief | Flash | 261 | 247 | 4.808 | 0.000095130 | stop |
| Scope section | Flash | 571 | 376 | 24.774 | 0.000166698 | stop |
| Evidence section | Flash | 574 | 683 | 14.047 | 0.000244440 | stop |
| Billing section | Flash | 585 | 333 | 39.314 | 0.000126016 | stop |
| Editing section | Flash | 589 | 1306 | 14.538 | 0.000371716 | stop |
| Cross-model audit | Pro | 1187 | 1724 | 42.891 | 0.001814603 | stop |
The seven successful calls reported 3,884 input tokens and 6,717 output tokens. The separate historical 502 has no confirmed usage in this dataset. Its provisional zero cost field must not be interpreted as a free request.
A client response does not prove a debit. We separately read the production ledger and joined each response/request ID to ledger.external_ref = request:<id>. For every successful call, model and token usage matched, the request was complete, and the negative usage ledger amount equalled the recorded charge. This establishes the debit in the Rynler wallet, not the upstream provider's invoice. The pricing guide explains why catalogue rates, reservations, and confirmed charges have different meanings.
The euro equivalent divides the confirmed USD amount by 1.1403 USD per EUR, the ECB reference rate dated 25 September 2026. A dated copy is included with the evidence because that URL changes. This is a reference conversion, not a bank settlement rate or an invoice denominated in euros.
What editing changed
The generated sections repeatedly confused client evidence with ledger confirmation. The Pro audit caught that error. It also flagged claims for which its prompt lacked supporting facts, including the timeout fix and request parameters. We resolved those against the captured runtime and request records, rather than treating the audit model as the source of truth.
The final editing pass removed the invented team and human review, corrected the billing explanation, described buffered SSE and conditional vision accurately, and made the unresolved failure visible. It also replaced generic code placeholders with the collector used in this workflow. The raw generated text remains available in the evidence package so readers can compare it with the edited article.
Reproduce the method
The accompanying package contains the exact prompts, sanitized outputs, request-level measurements, currency snapshot, collector source, and an editorial correction log. Repeating a prompt with the same settings may produce different text. Model aliases, prices, availability, network conditions, and upstream behavior can change.
Use a private key file and a separately authorized cumulative budget. The collector defaults to preflight-only mode and requires --execute for a paid request. Its local guard records a conservative hold before sending and keeps unresolved requests charged against that guard. It does not lock the provider price atomically and is not a server-enforced euro quota. If a request times out, reconcile its ID before attempting another call.
# From the evidence package root. No inference POST is made without --execute.
node scripts/seo-inference-run.mjs prompts/01-brief.md
# Only after setting up your own authorized budget ledger and private key file:
RYNLER_API_KEY_FILE=/private/path/rynler.key \
RYNLER_SEO_MODEL=xiaomi/mimo-v2.6-flash \
node scripts/seo-inference-run.mjs prompts/01-brief.md --executeThis run demonstrates one text-chat writing workflow, including an unusable draft and an unresolved earlier failure. Use your own acceptance criteria and request records to decide whether the same approach works for your application.