Skip to content

Busy times of calendars between two times.

Returns free/busy information for a set of calendars.

Job calendar.freebusy.query

Your AI asks

checks the price first
telipot run google-calendar.freebusy.query \
  --input-json '{"timeMin":"2026-10-12T00:00:00Z","timeMax":"2026-10-19T00:00:00Z","items":[{"id":"primary"}]}' \
  --as user:ana \
  --quote

Price

Free
Priced· before it runs

google-calendar.freebusy.query

FreePerson’s own

Whose account it uses

1The person asking · as Ana
Selected identity for this example
2Your company’s Google Calendar account
skipped
3Our account
not used

What it sends

{
  "timeMin": "2026-10-12T00:00:00Z",
  "timeMax": "2026-10-19T00:00:00Z",
  "items": [{"id":"primary"}]
}

Your Google Calendar login is added for you. Your AI never sees it.

What it costs

Free

no charge from the provider

Preview the price first. --quote runs nothing.

For developers · run it

Shell · runs the task on the named account

telipot run google-calendar.freebusy.query \
  --input-json '{"timeMin":"2026-10-12T00:00:00Z","timeMax":"2026-10-19T00:00:00Z","items":[{"id":"primary"}]}' \
  --as user:ana

timeMin

string · required

The start of the interval, an RFC 3339 time with an offset

timeMax

string · required

The end of the interval, an RFC 3339 time with an offset

items

array · required

The calendars to query, each an object with an id from google-calendar.calendars.list, or primary

timeZone

string · default "UTC"

The time zone of the times in the answer

calendarExpansionMax

integer

The most calendars to answer for

timeMin

string

timeMax

string

calendars

object

One entry per queried calendar id

groups

object

kind

string

Full output schema · JSONNested fields and constraints

Output JSON Schema

{
  "type": "object",
  "properties": {
    "timeMin": {
      "type": "string"
    },
    "timeMax": {
      "type": "string"
    },
    "calendars": {
      "type": "object",
      "description": "One entry per queried calendar id",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "busy": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "start": {
                  "type": "string"
                },
                "end": {
                  "type": "string"
                }
              }
            }
          },
          "errors": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "domain": {
                  "type": "string"
                },
                "reason": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "groups": {
      "type": "object"
    },
    "kind": {
      "type": "string"
    }
  }
}

A real answer

examples/google-calendar.freebusy.query.json

{
  "kind": "calendar#freeBusy",
  "timeMin": "2026-10-12T00:00:00.000Z",
  "timeMax": "2026-10-19T00:00:00.000Z",
  "calendars": {
    "contact@example.com": {
      "busy": [
        {
          "start": "2026-10-12T17:00:00Z",
          "end": "2026-10-12T17:30:00Z"
        },
        {
          "start": "2026-10-14T22:00:00Z",
          "end": "2026-10-14T23:00:00Z"
        }
      ]
    }
  }
}