# Nostr Follower Graph Fetcher

> Nostr Follower Graph Fetcher 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).

Fetches and deduplicates kind 3 contact lists for a Nostr public key across up to 12 relays, returning the authoritative follow list based on the highest created_at timestamp.

## Facts

- Endpoint: POST https://nostr.halowerk.com/follower-graph
- 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-follower-graph-fetcher-2d53cdd9
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_i0lL8RtjMva8AnPMh0bIR

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-follower-graph-fetcher-2d53cdd9 -d '<json body>'
```

Example prompt: Fetch the kind 3 contact list for the Nostr public key npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m across up to 12 relays and tell me which relay has the most recent version and how many stale copies were found.

## When to prefer this

Use this endpoint when you need the authoritative, deduplicated kind 3 follow list for a Nostr public key and want provenance information about which relays hold the latest version versus stale copies. It is the best choice when relay disagreement is a concern, as it explicitly resolves conflicts using created_at timestamps rather than blindly trusting a single relay.

## Known failure modes

- Public key not found on any relay — returns empty or error
- All queried relays unresponsive — timeout or connection error
- Malformed public key input — validation error
- No kind 3 event exists for the given pubkey — empty contact list returned
- Relay consensus unavailable — partial results with degraded confidence

## How this service works

Fetches kind 3 contact lists over up to twelve relays. Because kind 3 is replaceable, several relays regularly hold different versions; only the one with the highest created_at is used and the answer states which relays carried that version and how many older versions were seen, so a stale relay never quietly overwrites a current list. At depth 1 the answer is the account and its outgoing follows.

## Output

Returns the authoritative kind 3 contact list (highest created_at) for the queried public key, along with which relays carried that version, how many older/stale versions were encountered across the queried relays, and the follow list of outgoing contacts at the requested depth.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "depth": {
   "enum": [
    1,
    2
   ],
   "type": "integer",
   "default": 1,
   "description": "1 returns the account and its follows. 2 also fetches the contact lists of its contacts."
  },
  "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_contacts": {
   "type": "integer",
   "default": 200,
   "maximum": 500,
   "minimum": 1,
   "description": "Upper bound on contacts reported for the root account."
  },
  "second_degree_sample": {
   "type": "integer",
   "default": 15,
   "maximum": 25,
   "minimum": 1,
   "description": "How many contact lists to fetch at depth 2. Higher values cost time, not money."
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/nostr-follower-graph-fetcher-2d53cdd9/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)
