Yusif
Yusif

Reputation: 551

Google Calendar API Freebusy query returns "notFound" error

I'm trying to learn how to use this query; I created an API key and used Postman to

Post https://www.googleapis.com/calendar/v3/freeBusy?key="THE_API_KEY"

with this request body:

{
  "timeMin": "2022-11-16T00:00:31-00:00",
  "timeMax": "2022-11-16T14:00:00-00:00",
  "groupExpansionMax": 100,
  "calendarExpansionMax": 50,
  "items": [
    {
      "id": "MY_OWN_GMAIL_ADDRESS"
    },
    {
      "id": "OTHER_GMAIL_ADDRESS"
    }
  ]
}

and got this response:

{
    "kind": "calendar#freeBusy",
    "timeMin": "2022-11-16T00:00:31.000Z",
    "timeMax": "2022-11-16T14:00:00.000Z",
    "calendars": {
        "MY_OWN_GMAIL_ADDRESS": {
            "errors": [
                {
                    "domain": "global",
                    "reason": "notFound"
                }
            ],
            "busy": []
        },
        "OTHER_GMAIL_ADDRESS": {
            "errors": [
                {
                    "domain": "global",
                    "reason": "notFound"
                }
            ],
            "busy": []
        }
    }
}

What am I missing?

Upvotes: 0

Views: 832

Answers (2)

Linda Lawton - DaImTo
Linda Lawton - DaImTo

Reputation: 116868

The Freebusy: query returns information about weither or not there is an event at the time of the request.

This method does not require authorization when being used against a public google calendar. There are a number of such calendars the holiday calendars are all public. You could also set your own calendar to public if you wish and then you would be able to use use an api key to access it.

API keys give you access to public methods only.

In order to access private user data. You need to be authorized using oauth2 with one of the following scopes.

enter image description here

If you do not have access to a calendar then it will return not found as you cant see it so your not going to be able to find it.

The solution i your case to fix your issue would be to either set the calendar to public and continue to use the api key. You will only be able to preform read actions against the calendar.

Or to switch to using oauth2 and send an authorization header with a bearer token.

Upvotes: 3

NationBoneless
NationBoneless

Reputation: 298

Your post didnt include the Authorization header. Did you include it in your Postman Request?

Your need to send your Access Token as a Bearer Token in the Authorization Header

You can see an example for a request here:

https://developers.google.com/calendar/api/v3/reference/freebusy/query?apix=true#try-it

Upvotes: 1

Related Questions