Introduction to the Calendar API 

Start with our Core API docs for an introduction to the Kloudless API and more information on connecting user accounts and performing API requests.

Once an account is connected to your application, your application can perform API requests to the Calendar API endpoints listed below.

We support the following services denoted by the friendly name and identifier:

  • Calendar Services
    • Google Calendar: google_calendar
    • Outlook Calendar: outlook_calendar
    • CalDAV: caldav
    • Exchange Server 2013+: exchange
    • iCloud Calendar: icloud_calendar

We support the following endpoints and their corresponding unified objects:

Please see the specific resource documentation for what attributes are unified.

In addition, we can provide the original JSON response from the upstream service, which we call raw data. Please set the raw data header option when performing API requests, and the server will return the raw data in the the JSON response object under the raw key field.

Similarly, raw data can be sent directly to the upstream service via the API when creating or updating objects. This is primarily for attributes that are not unified in the Kloudless APIs. The request body must contain a nested JSON object with the upstream attribute names and values. Please see the example below:

javascript
{
    "raw": {
        "object": {
            ...
            "upstream-name": "upstream-values",
            ...
        }
    }
}

We define this nested object with the shorthand: raw -> object.

We’ve included links for the raw -> object mappings for each service below:

We also support two additional endpoints that are unique to Kloudless:

  • Find Availbility Find available time slots for calendars with specific time constraints.

  • Activity Stream Retrieve the latest activity for a calendar for sync, automation, or other use cases.


Quick Start 

Begin by connecting a user’s account using the Kloudless OAuth authentication endpoints.

You can then retrieve their primary calendar’s events by using the URL path /accounts/me/cal/calendars/primary/events with a specific start and end time.

You can also monitor any changes to the user’s calendar via the Activity Stream and query their availability to meet.

Check out our Meeting Scheduler UI Tool to schedule a time to meet between your app’s users here: https://github.com/Kloudless/meeting-scheduler


Calendars 

A Calendar object represents metadata about a user’s online calendar. A calendar has the following attributes:

  • id Unique identifier for the calendar. primary can be used as an alias for the id of the user’s primary calendar.

  • account_id The ID of the account that the calendar is associated with.

  • name Name of the calendar (required).

  • description Additional details about the calendar. null if unavailable. (only supported for google_calendar and caldav)

  • location Geographic location of the calendar as free-form text. null if unavailable. (only supported for google_calendar)

  • timezone The time zone of the calendar (IANA Time Zone Database name. Only supported for google_calendar and caldav). null if unavailable.

  • raw Underlying object retrieved from the service. exchange only returns the raw ID.

  • type Will always be calendar

  • api Will always be calendar

  • href The absolute URL to get the object’s metadata.

List Calendars 

list calendarsGET /accounts/{account_id}/cal/calendars{?page_size,page}

Only calendars added by the user to their account are visible via this endpoint. For example, a user’s coworkers’ calendars must be added by the user via their Google Calendar or Outlook Calendar web application prior to it being accessible in the user’s account via this endpoint.

Prompt an admin to connect their account via the admin OAuth flow instead to list or monitor all calendars in a G Suite or Office 365 tenant. This enables access to list all users via the Team API.

The response contains the following information:

  • count Number of objects on this page

  • page Page identifier

  • next_page The value to provide in the request’s page query parameter for the next page. This will be null if there are no more pages.

  • objects List of objects

  • Parameters
  • page_size
    number (optional) Default: 100 

    Number of objects in each page. For some services, the page_size isn’t respected. The page_size must be between 1 and 1000.

    page
    string (optional) 

    Page to return. Do not provide a page parameter when retrieving the first page. To retrieve pages after the first page, set page to the value of next_page found in the previous page of data retrieved.

  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
      "count": 3,
      "next_page": null,
      "objects": [
        {
          "id": "fI2NvbnRhY3RzQGdyb3VwLnYuY2FsZW5kYXIuZ29vZ2xlLmNvbQ==",
          "name": "Contacts",
          "description": null,
          "location": null,
          "timezone": "America/Los_Angeles",
          "account_id": "123",
          "api": "calendar",
          "type": "calendar",
          "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/fI2NvbnRhY3RzQGdyb3VwLnYuY2FsZW5kYXIuZ29vZ2xlLmNvbQ=="
        },
        {
          "id": "fZW4udXNhI2hvbGlkYXlAZ3JvdXAudi5jYWxlbmRhci5nb29nbGUuY29t",
          "name": "Holidays in United States",
          "description": null,
          "location": null,
          "timezone": "America/Los_Angeles",
          "account_id": "123",
          "api": "calendar",
          "type": "calendar",
          "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/fZW4udXNhI2hvbGlkYXlAZ3JvdXAudi5jYWxlbmRhci5nb29nbGUuY29t"
        },
        {
          "id": "a2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=",
          "name": "My Calendar",
          "description": "A calendar for events",
          "location": "San Francisco, CA",
          "timezone": "US/Pacific",
          "account_id": "123",
          "api": "calendar",
          "type": "calendar",
          "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/a2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20="
        }
      ],
      "page": "1",
      "type": "object_list",
      "api": "calendar"
    }

Create a Calendar 

create a calendarPOST /accounts/{account_id}/cal/calendars

To create a calendar, perform a POST request with a JSON object of the following parameters:

  • name: Name of the calendar

  • description: Description of the calendar

  • location: Geographic location of the calendar

  • timezone: Timezone of the calendar

  • raw: Raw attribute names and values that will be propagated during request

Here is an example request:

curl -XPOST -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    'https://api.kloudless.com/v1/accounts/me/cal/calendars' \
    -XPOST -d '{
        "name": "My Calendar",
        "description": "A calendar for events",
        "location": "San Francisco, CA",
        "timezone": "US/Pacific",
        "raw": {
            "object": {
                "color": 1
            }
        }
    }'

