BotsRated
LiveIncluded with a paid plan

Your rules. Our measurements.

Pass, warn or block from your own rules on our receipts. Private to you.

Included with any active paid Alerts or Data plan. No separate price.

What it does

  • Saved policy + allow/deny
  • One call before paying
  • Receipt per reason

Example

Quote: new payTo, 2× observed price, seller.example. Example

Decision: block

Rules in careful-buyer: payto_not_observed → block, price_above_observed → warn, data_stale → warn. Decided by your policy, not by BotsRated.

For developers

How it works

  1. Save a policy on your plan key, in Desk or with PUT /v1/policy.
  2. Check before paying: POST /v1/policy/check (or MCP botsrated_policy_check) with host + quote.
  3. Get pass / warn / block with receipt links; missing facts are never a pass.
  4. Your client enforces it. We don’t stop or send payments.

Rule conditions

ConditionExample use
payto_not_observedBlock or warn on a payTo our checks never recorded for the host (aware of services that rotate addresses)
payto_changed_withinWarn if the payTo changed in the last N hours (for example 48 h)
price_above_observed / listingWarn or block when the quote is above what we observed, or above the listing
max_amount_atomicYour own spend cap per payment
data_stale / no_valid_402Warn or block when our data is older than 24 h or the route stopped answering with a valid 402
mcp_tools_changed / hash pinWarn when an MCP server's tool list changed; block if a hash you pinned drifts
host / payTo allow and deny listsYour private lists, applied first
test_buy_failed_recentAccepted; answers info not_available_v0 until published test-buy results are wired in

Example decision JSON

{
  "decision": "block",
  "decided_by": "your_policy",
  "policy": {
    "preset": "careful-buyer",
    "version": 1
  },
  "host": "seller.example",
  "reasons": [
    {
      "rule": "payto_not_observed",
      "effect": "block",
      "fact": "payTo 0x2222222222222222222222222222222222222222 is not among the payTo addresses our checks recorded for seller.example on eip155:8453.",
      "receipt_url": "https://botsrated.com/receipt/example-receipt-id"
    },
    {
      "rule": "price_above_observed",
      "effect": "warn",
      "fact": "quoted 2000 atomic units; last observed on this route: 1000.",
      "receipt_url": "https://botsrated.com/receipt/example-receipt-id"
    }
  ],
  "fail_mode": "your_choice (fail_open or fail_closed)",
  "example": true
}

API

PUT  /v1/policy          {"preset":"careful-buyer","rules":[...],"allow":{...},"deny":{...},"fail_mode":"open"}
GET  /v1/policy
POST /v1/policy/check    {"host":"...","quote":{"payTo":"...","amount":"...","asset":"...","network":"..."}}
  -> {"decision":"pass|warn|block","decided_by":"your_policy","reasons":[...]}

Presets: warn, careful-buyer, strict, none. Every call needs Authorization: Bearer with an active paid Alerts or Data plan key (brs_…) or an org key (brk_…). Without one the API answers 401 paid_plan_token_required; that is the gate, not an outage.

Questions

Is a block a BotsRated verdict?

No: decided_by: "your_policy". Sellers can't see it or pay to change it.

What does it cost?

Nothing extra. It is included with any active paid Alerts or Data plan.