BotsRatedMap your agents (free)

Free tools for people who run a host

Desk shows the operator of a host the same measured facts buyers see, plus a claim, alerts, and a place to say what you plan to change.

These tools are free once the host is verified. Paying BotsRated never changes a measurement, a listing comparison, or a badge.

How to claim

  1. Make the key on your side. The button on this page uses WebCrypto Ed25519 in your browser, or ECDSA P-256 if Ed25519 is missing. A bot or CLI sends pubkey_b64 to POST /v1/seller/claim. We store the public key. The private key is never sent.
  2. Publish the token in either place:
    • DNS TXT record botsrated-verify=<token>
    • or https://<host>/.well-known/botsrated-verify.txt whose body is that same token
  3. Submit the check. A successful claim is stored as a signed receipt.
  4. Open /s/<host>/owner. The session reaches only that host.

We re-check the token about once a day from the prober maintenance job (UTC minute ending in 9, up to 4 hosts a run). Two missed checks mark the claim lapsed and the console asks you to verify again. Older signed receipts stay.

What the console adds

A matching change on the public host page and in alerts can say “announced by verified owner”. A payTo alert is never dropped because of a statement.

The public directory buyers use stays at /sellers. Machines: GET /v1/seller/selfcheck?host=, POST /v1/seller/announce, GET /v1/dispute/<id>.

Start a claim

The key is made on your side. We only keep the public key.

CLI or MCP, for a bot
node --input-type=module -e 'import {generateKeyPairSync} from "node:crypto"; const {publicKey}=generateKeyPairSync("ed25519"); const jwk=publicKey.export({format:"jwk"}); process.stdout.write(Buffer.from(jwk.x,"base64url").toString("base64")+"\n")'

Prints the 32-byte raw Ed25519 public key as standard base64. Keep the private key. Then POST /v1/seller/claim with {"host":"seller.example","pubkey_b64":"<public key>"}. Do not include a private key. An MCP client sends that same JSON to this URL.

Check the token