Note: exchange only supports name

  • RequestToggle
  • Headers

    Authorization: Bearer [TOKEN]
    Content-Type: application/json

    Body

    {
      "name": "My Calendar",
      "description": "A calendar for events",
      "location": "San Francisco, CA",
      "timezone": "US/Pacific"
    }
  • Response  201Toggle
  • Headers

    Content-Type: application/json

    Body

    {
      "id": "a2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=",
      "name": "My Calendar",
      "description": "A calendar for events",
      "location": "San Francisco, CA",
      "timezone": "US/Pacific",
      "account_id": "123",
      "api": "calendar",
      "type": "calendar",
      "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/a2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20="
    }

Retrieve a Calendar 

retrieve a calendarGET /accounts/{account_id}/cal/calendars/{calendar_id}
  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
      "id": "a2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=",
      "name": "My Calendar",
      "description": "A calendar for events",
      "location": "San Francisco, CA",
      "timezone": "US/Pacific",
      "account_id": "123",
      "api": "calendar",
      "type": "calendar",
      "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/a2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20="
    }

Update a Calendar 

update a calendarPATCH /accounts/{account_id}/cal/calendars/{calendar_id}

To update a calendar, create a JSON object with any of the following properties:

  • name

  • description

  • location

  • timezone

  • raw

The new object will be returned on success.

Example request:

curl -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    -XPATCH -d '{
        "name": "My Calendar",
        "description": "A calendar for my events"
    }' \
    'https://api.kloudless.com/v1/accounts/me/cal/calendars/primary'

NOTE: not supported in exchange

  • RequestToggle
  • Headers

    Authorization: Bearer [TOKEN]
    Content-Type: application/json

    Body

    {
      "name": "My Calendar",
      "description": "A calendar for events"
    }
  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
      "id": "a2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=",
      "name": "My Calendar",
      "description": "A calendar for events",
      "location": "San Francisco, CA",
      "timezone": "US/Pacific",
      "account_id": "123",
      "api": "calendar",
      "type": "calendar",
      "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/a2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20="
    }

Delete a Calendar 

delete a calendarDELETE /accounts/{account_id}/cal/calendars/{calendar_id}

Example request:

curl -L -H 'Authorization: Bearer [TOKEN]' \
    -XDELETE https://api.kloudless.com/v1/accounts/me/cal/calendars/456
  • Response  204

Events 

An Event object represents metadata about an entry on a user’s online calendar. This object is commonly associated with a title, start and end times, attendees, and frequency.

An event has the following attributes:

  • id Unique identifier for the event

  • account_id The ID of the account that the event is associated with.

  • ical_uid A read-only unique identifier for the event as defined in RFC5545. This identifier is unique across different calendars, which is valuable when accessing multiple users’ calendars at once, especially with admin accounts.

  • calendar_id Unique identifier for the calendar which this event belongs to. primary can be used as an alias for the calendar_id of the user’s primary calendar.

  • name Name of the event

  • description Additional details about the event

  • created ISO 8601 timestamp indicating when the event was created

  • modified ISO 8601 timestamp indicating when the event was last modified

  • all_day Only available for google_calendar and outlook_calendar. true if it’s an all-day event; false otherwise. Defaults to false. If true, start and end should be ISO 8601 dates rather than timestamps, such as "2020-01-01". If false, start and end should be ISO 8601 timestamps, such as "2020-01-01T00:00:00Z".

    Create an all-day event by setting all_day to true and ensuring the the start date is inclusive and the end date is exclusive. For example, an all-day event that occurs on both 2020-01-01 and 2020-01-02 would need end to be set to "2020-01-03".

  • start ISO 8601 timestamp or date indicating when the event starts (inclusive). The format depends on all_day although either is accepted during event creation/updates.

  • start_time_zone The IANA time zone database name that corresponds to the start time’s time zone. For example, America/Los_Angeles. This field isn’t supported for all-day events. If the value of this field is not set, the user’s default time zone is used if known. (only supported for google_calendar, outlook_calendar, and exchange)

  • end ISO 8601 timestamp or date indicating when the event ends (exclusive). The format depends on all_day although either is accepted during event creation/updates.

  • end_time_zone The IANA time zone database name that corresponds to the end time’s time zone. For example, America/Los_Angeles. This field isn’t supported for all-day events. If the value of this field is not set, the user’s default time zone is used if known. (only supported for google_calendar, outlook_calendar, and exchange)

  • original_start A read-only ISO 8601 timestamp or date present for recurring events that represents the time that the event was originally set up to start at, based on the recurrence data in the master event with ID recurring_master_id. Only supported for google_calendar.

  • original_start_time_zone A read-only IANA time zone database name that corresponds to the original_start time’s time zone. For example, America/Los_Angeles. This field isn’t supported for all-day events.

  • organizer A Person object describing the organizer

  • creator A Person object describing the creator (only supported in google_calendar)

  • attendees A list of Person objects describing each attendee

  • location Geographic location of the calendar as free-form text

  • attachments A list of File objects attached to the event

  • reminder (deprecated) When to show the reminder, expressed as minutes before the event start time. (only supported for outlook_calendar and exchange) This will be removed in v2. Please use reminders instead.

  • use_default_reminder true to use the calendar’s default reminder; false otherwise. Only supported for google_calendar; absent otherwise. Defaults to true. If true, reminders is ignored.

  • reminders A list of Reminder objects that each contain information on reminders about the event to the user. See notes below on the structure of each Reminder object. The maximum number of reminder objects depend on the service:

    • google_calendar: up to 5
    • outlook_calendar, exchange: only 1
    • caldav: no limit inherently specified in the protocol although server implementations may vary.
    • icloud_calendar: No limit, however there is a maximum size of all calendar and reminder data (not including attachments) of 1GB.
  • recurrence A list of Recurrence objects that contain information about a recurring event. The Recurrence object format is documented below this section.

    The following services are currently supported:

    • google_calendar
    • outlook_calendar
  • recurrence_type

    • solo: A stand-alone event.
    • recurring: A recurring event.
    • recurring_master: The primary/master event in the series of recurring events.
  • recurring_master_id The unique identifier for the primary/master event in the series of recurring events. Will be unavailable if the event is not a recurring event or if the event is already the primary/master event in the series.

  • custom_properties A list of custom property objects. Custom properties (some services may call them extended properties) are key-value pairs that allow the user or application to add extra information to calendar events.

    The following services are currently supported:

    • google_calendar
    • outlook_calendar
  • visibility Visibility of the event (only supported for google_calendar)

    • default: Default visibility of the calendar
    • public: The event is public and event details are visible to all readers of the calendar
    • private: The event is private and only event attendees may view event details
    • confidential: The event is private.
  • transparent A boolean value indicating if this event blocks time on the calendar.

    • true: The event does not block time on the calendar and the time is still available.
    • false: The event does block time on the calendar and the time is not available.
  • status State of the event {confirmed, cancelled} (only supported for google_calendar, outlook_calendar, and exchange)

  • raw Underlying object retrieved from the service. exchange only returns the raw ID.

  • type Will always be event

  • api Will always be calendar

  • href The absolute URL to get the object’s metadata.

