One definition of revenue, served to every tool that asks — the same numbers the dashboards show. A metric that is defined twice is two metrics. If "Revenue" in the board pack and "revenue" in a Python notebook are written separately, they drift apart the first time a refund rule changes in one of them. Headless metrics serve the governed definitions in the semantic layer (Settings → Semantic objects) to any HTTP client. Notebooks, Power Automate, another BI tool, a data app and an LLM agent all get the same numbers the dashboards show.
All three need the viewer role; the caller's grant on the metric's connection applies. Full schemas are in the API reference.
?format=csv or ?format=ndjson returns only the rows.
notes are part of the answer, not noise. The planner reports, for example, that a join is to-many and a SUM may double-count (fan-out), or that a comparison measure could not be joined and was dropped. Show them to whoever reads the numbers.
Every code, with its retry rule, is in the errors table.
Semantic objects live in the user profile and are edited in Settings → Semantic objects — see the semantic model chapter of the handbook. A set is shipped between installations as a bundle (Export or Import JSON). The headless API reads the same store as the dashboards, so a definition changed there changes the API's answers at the same moment. That is the point.
This site needs JavaScript for the full experience. Every page above is reachable without it.