Create a chart
A chart card from a query in plain words, or from your own data.
Plans what to measure, searches for it and draws a card with the key figures, a title that states the
finding, annotations and the source of every value. Or send data (series, events, or columns and rows) and
get the same card from your own numbers. Send query or data, not both. The
Charts guide explains every recipe, type and rule.
It answers 201 Created with a new chart, and 200 OK with plan_only, with store: false, or when the
same request within 10 minutes returns the same chart (cached: true, not billed). When the search doesn't
find enough data it answers 422 insufficient_data, not billed.
From a query it costs its search (the mode it needed, per query) plus $0.50 per 1,000 charts; from your data, $0.30 per 1,000. See pricing.
Body
querystringWhat you want to see, in plain words and any language: "blue dollar this week", "Milei vs Bullrich coverage", "which outlets cover lithium", or "prices" with
index. 2–200 characters. Sendqueryordata, not both.dataobjectYour own data instead of a query, with no search:
seriesof points,eventsfor a timeline, orcolumnsandrowsfor a table, plus optional formats for the axes (x,y,x_measure) and ahighlight.typeenum<string>Default:"auto"The chart type.
autopicks the one that tells the data best. Any other is respected while the data allows it; if not, the closest type that fits is drawn, with achart_type_adjustedwarning.indexstringBuild the chart from your custom index (
idx_…) instead of the news: prices, price against rating, availability or brands, from the data each page declares. No date filter unless you set one.modeenum<string>Default:"auto"autouses the cheapest mode that gets the data:ultrafor coverage, share of voice and outlets,fastfor the rest, andnormalwhen the figures aren’t in headlines and standfirsts. Or fix it toultra,fast,normalordeep. The chart is billed in the mode it ends in.comparestring[]What to compare, 2 to 5 names, when the query doesn’t say it with "vs". Each name is searched, and billed, as its own query.
questionsmap<string, …>One typed question (
boolean,choiceorscore), in the same format as in search: the chart shows how the answers split across the articles.daysinteger | nullThe last N days, 1–365. By default it depends on the recipe: 30 for coverage, 7 for figures, the whole index with
index(see the Charts guide). A date in the query,published_afterorpublished_beforeset the period instead.published_afterdate | date-timePublished on or after this moment. A bare date (
2026-09-20) covers the whole day in UTC−3; a date-time needs an offset.published_beforedate | date-timePublished on or before this moment, inclusive. Same format as
published_after.countriesstring[]Only sources based in these countries: ISO 3166-1 alpha-2 codes, such as
ARorUS.languagesstring[]Only sources that publish in these languages: ISO 639-1 codes, such as
esoren. A tag such aspt-BRcounts aspt.include_domainsstring[]Only these domains or paths, up to 20. A domain includes its subdomains.
exclude_domainsstring[]Never these domains or paths, up to 20.
timezonestringThe IANA time zone that decides what day "today" is and where each day starts, such as
America/Mexico_City. Defaults toAmerica/Argentina/Buenos_Aires.titlestringYour title. Without one, the chart gets a title that states the finding.
subtitlestringYour subtitle. Without one, a chart from a query says what was measured and over which period.
sourcestringThe source line in the footer, for your own data.
themeenum<string>Default:"light"light(the default),dark,editorial(warm paper, for media) orelectric(deep blue, for slides). Switch it later withPATCH, or per view with?theme=.localeenum<string>The language of titles, labels and numbers:
enores. Defaults to theAccept-Languageheader.plan_onlybooleanDefault:falseReturn only the plan (what would be measured, the chart type and the data it needs) without searching or drawing. Free.
storebooleanDefault:truefalsestores nothing: noidand no URLs, and the SVG comes insvg. Same price.include_svgbooleanDefault:falseAlso return the SVG in
svgfor a stored chart.
Response
idstring | nullThe chart id,
chart_….nullwithstore: falseorplan_only.object"chart"Always
chart.typeenum<string> | nullThe chart type that was drawn.
nullwithplan_only.themeenum<string>The theme it is drawn in.
localeenum<string>The language of titles, labels and numbers.
chartobject | nullWhat is drawn: the series and their points, the key figures on top, annotations, events or rows, and a
titlethat states the finding.nullwithplan_only.compatible_typesenum<string>[]Every chart type this data supports, best first. Switch among them for free with
PATCH.planobject | nullFrom a query: what was measured (
recipe), why this chart, other types that fit, and the data it needed.nullfor your own data.sourcesobject[]The articles behind the chart. Each point’s
sourcesare indexes in this list. Empty for your own data.Show child attributes
urlstringThe article’s URL.
titlestringIts headline.
sourcestring | nullThe outlet’s name.
published_atstring | nullWhen it was published.
embed_urlstring | nullA page for an iframe: it adapts to its width and shows tooltips. Public, no key needed. Add
?theme=for another theme.nullwhen nothing is stored.image_urlstring | nullThe PNG at twice the resolution, for chat, email or slides. Add
?size=compactfor the narrow layout.svg_urlstring | nullThe SVG. Add
?size=compactfor the narrow layout.svgstring | nullThe SVG itself, with
include_svgorstore: false. Otherwisenull.created_atstring | nullWhen it was created.
expires_atstring | nullWhen it expires: 90 days after it was created on pay as you go.
nullon the monthly credit plan, where it never does.cachedbooleantruewhen the same request in the last 10 minutes returned the same chart. Not billed.usageobjectWhat the request cost.
Show child attributes
cost_usdnumberCost in US dollars: the search in its mode, per query, plus the chart add-on; or the price of a chart from your data.
0when cached, and onGETandPATCH.modeenum<string> | nullThe mode it was billed in, or
datafor your own data.nullwhen nothing was billed.queriesintegerHow many queries were searched: one per name in a comparison.
duration_msintegerTime on the server, in milliseconds.
warningsobject[]Notes that didn’t stop the chart:
chart_type_adjusted,groupedorindexed.Show child attributes
codestringA stable code.
messagestringA human-readable explanation.