Reminder objects have the following structure:

  • minutes When to show the reminder, expressed as minutes before the event start time.

  • method The method used to remind the user about this event. Defaults to popup. The possible values depend on the services:

    • google_calendar: email, popup
    • outlook_calendar, exchange: popup
    • caldav: email, popup
    • icloud_calendar: email, popup
  • popup The description present in the pop-up. Only supported for caldav and icloud_calendar. Required for caldav and icloud_calendar if the method is popup.

  • email Email object. Only supported for caldav and icloud_calendar. Required for caldav and icloud_calendar if the method is email. Email Reminder objects have the following structure:

    • summary The subject text of the email.
    • description The body text of the email.
    • to A list of recipients’ email addresses.

Recurrence objects have the following structure:

  • rrule An RRULE string in the format described by RFC5545.

    Outlook Calendar and Exchange limitations: The recurrence rule properties available vary based on the frequency of the recurring event as shown in the table below. The rows represent the properties available when specifying a recurrence pattern with a specific frequency:

    DAILY WEEKLY MONTHLY MONTHLY (relative) YEARLY YEARLY (relative)
    INTERVAL INTERVAL INTERVAL INTERVAL INTERVAL INTERVAL
    COUNT COUNT COUNT COUNT COUNT COUNT
    UNTIL UNTIL UNTIL UNTIL UNTIL UNTIL
    BYDAY BYMONTHDAY BYDAY BYMONTHDAY BYDAY
    WKST BYSETPOS BYMONTH BYMONTH
    BYSETPOS

    Frequencies and properties not listed above are unsupported.

    A Timezone or UTC offset within an RRULE is unsupported and will be ignored. Outlook will use the event’s timezone when expanding the Recurrence pattern.

    The data model used by outlook_calendar and exchange is not in the RRULE format and instead uses an object called a patternedRecurrence to define the pattern and range of recurring events. This means that some RRULE properties are not supported, such as HOURLY, EXDATE, and others. You can read more about Outlook’s implementation here.

Person objects have the following structure:

  • id profile ID of the person.

  • name Name of the person. null if unavailable.

  • email Email address of the person.

  • status Status of the person’s response to the meeting invitation. One of accepted, declined, tentative, or pending. Present for Person objects included in attendees. May not be present if unavailable. (only supported for google_calendar, outlook_calendar, and exchange)

  • required A boolean indicating whether this is a required attendee. Present for Person objects included in attendees.

  • resource Read-only. A boolean indicating whether the attendee is a resource. Present for Person objects included in attendees.

File objects have the following structure:

  • id ID of the file. null if unavailable.

  • name Name of the file. null if unavailable.

  • url URL to download the file from

  • mime_type Content type of the file

Custom property objects have the following structure:

  • key A unique string to indicate a key/ID for this custom property.

  • value A string to store data.

  • private Optional. The default is true. This is for Google Calendar to indicate whether this property will be stored in private or shared. This field is required if you update a Google Calendar event with custom properties.

    For more info, please refer to Google Calendar Event extendedProperties

Event Notifications

An email notification will be sent to all attendees when an event is created, updated, or deleted. However, if only the attendees field is updated, then only specific attendees being added or deleted will receive any notification. Currently supported for outlook_calendar and google_calendar.

Note: Google Calendar allows users to customize notifications for each individual calendar. If a user is not receiving notification emails, please refer the user to their calendar’s settings. The settings can be found at: Google Calendar -> Settings -> Expand the default calendar under Settings for my calendars section -> General notifications -> set Email to the event types you want to enable notifications for.

List Events 

list eventsGET /accounts/{account_id}/cal/calendars/{calendar_id}/events{?start,end,page,instances}

Apps most commonly need to list events in the user’s primary calendar. Use the URL path /accounts/me/cal/calendars/primary/events with a specific start and end time to accomplish this.

For other calendars, obtain the calendar ID in the URL by listing the user’s calendars.

If the calendar account is connected with admin privileges, it is possible to list events for Resource Calendars. In order to get ID of the resource’s Calendar, use the Resource list endpoint and refer to the calendar field. Listing resource calendars is supported for the following services:

  • google_calendar

  • outlook

