Profile List
A profile list is an addressable set of pubkeys with optional membership metadata — a display name, badge image, description, and application form. Communities use them as per-section access control lists; the same event doubles as a displayable membership tier in user profiles.
Profile List (kind:30000)
An addressable event containing one or more pubkeys. When used as a community membership list, the d tag matches the section name from the community’s content tag.
Required Tags
| Tag | Description |
|-----|-------------|
| d | Unique identifier for this list. When used as a community membership list, matches the section name (e.g. "Chat", "Forum"). |
Optional Tags
| Tag | Description |
|-----|-------------|
| p | Member pubkey. Repeat for each member. |
| name | Display name for this membership tier (e.g. "Chat Member", "Moderator"). |
| image | Badge image URL. Ideally no larger than 512×512 pixels. |
| form | How to request membership: a NIP form reference (30168:<pubkey>:<form-id>) or a web URL. Apps for a specific community may ignore this and provide their own UX. |
Content
A description of what this membership grants.
Event Structure
{
"kind": 30000,
"pubkey": "<community-pubkey>",
"tags": [
["d", "Chat"],
["name", "Chat Member"],
["image", "https://example.com/chat-badge.png"],
["form", "30168:<community-pubkey>:chat-application"],
["p", "<member-pubkey-1>"],
["p", "<member-pubkey-2>"],
["p", "<member-pubkey-3>"]
],
"content": "Can participate in community chat and discussions",
"created_at": 1234567890
}
Access Control
Publishing permissions within a community section are determined by membership:
-
Client fetches the community’s "kind 10222" to get content sections
-
Client fetches the profile list (kind:30000) for the desired section
-
User can publish if their pubkey is in the list’s
ptags
Requesting Membership
When a profile list includes a form tag, its value is either a NIP form reference (30168:<pubkey>:<form-id>) or a web URL. For a NIP form: user fetches the form template "kind 30168", fills out and submits a form response "kind 1069", then the community admin adds the user’s pubkey to the list. For a web URL, the community’s chosen flow applies. Apps targeting a specific community may ignore the form value and provide their own optimized UX. Membership is granted by adding a p tag — no separate badge events needed.
Multiple Membership Tiers
Communities can create multiple profile lists for different access levels:
// Premium members — can publish apps
["content", "Apps"],
["k", "32267"],
["a", "30000:community-pubkey:premium-members"]
// Basic members — can chat
["content", "Chat"],
["k", "9"],
["a", "30000:community-pubkey:basic-members"]
Each list carries its own metadata (name, image, content description) and optional application form.
Display as Badges
Profile lists double as displayable membership badges in user profiles. The name and image tags provide the visual representation; the content field describes what the membership grants. A single event serves as both access control list and profile badge — no duplicate events needed.
See Also
-
"Community" — How profile lists are referenced in community sections
-
"List" — General list and set patterns (kind 30000)
-
"Forms" — Form-based membership requests (kind 30168, 1069)