Skip to content

Kind 31925: Calendar Event RSVP

Overview

A calendar event RSVP is a response to a calendar event that indicates a user's attendance intention. It allows users to specify whether they will attend, tentatively attend, or decline a calendar event, and optionally indicate their free/busy status during the event's timeframe.

Specification

PropertyValue
Kind Number31925
Event RangeAddressable
Defined inNIP-52

Content Format

The content field is optional and should contain a free-form note that adds more context to this calendar event response.

Tags

Tag NameDescriptionFormatRequired
aCoordinates to a calendar event being responded to["a", "<31922 or 31923>:<calendar event author pubkey>:<d-identifier of calendar event>", "<optional relay URL>"]Yes
eEvent ID of a calendar event being responded to["e", "<kind 31922 or 31923 event id>", "<optional recommended relay URL>"]No
dUniversally unique identifier (UUID)["d", "<UUID>"]Yes
statusAttendance status["status", "<accepted/declined/tentative>"]Yes
fbFree or busy status["fb", "<free/busy>"]No
pPubkey of the author of the calendar event["p", "<hex pubkey of kind 31922 or 31923 event>", "<optional recommended relay URL>"]No

Client Behavior

Clients should:

  • Generate a UUID when creating a new calendar event RSVP
  • Allow users to respond to calendar events with their attendance intention
  • Prompt users to RSVP if they are tagged in a calendar event
  • Optionally prompt calendar event creators to invite users who have RSVP'd but were not initially invited
  • Consider an RSVP with an e tag as applicable only to the specific revision of the calendar event
  • Ignore the fb tag if the status is set to declined

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

  • Responding to meeting invitations
  • Tracking event attendance
  • Managing participant lists for calendar events
  • Determining if someone is available or busy during a specific timeframe

Example

json
{
  "id": "d71c61cf3ede31d79ca9bd863a39c0dcfd94ceff88ce74d03484ad41a9a8bd36",
  "pubkey": "fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52",
  "created_at": 1671217800,
  "kind": 31925,
  "tags": [
    ["e", "e2c7909bd47fce336edee4ccd32894181d08ea2c4f33b27f1f80149ae28f4d56", "wss://relay.example.com"],
    ["a", "31923:79dff8f82963424e1852174ed276b6715c4ccc9777e489234a363a43d7c73143:7d9fea92-da3b-4f2d-9db8-e27c1b8cd391", "wss://relay.example.com"],
    ["d", "c9e8a2b1-d5c1-4f3a-b86e-7a98f3d2e1c5"],
    ["status", "accepted"],
    ["fb", "busy"],
    ["p", "79dff8f82963424e1852174ed276b6715c4ccc9777e489234a363a43d7c73143", "wss://relay.example.com"]
  ],
  "content": "I'll be attending and will prepare the demo we discussed.",
  "sig": "f2a1bc05e834e6c6c097d82a18b9c33f805ea8373f008d25a5b971ef6a08d729df152cf5394cb1b44a1fbd76a091a1ec95bc9bd7520505b7cfa0e1a7bb3db72f"
}

References

Notes

  • NIP-52 intentionally does not define who is authorized to attend a calendar event if the user who RSVP'd has not been tagged. It is up to the calendar event creator to determine the semantics.
  • NIP-52 also intentionally does not define what happens if a calendar event changes after an RSVP is submitted.
  • If an e tag is present, clients should interpret it as an indication that the RSVP is a response to that specific revision of the calendar event.