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
- Save a policy on your plan key, in Desk or with
PUT /v1/policy. - Check before paying:
POST /v1/policy/check(or MCPbotsrated_policy_check) with host + quote. - Get pass / warn / block with receipt links; missing facts are never a pass.
- Your client enforces it. We don’t stop or send payments.
Rule conditions
| Condition | Example use |
|---|---|
payto_not_observed | Block or warn on a payTo our checks never recorded for the host (aware of services that rotate addresses) |
payto_changed_within | Warn if the payTo changed in the last N hours (for example 48 h) |
price_above_observed / listing | Warn or block when the quote is above what we observed, or above the listing |
max_amount_atomic | Your own spend cap per payment |
data_stale / no_valid_402 | Warn or block when our data is older than 24 h or the route stopped answering with a valid 402 |
mcp_tools_changed / hash pin | Warn when an MCP server's tool list changed; block if a hash you pinned drifts |
host / payTo allow and deny lists | Your private lists, applied first |
test_buy_failed_recent | Accepted; 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.