Products

Charts, figures and coverage policies, from plain language.

Three products, each an oracle: you describe what you want, in words, and it returns code in the format you pick that has passed its rules. An oracle is what you call and what you pay for, and every plan can call every oracle.

01 Charts

chart

Describe a chart in plain language and get back a chart specification that has been checked against versioned rules before you see it.

FormatReturnsRefuses rather than approximate
vega-litedefaultA Vega-Lite specExpresses the most
plotlyA Plotly figureTrails, maps, images
echartsAn ECharts optionAs plotly, axis format strings, and ranges between two dates
chartjsA Chart.js configAs echarts, and box plots, heatmaps, text labels, colour scales, lines across the plot, layers beside a legend, small multiples
gnuplotA gnuplot scriptTime axes, data at an address, transforms before plotting
Candlestick chart of a stock over 20 trading days in January 2026Price rises from about 100 to 123 across the period, with eight down days.1001101202026-01-05 open 100 close 104 low 98 high 1072026-01-06 open 104 close 102 low 101 high 1062026-01-07 open 102 close 106 low 99 high 1092026-01-08 open 106 close 110 low 104 high 1122026-01-09 open 110 close 108 low 107 high 1132026-01-12 open 108 close 113 low 105 high 1162026-01-13 open 113 close 111 low 110 high 1152026-01-14 open 111 close 116 low 108 high 1192026-01-15 open 116 close 118 low 113 high 1212026-01-16 open 118 close 114 low 115 high 1202026-01-19 open 114 close 117 low 111 high 1192026-01-20 open 117 close 121 low 114 high 1242026-01-21 open 121 close 119 low 118 high 1232026-01-22 open 119 close 115 low 116 high 1222026-01-23 open 115 close 118 low 112 high 1202026-01-26 open 118 close 122 low 115 high 1252026-01-27 open 122 close 120 low 119 high 1242026-01-28 open 120 close 116 low 117 high 1212026-01-29 open 116 close 119 low 113 high 1212026-01-30 open 119 close 123 low 116 high 1255 Jan30 Jan
vega-lite · chart@6baf09f0

“A candlestick chart of a stock over 20 trading days: a thin rule from low to high and a bar from open to close for each day, green when close is above open and red when below. The price axis must not start at zero; scale it to the price range (about 95 to 125) so the candles are tall and readable.”

Heatmap of median server request latency by day of week and hour of dayWeekdays peak between 09:00 and 17:00 at up to 166 ms; weekends stay below 50 ms; overnight is around 19 ms.MonMon 0:00 — 24 msMon 1:00 — 22 msMon 2:00 — 21 msMon 3:00 — 20 msMon 4:00 — 21 msMon 5:00 — 23 msMon 6:00 — 28 msMon 7:00 — 42 msMon 8:00 — 78 msMon 9:00 — 112 msMon 10:00 — 126 msMon 11:00 — 132 msMon 12:00 — 121 msMon 13:00 — 138 msMon 14:00 — 145 msMon 15:00 — 136 msMon 16:00 — 124 msMon 17:00 — 94 msMon 18:00 — 61 msMon 19:00 — 43 msMon 20:00 — 34 msMon 21:00 — 30 msMon 22:00 — 27 msMon 23:00 — 25 msTueTue 0:00 — 23 msTue 1:00 — 21 msTue 2:00 — 20 msTue 3:00 — 19 msTue 4:00 — 20 msTue 5:00 — 22 msTue 6:00 — 29 msTue 7:00 — 45 msTue 8:00 — 83 msTue 9:00 — 118 msTue 10:00 — 134 msTue 11:00 — 142 msTue 12:00 — 130 msTue 13:00 — 147 msTue 14:00 — 151 msTue 15:00 — 143 msTue 16:00 — 131 msTue 17:00 — 99 msTue 18:00 — 64 msTue 19:00 — 44 msTue 20:00 — 35 msTue 21:00 — 29 msTue 22:00 — 26 msTue 23:00 — 24 msWedWed 0:00 — 24 msWed 1:00 — 22 msWed 2:00 — 20 msWed 3:00 — 20 msWed 4:00 — 21 msWed 5:00 — 24 msWed 6:00 — 31 msWed 7:00 — 48 msWed 8:00 — 88 msWed 9:00 — 126 msWed 10:00 — 141 msWed 11:00 — 149 msWed 12:00 — 137 msWed 13:00 — 153 msWed 14:00 — 158 msWed 15:00 — 149 msWed 16:00 — 137 msWed 17:00 — 103 msWed 18:00 — 67 msWed 19:00 — 46 msWed 20:00 — 36 msWed 21:00 — 31 msWed 22:00 — 27 msWed 23:00 — 25 msThuThu 0:00 — 25 msThu 1:00 — 23 msThu 2:00 — 21 msThu 3:00 — 20 msThu 4:00 — 21 msThu 5:00 — 25 msThu 6:00 — 33 msThu 7:00 — 51 msThu 8:00 — 92 msThu 9:00 — 132 msThu 10:00 — 148 msThu 11:00 — 156 msThu 12:00 — 144 msThu 13:00 — 161 msThu 14:00 — 166 msThu 15:00 — 157 msThu 16:00 — 143 msThu 17:00 — 108 msThu 18:00 — 70 msThu 19:00 — 48 msThu 20:00 — 38 msThu 21:00 — 32 msThu 22:00 — 28 msThu 23:00 — 26 msFriFri 0:00 — 26 msFri 1:00 — 24 msFri 2:00 — 22 msFri 3:00 — 21 msFri 4:00 — 22 msFri 5:00 — 25 msFri 6:00 — 32 msFri 7:00 — 49 msFri 8:00 — 86 msFri 9:00 — 121 msFri 10:00 — 139 msFri 11:00 — 146 msFri 12:00 — 134 msFri 13:00 — 151 msFri 14:00 — 155 msFri 15:00 — 147 msFri 16:00 — 135 msFri 17:00 — 105 msFri 18:00 — 72 msFri 19:00 — 53 msFri 20:00 — 42 msFri 21:00 — 36 msFri 22:00 — 31 msFri 23:00 — 28 msSatSat 0:00 — 27 msSat 1:00 — 25 msSat 2:00 — 23 msSat 3:00 — 22 msSat 4:00 — 22 msSat 5:00 — 23 msSat 6:00 — 25 msSat 7:00 — 28 msSat 8:00 — 32 msSat 9:00 — 36 msSat 10:00 — 39 msSat 11:00 — 42 msSat 12:00 — 40 msSat 13:00 — 44 msSat 14:00 — 47 msSat 15:00 — 43 msSat 16:00 — 39 msSat 17:00 — 36 msSat 18:00 — 34 msSat 19:00 — 32 msSat 20:00 — 31 msSat 21:00 — 30 msSat 22:00 — 29 msSat 23:00 — 28 msSunSun 0:00 — 26 msSun 1:00 — 24 msSun 2:00 — 22 msSun 3:00 — 21 msSun 4:00 — 21 msSun 5:00 — 22 msSun 6:00 — 24 msSun 7:00 — 27 msSun 8:00 — 30 msSun 9:00 — 34 msSun 10:00 — 37 msSun 11:00 — 39 msSun 12:00 — 38 msSun 13:00 — 42 msSun 14:00 — 45 msSun 15:00 — 42 msSun 16:00 — 38 msSun 17:00 — 35 msSun 18:00 — 33 msSun 19:00 — 31 msSun 20:00 — 30 msSun 21:00 — 29 msSun 22:00 — 28 msSun 23:00 — 27 ms06121823Hour of day
vega-lite · chart@6baf09f0

