Quickstart
One key, one account
Create a key in the dashboard, keep it on your server, and send it as a Bearer token. All reads and writes are automatically isolated to the key’s account.
curl --request POST "$HEYATTEND_API_BASE_URL/events" \
--header "Authorization: Bearer $HEYATTEND_API_TOKEN" \
--header "Content-Type: application/json" \
--data '{
"title": "Summer product launch",
"start_at": "2026-08-12T18:00:00+02:00",
"end_at": "2026-08-12T20:00:00+02:00",
"timezone": "Europe/Madrid",
"status": "published"
}'Create a key
Dashboard → Developer API. The full key appears once.
Set the base URL
https://heyattend.com/api/v1
Send JSON
Use Content-Type: application/json for writes.
Security
Authentication
API keys start with hat_. They are stored as SHA-256 hashes, can expire, and can be revoked immediately. A key grants full API access to its account, so never expose it in browser code or source control.
Authorization: Bearer hat_your_keyEndpoint group
Events
Create, publish, update and remove events in the token’s account.
GET
/events
List events
POST
/events
Create an event
GET
/events/{id}
Get an event
PATCH
/events/{id}
Update an event
DELETE
/events/{id}
Delete an event
Endpoint group
RSVPs
Manage attendee responses and each event’s RSVP form configuration.
GET
/rsvps
List RSVP responses
POST
/events/{eventId}/rsvps
Create an RSVP
GET
/rsvps/{id}
Get an RSVP
PATCH
/rsvps/{id}
Update an RSVP
DELETE
/rsvps/{id}
Delete an RSVP
GET
/events/{eventId}/rsvp-form
Get RSVP form settings
PATCH
/events/{eventId}/rsvp-form
Configure the RSVP form
Endpoint group
Notifications
Manage event-triggered email and web-push notification rules.
GET
/notifications
List notifications
POST
/events/{eventId}/notifications
Create a notification
GET
/notifications/{id}
Get a notification
PATCH
/notifications/{id}
Update a notification
DELETE
/notifications/{id}
Delete a notification
Endpoint group
Calendars
Publish subscription calendars and control which account events they contain.
GET
/calendars
List calendars
POST
/calendars
Create a calendar
GET
/calendars/{id}
Get a calendar
PATCH
/calendars/{id}
Update a calendar
DELETE
/calendars/{id}
Delete a calendar
JSON contracts
Resource fields
Timestamps use RFC 3339 on input and UTC on output. Event and calendar timezones use IANA names such as Europe/Madrid. IDs, account ownership, slugs, feed tokens and audit timestamps are server-managed.
Event write fields
title
description
status
start_at
end_at
timezone
all_day
clock_24h
is_online
location
location_url
location_map_url
organizer_mode
organizer_name
organizer_email
design_style
design_id
more_info_enabled
more_info_label
more_info_url
theme
reminders
RSVP write fields
status
name
email
guests_count
answers
tags
locale
Notification write fields
name
channel
trigger
offset_value
offset_unit
audience
subject
body_html
body_text
enabled
Calendar write fields
name
description
timezone
is_public
organizer_mode
organizer_name
organizer_email
design_style
theme
event_ids
{"data": [...], "meta": {"page": 1, "per_page": 25, "total": 42, "total_pages": 2}}. Single-resource responses use {"data": {...}}. per_page is capped at 100.
Model Context Protocol
Give an AI client the same controls
Connect to the public Streamable HTTP endpoint with the same account API key. The MCP service delegates every operation to the REST API, so account isolation, validation and revocation rules stay identical.
1. Set your API key
export HEYATTEND_API_TOKEN="hat_…"
MCP URL: https://heyattend.com/mcp2. Add the remote server
{
"mcpServers": {
"heyattend": {
"url": "https://heyattend.com/mcp",
"headers": {
"Authorization": "Bearer ${env:HEYATTEND_API_TOKEN}"
}
}
}
}Available tools
events_list
events_get
events_create
events_update
events_delete
rsvps_list
rsvps_get
rsvps_create
rsvps_update
rsvps_delete
rsvp_form_get
rsvp_form_update
notifications_list
notifications_get
notifications_create
notifications_update
notifications_delete
calendars_list
calendars_get
calendars_create
calendars_update
calendars_delete
Failures
Errors and status codes
400
Invalid filter or malformed request
401
Missing, expired, revoked or invalid API key
404
The resource is outside the key’s account or does not exist
422
Validation failed; inspect error.details by field
204
A delete completed successfully with no response body
500
The operation could not be persisted