403 Forbidden message when calling the v3 Google Calendar API using a Service Account via OAuth 2.0

Justin Phillips picture Justin Phillips · Dec 22, 2012 · Viewed 23.5k times · Source

This is a follow on from my thread about a 401 error when using the Google Calendar API and OAuth2, which can be found here

This contains details of the account setup that leads onto my next question, so I wont repeat myself in this thread.

OK, so when when I call the following code to update a Calendar event I get a 403 forbidden error.

for (Event event : events.getItems())
{
    event.setSummary("XXX" + event.getSummary());

    Event updatedEvent = calendar.events().update(CALENDAR_ID, event.getId(), event).execute();
}

Here is the returned error message:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
    "code" : 403,
    "errors" : [ {
        "message" : "Forbidden"
     } ],
    "message" : "Forbidden"
}

What have I tried? Well, I have re-read the (rather poor) Google documentation about Service Accounts, re-checked my API Console account settings, tried changing the code that builds the credential (this leads to other errors so is a regression on my previous thread).

In short, nothing works, so is there anything obvious I am missing?

Answer

Justin Phillips picture Justin Phillips · Dec 22, 2012

Solved, thanks to this post.

You have to share the calendar from your Google Calendar account with the Service Account email that is generated in the Google API Console, e.g. [email protected].

I can now update my calendar from my web service.