Chartsmith

How it works

A chart is a function of your data.

Not a prompt, not a guess, not a screenshot of a dashboard. You send numbers and a form; a renderer draws exactly those numbers in exactly that form and hands back an image.

Your numberslabels + seriesOne POST/api/chartsDrawn server-sideSVG → PNGA URLsigned, 24h1 credit · about a tenth of a second · no browser anywhere in the loop
01The four steps

What happens on one call

  1. 01

    Send the numbers

    A chart type, your labels, and one or more series. That is the whole request body — there is no project to create, no dataset to upload, and no dashboard to configure first.

  2. 02

    It is checked before it costs

    Series lengths, finite numbers, series count, negative slices in a pie. If the spec cannot produce an honest chart you get a 400 that names the problem and says what to send instead — and you are not charged. Validation runs before any credit is reserved.

  3. 03

    It is drawn, not generated

    The chart is built as SVG by a renderer we wrote — no charting library, no model, no headless browser. Axis ticks land on round numbers, labels are measured before they are placed, and bars grow from a zero baseline.

  4. 04

    You get a URL

    A signed PNG or SVG, valid for 24 hours, plus the value table. Re-signing later is free. 1 credit is settled on delivery; if anything fails, the reserve goes back to the exact pools it came from.

02The rules it holds itself to

What it will not do.

These are not settings. They are the reason the output can be trusted without checking it.

Bars start at zero
Always. A truncated bar axis misstates the ratio between bars, which is the only thing a bar chart exists to show. Line and scatter charts may use a padded data range, because reading a trend does not depend on the baseline.
Gaps stay gaps
Send null and the line breaks there. Nothing is interpolated across a hole in your data to make a prettier curve.
Labels are measured, never clipped
If category labels will not fit side by side they rotate; if they are short and merely numerous, every nth is drawn; if a value will not fit on a bar it moves outside or is dropped. Text is never cut off by its own mark.
At most 8 series
The palette is eight slots and is never cycled. A ninth series would reuse a colour, and two different things in one colour is a chart that lies. Fold the tail into an “Other” series, or split the chart.
Colour is never the only channel
Two or more series always get a legend. Scatter series get distinct marker shapes as well as hues. Every response carries the value table. A reader who cannot separate two colours can still read the chart.
The picture is a pure function of the spec
Same spec, same bytes, every time. Nothing depends on the time of day, a model, or a cache. The spec is stored with the chart, so it can always be redrawn.
03Every form

Pick the one the numbers need.

The job the data does picks the chart, not the other way round. Each example below is real renderer output.

Try it without spending anything — the composer runs the same renderer in your browser and refuses the same way.

Open the composer