# Nostr Bot Score Analyzer

> Nostr Bot Score Analyzer is a paid API for AI agents from nostr.halowerk.com, paid per call via x402, $0.004/call, status unknown (last checked 2026-09-15).

Analyzes a Nostr public key's posting behavior across multiple relays and computes six bot-detection signals to produce a bot likelihood score.

## Facts

- Endpoint: POST https://nostr.halowerk.com/bot-score
- Price: $0.004/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/nostr-bot-score-analyzer-89d2b878
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_u8Dl-Eh0ZlqwOt6oenoL3

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability nostr-bot-score-analyzer-89d2b878 -d '<json body>'
```

Example prompt: Can you check whether the Nostr account with public key npub1xyz... is likely a bot? Run a bot score analysis across relays and tell me the posting rate, interval variation, repeat ratio, and burst signals.

## When to prefer this

Use this endpoint when you need to programmatically assess whether a Nostr public key belongs to a bot or automated account, based on behavioral posting signals rather than content alone. It is preferable over manual inspection or simple frequency checks because it computes six independent statistical signals across multiple relays simultaneously.

## Known failure modes

- Public key not found or has no recent notes on any relay — returns empty or zero signals
- Invalid or malformed public key format — returns a validation error
- Relays are unreachable or return no data — partial results or timeout error
- Account has too few posts to compute meaningful statistics — low-confidence or null signal values

## How this service works

Fetches the recent notes of one public key across several relays and measures six independent signals: posting rate per day, the coefficient of variation of the intervals between posts, how many of those intervals sit within a few seconds of each other, the entropy of the hour-of-day distribution, the share of posts whose text repeats an earlier post verbatim, and the largest burst inside sixty seconds.

## Output

Returns six behavioral signal values (posting rate per day, coefficient of variation of inter-post intervals, count of near-simultaneous intervals, hour-of-day entropy, verbatim repeat share, and largest 60-second burst count) along with an aggregated bot likelihood score for the given Nostr public key.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "days": {
   "type": "integer",
   "default": 30,
   "maximum": 180,
   "minimum": 1,
   "description": "Length of the observation window in days."
  },
  "kinds": {
   "type": "array",
   "items": {
    "type": "integer",
    "maximum": 65535,
    "minimum": 0
   },
   "maxItems": 6,
   "description": "Event kinds to examine. Default is [1], plain text notes."
  },
  "pubkey": {
   "type": "string",
   "description": "Public key as 64 hex characters, npub or nprofile."
  },
  "relays": {
   "type": "array",
   "items": {
    "type": "string"
   },
   "maxItems": 12,
   "description": "wss relay addresses. Left empty, ten measured default relays are used."
  },
  "max_events": {
   "type": "integer",
   "default": 300,
   "maximum": 500,
   "minimum": 20,
   "description": "Upper bound on notes fetched per relay."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/nostr-bot-score-analyzer-89d2b878/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from nostr.halowerk.com](https://www.zero.xyz/host/nostr.halowerk.com/llms.txt)
