For technical writers, docs engineers and developers

AI for technical writing: draft fast, verify against the source

A model can draft an endpoint table in seconds and still invent a parameter. This page gives each documentation type a source of truth and a gate to pass before publishing, plus prompts and a way to compare models on your own spec.

Published by ZeroTwo, the product discussed here.

  1. sourceopenapi.json at a tagged version
  2. draftmodel output, from any model
  3. gatescript check, run every example
  4. reviewan editor who owns the page
  5. publishpull request to the docs repo
An illustrative pipeline, not a screenshot. The gate is the step most AI-drafted docs skip.

Seven doc types, seven different gates

The useful question is not which model writes best but what you will check the draft against. This table pairs each doc type with its source of truth and a check that catches the likeliest failure.

Documentation types with their source of truth, what the model does, the check before publishing, and the main risk
Doc typeSource of truthWhat the model doesGate before publishingMain risk
API referenceThe OpenAPI spec at a tagged versionTurns terse schema descriptions into reference prose and parameter tablesScript check of parameter names against the spec; run every example against a sandboxInvented parameters, wrong defaults or enums
Tutorials and user guidesWorking code and the README at a tagged versionStructures a first draft and simplifies wordingFollow every step on a clean machine; have a newcomer try itA skipped prerequisite, or code that was never run
Release notesThe merged PR list, with links and labelsGroups entries and rewrites them into a fixed templateEvery line links to a PR; the engineer confirms each breaking changeA breaking change dropped or softened
Runbooks and SOPsThe system as it is actually operated, plus incident notesReorders and clarifies steps you supplyA dry run by someone who did not write it; owner sign-offA missing rollback, or steps that are unsafe in that order
Compliance documentationYour controls, policies and audit evidenceRewrites for clarity and consistencyThe control owner checks every statement against evidenceAsserting a control you do not have
LocalizationApproved source text plus a do-not-translate glossaryA first-pass translation of the prose onlyA check that code blocks match the source; a native-speaker reviewTranslated identifiers, wrong register
Style passYour house style guide, written as explicit rulesRewrites sentences to those rulesReview the diff; keep a linter in CIMeaning drifts while the wording improves

Editorial guidance from ZeroTwo, not a measured result. Models vary and change, which is why every row ends in a check rather than a model name.

Where drafts go wrong, and the check for each

Four workflows account for most of the risk. Each lists what to feed the model, what to ask for, and the gate. For repository and implementation context around API and release-note work, see AI for developers.

API reference

Feed it
The versioned spec file, not a pasted excerpt. If it is too long for one message, split by tag and repeat the shared schemas in every chunk.
Ask for
Reference prose, a parameter table and one curl example per endpoint, in your style rules.
The gate
Run the script below, then execute every curl example against a sandbox. Anything the script lists as missing or unknown is a question for the model and for you.
// check-params.mjs   usage: node check-params.mjs openapi.json reference.md
import { readFileSync } from "node:fs";

const [specPath, docPath] = process.argv.slice(2);
const spec = JSON.parse(readFileSync(specPath, "utf8"));
const doc = readFileSync(docPath, "utf8");

// Parameter names declared in the spec (operation level, not $ref).
const inSpec = new Set();
for (const item of Object.values(spec.paths ?? {}))
  for (const op of Object.values(item))
    for (const p of op.parameters ?? []) inSpec.add(p.name);

// Every `backticked` identifier in the generated doc.
const inDoc = new Set(
  [...doc.matchAll(/`([A-Za-z_][\w.-]*)`/g)].map((m) => m[1]),
);

console.log("In spec, missing from doc:", [...inSpec].filter((n) => !inDoc.has(n)));
console.log("In doc, not in spec (review by hand):", [...inDoc].filter((n) => !inSpec.has(n)));

A first-pass check, run against a two-parameter fixture while writing this page; it is not a benchmark. It reads operation-level parameters only, so extend it for $ref parameters and request-body fields.

Release notes

Feed it
Merged PR titles with links and labels.
Ask for
Group by type in your template and keep each PR number.
The gate
Count PRs against lines. Have the author confirm every breaking-change line. Model output can vary between runs, so keep the approved text in version control instead of regenerating it.

