Data designed for a screen and data designed for a program are different things, and the gap is not about formats. A person looking at a dashboard brings context: they know the market is closed, they know that field is usually empty, they know to distrust a number that looks wrong. A program brings none of that.
Say what you mean about time
The most common ambiguity is when. A timestamp that could mean "computed now", "fetched now from someone else" or "we do not know" is three different claims wearing one field. A consumer that cannot tell them apart will happily treat a weekly figure as a live one.
Publishing the kind of the timestamp alongside it costs almost nothing and removes an entire category of misuse.
Distinguish absent from empty
An empty list means we looked and there was nothing. A missing field means we did not look, or could not. Returning the first when the second is true is the single most damaging thing a feed can do, because it converts an outage into a confident report of a quiet market.
When something is withheld rather than absent — a field that exists but is not in this tier — say that too, in a named list. A consumer that sees a gated field reported as zero will draw a conclusion from it.
Make refusals branchable
An agent handling a failure has to pick a path without asking anyone. Give it a stable code rather than a sentence, and a hint about whether retrying is sensible.
Describe the tool, not just the data
In a tool-calling world the description is part of the interface. It is what the model reads to decide whether to call you at all, and what it uses to interpret the result. A vague description produces a tool that is either ignored or misused.