Where a model touches your report
Five bounded calls, one door, and the priced shortlist of models behind it. None of them can add a fact to your report.
Five calls, all of them bounded, all of them metered into the same ledger the rest of the report is. Four of them either quote your own evidence or are dropped before you see it, and not one of those can add a fact to your report — the most any of them can do is take one away or put a caution beside it. The fifth is different in kind and is listed last for that reason: the AI-visibility grid is not a model reading your evidence, it is models being MEASURED, and what they say is the finding rather than a claim about you.
One door, two keys
All five calls resolve their route the same way: the Vercel AI Gateway when AI_GATEWAY_API_KEY is set, and OpenAI directly when only OPENAI_API_KEY is. Either key runs the whole product. Neither key runs it with those calls reported as unavailable and everything else unchanged — a report without them is smaller and honest, never broken. One caveat belongs to the grid alone: the direct-OpenAI door cannot reach another vendor's models at all, so on that door the grid asks the models it can and says which families it did not ask, rather than reporting silence it never actually heard.
The 5 calls
| Call | When | What it may do | What it may not do |
|---|---|---|---|
| Your brand voice | Once per paid report. | Describe how your copy sounds, quoting the sentence that shows it. | Keep any claim it cannot quote. A tone descriptor whose quote is not a verbatim substring of your own pages is dropped in code before the section renders, and a read where every claim is dropped is reported as a failure rather than as a thin success. |
| The confirm-step second opinion | Once when you confirm a brand, before anything is charged. | Rule a candidate out — say that an account we found is a different business, and quote the account's own words for it. | Rule anything in. Agreement changes nothing at all: ownership still requires a link from your site, a link back, a handle you already use, or your own say-so. There is no verdict it can return that promotes anything. |
| The quality review | Once per paid report, after every other check has finished. | Put a caution beside a claim whose own evidence works against it — the palette, the typefaces, the logo, an account's ownership, the voice summary, a listing's identity, a keyword cluster, and each section's headline claim against its own counts. | Change a single value. It cannot correct, replace, promote, or remove anything; the entire output is a flag and a quote. A flag with no quote is discarded before it reaches you, and a section it had nothing to say about renders exactly as it would have without it — there is no tick, no 'verified' badge, and no score. |
| Confirm-step answer suggestions | Once when you confirm a brand, before anything is charged — and only for the questions you have not already answered. | Offer up to two candidate answers per question, each ordered by its own stated confidence, each naming the part of your page it was read off ("from your homepage title"), and each showing that exact line when you hover or tap it. | Fill a field in for you. A suggestion you did not tap is not an answer you gave: every candidate is a chip beside a box you can type anything into, the box is never collapsed, nothing is preselected, and nothing here submits. A suggestion whose quote is not found in your own page is dropped before you see it, and a question it had nothing to offer for looks exactly as it did before this existed. |
| The AI-visibility grid | On the deeper settings, three times per question per model family. Parked in the alpha: it does not run or bill. | Answer the same questions about you and your category, repeatedly, so the report can show you every answer beside the others and say how many of the three runs named you — because one answer from one model is an anecdote and the spread is the measurement. | Look anything up, or speak for a real person's session. Every call is stateless, logged out and unable to browse, so it reports what these models absorbed in training and not what a searching customer would be shown. The panel says 'from training, no search' on its face, and the ChatGPT-app panel beside it is where the searching customer's answer lives. A run that was rate-limited is reported as rate-limited, never as a model that had nothing to say about you. |
The models we route to
Dollars per million tokens, read from the Gateway's own free /v1/models endpoint on 2026-08-19 — measured, not modelled. A model that is not on this list is not routed to.
| Model | Family | Tier | In | Out | Best for |
|---|---|---|---|---|---|
openai/gpt-5 | GPT | frontier | $1.25 | $10.00 | Judging whether a section's claim is actually supported by the evidence under it. |
openai/gpt-5-mini | GPT | mini | $0.25 | $2.00 | Narrow same-or-different questions with a strict output schema — the proven default for voice and the adjudicator. |
openai/gpt-5.6-sol | GPT | frontier | $2.50 | $15.00 | A more expensive second frontier opinion when gpt-5's judgment is in doubt — evaluated against every use this round and priced too high to be a default anywhere today; kept as an alternate for the day one report needs it. |
anthropic/claude-sonnet-5 | Claude | frontier | $2.00 | $10.00 | A second opinion from a different lab on the same evidence — the point of a grid is that it is not all one vendor. |
anthropic/claude-haiku-4.5 | Claude | mini | $1.00 | $5.00 | The cheap Claude, for when the grid needs this family's answer and not this family's best answer. |
google/gemini-2.5-pro | Gemini | frontier | $1.25 | $10.00 | Long-context reads where the evidence block is the whole site rather than one page. |
google/gemini-2.5-flash | Gemini | mini | $0.30 | $2.50 | Google's answer at mini price, for the visibility grid. |
xai/grok-4.1-fast-reasoning | Grok | mini | $0.20 | $0.50 | The cheapest reasoning model on the shelf, and the family a brand-visibility grid cannot honestly omit. |
zai/glm-4.6 | GLM | mini | $0.60 | $2.20 | An open-weights answer in the grid, priced like one. Text only — never route an image check here. |
moonshotai/kimi-k2-thinking | Kimi | mini | $0.47 | $2.00 | A non-US lab's read of the same brand question, which is a different distribution and not just a different price. |
Which call site asks for which
| Call site | Status | Default | Override |
|---|---|---|---|
| Section quality review | shipped | openai/gpt-5 | BRAND_STUDIO_QUALITY_MODEL |
| Brand voice synthesis | shipped | openai/gpt-5-mini | BRAND_STUDIO_VOICE_MODEL |
| Brand adjudicator (confirm step) | shipped | openai/gpt-5-mini | BRAND_STUDIO_ADJUDICATOR_MODEL |
| Confirm-step answer suggestions | shipped | openai/gpt-5-mini | BRAND_STUDIO_PREFILL_MODEL |
| AI-visibility model grid | shipped | openai/gpt-5-mini | BRAND_STUDIO_GRID_MODELS |
| Chat over the documentation | shipped | openai/gpt-5-mini | BRAND_STUDIO_DOCS_MODEL |
Which sections inform which
Nothing here moves data between sections. It is what the quality review is allowed to LOOK at when judging one claim — and the rule that makes it safe is that reading widely can only ever produce a caution, never an edit.
| This check | Is allowed to read | Why it has to |
|---|---|---|
| The palette, the typefaces, the logo | The colors, typography and logos checks — plus what the business is, from your homepage title, your confirmed answers and your verified listing. | A hex code cannot be wrong on its own. It can only be wrong for a particular business, on a particular site. |
| Whose social account this is | The social check's own captured bios and posts, plus the profiles your site itself links to. | The account that is obviously not yours is usually obvious from its own words, and only once you know whose it is supposed to be. |
| The voice summary and guidance | The voice check's own verified quotes — the ones that survived the verbatim test at capture time. | The quotes were always checked. The prose written around them never was. |
| A business listing's identity | The reviews check's listings, against the city, category and name the rest of the report established. | A listing with the right name in the wrong city is the failure that puts somebody else's ratings in your report. |
| The keyword universe's topics | The SEO check's clusters, against what the business does. | A brand named after a common word seeds a topic universe belonging to the word. That is money spent on the wrong subject. |
| Each section's headline claim | That section's own reported status, against its own counts. | 'Returned' with nothing in it is how a summary line becomes 'strong presence' three layers up. |
USPTO TSDR (Trademark Status & Document Retrieval)
Real trademark status (live/dead/pending, serial number, registration number, filing/registration dates) for a KNOWN serial or registration number — the trademark_status unit inside the reputation leg. This pipeline does not yet have a name -> number lookup step (see src/collectors/free/uspto-tsdr.mjs for why that step is not built), so this row is real, working, and honestly idle on a typical pull today.
Run it yourself
No license key, no phone-home, no feature gate. Every environment variable is optional, and what you set is what runs.