Changelog

What's new in Forma, newest first.

New features, improvements and fixes across the API, the oracles and the MCP server, newest first. Each entry says what changed and, when you need to act, what to do. If something changed and it is not here, tell us — we treat a missing entry as a bug.

Where Forma is today

Forma is in preview. Until the first general release is dated here, any part of the API may still change, so don't pin to it yet.

  • Six endpoints — GET /v1/oracles, POST /v1/oracles/{name}/ask, GET /v1/me, POST /v1/figures/render, GET /v1/news and POST /v1/feedback.
  • Two oracles — chart for Vega-Lite, gnuplot, Plotly, ECharts and Chart.js, and vector-graphics for TikZ, PicTeX and MetaPost.
  • Published rate limits — requests_per_minute for every plan, in Limits and credits.
  • Honest figures — vector-graphics says no, with an invalid that names the feature, when a drawing needs something it cannot draw (gradients, images, animation, patterns, transparency, shading) rather than drawing something close. Titles and labels can be up to 60 characters, captions up to 160.
  • Figures that follow your description — vector-graphics draws the relations you describe (orthogonal, tangent, parallel, perpendicular), lengths given as distances, and axes. Drawings match your description: points sit on their lines, and descriptive sentences become the caption.

2026-10-02

Charts are drawn only from values you give

Changed · A chart request without its values now answers 422 DATA_REQUIRED, and you are not charged, instead of returning a chart of made-up values. Every valid chart says where its numbers came from in data (supplied or generated). See Ask an oracle.

What to do: send your values, or add "allow_generated_data": true when illustrative values are fine. Agents: update the MCP server so it can pass the flag.

Refusals say why, and the catalogue says what can be drawn

New · An invalid answer now carries reason — unsupported_feature, chart_type_mismatch or no_valid_answer — so your code can branch on it; see Verdicts. A chart of a different kind from the one you asked for is now invalid. Every answer carries a request_id to quote when you contact us, and GET /v1/oracles lists each oracle's drawable_formats.

2026-10-01

Every error has a code

Fixed · A request that fails validation now answers 422 VALIDATION_FAILED, with context.parameter naming the field, instead of a list with no code. A figure that cannot be drawn because of a problem on our side now answers 503 UPSTREAM_UNAVAILABLE — wait and send it again — instead of a 422 that blamed your request. See Errors.

2026-09-29

News and feedback endpoints

New · GET /v1/news lists what's new, newest first, and POST /v1/feedback tells us what worked and what didn't. Both are free. See News and feedback.

2026-09-28

Figures render in the chat

New · The MCP show_figure tool shows a figure inline in ChatGPT and other hosts that support MCP Apps, with the figure and its source on separate tabs.

Connect an agent with OAuth

New · The hosted MCP server signs agents in with OAuth, so connecting one needs no API key. See Connect your agent.

Faster vector-graphics answers

Improved · vector-graphics answers about a second faster.

Our versioning promise

Every entry is tagged New, Improved, Changed, Fixed, Deprecated or Removed, and says what you need to do — usually nothing.

New — a new field, oracle or format. Within /v1 it is additive: clients that ignore fields they don't recognise need no change.

Improved — the same behaviour, better: faster, clearer, or more often right. We say what got better and by how much.

Changed — behaviour that is different but compatible. We describe the old behaviour next to the new one.

Fixed — something that did not work as documented now does. We say what was wrong.

Deprecated — still works, has an end date, and names what to move to.

Removed — only ever in a new major version. Within /v1 we will not remove a field, change a field's type, or narrow an enum you already receive.