Returns free/busy information for a set of calendars. Try it now.
Request
HTTP request
POST https://www.googleapis.com/calendar/v3/freeBusy
Authorization
This request allows authorization with at least one of the following scopes:
| Scope | 
|---|
| https://www.googleapis.com/auth/calendar.readonly | 
| https://www.googleapis.com/auth/calendar | 
| https://www.googleapis.com/auth/calendar.events.freebusy | 
| https://www.googleapis.com/auth/calendar.freebusy | 
For more information, see the authentication and authorization page.
Request body
In the request body, supply data with the following structure:
{
  "timeMin": datetime,
  "timeMax": datetime,
  "timeZone": string,
  "groupExpansionMax": integer,
  "calendarExpansionMax": integer,
  "items": [
    {
      "id": string
    }
  ]
}| Property name | Value | Description | Notes | 
|---|---|---|---|
| timeMin | datetime | The start of the interval for the query formatted as per RFC3339. | |
| timeMax | datetime | The end of the interval for the query formatted as per RFC3339. | |
| timeZone | string | Time zone used in the response. Optional. The default is UTC. | |
| groupExpansionMax | integer | Maximal number of calendar identifiers to be provided for a single group. Optional. An error is returned for a group with more members than this value. Maximum value is 100. | |
| calendarExpansionMax | integer | Maximal number of calendars for which FreeBusy information is to be provided. Optional. Maximum value is 50. | |
| items[] | list | List of calendars and/or groups to query. | |
| items[].id | string | The identifier of a calendar or a group. | 
Response
If successful, this method returns a response body with the following structure:
{
  "kind": "calendar#freeBusy",
  "timeMin": datetime,
  "timeMax": datetime,
  "groups": {
    (key): {
      "errors": [
        {
          "domain": string,
          "reason": string
        }
      ],
      "calendars": [
        string
      ]
    }
  },
  "calendars": {
    (key): {
      "errors": [
        {
          "domain": string,
          "reason": string
        }
      ],
      "busy": [
        {
          "start": datetime,
          "end": datetime
        }
      ]
    }
  }
}| Property name | Value | Description | Notes | 
|---|---|---|---|
| kind | string | Type of the resource ("calendar#freeBusy"). | |
| timeMin | datetime | The start of the interval. | |
| timeMax | datetime | The end of the interval. | |
| groups | object | Expansion of groups. | |
| groups.(key) | nested object | List of calendars that are members of this group. | |
| groups.(key).errors[] | list | Optional error(s) (if computation for the group failed). | |
| groups.(key).errors[].domain | string | Domain, or broad category, of the error. | |
| groups.(key).errors[].reason | string | Specific reason for the error. Some of the possible values are: 
 | |
| groups.(key).calendars[] | list | List of calendars' identifiers within a group. | |
| calendars | object | List of free/busy information for calendars. | |
| calendars.(key) | nested object | Free/busy expansions for a single calendar. | |
| calendars.(key).errors[] | list | Optional error(s) (if computation for the calendar failed). | |
| calendars.(key).errors[].domain | string | Domain, or broad category, of the error. | |
| calendars.(key).errors[].reason | string | Specific reason for the error. Some of the possible values are: 
 | |
| calendars.(key).busy[] | list | List of time ranges during which this calendar should be regarded as busy. | |
| calendars.(key).busy[].start | datetime | The (inclusive) start of the time period. | |
| calendars.(key).busy[].end | datetime | The (exclusive) end of the time period. | 
Try it!
Use the APIs Explorer below to call this method on live data and see the response.