nilatti
nilatti

Reputation: 578

Google calendar API 400 response

I'm trying to execute a simple freebusy query on the Google Calendar API. I have my authorization all working fine, can see lists of users' calendars, etc. When I try to submit a free/busy query, I get a 400 error with (as far as I can tell) not details at all about what it doesn't like.

This is true both in my own code and when I use the Google Calendar API "Try It" feature.

Here is my request (created using the Try It widget), and the response:

Request

POST https://www.googleapis.com/calendar/v3/freeBusy?key={YOUR_API_KEY}

Content-Type:  application/json
Authorization:  Bearer ya29.AHES6ZTr-2wksEvp0iGPTnHTirTIItib5WwxmSAySq1ghfI98Cz88kA
X-JavaScript-User-Agent:  Google APIs Explorer

{
     "items": [
          {
              "id": "[my calendar id goes here]@group.calendar.google.com"
          }
     ],
     "timeMin": "2012-01-31T09:00:00",
     "timeMax": "2012-01-31T10:00:00",
     "timeZone": "GMT"
}

Response

400 Bad Request

cache-control:  private, max-age=0
content-encoding:  gzip
content-length:  122
content-type:  application/json; charset=UTF-8
date:  Sun, 16 Jun 2013 13:08:32 GMT
expires:  Sun, 16 Jun 2013 13:08:32 GMT
server:  GSE

{
     "error": {
     "errors": [
          {
              "domain": "global",
              "reason": "badRequest",
              "message": "Bad Request"
           }
     ],
    "code": 400,
    "message": "Bad Request"
     }
}

I think it might have something to do with the dateTime objects/formatting? But I don't have any idea what. I'd really appreciate some help; I've been banging my head against this for a week!

Upvotes: 10

Views: 16200

Answers (6)

Oded Ben Dov
Oded Ben Dov

Reputation: 10397

Was something slightly different for me, I was missing the milliseconds:

2023-08-06T07:55:23.000Z

Instead of

2023-08-06T07:55:23Z  

Upvotes: 0

Skywalker
Skywalker

Reputation: 1586

In case someone is facing similar error while using Google APIs Client Library for Objective-C for REST, use dateTime property instead of the date property when setting the date for the event. I wasted several hours on this.

Upvotes: 1

Jonatas Mendes
Jonatas Mendes

Reputation: 63

I had the same problem, but I managed to solve it simply by removing the "Z" from DateTime and in TimeZone putting GMT with the time difference:

'dateTime': '2020-10-31T17:00:00.000',
'timeZone': 'GMT-03:00'

Upvotes: 1

Klynton
Klynton

Reputation: 171

In short, you are missing the time zone offset in both the timeMin and timeMax variables, this is required even if you have the timeZone variable set.

For example, I live in the America/New_York timezone so my offset would be -05:00, which needs to be appended to the values you currently have. So for me the values would look like,

{
    ...
    "timeMin": "2012-01-31T09:00:00-05:00",
    "timeMax": "2012-01-31T10:00:00-05:00",
    ...
}

To be more specific, Google Calendar API requires that timeMin and timeMax

Must be an RFC3339 timestamp with mandatory time zone offset, for example, 2011-06-03T10:00:00-07:00, 2011-06-03T10:00:00Z. Milliseconds may be provided but are ignored. If timeMax is set, timeMin must be smaller than timeMax.

So you can either have 2012-01-31T09:00:00-5:00 or 2012-01-31T09:00:00Z with the milliseconds as optional (since its ignored anyway).

The Google Calendar Events list API documentation is where I got all the info from.

Upvotes: 0

ntulsi
ntulsi

Reputation: 86

The date time value should be in UTC "TZ" format. Almost all CRMs and public API accept time in this format. If you convert the datetime to UTC time using major language (such as C or Java) library functions/methods they would return a datetime instance in YYYY-MM-DDTHH:MM:SS.MMMZ format.

Upvotes: 0

nilatti
nilatti

Reputation: 578

Ok, I figured it out and I am leaving the answer for anyone else who is LOSING THEIR MIND over this.

Despite what Google's documentation says about format for datetime in this case, the only format I could get to work was this:

2008-03-07T17:06:02.000Z

so that's YYYY-MM-DDTHH:MM:SS.MMMZ

What is the Z for? I don't know, but it has to be there.

Upvotes: 31

Related Questions