Skip to content

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 ​

PropertyValue
Kind Number31923
Event RangeAddressable
Defined inNIP-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 NameDescriptionFormatRequired
dUniversally unique identifier (UUID)["d", "<UUID>"]Yes
titleTitle of the calendar event["title", "<title of calendar event>"]Yes
startInclusive start Unix timestamp in seconds["start", "<Unix timestamp in seconds>"]Yes
endExclusive end Unix timestamp in seconds["end", "<Unix timestamp in seconds>"]No
start_tzidTime zone of the start timestamp["start_tzid", "<IANA Time Zone Database identifier>"]No
end_tzidTime zone of the end timestamp["end_tzid", "<IANA Time Zone Database identifier>"]No
summaryBrief description of the calendar event["summary", "<brief description>"]No
imageURL of an image to use for the event["image", "<string with image URI>"]No
locationLocation of the calendar event["location", "<location>"]No
gGeohash to associate with a searchable physical location["g", "<geohash>"]No
pPubkey of a participant with optional relay URL and role["p", "<32-bytes hex of a pubkey>", "<optional recommended relay URL>", "<role>"]No
lLabel to categorize calendar event["l", "<label>", "<optional namespace>"]No
tHashtag to categorize calendar event["t", "<tag>"]No
rReferences / 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 but end_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 ​

Notes ​

  • The name tag is deprecated in favor of the title tag but may still be used if title 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.