# 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 > Invites

Send real calendar invites (iTIP/iMIP) by email straight from your own integration.

An invite emails the attendee a native calendar request with Yes/No/Maybe buttons; accepting writes
the event into their primary calendar and their reply is tracked back on the invite. Calendar invites
must be enabled on the event (`has_calendar_invites`) for a team on the Business plan, otherwise
these endpoints return `403`.

### Resend Invite by Email

`POST /api/calendars/{calendar_public_id}/events/{event_public_id}/invites/resend`

**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`)

- `email` (string, required): The attendee email whose invite to resend.
- `source` (string, optional): No description. Options: `api`, `zapier`.

**Example request**

```bash
curl --request POST \
  --url 'https://addcal.co/api/calendars/{calendar_public_id}/events/{event_public_id}/invites/resend' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
    "email": "john@example.com",
    "source": "zapier"
}'
```

**Response 200**

```json
{
    "data": {
        "public_id": "inv_u3atc0kdecxy",
        "event_uid": "2cqq1ak9efjn",
        "email": "keenan.kuhlman@example.net",
        "status": "pending",
        "source": "event_page",
        "sent_at": null,
        "responded_at": null,
        "cancelled_at": null,
        "created_at": "2026-08-08T06:22:37+00:00",
        "updated_at": "2026-08-08T06:22:37+00:00"
    }
}
```

**Response 404** — Not found

```json
{
    "message": "No invite found for that email address."
}
```

### Cancel Invite by Email

`POST /api/calendars/{calendar_public_id}/events/{event_public_id}/invites/cancel`

**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`)

- `email` (string, required): The attendee email whose invite to cancel.
- `source` (string, optional): No description. Options: `api`, `zapier`.

**Example request**

```bash
curl --request POST \
  --url 'https://addcal.co/api/calendars/{calendar_public_id}/events/{event_public_id}/invites/cancel' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
    "email": "john@example.com",
    "source": "zapier"
}'
```

**Response 204** — Invite cancelled

**Response 404** — Not found

```json
{
    "message": "No invite found for that email address."
}
```

### Resend Invite

`POST /api/calendars/{calendar_public_id}/events/{event_public_id}/invites/{invite_public_id}/resend`

**Path parameters**

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

**Example request**

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

**Response 200**

```json
{
    "data": {
        "public_id": "inv_99bf17t1gppa",
        "event_uid": "9w1fg3e87two",
        "email": "carolina49@example.net",
        "status": "pending",
        "source": "event_page",
        "sent_at": null,
        "responded_at": null,
        "cancelled_at": null,
        "created_at": "2026-08-08T06:22:37+00:00",
        "updated_at": "2026-08-08T06:22:37+00:00"
    }
}
```

**Response 422** — Cannot resend

```json
{
    "message": "Cancelled invites cannot be resent."
}
```

### Send Invite

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

**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`)

- `email` (string, required): The attendee email to invite.
- `source` (string, optional): No description. Options: `api`, `zapier`.

**Example request**

```bash
curl --request POST \
  --url 'https://addcal.co/api/calendars/{calendar_public_id}/events/{event_public_id}/invites' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
    "email": "john@example.com",
    "source": "api"
}'
```

**Response 200**

```json
{
    "data": {
        "public_id": "inv_smviwh3d757o",
        "event_uid": "yhhn1waby7xb",
        "email": "zechariah85@example.com",
        "status": "pending",
        "source": "event_page",
        "sent_at": null,
        "responded_at": null,
        "cancelled_at": null,
        "created_at": "2026-08-08T06:22:37+00:00",
        "updated_at": "2026-08-08T06:22:37+00:00"
    }
}
```

**Response 403** — Invites not enabled

```json
{
    "message": "Calendar invites are not enabled for this event."
}
```

**Response 422** — Event has ended

```json
{
    "message": "Sorry, this event has already ended."
}
```

### List Invites

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

**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**

- `status` (string, optional): Filter by invite status (e.g. 'sent', 'accepted', 'declined')
- `search` (string, optional): Search invites by email
- `per_page` (integer, optional): Number of results per page (1-100)

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

- `status` (string, optional): No description. Options: `pending`, `sent`, `accepted`, `tentative`, `declined`, `bounced`, `failed`, `cancelled`.
- `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}/invites' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json'
```

**Response 200**

```json
{
    "data": [
        {
            "public_id": "inv_nl25o5qyx5ws",
            "event_uid": "u7racogtx822",
            "email": "augusta.satterfield@example.org",
            "status": "pending",
            "source": "event_page",
            "sent_at": null,
            "responded_at": null,
            "cancelled_at": null,
            "created_at": "2026-08-08T06:22:37+00:00",
            "updated_at": "2026-08-08T06:22:37+00:00"
        },
        {
            "public_id": "inv_uxggtoia1m4f",
            "event_uid": "q2w26s6asw9v",
            "email": "llakin@example.net",
            "status": "pending",
            "source": "event_page",
            "sent_at": null,
            "responded_at": null,
            "cancelled_at": null,
            "created_at": "2026-08-08T06:22:37+00:00",
            "updated_at": "2026-08-08T06:22:37+00:00"
        }
    ]
}
```

### Get Invite

`GET /api/calendars/{calendar_public_id}/events/{event_public_id}/invites/{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}/invites/{public_id}' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json'
```

**Response 200**

```json
{
    "data": {
        "public_id": "inv_4v2vy5cy9rkd",
        "event_uid": "vgq0km3ctt1k",
        "email": "jbashirian@example.com",
        "status": "pending",
        "source": "event_page",
        "sent_at": null,
        "responded_at": null,
        "cancelled_at": null,
        "created_at": "2026-08-08T06:22:37+00:00",
        "updated_at": "2026-08-08T06:22:37+00:00"
    }
}
```

### Cancel Invite

`DELETE /api/calendars/{calendar_public_id}/events/{event_public_id}/invites/{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}/invites/{public_id}' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Accept: application/json'
```

**Response 204** — Invite cancelled

**Response 422** — Not active

```json
{
    "message": "This invite is no longer active."
}
```