The response contains the following information:

  • count Number of objects on this page

  • page Page identifier

  • next_page The value to provide in the request’s page query parameter for the next page. This will be null if there are no more pages.

  • objects List of objects

  • Parameters
  • start
    string (optional) 

    Only events ending after this ISO 8601 timestamp (exclusive) are returned. The default value is the start of Unix Epoch Time (1970-01-01T00:00:00Z).

    end
    string (optional) 

    Only events starting before this ISO 8601 timestamp (exclusive) are returned. The default value is null and retrieves all future events.

    page
    string (optional) 

    Page to return. Do not provide a page parameter when retrieving the first page. To retrieve pages after the first page, set page to the value of next_page found in the previous page of data retrieved.

    instances
    boolean (optional) Default: true 

    Set to true to return all instances of a recurring event rather than just the master event. Supported for google_calendar and outlook_calendar at the moment. In google_calendar, exceptions to the recurring series are still included even if instances is set to false, such as an individual instance with a different description. In outlook_calendar, exceptions are not included if instances is set to false. Only the series master event is returned. We recommend including a start and end range if setting instances to true to return a limited range of instances for infinitely recurring series.

  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
        "total": 1,
        "count": 1,
        "page": 1,
        "next_page": null,
        "objects": [
    {
    "api": "calendar",
    "type": "event",
    "id": "fdTJpb29oamJyZ2NmNWVpcXBwZTQ5NW1hcG8=",
    "account_id": "123",
    "ical_uid: "9c87c888-3b6b-6647-8b81-4baec6533b09",
    "calendar_id": "fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=",
    "recurrence_type": "solo",
    "creator": {
        "id": null,
        "name": "kloudless inc",
        "email": "kloudless@gmail.com"
    },
    "organizer": {
        "id": null,
        "name": "kloudless inc",
        "email": "kloudless@gmail.com"
    },
    "attendees": [],
    "created": "2019-05-09T07:03:51Z",
    "modified": "2019-05-09T07:03:51Z",
    "all_day": false,
    "start": "2019-09-01T01:00:00-08:00",
    "start_time_zone": "America/Los_Angeles",
    "end": "2019-09-01T02:00:00-08:00",
    "end_time_zone": "America/Los_Angeles",
    "name": "Test Event",
    "description": "testing event",
    "location": "PIER 39, Beach Street & The Embarcadero, San Francisco, CA 94133, USA",
    "status": "confirmed",
    "visibility": null,
    "attachments": [{
        "url": "https://drive.google.com/file/d/0B4IICHrATMnUeF9YWlhRZ0N1ZG8/view?usp=drive_web",
        "id": "0B4IICHrATMnUeF9YWlhRZ0N1ZG8",
        "mime_type": "image/jpeg",
        "name": "kloudless-logo.png"
    }],
    "custom_properties": [
        {
            "key": "color",
            "value": "green",
            "private": true
        }
    ],
    "use_default_reminder": false,
    "reminders": [],
    "reminder": null,
    "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=/events/fdTJpb29oamJyZ2NmNWVpcXBwZTQ5NW1hcG8="
    }                ],
            "type": "object_list",
            "api": "calendar"
        }
    

Create an Event 

create an eventPOST /accounts/{account_id}/cal/calendars/{calendar_id}/events

To create an event, perform a POST request with a JSON object of the following parameters:

  • name: Name of the event (required)

  • description: Description of the event

  • start: ISO 8601 timestamp indicating when the event starts (required)

  • start_time_zone: The start time’s time zone

  • end: ISO 8601 timestamp indicating when the event ends (required)

  • end_time_zone: The end time’s time zone

  • all_day: A boolean value indicates whether it’s all-day event.

  • organizer: A Person object describing the organizer (only supported for outlook_calendar, exchange, and caldav)

  • attendees: A list of Person objects describing each attendee

    • name: Name of the attendee (required)
    • email: Email address of the attendee (required)
  • location: Geographic location of the event

  • use_default_reminder: Indicates whether to use the default reminder (only supported for google_calendar; ignored otherwise)

  • reminders: A list of Reminder objects about the event’s reminders for the user account

  • recurrence: A list of Recurrence objects that contain information about a recurring event

  • custom_properties: A list of custom property objects

  • visibility: Visibility of the event

  • transparent: A boolean value of transparency of the event

  • raw: Raw attribute names and values that will be propagated during request

Here is an example request:

curl -XPOST -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    'https://api.kloudless.com/v1/accounts/me/cal/calendars/primary/events' \
    -XPOST -d '{
        "name": "Event",
        "start": "2016-10-01T12:30:00Z",
        "end": "2016-10-01T13:30:00Z",
        "raw": {
            "object": {
                "importance": "low"
            }
        }
    }'

How to create a recurring event

You can use an RRULE within the Recurrence object documented above to create a recurring event. Check out the full RFC 5545 for information on RRULE property data types here.

Here is an example:

curl -XPOST -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    'https://api.kloudless.com/v1/accounts/me/cal/calendars/primary/events' \
    -d '{
        "name": "Every day for ten days",
        "start": "2019-04-10T10:00:00Z",
        "end": "2019-04-10T11:00:00Z",
        "recurrence": [{"rrule": "RRULE:FREQ=DAILY;COUNT=10"}]
    }'
  • RequestToggle
  • Headers

    Authorization: Bearer [TOKEN]
    Content-Type: application/json

    Body

    {
      "name": "Test Event",
      "start": "2019-09-01T01:00:00-08:00",
      "start_time_zone": "America/Los_Angeles",
      "end": "2019-09-01T02:00:00-08:00",
      "end_time_zone": "America/Los_Angeles",
      "custom_properties": [
        {
          "key": "color",
          "value": "green"
        }
      ]
    }
  • Response  201Toggle
  • Headers

    Content-Type: application/json

    Body

    {
        "api": "calendar",
        "type": "event",
        "id": "fdTJpb29oamJyZ2NmNWVpcXBwZTQ5NW1hcG8=",
        "account_id": "123",
        "ical_uid: "9c87c888-3b6b-6647-8b81-4baec6533b09",
        "calendar_id": "fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=",
        "recurrence_type": "solo",
        "creator": {
            "id": null,
            "name": "kloudless inc",
            "email": "kloudless@gmail.com"
        },
        "organizer": {
            "id": null,
            "name": "kloudless inc",
            "email": "kloudless@gmail.com"
        },
        "attendees": [],
        "created": "2019-05-09T07:03:51Z",
        "modified": "2019-05-09T07:03:51Z",
        "all_day": false,
        "start": "2019-09-01T01:00:00-08:00",
        "start_time_zone": "America/Los_Angeles",
        "end": "2019-09-01T02:00:00-08:00",
        "end_time_zone": "America/Los_Angeles",
        "name": "Test Event",
        "description": "testing event",
        "location": "PIER 39, Beach Street & The Embarcadero, San Francisco, CA 94133, USA",
        "status": "confirmed",
        "visibility": null,
        "attachments": [{
            "url": "https://drive.google.com/file/d/0B4IICHrATMnUeF9YWlhRZ0N1ZG8/view?usp=drive_web",
            "id": "0B4IICHrATMnUeF9YWlhRZ0N1ZG8",
            "mime_type": "image/jpeg",
            "name": "kloudless-logo.png"
        }],
        "custom_properties": [
            {
                "key": "color",
                "value": "green",
                "private": true
            }
        ],
        "use_default_reminder": false,
        "reminders": [],
        "reminder": null,
        "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=/events/fdTJpb29oamJyZ2NmNWVpcXBwZTQ5NW1hcG8="
    }
    
    