Localization

Feed it
Approved source text and a glossary of terms, identifiers and UI labels that stay in English.
Ask for
Translate the prose only. Leave code, identifiers and UI labels untouched.
The gate
Compare fenced code blocks between source and translation; they should be identical. Agree formal or informal register per locale with your localization lead, and have a native speaker review.

Runbooks and compliance docs

Feed it
The procedure as practiced, plus incident notes and the evidence behind each control.
Ask for
Reorder, number, and make each step one action. Mark any step that lacks an expected result.
The gate
Someone who did not write it runs it in staging, and the owner signs off. A model should not write statements that a control exists; link each claim to evidence you hold.

Compare models on your own spec, not on our word

We have not run a model benchmark, so this page does not say which model is best for API reference. Here is the test we would want to see before trusting any ranking. It takes an afternoon and the result belongs to you.

  1. Pick one fixture

    A versioned OpenAPI file you can share, tagged in git. Small enough to read, large enough to have nested schemas.

  2. Run up to three models

    Send the identical prompt from the pack below to models from different providers in one ZeroTwo chat. Write down which models, and what you changed.

  3. Run the checks

    The script above, then every curl example against a sandbox. A human reads the rest.

  4. Record, then decide

    Fill the table below with your results. Pick on your own numbers and repeat after models change.

Blank results sheet for comparing models on one OpenAPI fixture
ModelParameters missingParameters inventedExamples that failedMinutes to fix
Model A[ fill in ][ fill in ][ fill in ][ fill in ]
Model B[ fill in ][ fill in ][ fill in ][ fill in ]
Model C[ fill in ][ fill in ][ fill in ][ fill in ]

A blank template. We have not published results for it.

Five prompts, each with what to check

Each prompt tells the model to use only what you supplied and to say “not specified” instead of guessing. The card says what you provide and what you verify. Rule sets such as Google's developer style guide on present tense and the Microsoft Writing Style Guide are worth encoding as your own explicit rules.

Turn an OpenAPI spec into reference prose

You provide
The spec file at a tagged version.
You check
Run the parameter script, execute every curl example, and compare response codes with the spec.
Show the prompt
You are a technical writer. From the OpenAPI 3.1 spec below, write reference documentation for every endpoint. For each endpoint include:
- a one-sentence description
- a parameter table (name | type | required | description)
- the request body schema with field descriptions
- the response codes, each with a plain-English explanation
- one curl example

Use present tense and no marketing language. Use only names, types and defaults that appear in the spec. If the spec does not say something, write "not specified" instead of guessing.

<spec>
{PASTE_OPENAPI_SPEC}
</spec>

Draft a getting-started tutorial from a README

You provide
The README and the version it describes.
You check
Follow every step on a clean machine. Confirm prerequisites, versions and that each code block runs.
Show the prompt
Turn the README below into a five-step getting-started tutorial for developers new to this library.

- Step 1: prerequisites and installation
- Steps 2 to 4: the core workflow, with code taken from the README
- Step 5: next steps, using [LINK] placeholders
- Second person, active voice, short sentences
- Language-tagged code blocks

Do not add code that is not in the README. If a step needs information the README lacks, list it under "Questions for the author".

<readme>
{PASTE_README}
</readme>

Summarize merged PRs into release notes

You provide
PR titles and descriptions, each with its link.
You check
Count PRs against lines, keep every link, and have authors confirm breaking changes.
Show the prompt
Summarize the merged pull requests below into a release-notes entry.

Format:
## v{VERSION} ({DATE})
### New features
### Bug fixes
### Breaking changes

Group by type. Use present-tense verbs (Adds, Fixes, Updates). Keep each line under 100 characters and end it with the PR number. Do not omit any PR: list uncategorized ones under "Needs review". Never describe a change as non-breaking unless the PR says so.

<prs>
{PASTE_PR_TITLES_LINKS_AND_DESCRIPTIONS}
</prs>

Rewrite a paragraph to explicit style rules

You provide
The paragraph and your own house rules. The set below is an example.
You check
Review the diff for meaning drift and run it past your linter. These example rules are illustrative, not quoted from any guide.

Before

