Changelog
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/newsandPOST /v1/feedback. - Two oracles —
chartfor Vega-Lite, gnuplot, Plotly, ECharts and Chart.js, andvector-graphicsfor TikZ, PicTeX and MetaPost. - Published rate limits —
requests_per_minutefor every plan, in Limits and credits. - Honest figures —
vector-graphicssays no, with aninvalidthat 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-graphicsdraws 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.