Retrieve an Event 

retrieve an eventGET /accounts/{account_id}/cal/calendars/{calendar_id}/events/{event_id}

Retrieve a Calendar Event. View the data format above for specifics on the information returned.

  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
        "api": "calendar",
        "type": "event",
        "id": "fdTJpb29oamJyZ2NmNWVpcXBwZTQ5NW1hcG8=",
        "account_id": "123",
        "ical_uid: "9c87c888-3b6b-6647-8b81-4baec6533b09",
        "calendar_id": "fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=",
        "recurrence_type": "solo",
        "creator": {
            "id": null,
            "name": "kloudless inc",
            "email": "kloudless@gmail.com"
        },
        "organizer": {
            "id": null,
            "name": "kloudless inc",
            "email": "kloudless@gmail.com"
        },
        "attendees": [],
        "created": "2019-05-09T07:03:51Z",
        "modified": "2019-05-09T07:03:51Z",
        "all_day": false,
        "start": "2019-09-01T01:00:00-08:00",
        "start_time_zone": "America/Los_Angeles",
        "end": "2019-09-01T02:00:00-08:00",
        "end_time_zone": "America/Los_Angeles",
        "name": "Test Event",
        "description": "testing event",
        "location": "PIER 39, Beach Street & The Embarcadero, San Francisco, CA 94133, USA",
        "status": "confirmed",
        "visibility": null,
        "attachments": [{
            "url": "https://drive.google.com/file/d/0B4IICHrATMnUeF9YWlhRZ0N1ZG8/view?usp=drive_web",
            "id": "0B4IICHrATMnUeF9YWlhRZ0N1ZG8",
            "mime_type": "image/jpeg",
            "name": "kloudless-logo.png"
        }],
        "custom_properties": [
            {
                "key": "color",
                "value": "green",
                "private": true
            }
        ],
        "use_default_reminder": false,
        "reminders": [],
        "reminder": null,
        "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=/events/fdTJpb29oamJyZ2NmNWVpcXBwZTQ5NW1hcG8="
    }
    
    

Update an Event 

update an eventPATCH /accounts/{account_id}/cal/calendars/{calendar_id}/events/{event_id}

To update an event, create a JSON object with any of the following properties:

  • name

  • description

  • start

  • start_time_zone

  • end

  • end_time_zone

  • all_day

  • organizer

    • google_calendar
      • When updating the organizer the event will be moved to the organizer’s calendar. Thus changing the calendar_id, which will be returned in the response.
    • outlook
      • Updating the organizer is not supported
  • attendees

  • location

  • use_default_reminder (only supported for google_calendar)

  • reminders

  • recurrence

  • visibility

  • transparent

  • custom_properties

  • raw

The new object will be returned on success.

Example request:

curl -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    -XPATCH -d '{
        "end": "2016-11-01T15:30:00Z",
        "description": "A new description"
    }' \
    'https://api.kloudless.com/v1/accounts/me/cal/calendars/primary/events/fdTwefoewOEewOIWfgnrgG8='

How to RSVP to a calendar event invitation

Example:

curl -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    -XPATCH -d '{
        "attendees": [{
            "name": "attendee",
            "email": "attendee@company.com",
            "status": "accepted"
        }]
    }' \
    'https://api.kloudless.com/v1/accounts/me/cal/calendars/primary/events/fdTwefoewOEewOIWfgnrgG8='

How to modify custom properties

Assume we already have the following custom property in an event:

"custom_properties": [
    {
        "key": "color",
        "value": "green"
    }
]

To create a new custom property:

curl -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    -XPATCH -d '{
        "custom_properties": [
            {
                "key": "opacity",
                "value": "0.5"
            }
        ]
    }' \
    'https://api.kloudless.com/v1/accounts/me/cal/calendars/primary/events/fdTwefoewOEewOIWfgnrgG8='

To update an existing custom property:

curl -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    -XPATCH -d '{
        "custom_properties": [
            {
                "key": "color",
                "value": "red"
            }
        ]
    }' \
    'https://api.kloudless.com/v1/accounts/me/cal/calendars/primary/events/fdTwefoewOEewOIWfgnrgG8='

To delete an existing custom property:

curl -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    -XPATCH -d '{
        "custom_properties": [
            {
                "key": "color",
                "value": null
            }
        ]
    }' \
    'https://api.kloudless.com/v1/accounts/me/cal/calendars/primary/events/fdTwefoewOEewOIWfgnrgG8='

