It seems that the Google calendar API doesn't support to insert events (service.events().insert(calendarId='primary', body=ev)
) with endTimeUnspecified
(aka all-day event), at least with the google-api-python-client library.
My code works without fuss with a start-end event but returns 403 forbidden with all-day event.
I spent over two weeks looking into this, first asking here and lately reporting the problem as an issue on google-api-python-client GitHub tracker.
As suggested by Jon Parrot on GitHub, i beg the question to google-calendar-api guys:
All day events must have the end time specified. As end is exclusive, an all day event for today would have the start 20170122 and the end 20170123. The endTimeUnspecified property is read only.