Comparing paid APIs for AI agents is a different exercise from the comparison tables developers have been reading for years. Those tables are pages. They are researched by a human, published on a Tuesday, and out of date by the following month. An agent choosing a provider mid-task cannot read a page, and cannot wait for a human to refresh one.
The comparison an agent needs is callable. It happens at decision time, inside the request flow, and it returns something the agent can act on in a single read. That constraint changes what a comparison has to contain.
The provider cannot do this for you
Start with the structural problem, because it explains why this layer exists at all.
A provider's own API is authoritative about one thing: its price. Ask it anything comparative and it has neither the data nor the incentive to answer honestly. It cannot measure a competitor's latency. It cannot see the failure rate of an endpoint it does not operate. And if it somehow could, publishing a table in which it sometimes loses is not a thing a business does.
This is not a criticism of providers. It is a description of where they sit. The comparison has to come from somewhere that is not selling any single candidate, which is a different business with a different obligation — to the buyer rather than to any one seller.
Everything else follows from that. A neutral comparison earns its position by being checkable, which means it has to hand over its arithmetic.
Four things that have to be side by side
A comparison that an agent can act on carries a small, specific set of dimensions:
- Price, normalized to a unit that means the same thing across candidates. Per call, per page, per record and per token are not interchangeable, and a comparison that mixes them is comparing nothing.
- Measured latency, from calls actually observed, not a number from a marketing page or a status dashboard.
- Measured success rate, with enough volume behind it to mean something. A rate without a denominator is decoration.
- Input compatibility — how the agent's parameters map onto each provider's own names and types.
That last one does most of the quiet work. Two endpoints that perform the same job with different parameter names are not alternatives until somebody publishes the mapping between them. Substitutability is manufactured, not discovered, and it is the difference between a list of vendors and a set of offers a buyer can actually choose between. The same requirement shows up earlier in the chain, when an agent is still working out which providers exist for the job at hand.
A score is only an argument if you can recompute it
Scores are where comparison layers usually lose credibility, and the failure is always the same: a single number with no visible derivation.
A 0–100 figure that arrives alone asks for trust. There is no way to tell whether latency counted for forty percent or four, whether price dominated, or whether the ranking would survive a buyer who cares about something else. That is an advertisement wearing a number's clothes.
The fix is unglamorous. Ship the weights that produced the score, and each candidate's contribution per dimension, in the same response. Then a buyer that weighs reliability twice as heavily as you did can rerun the arithmetic and reach its own conclusion. The comparison survives disagreement, which is the only durable form of authority a ranking can have.
Two further rules keep it honest. The score is relative to the candidates in that one comparison — it is not a permanent grade, and it changes when the field changes. And dimensions that have not been measured for a candidate are dropped from the weighting and named, never scored zero. A zero would punish a candidate for a hole in the observer's data rather than a flaw in its product.
Say what you have not measured
The most useful sentence a comparison can contain is the one admitting its limits.
Price, settlement rail and input compatibility can be read from a listing. Latency and success rate can be measured, but only for endpoints that have been proxied enough times to have a real sample. Result quality and provider terms are not measured anywhere — not by Apiosk, not by anyone claiming otherwise — and pretending they are is how comparison layers get caught.
So the response says so. A candidate with no measured performance is shown as unmeasured rather than shown as average, and a buyer that requires proven reliability can filter it out on purpose instead of being quietly handed it. This is the same discipline that makes a status page worth reading: the value is in the gaps you disclose, not the ones you paper over.
What this means if you run an endpoint
For a provider, being compared feels like exposure. In practice it is the cheapest distribution available, because the alternative is not being in the set at all.
The practical moves are small:
- Publish a price on a unit that survives comparison, rather than a tier that only makes sense inside your own catalogue. If you are still deciding that unit, how to price endpoints for agent buyers is the place to start.
- Publish your input schema with a working example, so the mapping onto your parameters can be generated rather than guessed.
- Let calls be proxied, so you accumulate measured latency and success rate instead of sitting permanently in the unmeasured column.
- Keep the listing current. A stale price does not lose you a comparison; it loses you the call, after the agent has already committed to buying.
An endpoint that is fast and reliable does better in a checkable comparison than in an unchecked one. The provider that fears the table is usually the one whose advertised numbers do not survive measurement.
Where Apiosk fits
Apiosk is the comparison layer between the agent's question and the provider's endpoint. Discovery returns the candidates that can perform a job; `/v1/compare` puts price, measured latency, measured success rate and input compatibility side by side, each scored 0–100 with the weights and per-dimension contributions attached; the decision step names the winner and the exact constraint that removed everything else. All three are free to call, and requirements stated once — a price ceiling, a latency ceiling, a reliability floor — carry down the whole chain.
If you run a paid endpoint, the useful next step is to make it comparable: a clear unit price, a published input schema, and a listing that stays current. List it and let the measurement accumulate. Comparison rewards the provider whose numbers hold up, which is a better position to be in than the one whose numbers were never checked.
Frequently asked questions
Why can a provider not compare its own API to alternatives?
It has neither the data nor the incentive. A provider can measure its own latency but not its competitors', and even if it could, publishing a table where it sometimes loses works against it. The comparison has to come from somewhere that is not selling any one of the candidates.
What does a comparison have to return to be useful to an agent?
Price on a normalized unit, measured latency and success rate where enough calls have been observed, and an input mapping showing how the agent's parameters land on each provider. Anything less leaves the agent unable to treat the offers as substitutable.
Why do scores need to ship with their weights?
Because a ranking the buyer cannot recompute is an advertisement. When the weights and each candidate's per-dimension contribution travel with the score, a buyer who weighs latency differently can rerun the arithmetic and reach its own answer instead of taking yours.
What happens to dimensions that have not been measured?
They are dropped from the weighting and named explicitly, never scored zero. Scoring an unmeasured dimension as zero would quietly punish a candidate for a gap in the observer's data rather than a gap in the product.