Note that Google Calendar always requires the private field set to true or false as documented above.

  • RequestToggle
  • Headers

    Authorization: Bearer [TOKEN]
    Content-Type: application/json

    Body

    {
      "end": "2019-09-01T02:00:00-08:00",
      "description": "testing event"
    }
  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
        "api": "calendar",
        "type": "event",
        "id": "fdTJpb29oamJyZ2NmNWVpcXBwZTQ5NW1hcG8=",
        "account_id": "123",
        "ical_uid: "9c87c888-3b6b-6647-8b81-4baec6533b09",
        "calendar_id": "fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=",
        "recurrence_type": "solo",
        "creator": {
            "id": null,
            "name": "kloudless inc",
            "email": "kloudless@gmail.com"
        },
        "organizer": {
            "id": null,
            "name": "kloudless inc",
            "email": "kloudless@gmail.com"
        },
        "attendees": [],
        "created": "2019-05-09T07:03:51Z",
        "modified": "2019-05-09T07:03:51Z",
        "all_day": false,
        "start": "2019-09-01T01:00:00-08:00",
        "start_time_zone": "America/Los_Angeles",
        "end": "2019-09-01T02:00:00-08:00",
        "end_time_zone": "America/Los_Angeles",
        "name": "Test Event",
        "description": "testing event",
        "location": "PIER 39, Beach Street & The Embarcadero, San Francisco, CA 94133, USA",
        "status": "confirmed",
        "visibility": null,
        "attachments": [{
            "url": "https://drive.google.com/file/d/0B4IICHrATMnUeF9YWlhRZ0N1ZG8/view?usp=drive_web",
            "id": "0B4IICHrATMnUeF9YWlhRZ0N1ZG8",
            "mime_type": "image/jpeg",
            "name": "kloudless-logo.png"
        }],
        "custom_properties": [
            {
                "key": "color",
                "value": "green",
                "private": true
            }
        ],
        "use_default_reminder": false,
        "reminders": [],
        "reminder": null,
        "href": "https://api.kloudless.com/v1/accounts/123/cal/calendars/fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20=/events/fdTJpb29oamJyZ2NmNWVpcXBwZTQ5NW1hcG8="
    }
    
    

Delete an Event 

delete an eventDELETE /accounts/{account_id}/cal/calendars/{calendar_id}/events/{event_id}

Example request:

curl -L -H 'Authorization: Bearer [TOKEN]' \
    -XDELETE https://api.kloudless.com/v1/accounts/me/cal/calendars/primary/events/fdTwefoewOEewOIWfgnrgG8=
  • Response  204

Contacts 

Currently supported for:

  • google_calendar

  • outlook_calendar

  • exchange

A Contact object represents metadata about a user’s online contact. A contact has the following attributes:

  • id Unique identifier for this contact.

  • name A contact’s name

  • name_details A JSON object with the following attributes:

    • given: Given name
    • family: Family name
    • full: Full name
  • birthday ISO 8601 date indicating the contact’s birthday

  • organizations A list of Organization objects describing the contact’s organization. An Organization object has the following attributes:

    • type: One of work, school, or other. null if unavailable.
    • name: The name of the organization.
    • department: The contact’s department at the organization.
    • title: The contact’s job title at the organization.
    • location: The location of the organization where the contact works at.
  • created ISO 8601 timestamp indicating when the contact was created

  • emails A list of Email objects describing the contact’s email addresses. An Email object has the following attributes:

    • type: One of home, work, or other. null if unavailable.
    • value: The email address.
    • primary: A boolean indicating whether the email is the primary address
  • gender The contact’s gender. One of male, female, other or unknown.

  • initials The contact’s initials.

  • modified ISO 8601 timestamp indicating when the contact was last modified

  • phones A list of Phone objects describing the contact’s phone. A Phone object has the following attributes:

    • type: One of home, work, mobile, or other. null if unavailable.
    • value: The phone number.
    • primary: A boolean indicating whether the phone is primary number.
  • relationships A list of Relation objects describing the contact’s relation to another contact. A Relation object has the following attributes:

    • name: The name of the other contact this relation refers to
    • type: One of child, spouse, or other. null if unavailable.
  • addresses A list of Address objects describing the contact’s address. An Address object has the following attributes:

    • type: One of home, work, or other. null if unavailable.
    • street: The street address.
    • city: The city of the address.
    • state: The state of the address.
    • country: The country of the address.
    • postal_code: The postal code of the address.
  • websites A list of websites associated with the contact.

  • raw Underlying object retrieved from the upstream service.

  • type Will always be contact

  • api Will always be contact

  • href The absolute URL to get the object’s metadata.

List Contacts 

list contactsGET /accounts/{account_id}/contact/contacts{?page_size,page}

The response contains the following information:

  • count Number of objects on this page

  • page Page identifier

  • next_page The value to provide in the request’s page query parameter for the next page. This will be null if there are no more pages.

  • objects List of contact objects

Note: exchange only supports Exchange 2019

  • Parameters
  • page_size
    number (optional) Default: 100 

    Number of objects in each page. For some services, the page_size isn’t respected. The page_size must be between 1 and 1000.

    page
    string (optional) 

    Page to return. Do not provide a page parameter when retrieving the first page. To retrieve pages after the first page, set page to the value of next_page found in the previous page of data retrieved.

  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
      "count": 1,
      "next_page": null,
      "api": "contact",
      "objects": [
        {
          "id": "FytHKX4ltWzfKRJsvh5Ii9Uh7fPBkkXBKjIjOU-sx7CY=",
          "name": "Walter Bishop",
          "name_details": {
            "given": "Walter",
            "full": "Walter Bishop",
            "family": "Bishop"
          },
          "birthday": "1946-08-20",
          "organizations": [
            {
              "type": null,
              "name": "Kloudless",
              "department": null,
              "title": "Research Scientist",
              "location": null
            }
          ],
          "emails": [
            {
              "type": "work",
              "value": "hello@kloudless.com",
              "primary": true
            }
          ],
          "gender": null,
          "initials": null,
          "modified": "2019-05-07T08:55:17Z",
          "phones": [],
          "relationships": [
            {
              "name": "Peter Bishop",
              "type": "child"
            }
          ],
          "addresses": [
            {
              "type": "home",
              "street": "2054 University Ave #200",
              "city": "Berkeley",
              "state": "CA",
              "country": "US",
              "postal_code": "94704"
            },
            {
              "type": "work",
              "street": "14F, No.460 Sec.4, Xinyi Rd.",
              "city": "Xinyi District",
              "state": "Taipei City",
              "country": "TW",
              "postal_code": "110"
            }
          ],
          "websites": [
            "https://github.com/Kloudless",
            "https://kloudless.com"
          ],
          "type": "contact",
          "api": "contact",
          "href": "https://api.kloudless.com/v1/accounts/123/contact/contacts/FytHKX4ltWzfKRJsvh5Ii9Uh7fPBkkXBKjIjOU-sx7CY="
        }
      ],
      "type": "object_list",
      "page": 1
    }

Retrieve a Contact 

retrieve a contactGET /accounts/{account_id}/contact/contacts/{contact_id}