The configuration of the authentication settings can be performed by the user through the clicking of the Settings icon, which is located in the upper-right area of the interface.

Illustrative target

To configure authentication settings, select the Settings icon in the upper-right corner.

Written by hand to show the goal. Not model output.

Show the prompt
Rewrite the paragraph below to follow these rules:
- active voice
- sentences under 25 words
- verbs instead of nominalizations ("configure", not "perform the configuration of")
- "select", not "click"; "sign in", not "log in"
- no Latin abbreviations ("for example", not "e.g.")
- no exclamation marks

Return only the rewritten paragraph, and keep the meaning identical.

<paragraph>
{PASTE_PARAGRAPH}
</paragraph>

Localize a procedure and keep the code intact

You provide
The approved procedure and your do-not-translate glossary.
You check
Diff the fenced code blocks against the source and have a native speaker review register and terminology.
Show the prompt
Translate the procedure below into [LANGUAGE] ([LOCALE]).

- Do not change anything inside code blocks or inline code.
- Keep UI labels in English on first use, with the translation in parentheses.
- Use the formal register.
- Do not translate any term in the glossary.

<glossary>
{PASTE_GLOSSARY}
</glossary>

<procedure>
{PASTE_PROCEDURE}
</procedure>

What this page does not claim

  • A ranking of models by document type. We have not run one.
  • Cost or speed figures for any model.
  • That ZeroTwo picks the best model for you. You choose the model for each conversation.
  • That any model preserves code, parameters or defaults reliably. You verify.

What it does claim: a source of truth and a gate for each doc type, a script we ran on a small fixture, and prompts that state their limits. ZeroTwo publishes this page and sells a multi-model chat product, so weigh that incentive.

Questions documentation teams ask

Can AI replace technical writers?

Our view is that it changes the work rather than replacing it: more time on checking sources, editing and structure, less on first drafts. Models produce fluent text that can be wrong, so someone accountable for accuracy still has to verify and sign off. We do not cite adoption or time-saving statistics because we have not verified any.

Which AI is best for API documentation?

We have not benchmarked models on this task, so we do not name one. Run the fixture test above on your own spec: the parameter script and the curl examples will tell you more about your material than any ranking.

Is ChatGPT or Claude better for technical writing?

We do not publish a verdict. Both providers' models are available in ZeroTwo, so you can send the same prompt to each in one chat and compare the outputs against your checks. Repeat the comparison when models change.

Does ZeroTwo route each document to the best model automatically?

This page does not claim that. In a ZeroTwo conversation you choose the model. We have no published evidence that any automatic selection is optimal for documentation, so treat model choice as something you test.

Is AI-generated documentation accurate enough to publish?

Not without a gate. Models can invent parameter names, defaults, versions and edge-case behavior. Treat the output as a draft, check it mechanically where you can (spec comparison, running the examples), and have an editor who owns the page approve it.

How do I stop a model translating code and variable names?

Say so in the prompt and supply a do-not-translate glossary, then verify rather than trust: diff the fenced code blocks between the source and the translation. A native-speaker review still covers register and terminology.

How do I enforce a style guide with AI?

Write the rules as an explicit numbered list in the prompt, return only the rewritten text, and review the diff for meaning drift. Google's developer documentation style guide, for example, recommends present tense for statements about general behavior; encode whichever rules your guide sets.

Can AI write release notes from pull requests?

As a first draft, yes. Keep every PR link, have the author of any breaking change confirm its wording, and store the approved text in version control instead of regenerating it, because output can vary between runs.

Do I need separate subscriptions for different providers' models?

ZeroTwo includes models from several providers in one subscription. The Free plan has 100 free credits to start and +20 bonus credits every day you log in; Plus is $14.99/month and Pro is $29.99/month ($26.99/month billed annually). Model access differs by plan, so check the pricing page.

What should I not paste into a chat?

Secrets, credentials, unreleased security details and anything you lack permission to share. ZeroTwo's Privacy Notice says that using AI features may send your content to the model provider you select and that some providers may retain or use submitted data under their own terms. Use sanitized specs and sample data.

Style-guide pages opened October 5, 2026. First published ; revised .

Run the same endpoint through two models and check both

Start on the Free plan, no card required