# Profilestr > Look up anyone on Nostr: their profile, who they follow, who they mute, which relays they use, and a combined trust score. Everything is available as free JSON (no key, open CORS) and through an MCP server. Profiles are identified by a Nostr public key, given either as an npub (bech32) or 64-character hex. Only profiles we've indexed can be looked up; others return 404. Please cache what you can. ## For agents - [MCP server](https://profilestr.com/mcp): Streamable HTTP, no auth. Add it to your client as a remote MCP server at https://profilestr.com/mcp. - [OpenAPI spec](https://profilestr.com/openapi.json): every JSON endpoint below, machine-readable. - [API docs](https://profilestr.com/api/docs): the same endpoints for people, with a Try it button. - [MCP server card](https://profilestr.com/.well-known/mcp/server-card.json): the MCP server's transport, tools and input schemas, without connecting. - [API catalog](https://profilestr.com/.well-known/api-catalog): links to all of the above (RFC 9727). Every profile page also links to its JSON with , e.g. /profile/ has /api/profile/. ## MCP tools - search_profiles: Find Nostr profiles by name or display name, ranked by relevance. Also accepts an npub or hex key. Use this first to get a pubkey. - get_profile: A full profile: name, bio, picture, NIP-05, lightning address, follower/following/note/zap counts, last active time and the combined trust score with its breakdown. - get_follows: Who a profile follows (their latest kind 3 list), with names and pictures, plus a history of saved versions with how many were added and removed each time. - get_mutes: Who and what a profile mutes publicly (their latest kind 10000 list): accounts, words, hashtags and threads, plus whether they have encrypted private mutes. - get_list_version: One saved version of a follow or mute list as the raw signed Nostr event. Version ids come from the versions array of get_follows or get_mutes. - get_profile_relays: The relays a profile reads from and writes to (NIP-65, falling back to their kind 3 relay map), with how many indexed profiles use each one. - find_profiles: Filter and sort indexed profiles by text fields and follower, note or zap counts. Use search_profiles instead for a plain name lookup. - get_profiles_batch: Names, pictures, NIP-05 and last-active times for up to 100 hex pubkeys at once. Keys we haven't indexed come back as null. - get_network_stats: Totals and distributions across every indexed Nostr profile, optionally with the most-followed accounts. - list_relays: Nostr relays ranked by how many profiles use them, with live up/down status, latency and NIP-11 details. - check_relay: Live status, latency and the NIP-11 document for one relay, plus how many indexed profiles use it. ## API: Relays Built from the relay lists of every indexed profile: their NIP-65 list (kind 10002) where they've published one, otherwise the relay map in their follow list. Each relay is checked live (a WebSocket connect plus its NIP-11 document); results are cached for 15 minutes. - GET https://profilestr.com/api/relays: Relays ranked by how many profiles use them, with live status and NIP-11 details. Also returns onlineRelays and offlineRelays: the full lists of relay URLs our background checker last saw up or down, most-used first (not affected by the filters or paging). Example: https://profilestr.com/api/relays?status=online&limit=10 - status: all, online or offline. Default all. - sort: users, activeUsers or latency. Default users. - minUsers: Leave out relays named by fewer profiles. Default 2. - q: Only relays whose URL contains this text. - limit: 1 to 500. Default 100. - offset: For paging. Default 0. - probe: false skips the live check and returns counts only (much faster). - statusLists: false leaves out onlineRelays and offlineRelays. - GET https://profilestr.com/api/relays/check?url=wss://…: Live status, latency and the NIP-11 document for a single relay, plus how many indexed profiles use it. Example: https://profilestr.com/api/relays/check?url=wss://nos.lol - url: The relay's wss:// address. Required. - GET https://profilestr.com/api/profile/:pubkey/relays: One profile's relays, with read/write markers and where the list came from (nip65 or kind3). Example: https://profilestr.com/api/profile/npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m/relays?probe=true - pubkey: npub or 64-character hex key. - probe: true adds online and latencyMs for each relay. ## API: Profiles Profile metadata and activity counts for every indexed account. - GET https://profilestr.com/api/profile/:pubkey: A full profile, including the combined trust score and its breakdown. Example: https://profilestr.com/api/profile/npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m - pubkey: npub or 64-character hex key. - GET https://profilestr.com/api/users: Search and filter profiles. Example: https://profilestr.com/api/users?minFollowers=1000&limit=5 - name, displayName, about, nip05: Partial, case-insensitive matches. - pubkey: npub or hex key. - minFollowers, maxFollowers, minNotes, maxNotes, minZaps, maxZaps: Numeric ranges. - sortBy: followers, notes, zaps, created or updated. Default followers. - sortOrder: asc or desc. Default desc. - limit, offset: Limit 1 to 100, default 10. - GET https://profilestr.com/api/users/:pubkey: One profile by npub or hex key. Example: https://profilestr.com/api/users/npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m - pubkey: npub or 64-character hex key. - GET https://profilestr.com/api/users/:displayName: Find profiles by name, ranked by relevance. Example: https://profilestr.com/api/users/fiatjaf?limit=3 - displayName: The name to look for. An npub or hex key also works. - limit: 1 to 50. Default 10. - exact: true for exact matches only. - GET https://profilestr.com/api/users/random: A random selection of profiles. Example: https://profilestr.com/api/users/random?limit=3&includeNpub=true - limit: 1 to 50. Default 10. - includeNpub: true to add the npub to each profile. - POST https://profilestr.com/api/users/batch: Names, pictures and last-active times for up to 100 hex pubkeys at once. Keys we haven't indexed come back as null. Example: https://profilestr.com/api/users/batch - body: { "pubkeys": ["82341f88…", "3bf0c63f…"] } - GET https://profilestr.com/api/search?q=…: Autocomplete: up to 8 profiles matching a name or npub. Example: https://profilestr.com/api/search?q=jack - q: A name, NIP-05 or npub. - GET https://profilestr.com/api/stats: Totals and distributions across the whole index. Example: https://profilestr.com/api/stats - includeTopUsers, topUsersLimit: Add the most-followed profiles (up to 50). ## API: Follow and mute lists Who a profile follows (their kind 3 list) and who they mute (kind 10000), newest saved version first. We keep earlier versions too, so you can see what changed and when. - GET https://profilestr.com/api/profile/:pubkey/follows: The accounts a profile follows, with names and pictures for the ones we've indexed, plus a summary of every saved version of the list. Example: https://profilestr.com/api/profile/npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m/follows?limit=5 - pubkey: npub or 64-character hex key. - limit: 1 to 1000. Default 100. - offset: For paging. Default 0. - details: false returns keys only, without names and pictures (faster). - GET https://profilestr.com/api/profile/:pubkey/mutes: The accounts, words and hashtags a profile mutes publicly. Private mutes are encrypted, so we can only say whether there are any (hasPrivate). Example: https://profilestr.com/api/profile/npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m/mutes?limit=5 - pubkey: npub or 64-character hex key. - limit: 1 to 1000. Default 100. - offset: For paging. Default 0. - details: false returns keys only, without names and pictures (faster). - GET https://profilestr.com/api/lists/:type/:id: One saved version of a list as the raw signed Nostr event. Version ids come from the versions array of the two endpoints above. - type: follows or mutes. - id: A version id. ## Pages - [Home](https://profilestr.com/): search by name or npub. - https://profilestr.com/profile/: one profile, with Following, Muted and Relays tabs (?tab=muted, ?tab=relays). - [Relays](https://profilestr.com/relays): the relay directory. - [Reports](https://profilestr.com/reports): activity across the network. ## Errors Failed requests return JSON with an error message. 400 means a parameter was wrong (usually a malformed key), 404 means the profile isn't indexed, 500 means something broke on our side.