Note: exchange only supports Exchange 2019

  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
      "id": "FytHKX4ltWzfKRJsvh5Ii9Uh7fPBkkXBKjIjOU-sx7CY=",
      "name": "Walter Bishop",
      "name_details": {
        "given": "Walter",
        "full": "Walter Bishop",
        "family": "Bishop"
      },
      "birthday": "1946-08-20",
      "organizations": [
        {
          "type": null,
          "name": "Kloudless",
          "department": null,
          "title": "Research Scientist",
          "location": null
        }
      ],
      "emails": [
        {
          "type": "work",
          "value": "hello@kloudless.com",
          "primary": true
        }
      ],
      "gender": null,
      "initials": null,
      "modified": "2019-05-07T08:55:17Z",
      "phones": [],
      "relationships": [
        {
          "name": "Peter Bishop",
          "type": "child"
        }
      ],
      "addresses": [
        {
          "type": "home",
          "street": "2054 University Ave #200",
          "city": "Berkeley",
          "state": "CA",
          "country": "US",
          "postal_code": "94704"
        },
        {
          "type": "work",
          "street": "14F, No.460 Sec.4, Xinyi Rd.",
          "city": "Xinyi District",
          "state": "Taipei City",
          "country": "TW",
          "postal_code": "110"
        }
      ],
      "websites": [
        "https://github.com/Kloudless",
        "https://kloudless.com"
      ],
      "type": "contact",
      "api": "contact",
      "href": "https://api.kloudless.com/v1/accounts/123/contact/contacts/FytHKX4ltWzfKRJsvh5Ii9Uh7fPBkkXBKjIjOU-sx7CY="
    }

Calendar Availability 

Kloudless returns available time slots given a set of calendars, meeting duration time, and preferred meeting times.

Currently supported for:

  • google_calendar

  • outlook_calendar

  • caldav

  • icloud_calendar

  • exchange

Check out our UI Tool to schedule a time between your app’s users here: https://github.com/Kloudless/meeting-scheduler

Find Availability 

find availabilityPOST /accounts/{account_id,account_id,...}/cal/availability

To find time ranges that work for an event among multiple participants, provide the following parameters:

  • calendars: (Optional) An object with data as described below. If not provided, uses the primary calendar instead.

    • For calendars in the same account, provide a list of Calendar IDs.
    • For calendars in other accounts, provide a JSON object with the Account ID as key, and list of Calendar IDs as value.
  • meeting_duration: (Required) ISO 8601 format for duration. See Wikipedia for more information on the format and examples.

  • time_windows: (Required) List of desired time slots, each of which is an object with the following attributes:

    • start: ISO 8601 datetime timestamp indicating the beginning of a range of availability.
    • end: ISO 8601 datetime timestamp indicating the end of a range of availability.
  • time_slot_increment: (Optional) This option is required if you’d like actual time slots returned rather than only ranges of availability. time_slot_increment accepts the number of minutes between consecutive time slots. For example, set it to 15 if you’d like the time slots returned to represent 10:00–11:00, 10:15–11:15, 10:30–11:30, and so on, assuming a one hour meeting duration. If not provided or set to 0 (the default), the response contains the available time range without being sliced into bookable time slots. For example, a time range of 10:00–14:00 regardless of the meeting duration.

A list of ranges will be returned with start and end times. Each time range returned indicates that all calendars are available for a meeting for the meeting_duration specified within that range. It is then up to your application to determine the exact start time for the event and to create the event using the Event Creation endpoint.

You can use time_slot_increment above if you’d like to avoid slicing the availability range into time slots and have our servers do that for you instead. Otherwise, the windows returned represent ranges in time and not specific time slots for potential events, so will almost always be larger than the duration specified.

Example request:

curl -H 'Authorization: Bearer [TOKEN]' \
    -H 'Content-Type: application/json' \
    -XPOST -d '{
        "calendars": ["fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20="],
        "meeting_duration": "PT1H",
        "time_windows": [{
            "start": "2017-05-20T08:00:00+07:00",
            "end": "2017-05-20T12:00:00+07:00"
        },{
            "start": "2017-05-21T08:00:00+07:00",
            "end": "2017-05-21T12:00:00+07:00"
        }]
    }' \
    'https://api.kloudless.com/v1/accounts/123/cal/availability'

Calendars under multiple accounts can be searched by separating the account IDs with commas in the URL and separating their respective Bearer Tokens in the Authorization header with commas as well:

curl -H 'Authorization: Bearer [TOKEN1],[TOKEN2]' \
    -H 'Content-Type: application/json' \
    -XPOST -d '{
        "calendars": {
            "123": ["fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20="],
            "456": ["fQUFNa0FEUTBOR1kxT0daa0xUTTBNamd0TkRKaE5pMDVNMk5sTFRRME9EWTFOV0V3TldJMU53QkdBQUFBQUFBRUFnQ0t6bGYxUnE2MXpvVmsxZ2FlQndCMlYzWDNBOUtqVExZWllrWWFBYy1BQUFBQUFBRUdBQUIyVjNYM0E5S2pUTFlaWWtZYUFjLUFBQUFBQUJ6TEFBQT0="],
        },
        "meeting_duration": "PT1H",
        "time_windows": [{
            "start": "2017-05-20T08:00:00+07:00",
            "end": "2017-05-20T12:00:00+07:00"
        },{
            "start": "2017-05-21T08:00:00+07:00",
            "end": "2017-05-21T12:00:00+07:00"
        }]
    }' \
    'https://api.kloudless.com/v1/accounts/123,456/cal/availability'

