Invitations
CalendarPipe hosted calendars support full iTIP invitation workflows. Create events with attendees and CalendarPipe handles REQUEST and CANCEL delivery automatically. Attendees receive standard calendar invitations and their RSVP responses route back to your hosted calendar.
Invitations require a Pro plan and a hosted calendar. View plans and upgrade.
How Invitations Work
The invitation lifecycle follows these steps:
- Create event with attendees on a hosted calendar via the API
- CalendarPipe sends iTIP REQUEST emails via Resend to each attendee's email address
- Attendees receive standard calendar invitations in their email client or calendar app
- When attendees RSVP, their responses route back to
cal-{feedToken}@in.calendarpipe.com - Poll or receive webhooks to get RSVP status updates in your application
Creating Events with Attendees
To trigger an invitation flow, include an attendees array when creating an event on a hosted calendar:
POST /api/v1/calendars/hosted:{id}/events
Authorization: Bearer `<api_key>`
Content-Type: application/json
{
"title": "Strategy Session",
"start_at": "2026-03-25T10:00:00Z",
"end_at": "2026-03-25T11:00:00Z",
"timezone": "America/New_York",
"attendees": [
{ "email": "alice@example.com", "displayName": "Alice" },
{ "email": "bob@example.com", "displayName": "Bob" }
]
}
Response (201):
{
"data": {
"uid": "abc123-event-uid",
"title": "Strategy Session",
"start_at": "2026-03-25T10:00:00Z",
"end_at": "2026-03-25T11:00:00Z",
"attendees": [
{ "email": "alice@example.com", "displayName": "Alice" },
{ "email": "bob@example.com", "displayName": "Bob" }
]
}
}
CalendarPipe sends an iTIP REQUEST email to each attendee automatically after the event is created. You do not need to trigger delivery separately.
Calendar Email Address
Each hosted calendar has a stable inbound email address in the format:
cal-{feedToken}@in.calendarpipe.com
This address serves two purposes:
- Outbound: It is the organizer address shown on invitations sent to attendees
- Inbound: RSVP replies from attendees are routed back to this address and recorded on the hosted calendar
If you regenerate the hosted calendar's feed token, the calendarEmail address changes. Existing invitation threads will no longer route back correctly -- attendees who have already received invitations will send replies to the old address. Only regenerate the feed token if necessary.
Cancelling Events
To cancel an event and notify all attendees:
DELETE /api/v1/calendars/hosted:{id}/events/{uid}
Authorization: Bearer `<api_key>`
Response (204): No content. CalendarPipe sends an iTIP CANCEL email to all attendees automatically.
Receiving RSVPs
Once attendees respond to an invitation, there are two ways to receive their RSVP status:
Polling
Query the invitations list for a specific status:
GET /api/v1/hosted-calendars/{id}/invitations?status=pending
Authorization: Bearer `<api_key>`
The status query parameter accepts:
| Value | Description |
|---|---|
pending | Awaiting response from attendee |
ACCEPTED | Attendee accepted the invitation |
DECLINED | Attendee declined the invitation |
TENTATIVE | Attendee tentatively accepted |
Webhooks
For real-time RSVP delivery without polling, register a webhook on the hosted calendar. See the Webhooks guide for registration steps, payload format, and HMAC signature verification.
Responding to Invitations
In agent-to-agent scenarios where your hosted calendar receives an invitation from another organizer, your agent can respond programmatically:
POST /api/v1/hosted-calendars/{id}/invitations/{uid}/respond
Authorization: Bearer `<api_key>`
Content-Type: application/json
{ "status": "ACCEPTED" }
Valid values for status:
| Value | Description |
|---|---|
ACCEPTED | Accept the invitation |
DECLINED | Decline the invitation |
TENTATIVE | Tentatively accept the invitation |
Loop Prevention
The organizer email on any event must NOT be a cal-*@in.calendarpipe.com address. CalendarPipe skips internal routing for events where the organizer is a cal-* address to prevent infinite invitation delivery loops. Always use a real external email address or the organizerDisplayName field when creating hosted calendars intended to send invitations.
If you are creating a hosted calendar specifically for invitation sending, set a meaningful organizerDisplayName but ensure the underlying email identity is not a CalendarPipe inbound address.
Next Steps
- Webhooks -- Register a webhook to receive real-time RSVP notifications instead of polling
- Hosted Calendars Overview -- Create and manage the hosted calendars that power invitation flows