Independent. No commercial relationship with any provider indexed here — no credits, no programme, no agreement — checked 8 September 2026. Disclosures · how every number here is evidenced

providers.sgit.ai / Comparison — provider × pattern

Comparison — provider × pattern

One row per provider and product, one column per pattern. This hub keeps no opinion of its own: every row is copied from that provider's site at sync time, so a wrong row is wrong on the provider's own page first — which is where a correction belongs.

Prose from the video vault at commit 7d1916aca5f3, 8 September 2026. When the vault moves ahead, this page is behind — and says so rather than guessing.

ProviderProduct0 · key in the page1 · bounded key in the page2 · short-lived token3 · host holds the keyNeeds a server for the safe pattern
ElevenLabsText to speech (REST)CORS allows it; the account quota is the only bound×no per-key spend limit existsonly with a server we runsg.tts specified; terms file in the vaultYes — ours, until sg.tts ships
Agents (conversational)the vendor forbids it explicitly×no bounded key to mintvendor signed URL, 15 min; or a hostname allowlist — not bothnot attemptedYes — the vendor's minter holds your key

available · × unavailable · available and never acceptable · specified here, not shipped · not applicable

Synced from each provider site's own published front-matter on 2026-09-08 by bin/sync-providers.py. This hub keeps no opinion of its own about a provider: if a row is wrong, it is wrong on that provider's own page first.

How this table is made

Each provider site publishes two things for its own purposes: the markdown twin of its report, which carries a patterns: block in its front-matter, and the claim index its own search pane matches against. bin/sync-providers.py reads both and writes data/providers.yml; the build reads that file and never touches the network.

That is deliberate in three ways:

bin/sync-providers.py --check reports drift without changing anything, which is the form CI could take if this ever needs to be automatic.

Reading down the columns

Column 0 is the same everywhere: possible, and never acceptable. It is in the table because "the browser can call it" is what people usually mean by client-side, and CORS permitting a call says nothing about whether the credential is bounded.

Column 1 is where providers part company. One in this family can mint a key with a spend limit and a reset verified 3 Sep 2026; the other cannot, at any price vendor docs 5 Sep 2026. That is not a difference of degree, and it is the single most useful thing this table shows.

Column 2 needs a server, and the question is whose. "Available with a server" and "available" are not the same claim; the last column says which.

Column 3 is the one this estate can extend to any provider by adding a verb to the host bridge and a terms file to the vault. It is shipped for a model router and specified for a voice API specified, not shipped — and until it ships, the column is a plan rather than a product.