An example response can be found in the dropdown below.

  • RequestToggle
  • Headers

    Authorization: Bearer [TOKEN]
    Content-Type: application/json

    Body

    {
      "calendars": [
        "fa2xvdWRsZXNzLnRlc3QudGltb3RoeUBnbWFpbC5jb20="
      ],
      "meeting_duration": "PT1H",
      "time_windows": [
        {
          "start": "2017-05-20T08:00:00+07:00",
          "end": "2017-05-20T12:00:00+07:00"
        },
        {
          "start": "2017-05-21T08:00:00+07:00",
          "end": "2017-05-21T12:00:00+07:00"
        }
      ]
    }
  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
      "time_windows": [
        {
          "start": "2017-05-20T09:00:00+07:00",
          "end": "2017-05-20T11:15:00+07:00"
        },
        {
          "start": "2017-05-21T09:30:00+07:00",
          "end": "2017-05-21T11:25:00+07:00"
        }
      ],
      "type": "availability",
      "api": "calendar"
    }

Activity Stream 

Activity within a calendar service ranges from creating events and adding attendees to changing start/end times and more. We track the activity data provided by the third-party service. We currently present the following types of activity as Kloudless Event objects via the Kloudless Activity API:

  • add: a new object has been created

  • delete: an object has been deleted

  • update: an object has been modified

A Kloudless Event object (not to be confused with Calendar API Events) provides information on activity within a connected account.

See the Events endpoints for more information on supported services, API endpoints, and the format of activity stream data.

Activity API required: These endpoints require your Kloudless subscription to include access to the Activity API.

List Events 

list eventsGET /accounts/{account_id}/events{?cursor}

The response contains the following fields:

  • objects: List of the events that have taken place. If no events are available, then there are none left to paginate through using the cursor at this time.

  • cursor: A string identifying a location in the stream immediately after the events described in objects.

  • count: Number of events returned.

  • type: Will always be object_list.

  • api: Will always be events.

The returned cursor should be used in subsequent requests so that only events that have not been seen previously are returned.

Example Request:

curl -H 'Authorization: Bearer [TOKEN]' \
    'https://api.kloudless.com/v1/accounts/123/events?cursor=121'

Note: The remaining attribute used to be available as well but has been deprecated due to limitations with performance and accuracy.

Note: exchange not supported yet

  • Parameters
  • cursor
    string (optional) 

    The last cursor in the event stream that your application has seen. The cursor can also be set to after-auth, which will retrieve events that have occurred after the account was connected. This is useful if prior events are unnecessary.

  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
        "count": 1,
        "api": "events",
        "cursor": "121",
        "objects": [{
            "id": "30",
            "account": 123,
            "action": "+",
            "ip": null,
            "modified": "2018-10-18T08:53:28Z",
            "type": "add",
            "user_id": null,
            "metadata": {
                "api": "calendar",
                "type": "event",
                "recurrence_type": "solo",
                "calendar_id": "fa2xvdWRsZXNzQGdtYWlsLmNvbQ==",
                "account_id": "123",
                "id": "fM3NndHRhbWRzamRnOXJvaDU2ZWI4bWoyOTA=",
                "name": "Test Event",
                "description": null,
                "location": null,
                "use_default_reminder": false,
                "reminders": [],
                "visibility": null,
                "created": "2018-10-18T08:53:28Z",
                "modified": "2018-10-18T08:53:28.106000Z",
                "start": "2018-10-19T09:00:00Z",
                "end": "2018-10-19T10:00:00Z",
                "status": "confirmed",
                "attendees": [],
                "attachments": [],
                "organizer": {
                  "id": null,
                  "name": null,
                  "email": "kloudless@gmail.com",
                  "required": true,
                  "resource": false
                },
                "creator": {
                  "id": null,
                  "name": null,
                  "email": "kloudless@gmail.com",
                  "required": true,
                  "resource": false
                }
            }
        }],
        "type": "object_list",
    }

Resources 

A Resource represents a shared resource that users can reserve, such as a meeting room, car, equipment, or any other item or space users might need to schedule a time to use.

Currently supported for:

  • google_calendar

  • outlook_calendar

A Resource has the following attributes:

  • id Unique identifier for the resource.

  • name Name of the resource.

  • description Additional details about the resource.

  • email The resource’s email address. Use this when booking calendar events to reserve the resource for the duration of the event.

  • calendar The resource’s calendar ID. Use this to check its availability or retrieve its schedule.

  • category The type of resource. Can be either:

    • room: Represents a meeting room.
    • other: Represents a resource other than a meeting room.
  • raw Underlying object retrieved from the service.

  • type Will always be resource.

  • api Will always be calendar.

G Suite supports a number of attributes on resources, whereas Office 365 only provides email address information on meeting rooms.

List Resources 

list resourcesGET /accounts/{account_id}/cal/resources{?page_size,page}

Service-specific notes:

  • G Suite requires admin access to org-wide data to list calendar resources via the Admin SDK.

  • Outlook allows any user to list all meeting rooms, but only returns the room’s email address.

The response contains the following information:

  • count Number of objects on this page

  • page Page identifier

  • next_page The value to provide in the request’s page query parameter for the next page. This will be null if there are no more pages.

  • objects List of objects

  • Parameters
  • page_size
    number (optional) Default: 100 

    Number of objects in each page. For some services, the page_size isn’t respected. The page_size must be between 1 and 1000.

    page
    string (optional) 

    Page to return. Do not provide a page parameter when retrieving the first page. To retrieve pages after the first page, set page to the value of next_page found in the previous page of data retrieved.

  • Response  200Toggle
  • Headers

    Content-Type: application/json

    Body

    {
      "count": 1,
      "next_page": null,
      "objects": [
        {
          "id": "ZGV2ZWxvcGVycy5rbG91ZGxlc3MuY29tXzJkMzYzODMyMzUzODMyMzEzMDMxMzczM0ByZXNvdXJjZS5jYWxlbmRhci5nb29nbGUuY29t",
          "name": "room 1",
          "description": "conference room 1",
          "email": "developers.kloudless.com_2d3638323538323130313733@resource.calendar.google.com",
          "calendar": "ZGV2ZWxvcGVycy5rbG91ZGxlc3MuY29tXzJkMzYzODMyMzUzODMyMzEzMDMxMzczM0ByZXNvdXJjZS5jYWxlbmRhci5nb29nbGUuY29t",
          "category": "room",
          "type": "resource",
          "api": "calendar"
        }
      ],
      "page": "1",
      "type": "object_list",
      "api": "calendar"
    }