{"uid":"cap_i0lL8RtjMva8AnPMh0bIR","slug":"nostr-follower-graph-fetcher-2d53cdd9","name":"Nostr Follower Graph Fetcher","description":"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.","url":"https://nostr.halowerk.com/follower-graph","method":"POST","headers":{},"bodySchema":{"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."}}},"responseSchema":null,"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.004","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.004/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.004","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.004","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_CLX19E1IhV3jNSXjlBZgJ","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.004","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"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.","exampleAgentPrompt":"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.","exampleUseCases":[{"title":"Audit follow list relay consistency","prompt":"For the Nostr pubkey npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufvs4gu434, check its kind 3 contact list across all available relays and tell me which relays have the authoritative latest version and how many older stale versions are floating around."},{"title":"Build social graph for a Nostr account","prompt":"I want to map the outgoing follows for the Nostr account with hex key 3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d — can you fetch its depth-1 follower graph and list everyone it follows?"},{"title":"Detect stale relay data for a pubkey","prompt":"Check if any relays are serving an outdated kind 3 contact list for npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6 and let me know how many relays have stale versions versus the current one."}],"resultDescription":"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.","failureModes":["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"],"whenToPreferThis":"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.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-15T12:45:20.398Z","isFirstParty":false}