Qordinate acts as your intelligent layer between apps like Google Calendar and your life. We handle the messy API connections and coordination so you can focus on what actually matters.
invalid_clientError: invalid_client
{
"error": "invalid_client",
"error_description": "The OAuth client was not found."
}
access_deniedError: access_denied
{
"error": "access_denied",
"error_description": "The user denied your request"
}
invalid_grantError: invalid_grant
{
"error": "invalid_grant",
"error_description": "Bad Request"
}
forbiddenHTTP 403 Forbidden
{
"error": {
"errors": [
{
"domain": "calendar",
"reason": "forbidden",
"message": "Forbidden"
}
],
"code": 403,
"message": "Forbidden"
}
}
notFoundHTTP 404 Not Found
{
"error": {
"errors": [
{
"domain": "calendar",
"reason": "notFound",
"message": "Not Found"
}
],
"code": 404,
"message": "Not Found"
}
}
invalidHTTP 400 Bad Request
{
"error": {
"errors": [
{
"domain": "calendar",
"reason": "invalid",
"message": "Invalid value for: Invalid format: 2023-13-45T25:61:61.000Z is not a valid date and time."
}
],
"code": 400,
"message": "Invalid value for: Invalid format: 2023-13-45T25:61:61.000Z is not a valid date and time."
}
}
googleapiclient.errors.HttpErrorTraceback (most recent call last):
File "calendar_script.py", line 18, in <module>
events_result = service.events().list(calendarId='primary').execute()
File "/usr/local/lib/python3.9/site-packages/googleapiclient/http.py", line 907, in execute
self._execute(num_retries)
File "/usr/local/lib/python3.9/site-packages/googleapiclient/http.py", line 942, in execute
raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/primary/events?alt=json returned "Forbidden">
GaxiosErrorGaxiosError: invalid_client
at Gaxios._request (/node_modules/gaxios/src/gaxios.ts:160:13)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
at async Calendar.calendars.get (/node_modules/googleapis/src/apis/calendar/v3.ts:2341:15)
at async main (/app/index.js:23:18)
{
response: {
config: { url: 'https://www.googleapis.com/oauth2/v4/token', method: 'POST' },
data: { error: 'invalid_client', error_description: 'The OAuth client was not found.' },
status: 400,
statusText: 'Bad Request',
headers: {
'content-type': 'application/json; charset=utf-8',
'cache-control': 'no-cache, no-store, max-age=0, must-revalidate',
'pragma': 'no-cache',
'expires': 'Mon, 01 Jan 1990 00:00:00 GMT'
}
}
}
timeRangeEmptyHTTP 400 Bad Request
{
"error": {
"errors": [
{
"domain": "calendar",
"reason": "timeRangeEmpty",
"message": "The specified time range is empty."
}
],
"code": 400,
"message": "The specified time range is empty."
}
}
invalidRecurrenceHTTP 400 Bad Request
{
"error": {
"errors": [
{
"domain": "calendar",
"reason": "invalidRecurrence",
"message": "Invalid recurrence rule."
}
],
"code": 400,
"message": "Invalid recurrence rule."
}
}
quotaExceededHTTP 403 Forbidden
{
"error": {
"errors": [
{
"domain": "usageLimits",
"reason": "quotaExceeded",
"message": "Quota exceeded for quota metric 'Queries' and limit 'Queries per minute per user' of service 'calendar-json.googleapis.com' for consumer 'project_number:123456789'."
}
],
"code": 403,
"message": "Quota exceeded for quota metric 'Queries' and limit 'Queries per minute per user' of service 'calendar-json.googleapis.com' for consumer 'project_number:123456789'."
}
}
timeoutError: timeout of 30000ms exceeded
at createError (/node_modules/axios/lib/core/createError.js:16:15)
at Timeout.handleTimeout [as _onTimeout] (/node_modules/axios/lib/adapters/http.js:280:16)
at listOnTimeout (timers.js:557:17)
at processTimers (timers.js:500:7)