“A heatmap of server request latency: day of week on y in calendar order Mon, Tue, Wed, Thu, Fri, Sat, Sun (not alphabetical), hour of day (0–23) on x, each cell coloured by median latency in ms. Use realistic values with a weekday business-hours peak.”

Chart values were made up by Forma from each prompt. Drawn here from the returned spec.

In Forma Visuals

02 Figures

vector-graphics

Describe a drawing in plain language and get back vector source that has been checked against versioned rules before you see it.

FormatReturnsRefuses rather than approximate
tikzdefaultTikZ source to typesetExpresses the most
metapostMetaPost source to typesetExpresses as much as tikz
pictexPicTeX source to typesetArbitrary stroke colours, fills, coloured text
A Merkle tree: Root = H(ABCD) over H(AB) and H(CD), over H(A) to H(D), over data blocks A to D
tikz · vector-graphics@c738bf88

“A Merkle tree over four data blocks. Leaves: H(A), H(B), H(C), H(D) as boxes. Their parents: H(AB) above H(A) and H(B), H(CD) above H(C) and H(D). Root at the top: Root = H(ABCD). Draw it as a tree of boxes with edges from each parent to its children, and the four data blocks A, B, C, D as small boxes under their leaf hashes.”

A binary search tree with root 8 built from the keys 8, 3, 10, 1, 6, 14, 4, 7, 13
tikz · vector-graphics@c738bf88

“A binary search tree built by inserting the keys 8, 3, 10, 1, 6, 14, 4, 7, 13 in that order. Draw each node as a circle labelled with its key, edges from parent to child, left children to the left and right children to the right.”

Triangle ABC with its three medians meeting at the centroid GEach median runs from a vertex to the midpoint of the opposite side: A to M_A, B to M_B, C to M_C. All three pass through G.ABCMAMBMCG
tikz · vector-graphics@c738bf88

“Triangle ABC with the midpoints of each side, the three medians, and the centroid G where they meet; check that each median passes through G.”

Figures are TeX source: drawn here by Forma's figure engine from the returned TikZ. Describe a figure by what it is (a midpoint, an intersection, a tree from its structure) and the coordinates are worked out for you.

03 Coverage policies

coverage-policy

Ask a question about the Medicare knee replacement policy (LCD L36575) and get back the rules, conditions and statements that answer it as JSON, each with the policy passage it comes from, checked against versioned rules before you see it.

FormatReturnsRefuses rather than approximate
lookupdefaultThe parts of LCD L36575 that answer the question, as JSONAnswers come from this one policy, even for questions about others

An answer is a JSON document: the rules, conditions and statements of the Medicare knee replacement policy (LCD L36575) that answer the question, each with the passage it comes from, and what the policy does not mention. It records what the policy says and does not decide whether a patient qualifies.

04 What "verified" covers

  • A valid artifact passed the version of the rules verified_by identifies.
  • The same rules always carry the same identifier.
  • A figure's stated checks hold in the figure you receive.
  • An oracle in the catalogue is callable by your key, in any format it lists.

05 What it does not

  • That the artifact is what you meant. The check covers form, not intent.
  • That the data is real. Ask vaguely and Forma may invent values; send your data when the numbers matter.
  • That your coordinates survive. Forma may move a point you gave it to make a stated check hold.
  • The same answer twice. The same request can come back different; store the artifact you got.
  • An answer at all. Some intents cannot be satisfied, and invalid is the honest result.