# 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.