Calendar — entry 006 of 17
Google Calendar
The Google Calendar API reads and writes events, calendars, free/busy data, and reminders for any Google account that's granted OAuth consent, with push-notification channels available so an app can watch a calendar for changes instead of polling it. It's the same REST API that powers Calendar add-ons and third-party scheduling tools like Calendly. Usage is free under Google's shared per-minute and per-project quotas (10,000 requests/minute/project as of the May 2026 quota update); there's no separate paid tier for the API itself, only future overage billing above a 1,000,000-requests-a-day threshold.
GreatAPIs Score
Auth quickstart
- Register an app / run the OAuth flow to obtain a bearer token.
- Send it as an Authorization header
Authorization: Bearer <token>
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Endpoints
acl7
GET/calendars/{calendarId}/acl
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
maxResults | query | no | integer |
pageToken | query | no | string |
showDeleted | query | no | boolean |
syncToken | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Acl |
POST/calendars/{calendarId}/acl
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
sendNotifications | query | no | boolean |
application/json — AclRule
| Status | Description | Schema |
|---|---|---|
200 | Successful response | AclRule |
POST/calendars/{calendarId}/acl/watch
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
maxResults | query | no | integer |
pageToken | query | no | string |
showDeleted | query | no | boolean |
syncToken | query | no | string |
application/json — Channel
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Channel |
GET/calendars/{calendarId}/acl/{ruleId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
ruleId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | AclRule |
PUT/calendars/{calendarId}/acl/{ruleId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
ruleId | path | yes | string |
sendNotifications | query | no | boolean |
application/json — AclRule
| Status | Description | Schema |
|---|---|---|
200 | Successful response | AclRule |
PATCH/calendars/{calendarId}/acl/{ruleId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
ruleId | path | yes | string |
sendNotifications | query | no | boolean |
application/json — AclRule
| Status | Description | Schema |
|---|---|---|
200 | Successful response | AclRule |
DELETE/calendars/{calendarId}/acl/{ruleId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
ruleId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | — |
calendarList7
GET/users/me/calendarList
| Name | In | Required | Type |
|---|---|---|---|
maxResults | query | no | integer |
minAccessRole | query | no | string |
pageToken | query | no | string |
showDeleted | query | no | boolean |
showHidden | query | no | boolean |
syncToken | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | CalendarList |
POST/users/me/calendarList
| Name | In | Required | Type |
|---|---|---|---|
colorRgbFormat | query | no | boolean |
application/json — CalendarListEntry
| Status | Description | Schema |
|---|---|---|
200 | Successful response | CalendarListEntry |
POST/users/me/calendarList/watch
| Name | In | Required | Type |
|---|---|---|---|
maxResults | query | no | integer |
minAccessRole | query | no | string |
pageToken | query | no | string |
showDeleted | query | no | boolean |
showHidden | query | no | boolean |
syncToken | query | no | string |
application/json — Channel
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Channel |
GET/users/me/calendarList/{calendarId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | CalendarListEntry |
PUT/users/me/calendarList/{calendarId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
colorRgbFormat | query | no | boolean |
application/json — CalendarListEntry
| Status | Description | Schema |
|---|---|---|
200 | Successful response | CalendarListEntry |
PATCH/users/me/calendarList/{calendarId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
colorRgbFormat | query | no | boolean |
application/json — CalendarListEntry
| Status | Description | Schema |
|---|---|---|
200 | Successful response | CalendarListEntry |
DELETE/users/me/calendarList/{calendarId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | — |
calendars6
POST/calendars
application/json — Calendar
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Calendar |
GET/calendars/{calendarId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Calendar |
PUT/calendars/{calendarId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
application/json — Calendar
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Calendar |
PATCH/calendars/{calendarId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
application/json — Calendar
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Calendar |
DELETE/calendars/{calendarId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | — |
POST/calendars/{calendarId}/clear
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | — |
channels1
POST/channels/stop
application/json — Channel
| Status | Description | Schema |
|---|---|---|
200 | Successful response | — |
colors1
GET/colors
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Colors |
events11
GET/calendars/{calendarId}/events
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
alwaysIncludeEmail | query | no | boolean |
eventTypes | query | no | array |
iCalUID | query | no | string |
maxAttendees | query | no | integer |
maxResults | query | no | integer |
orderBy | query | no | string |
pageToken | query | no | string |
privateExtendedProperty | query | no | array |
q | query | no | string |
sharedExtendedProperty | query | no | array |
showDeleted | query | no | boolean |
showHiddenInvitations | query | no | boolean |
singleEvents | query | no | boolean |
syncToken | query | no | string |
timeMax | query | no | string |
timeMin | query | no | string |
timeZone | query | no | string |
updatedMin | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Events |
POST/calendars/{calendarId}/events
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
conferenceDataVersion | query | no | integer |
maxAttendees | query | no | integer |
sendNotifications | query | no | boolean |
sendUpdates | query | no | string |
supportsAttachments | query | no | boolean |
application/json — Event
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Event |
POST/calendars/{calendarId}/events/import
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
conferenceDataVersion | query | no | integer |
supportsAttachments | query | no | boolean |
application/json — Event
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Event |
POST/calendars/{calendarId}/events/quickAdd
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
text | query | yes | string |
sendNotifications | query | no | boolean |
sendUpdates | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Event |
POST/calendars/{calendarId}/events/watch
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
alwaysIncludeEmail | query | no | boolean |
eventTypes | query | no | array |
iCalUID | query | no | string |
maxAttendees | query | no | integer |
maxResults | query | no | integer |
orderBy | query | no | string |
pageToken | query | no | string |
privateExtendedProperty | query | no | array |
q | query | no | string |
sharedExtendedProperty | query | no | array |
showDeleted | query | no | boolean |
showHiddenInvitations | query | no | boolean |
singleEvents | query | no | boolean |
syncToken | query | no | string |
timeMax | query | no | string |
timeMin | query | no | string |
timeZone | query | no | string |
updatedMin | query | no | string |
application/json — Channel
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Channel |
GET/calendars/{calendarId}/events/{eventId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
eventId | path | yes | string |
alwaysIncludeEmail | query | no | boolean |
maxAttendees | query | no | integer |
timeZone | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Event |
PUT/calendars/{calendarId}/events/{eventId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
eventId | path | yes | string |
alwaysIncludeEmail | query | no | boolean |
conferenceDataVersion | query | no | integer |
maxAttendees | query | no | integer |
sendNotifications | query | no | boolean |
sendUpdates | query | no | string |
supportsAttachments | query | no | boolean |
application/json — Event
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Event |
PATCH/calendars/{calendarId}/events/{eventId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
eventId | path | yes | string |
alwaysIncludeEmail | query | no | boolean |
conferenceDataVersion | query | no | integer |
maxAttendees | query | no | integer |
sendNotifications | query | no | boolean |
sendUpdates | query | no | string |
supportsAttachments | query | no | boolean |
application/json — Event
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Event |
DELETE/calendars/{calendarId}/events/{eventId}
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
eventId | path | yes | string |
sendNotifications | query | no | boolean |
sendUpdates | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | — |
GET/calendars/{calendarId}/events/{eventId}/instances
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
eventId | path | yes | string |
alwaysIncludeEmail | query | no | boolean |
maxAttendees | query | no | integer |
maxResults | query | no | integer |
originalStart | query | no | string |
pageToken | query | no | string |
showDeleted | query | no | boolean |
timeMax | query | no | string |
timeMin | query | no | string |
timeZone | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Events |
POST/calendars/{calendarId}/events/{eventId}/move
| Name | In | Required | Type |
|---|---|---|---|
calendarId | path | yes | string |
eventId | path | yes | string |
destination | query | yes | string |
sendNotifications | query | no | boolean |
sendUpdates | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Event |
freebusy1
POST/freeBusy
application/json — FreeBusyRequest
| Status | Description | Schema |
|---|---|---|
200 | Successful response | FreeBusyResponse |
settings3
GET/users/me/settings
| Name | In | Required | Type |
|---|---|---|---|
maxResults | query | no | integer |
pageToken | query | no | string |
syncToken | query | no | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Settings |
POST/users/me/settings/watch
| Name | In | Required | Type |
|---|---|---|---|
maxResults | query | no | integer |
pageToken | query | no | string |
syncToken | query | no | string |
application/json — Channel
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Channel |
GET/users/me/settings/{setting}
| Name | In | Required | Type |
|---|---|---|---|
setting | path | yes | string |
| Status | Description | Schema |
|---|---|---|
200 | Successful response | Setting |
Try it
Developer reference
https://www.googleapis.com/calendar/v3Google's Calendar API usage-limits docs (developers.google.com/workspace/calendar/api/guides/quota) publish a concrete default -- confirmed live -- of 10,000 requests/minute/project and 600 requests/minute/user, both sliding-window per-minute quotas, plus a 1,000,000-requests/day-per-project threshold before overage billing applies; project owners can request a higher ceiling through the Cloud Console's Quotas page, though approval isn't guaranteed.
- GET/users/me/calendarList
- GET/calendars/{calendarId}
- GET/calendars/{calendarId}/events
- POST/calendars/{calendarId}/events/quickAdd
- POST/freeBusy