# AddCal API Documentation

The official AddCal API documentation. This comprehensive guide provides developers with everything needed to integrate calendar and event management functionality into their applications. Our RESTful API enables seamless creation, management, and sharing of events across multiple platforms and calendar services.

- Base URL: `https://addcal.co`
- Authentication: HTTP Bearer token. You can retrieve your token from the [API Tokens page](https://addcal.co/user/api-tokens) in your dashboard.
- OpenAPI document: https://addcal.co/docs.openapi
- Interactive reference: https://addcal.co/docs

Send the token on every request:

```
Authorization: Bearer YOUR_API_TOKEN
Accept: application/json
```

## Sections

- [Create Event](https://addcal.co/docs/create-event.md)
- [Calendars](https://addcal.co/docs/calendars.md)
- [Events](https://addcal.co/docs/events.md)
- [Events > RSVPs](https://addcal.co/docs/rsvps.md)
- [Events > Invites](https://addcal.co/docs/invites.md)
- [Account](https://addcal.co/docs/account.md)
- [Dynamic Links](https://addcal.co/docs/dynamic-links.md)

## Events > RSVPs

APIs for managing event RSVP responses.

## Working with Custom Form Fields

Events can have custom forms with additional fields beyond the standard `name` and `email`. To create an RSVP with custom field data:

1. First, fetch the event details using the **Get Event** endpoint (`GET /api/calendars/{calendar}/events/{event}`)
2. Check the `custom_form` object in the response - it contains a `fields` array with all form fields
3. Use each field's `slug` property as the key when submitting custom field data

### Example Workflow

```
GET /api/calendars/cal_abc123/events/evt_xyz789

Response:
{
  "data": {
    "custom_form": {
      "fields": [
        { "slug": "company", "label": "Company Name", "field_type": "text", "is_required": false },
        { "slug": "dietary_requirements", "label": "Dietary Requirements", "field_type": "dropdown", "is_required": true,
          "options": [{ "label": "Vegetarian", "value": "vegetarian" }, { "label": "None", "value": "none" }] }
      ]
    }
  }
}
```

Then create the RSVP, passing the custom field values in `custom_fields`, keyed by slug:

```
POST /api/calendars/cal_abc123/events/evt_xyz789/rsvps

{
  "name": "John Doe",
  "email": "john@example.com",
  "response_type": "yes",
  "custom_fields": {
    "company": "Acme Inc",
    "dietary_requirements": "vegetarian"
  }
}
```

For fields of type `name_field` and `email_field`, send the value as the top-level `name` / `email`
instead of inside `custom_fields`.

### Strict validation (opt-in)

By default the API is lenient: `custom_fields` are stored as sent, without enforcing the form's
required fields, option lists, or field types. This keeps existing integrations working.

Pass `"strict": true` to validate the submission exactly like the public RSVP form: fields marked
`is_required` must be present, `dropdown`/`radio` values must be one of the field's `options[].value`,
and typed fields (e.g. `marketing_consent`) must match their type. Note `marketing_consent` values
must be a JSON boolean (`true`/`false`), not a string like `"True"`.

Earlier versions of this API accepted these values as a flat `data` object. That shape is still
accepted, but it is deprecated: prefer `custom_fields`.

### List RSVPs

`GET /api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps`

**Path parameters**

- `calendar_public_id` (string, required): The ID of the calendar public.
- `event_public_id` (string, required): The ID of the event public.

**Query parameters**

- `response_type` (string, optional): Filter by response type. Options: 'yes', 'maybe', 'no'
- `search` (string, optional): Search RSVPs by name or email
- `per_page` (integer, optional): Number of results per page (1-100)

**Body parameters** (`application/json`)

- `response_type` (string, optional): No description. Options: `yes`, `maybe`, `no`.
- `search` (string, optional): Must not be greater than 255 characters.
- `per_page` (integer, optional): Must be at least 1. Must not be greater than 100.

**Example request**

```bash
curl --request GET \
  --url 'https://addcal.co/api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json'
```

**Response 200**

```json
{
    "data": [
        {
            "uid": "57c0e3df-5a27-47e7-8969-e14d9246073b",
            "public_id": "rsvp_57c0e3df-5a27-47e7-8969-e14d9246073b",
            "event_uid": "xozetrg0ihtj",
            "response_type": "yes",
            "name": "Loy Price",
            "email": "jerel.runolfsdottir@emmerich.com",
            "data": {
                "guests": 3,
                "comment": "Tenetur voluptatem et dolore labore."
            },
            "formatted_created_at": "2026-08-08 06:22:37",
            "created_at": "2026-08-08T06:22:37.000000Z",
            "updated_at": "2026-08-08T06:22:37.000000Z",
            "event": {
                "uid": "xozetrg0ihtj",
                "public_id": "evt_xozetrg0ihtj",
                "calendar_uid": "cal_5ohsydj78jxe",
                "short_link": null,
                "title": "Vel sed magni officia.",
                "internal_name": null,
                "is_draft": false,
                "description": "<p>Doloremque distinctio omnis adipisci tempora et fuga doloribus. Sint laboriosam accusamus repellat sit et aut impedit velit. Quasi qui quia dolorem voluptates.</p>\n\n<p>Et aliquam veniam quaerat ipsum repellat. Voluptatum delectus sint nostrum maxime rerum.</p>",
                "location": "28829 Hackett Ranch Suite 235\nEast Vernonchester, AZ 84999-2309",
                "is_all_day": false,
                "has_rsvp": false,
                "has_calendar_invites": false,
                "rsvp_limit": null,
                "is_recurring": false,
                "recurrence_rule": null,
                "recurrence_text": null,
                "date_start": "2026-08-28T02:23:52-07:00",
                "date_end": "2026-08-28T05:23:52-07:00",
                "timezone": "America/Hermosillo",
                "busy_type": null,
                "reminder_before": null,
                "date_range_formatted": "Fri, Aug 28, 2026 2:23 AM - 5:23 AM",
                "public_url": "http://addcal.co/e/xozetrg0ihtj",
                "embed_url": "http://addcal.co/e/xozetrg0ihtj",
                "location_url": null,
                "image_url": null,
                "timezone_readable": "MST / GMT-07:00",
                "calendar": {
                    "uid": "5ohsydj78jxe",
                    "public_id": "cal_5ohsydj78jxe",
                    "short_link": null,
                    "name": "officia ut sint",
                    "internal_name": null,
                    "description": "",
                    "timezone": "Africa/Ndjamena",
                    "week_begins": 2,
                    "public_url": "http://addcal.co/c/5ohsydj78jxe",
                    "created_at": "2026-08-08T06:22:37.000000Z",
                    "updated_at": "2026-08-08T06:22:37.000000Z"
                },
                "created_at": "2026-08-08T06:22:37.000000Z",
                "updated_at": "2026-08-08T06:22:37.000000Z"
            }
        },
        {
            "uid": "902af2fe-5964-4665-af43-ae9b5ce98adb",
            "public_id": "rsvp_902af2fe-5964-4665-af43-ae9b5ce98adb",
            "event_uid": "js4f0zk5helq",
            "response_type": "no",
            "name": "Larue Nikolaus",
            "email": "rboyer@conroy.com",
            "data": {
                "guests": 2,
                "comment": null
            },
            "formatted_created_at": "2026-08-08 06:22:37",
            "created_at": "2026-08-08T06:22:37.000000Z",
            "updated_at": "2026-08-08T06:22:37.000000Z",
            "event": {
                "uid": "js4f0zk5helq",
                "public_id": "evt_js4f0zk5helq",
                "calendar_uid": "cal_jpc9t7hb3eyr",
                "short_link": null,
                "title": "Sit voluptatibus debitis quod est iusto.",
                "internal_name": null,
                "is_draft": false,
                "description": "<p>Alias et magnam debitis. Est eligendi voluptatem et beatae et optio. Sed omnis doloribus totam nobis qui deserunt. Ipsa voluptatibus nam quaerat non voluptatem.</p>\n\n<p>Vitae dolorum eum voluptatibus. Tempora illo nostrum sit voluptates est unde in. Quis voluptatem laborum delectus officia. Consequatur et et sed incidunt et.</p>",
                "location": null,
                "is_all_day": false,
                "has_rsvp": false,
                "has_calendar_invites": false,
                "rsvp_limit": null,
                "is_recurring": false,
                "recurrence_rule": null,
                "recurrence_text": null,
                "date_start": "2026-07-08T14:53:41-03:00",
                "date_end": "2026-07-08T17:53:41-03:00",
                "timezone": "Atlantic/Stanley",
                "busy_type": null,
                "reminder_before": null,
                "date_range_formatted": "Wed, Jul 8, 2026 2:53 PM - 5:53 PM",
                "public_url": "http://addcal.co/e/js4f0zk5helq",
                "embed_url": "http://addcal.co/e/js4f0zk5helq",
                "location_url": null,
                "image_url": null,
                "timezone_readable": "-03 / GMT-03:00",
                "calendar": {
                    "uid": "jpc9t7hb3eyr",
                    "public_id": "cal_jpc9t7hb3eyr",
                    "short_link": null,
                    "name": "consequatur nobis ea",
                    "internal_name": "porro debitis alias",
                    "description": "",
                    "timezone": "Asia/Yangon",
                    "week_begins": 5,
                    "public_url": "http://addcal.co/c/jpc9t7hb3eyr",
                    "created_at": "2026-08-08T06:22:37.000000Z",
                    "updated_at": "2026-08-08T06:22:37.000000Z"
                },
                "created_at": "2026-08-08T06:22:37.000000Z",
                "updated_at": "2026-08-08T06:22:37.000000Z"
            }
        }
    ]
}
```

### Create RSVP

`POST /api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps`

**Path parameters**

- `calendar_public_id` (string, required): The ID of the calendar public.
- `event_public_id` (string, required): The ID of the event public.

**Body parameters** (`application/json`)

- `response_type` (string, required): No description. Options: `yes`, `maybe`, `no`.
- `name` (string, required): Must not be greater than 255 characters.
- `email` (string, required): Must be a valid email address. Must not be greater than 255 characters.
- `strict` (boolean, optional): No description.
- `custom_fields` (object, optional): No description.

**Example request**

```bash
curl --request POST \
  --url 'https://addcal.co/api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
    "response_type": "et",
    "name": "gyszagffhimeliawaqj",
    "email": "martin.lebsack@example.net",
    "strict": false
}'
```

**Response 200**

```json
{
    "uid": "c1b213b5-6f07-484a-9b7e-26296de03629",
    "public_id": "rsvp_c1b213b5-6f07-484a-9b7e-26296de03629",
    "event_uid": "gmbgrmuri99w",
    "response_type": "no",
    "name": "Jaime Heathcote",
    "email": "london52@hotmail.com",
    "data": {
        "guests": 2,
        "comment": "Libero saepe molestiae dolore."
    },
    "formatted_created_at": "2026-08-08 06:22:37",
    "created_at": "2026-08-08T06:22:37.000000Z",
    "updated_at": "2026-08-08T06:22:37.000000Z",
    "event": {
        "uid": "gmbgrmuri99w",
        "public_id": "evt_gmbgrmuri99w",
        "calendar_uid": "cal_cf7c4qvlny4u",
        "short_link": null,
        "title": "Molestiae laborum porro dolorem excepturi sed.",
        "internal_name": null,
        "is_draft": false,
        "description": "<p>Dignissimos aut nihil ea quo exercitationem. Quo accusamus rem non recusandae.</p>\n\n<p>Consectetur facere enim praesentium eum est. Dolor nemo et non omnis illum aut voluptate alias. Qui ea soluta autem.</p>",
        "location": null,
        "is_all_day": false,
        "has_rsvp": false,
        "has_calendar_invites": false,
        "rsvp_limit": null,
        "is_recurring": false,
        "recurrence_rule": null,
        "recurrence_text": null,
        "date_start": "2026-07-16T01:19:05+04:00",
        "date_end": "2026-07-16T05:19:05+04:00",
        "timezone": "Indian/Reunion",
        "busy_type": null,
        "reminder_before": null,
        "date_range_formatted": "Thu, Jul 16, 2026 1:19 AM - 5:19 AM",
        "public_url": "http://addcal.co/e/gmbgrmuri99w",
        "embed_url": "http://addcal.co/e/gmbgrmuri99w",
        "location_url": null,
        "image_url": null,
        "timezone_readable": "+04 / GMT+04:00",
        "calendar": {
            "uid": "cf7c4qvlny4u",
            "public_id": "cal_cf7c4qvlny4u",
            "short_link": null,
            "name": "ducimus ratione dolores",
            "internal_name": "et ducimus ut",
            "description": "<p>Dolorem et est eligendi aspernatur aut. Maiores voluptatem in adipisci molestiae.</p>",
            "timezone": "Africa/Lagos",
            "week_begins": 6,
            "public_url": "http://addcal.co/c/cf7c4qvlny4u",
            "created_at": "2026-08-08T06:22:37.000000Z",
            "updated_at": "2026-08-08T06:22:37.000000Z"
        },
        "created_at": "2026-08-08T06:22:37.000000Z",
        "updated_at": "2026-08-08T06:22:37.000000Z"
    }
}
```

### Get RSVP

`GET /api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps/{public_id}`

**Path parameters**

- `calendar_public_id` (string, required): The ID of the calendar public.
- `event_public_id` (string, required): The ID of the event public.
- `public_id` (string, required): The ID of the public.

**Example request**

```bash
curl --request GET \
  --url 'https://addcal.co/api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps/{public_id}' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json'
```

**Response 200**

```json
{
    "uid": "04e263eb-f4f9-4bca-9afb-3edc66a36521",
    "public_id": "rsvp_04e263eb-f4f9-4bca-9afb-3edc66a36521",
    "event_uid": "6uxug4wywuu5",
    "response_type": "maybe",
    "name": "Jovani Hayes",
    "email": "raymond30@schamberger.org",
    "data": {
        "guests": 1,
        "comment": null
    },
    "formatted_created_at": "2026-08-08 06:22:37",
    "created_at": "2026-08-08T06:22:37.000000Z",
    "updated_at": "2026-08-08T06:22:37.000000Z",
    "event": {
        "uid": "6uxug4wywuu5",
        "public_id": "evt_6uxug4wywuu5",
        "calendar_uid": "cal_y6bzqft7ezgd",
        "short_link": null,
        "title": "Quia iure placeat provident aut.",
        "internal_name": null,
        "is_draft": false,
        "description": "<p>Ut ad iste tenetur soluta excepturi esse dolorem. Tenetur sequi voluptate aspernatur tempora assumenda. Eum minus recusandae voluptas aut ducimus ut. Non a et ea nihil vero voluptas.</p>\n\n<p>Temporibus delectus possimus id. Dicta sit itaque vel dolorem ea nam qui ad. Ut quos quam et aut. Autem fugit ea facilis commodi et est quisquam voluptatem.</p>",
        "location": null,
        "is_all_day": false,
        "has_rsvp": false,
        "has_calendar_invites": false,
        "rsvp_limit": null,
        "is_recurring": false,
        "recurrence_rule": null,
        "recurrence_text": null,
        "date_start": "2026-08-27T08:31:06-08:00",
        "date_end": "2026-08-27T10:31:06-08:00",
        "timezone": "Pacific/Pitcairn",
        "busy_type": null,
        "reminder_before": null,
        "date_range_formatted": "Thu, Aug 27, 2026 8:31 AM - 10:31 AM",
        "public_url": "http://addcal.co/e/6uxug4wywuu5",
        "embed_url": "http://addcal.co/e/6uxug4wywuu5",
        "location_url": null,
        "image_url": null,
        "timezone_readable": "-08 / GMT-08:00",
        "calendar": {
            "uid": "y6bzqft7ezgd",
            "public_id": "cal_y6bzqft7ezgd",
            "short_link": null,
            "name": "nemo voluptatem doloremque",
            "internal_name": "ut dolore incidunt",
            "description": "<p>Quia similique aspernatur qui eos iusto sed natus. Rerum et nostrum dolores quasi. Nisi modi nihil vero. Maiores dolorem ex adipisci labore et assumenda nam voluptas.</p>",
            "timezone": "Europe/Chisinau",
            "week_begins": 2,
            "public_url": "http://addcal.co/c/y6bzqft7ezgd",
            "created_at": "2026-08-08T06:22:37.000000Z",
            "updated_at": "2026-08-08T06:22:37.000000Z"
        },
        "created_at": "2026-08-08T06:22:37.000000Z",
        "updated_at": "2026-08-08T06:22:37.000000Z"
    }
}
```

### Update RSVP

`PUT /api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps/{public_id}`

**Path parameters**

- `calendar_public_id` (string, required): The ID of the calendar public.
- `event_public_id` (string, required): The ID of the event public.
- `public_id` (string, required): The ID of the public.

**Body parameters** (`application/json`)

- `response_type` (string, optional): No description. Options: `yes`, `maybe`, `no`.
- `name` (string, optional): Must not be greater than 255 characters.
- `email` (string, optional): Must be a valid email address. Must not be greater than 255 characters.
- `strict` (boolean, optional): No description.
- `custom_fields` (object, optional): No description.

**Example request**

```bash
curl --request PUT \
  --url 'https://addcal.co/api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps/{public_id}' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
    "response_type": "rerum",
    "name": "etmr",
    "email": "gloria.walker@example.net",
    "strict": true
}'
```

**Response 200**

```json
{
    "uid": "8191893c-fe73-4239-b8cf-ab7085182788",
    "public_id": "rsvp_8191893c-fe73-4239-b8cf-ab7085182788",
    "event_uid": "l5cp6fav8q0c",
    "response_type": "maybe",
    "name": "Melvina Osinski",
    "email": "aileen.braun@gmail.com",
    "data": {
        "guests": 2,
        "comment": "Laborum quia ea consectetur reprehenderit perferendis velit."
    },
    "formatted_created_at": "2026-08-08 06:22:37",
    "created_at": "2026-08-08T06:22:37.000000Z",
    "updated_at": "2026-08-08T06:22:37.000000Z",
    "event": {
        "uid": "l5cp6fav8q0c",
        "public_id": "evt_l5cp6fav8q0c",
        "calendar_uid": "cal_3f2j9k1r0lfn",
        "short_link": null,
        "title": "Qui ad est mollitia.",
        "internal_name": null,
        "is_draft": false,
        "description": "<p>Nobis occaecati vel nulla tenetur mollitia. Pariatur accusamus perspiciatis accusantium in veniam quas. Ut ut quia ut quasi ea illum blanditiis modi. Iusto culpa recusandae consectetur perspiciatis minus cupiditate.</p>\n\n<p>Facere consequatur ut enim. Alias ea deleniti voluptas ad minima. Voluptas et eos iure illum est. Blanditiis fugit minima ea voluptas.</p>",
        "location": "567 Haag Trafficway\nSchmidtmouth, IA 66808-7508",
        "is_all_day": false,
        "has_rsvp": false,
        "has_calendar_invites": false,
        "rsvp_limit": null,
        "is_recurring": false,
        "recurrence_rule": null,
        "recurrence_text": null,
        "date_start": "2026-08-01T17:27:34+02:00",
        "date_end": "2026-08-01T18:27:34+02:00",
        "timezone": "Europe/San_Marino",
        "busy_type": null,
        "reminder_before": null,
        "date_range_formatted": "Sat, Aug 1, 2026 5:27 PM - 6:27 PM",
        "public_url": "http://addcal.co/e/l5cp6fav8q0c",
        "embed_url": "http://addcal.co/e/l5cp6fav8q0c",
        "location_url": null,
        "image_url": null,
        "timezone_readable": "CEST / GMT+02:00",
        "calendar": {
            "uid": "3f2j9k1r0lfn",
            "public_id": "cal_3f2j9k1r0lfn",
            "short_link": null,
            "name": "corporis ut dolores",
            "internal_name": null,
            "description": "<p>Qui quas officia quos quidem nisi similique. Et consequatur aut ut eos deserunt doloribus. Totam et eos omnis aut omnis ipsam sit. Pariatur est nesciunt veniam aliquam.</p>",
            "timezone": "America/Indiana/Tell_City",
            "week_begins": 1,
            "public_url": "http://addcal.co/c/3f2j9k1r0lfn",
            "created_at": "2026-08-08T06:22:37.000000Z",
            "updated_at": "2026-08-08T06:22:37.000000Z"
        },
        "created_at": "2026-08-08T06:22:37.000000Z",
        "updated_at": "2026-08-08T06:22:37.000000Z"
    }
}
```

### Delete RSVP

`DELETE /api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps/{public_id}`

**Path parameters**

- `calendar_public_id` (string, required): The ID of the calendar public.
- `event_public_id` (string, required): The ID of the event public.
- `public_id` (string, required): The ID of the public.

**Example request**

```bash
curl --request DELETE \
  --url 'https://addcal.co/api/calendars/{calendar_public_id}/events/{event_public_id}/rsvps/{public_id}' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json'
```
