Public-signal legitimacy check
Is this business real?
Ask before you pay.
Give it a domain. Get back a 0–100 score and the six public signals that produced it — each carrying the evidence it was read from. Deterministic arithmetic, no language model in the scoring path, so your agent can check the working.
No subscription — pay in Ounie credits · 5 credits a check · $0.06 keyless over x402
Read this first
Trust Check reports publicly observable signals about a domain. It is not a certification, a credit check, or a fraud determination. A low score most often means a business is new or has a thin public footprint — not that it is dishonest. Read the signals and their evidence before acting on the number.
The six signals
Everything the number is made of, and what each part can’t tell you.
Weighted by how expensive each one is to fake. A registration date and an organization-validated certificate cost time and a real legal identity. A footer link costs nothing — so it moves the number least.
Domain age
RDAP · the registry itself
25When the registry says the domain was first registered, who the registrar is, and its EPP status codes.
Many ccTLDs publish no RDAP service. When that happens the signal is reported unresolved, not guessed.
TLS certificate
The live certificate, read off the socket
20Whether a CA validated a legal organization (OV/EV) or only DNS control, plus issuer, expiry and name coverage.
Certificate age is not scored past a 30-day floor. Let's Encrypt rotates every 90 days, so a young certificate means nothing.
Contact surface
The homepage
20An email on the site's own domain, a phone number, a contact page, linked social profiles.
A published address is not a monitored one. This measures reachability in principle, not whether anyone replies.
Policy pages
Links from the homepage
15Privacy, terms, and returns or shipping pages, weighted in that order.
Presence only. Nobody reads them — not us, and, statistically, not you.
Postal address
schema.org markup, then the page text
12A trading address, best when published as structured PostalAddress markup rather than pattern-matched from a footer.
A PO box scores low and is labelled as a mail drop. We do not verify that anyone is there.
Review footprint
Outbound links to review platforms
8Whether the business publicly points at a third-party review profile — Trustpilot, G2, Yelp, the app stores.
A footprint, NOT a rating. We do not read the reviews or use their scores. A link is cheap to add, which is exactly why this weighs least.
Weights sum to 100. A signal that does not resolve leaves the denominator — it is never scored as zero, because “we could not look” is not the same finding as “there is nothing there”.
Scoring transparency
A score you can recompute yourself.
The whole model — every weight, every cutoff — is published at GET /api/pricing and through the MCP get_scoring_model tool. Here is the rule that matters most.
Worked example
One signal would not resolve. Watch the divisor, not the number.
If we scored it zero
64 ÷ 100 × 100
64mixed
A worse reading for a business we simply could not finish looking at.
What Trust Check returns
64 ÷ 92 × 100
70strong
Scored on the five signals that resolved, and the response says so: resolved_signals: 5.
Fall below three resolved signals — or under 45 of the 100 weight — and no number is published at all. The band comes back insufficient and score: null. A trust score you can only get sometimes is more useful than one that quietly changes meaning.
For developers & AI agents
Built to be called by something that isn’t a person.
Three rails, one meter. Every call refuses rather than overdraws: an agent that runs out of credits gets a 402 with the exact shortfall and a link to top up, never a silent debt.
One POST, one reading
Bearer key or the shared Ounie session cookie. Synchronous — the score and its six signals come back on the same request.
curl -X POST https://trustcheck.ounie.com/api/checks \
-H "Authorization: Bearer trs_live_…" \
-H "Content-Type: application/json" \
-d '{"url":"example-shop.com"}'
# → { score: 78, band: "strong", resolved_signals: 5,
# signals: [{ name:"domain_age", value:0.85, weight:25,
# evidence:"registered 2019-03-04 via …" }, …] }A tool your agent already knows how to hold
check_business, get_check, list_checks, get_scoring_model, get_credit_balance, get_pricing, whoami. Works in Claude, Cursor, ChatGPT and the Ounie AI Team — that last one can't set headers, so the key rides the URL.
Endpoint https://trustcheck.ounie.com/api/mcp (legacy SSE: /api/sse)
Auth Authorization: Bearer trs_live_…
# Hosts that can't set headers (e.g. the Ounie AI Team):
https://trustcheck.ounie.com/api/mcp?api_key=trs_live_…
# get_scoring_model is public — an agent can fetch the exact
# weights and cutoffs and recompute any score it is handed.No account, no key — pay per call in USDC
Keyless agents pay on Base. A malformed domain or a non-public address is refused with a 400 BEFORE any price is quoted, so you never sign a payment for a request that cannot succeed. Verification happens before settlement: a check where nothing resolves never takes your money.
curl -X POST https://trustcheck.ounie.com/api/x402/check \
-H "Content-Type: application/json" \
-d '{"url":"example-shop.com"}'
# → 402 { accepts: [{ scheme:"exact", network:"base",
# maxAmountRequired:"60000", payTo:"0x…" }] }
curl -X POST https://trustcheck.ounie.com/api/x402/check \
-H "X-Payment: <base64 signed payload>" \
-d '{"url":"example-shop.com"}'5 credits per check on the credit rails · $0.06 per check on x402 · the dashboard keeps every check you have run, free to re-read.
Credit math
5 credits. Nothing for a non-answer.
Most of what a check reads is free — registries publish RDAP themselves, and a TLS certificate is read straight off a socket. Only a stubborn, JavaScript-only page costs us a browser render. That is why this is the cheapest thing Ounie sells, and why the price is a flat five cents rather than a tier.
- Reserved at submit, settled when signals resolve.
- Zero signals resolved is a non-answer — refunded in full, pool-exact.
- Re-reading, listing and exporting past checks is free forever.
- Out of credits is a 402 with the shortfall, never an overdraft.
5 credits reserved while the check runs.
Questions
The awkward ones first.
Does a low score mean a business is a scam?
Is this KYB?
Can a business game the score?
What happens when a signal can't be read?
insufficient and score is null.Does a language model decide the score?
GET /api/pricing and through the MCP get_scoring_model tool. The same observations always produce the same number, and you can recompute any score we hand you.What does a check cost, and when am I not charged?
Can I check any URL?
Do you store what I check?
Check the counterparty before the money moves.
Five cents, five seconds, and a paper trail you can show someone.