Appearance
Kind 31923: Time-Based Calendar Event
Overview
Time-based calendar events represent occurrences that span between a specific start time and end time. Unlike date-based calendar events, these include precise timestamps and can optionally specify time zones, making them suitable for meetings, appointments, and other time-specific events.
Specification
Property | Value |
---|---|
Kind Number | 31923 |
Event Range | Addressable |
Defined in | NIP-52 |
Content Format
The content
field should contain a detailed description of the calendar event. While required, it can be an empty string.
Tags
Tag Name | Description | Format | Required |
---|---|---|---|
d | Universally unique identifier (UUID) | ["d", "<UUID>"] | Yes |
title | Title of the calendar event | ["title", "<title of calendar event>"] | Yes |
start | Inclusive start Unix timestamp in seconds | ["start", "<Unix timestamp in seconds>"] | Yes |
end | Exclusive end Unix timestamp in seconds | ["end", "<Unix timestamp in seconds>"] | No |
start_tzid | Time zone of the start timestamp | ["start_tzid", "<IANA Time Zone Database identifier>"] | No |
end_tzid | Time zone of the end timestamp | ["end_tzid", "<IANA Time Zone Database identifier>"] | No |
summary | Brief description of the calendar event | ["summary", "<brief description>"] | No |
image | URL of an image to use for the event | ["image", "<string with image URI>"] | No |
location | Location of the calendar event | ["location", "<location>"] | No |
g | Geohash to associate with a searchable physical location | ["g", "<geohash>"] | No |
p | Pubkey of a participant with optional relay URL and role | ["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>", "<role>"] | No |
l | Label to categorize calendar event | ["l", "<label>", "<optional namespace>"] | No |
t | Hashtag to categorize calendar event | ["t", "<tag>"] | No |
r | References / links to web pages, documents, etc. | ["r", "<url>"] | No |
Client Behavior
Clients should:
- Generate a UUID when creating a new time-based calendar event
- Ensure that the start timestamp is before the end timestamp (if provided)
- If no end timestamp is provided, treat the calendar event as instantaneous
- If
start_tzid
is provided butend_tzid
is omitted, use the same time zone for both timestamps - Allow users to discover and interact with calendar events
- Support display and interpretation of different time zones
Relay Behavior
Relays should handle these events like any other addressable event, allowing them to be retrieved, updated, and deleted according to standard Nostr protocols.
Use Cases
- Meetings and appointments
- Video calls and webinars
- Concerts and time-specific performances
- Any event where the specific time is important
- Events that span across time zones
Example
json
{
"id": "e2c7909bd47fce336edee4ccd32894181d08ea2c4f33b27f1f80149ae28f4d56",
"pubkey": "79dff8f82963424e1852174ed276b6715c4ccc9777e489234a363a43d7c73143",
"created_at": 1671217411,
"kind": 31923,
"tags": [
["d", "7d9fea92-da3b-4f2d-9db8-e27c1b8cd391"],
["title", "Nostr Protocol Discussion"],
["summary", "Weekly sync about Nostr protocol development"],
["start", "1683036000"],
["end", "1683039600"],
["start_tzid", "America/Los_Angeles"],
["end_tzid", "America/Los_Angeles"],
["location", "https://meet.example.com/nostr-weekly"],
["p", "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245", "", "organizer"],
["p", "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52", "", "participant"],
["l", "videocall", "com.example.meetings"],
["t", "nostr"],
["t", "development"],
["r", "https://pad.example.com/nostr-meeting-notes"]
],
"content": "We'll discuss the latest NIPs, review implementation progress, and plan for upcoming features. Please prepare updates on your assigned tasks.",
"sig": "a52e89981edca7c360c9c172bc35af902c6e2f5aabc13c3e70c2c98ef7ae83d15bd84ff58c796ab07eecc72c6c54c4174e7fb8be7c7719b5794824fe2db5637d"
}
References
Related Kinds
Notes
- The
name
tag is deprecated in favor of thetitle
tag but may still be used iftitle
is not available. - Clients are responsible for translating between time zones and handling daylight savings adjustments.
- NIP-52 intentionally does not support recurring calendar events due to their complexity.