API

Public read API

One endpoint that returns what TriRank has already measured about a domain.

This documents the signals endpoint, which is the one endpoint you can call from your own code. Our free-tool endpoints sit behind a human verification step on purpose — they exist to stop automated clients — so documenting them here would be publishing instructions that cannot be followed.

The endpoint

GET https://trirankai.com/api/signals/<domain>

Returns a JSON snapshot of the stored readings for a domain: which AI engines cite it, its visibility score, Domain Rating, the pages that get cited, and the hosts that come back alongside it. The domain is normalised with the same function the rest of the product uses, and the normalised host is echoed back to you.

Authentication

None is required. To raise your daily allowance, send a TriRank API key in the x-api-key request header — the same key the MCP server accepts. Keys are created in your account settings.

A rejected key is not an error: the request is served anonymously, at the anonymous allowance, and the response says which tier it was served at. That way a rotated key degrades your quota instead of breaking your integration.

Rate limits

  • Without a key: 60 reads per day, counted per IP address.
  • With a key on a free account: 200 per day.
  • With a key on a paid plan: 1000 per day.

Every response carries the count used, the limit and when the window resets, so you never have to guess where you stand. Over the limit you get a 429 with those same three numbers.

Three rules the response always follows

Field names change as we add measurements; these three do not. They are the reasons the shape is what it is, and knowing them is what lets you read a field you have not seen before without guessing wrong.

An absent value is never a zero
A block with no stored reading comes back marked as not measured, carrying no numbers at all. It never comes back as 0. Those are different facts — one says we looked and found nothing, the other says we have not looked — and treating the second as the first is the single most expensive mistake a caller can make with this data.
Every block says where it came from and when
Each block carries its own source and the time it was checked. Nothing in the response is stamped with a single freshness for the whole payload, because the parts genuinely age at different rates. You never have to infer how current a number is.
A miss never triggers a measurement
Every read is a pure lookup. Asking about a domain we have never measured does not cause us to go and measure it — it returns the honest not-measured state. This is why the endpoint can be public and free: calling it in a loop costs us database reads, never AI provider spend.

Built on this endpoint

Two integrations read exactly what is documented above, and both are worth reading as worked examples: the n8n template · the MCP server