---
title: "Answer an invitation"
method: POST
path: "/v1/inboxes/{inbox_id}/calendar/events/{event_id}/rsvp"
tags: ["Calendar"]
---

# Answer an invitation

`POST /v1/inboxes/{inbox_id}/calendar/events/{event_id}/rsvp`

## Request

- Base URL: `https://api.deadsimple.email`
- URL: `https://api.deadsimple.email/v1/inboxes/{inbox_id}/calendar/events/{event_id}/rsvp`
- Auth: HTTP bearer

Sends an iCalendar REPLY to the event's organizer with this inbox's PARTSTAT (through the normal send path; needs `messages.send`) and records the answer on the event's attendee entry. Only for events the inbox does not organize, which includes every invitation that arrived by email. Emits `calendar.event.updated`. SDK: `calendar.rsvp`.

## Path parameters

- `inbox_id` string, required
- `event_id` string, required

## Request body

- object
  - `response` 'accepted' | 'declined' | 'tentative', required
  - `comment` string: Sent as the body of the reply.
  - `subject` string: Defaults to "Accepted: {title}" etc.

## Response `201`

Replied.

- CalendarRsvpResult
  - `event_id` string
  - `inbox_id` string
  - `workspace_id` string, nullable
  - `ical_uid` string: Stable across updates. What an update, cancellation or reply is matched on, on both ends.
  - `title` string
  - `description` string
  - `location` string
  - `start_at` string: ISO 8601 UTC, e.g. 2026-09-15T19:00:00Z
  - `end_at` string: ISO 8601 UTC. Exclusive for all-day events.
  - `timezone` string
  - `all_day` boolean
  - `status` 'confirmed' | 'tentative' | 'cancelled'
  - `organizer` CalendarOrganizer
    - `email` string, email
    - `name` string
  - `attendees` CalendarAttendee[]
    - `email` string, email, required
    - `name` string
    - `response` 'needs-action' | 'accepted' | 'declined' | 'tentative': The attendee's answer as last seen (our own rsvp, or their REPLY).
    - `optional` boolean: OPT-PARTICIPANT rather than REQ-PARTICIPANT on the invitation.
  - `source` 'api' | 'sent' | 'inbound': api = created here; sent = created here and sent as an invitation; inbound = arrived by email.
  - `sequence` integer
  - `message_id` string, nullable: The REPLY message sent to the organizer.
  - `invited_at` string, nullable
  - `created_at` string
  - `updated_at` string
  - `response` 'accepted' | 'declined' | 'tentative'

## Other responses

- `400`: Invalid response, no organizer, or the inbox organizes this event itself.

---

[API](https://skmtc.dev/deadsimple/apis/dead-simple-email-api.md) · [All operations](https://skmtc.dev/deadsimple/apis/dead-simple-email-api/llms.txt) · [OpenAPI document](https://skmtc.dev/deadsimple/apis/dead-simple-email-api/revisions/c697881be131?raw)
