google-calendar-apiGoogle Calendar API integration with managed OAuth. Create events, list calendars, check availability, and manage schedules. Use this skill when users want to interact with Google Calendar. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Install via ClawdBot CLI:
clawdbot install byungkyu/google-calendar-apiAccess the Google Calendar API with managed OAuth authentication. Create and manage events, list calendars, and check availability.
# List upcoming events
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/google-calendar/calendar/v3/calendars/primary/events?maxResults=10&orderBy=startTime&singleEvents=true')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
https://gateway.maton.ai/google-calendar/{native-api-path}
Replace {native-api-path} with the actual Google Calendar API endpoint path. The gateway proxies requests to www.googleapis.com and automatically injects your OAuth token.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your Google OAuth connections at https://ctrl.maton.ai.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=google-calendar&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'google-calendar'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
Response:
{
"connection": {
"connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
"status": "ACTIVE",
"creation_time": "2025-12-08T07:20:53.488460Z",
"last_updated_time": "2026-01-31T20:03:32.593153Z",
"url": "https://connect.maton.ai/?session_token=...",
"app": "google-calendar",
"metadata": {}
}
}
Open the returned url in a browser to complete OAuth authorization.
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If you have multiple Google Calendar connections, specify which one to use with the Maton-Connection header:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/google-calendar/calendar/v3/calendars/primary/events')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
If omitted, the gateway uses the default (oldest) active connection.
GET /google-calendar/calendar/v3/users/me/calendarList
GET /google-calendar/calendar/v3/calendars/{calendarId}
Use primary for the user's primary calendar.
GET /google-calendar/calendar/v3/calendars/primary/events?maxResults=10&orderBy=startTime&singleEvents=true
With time bounds:
GET /google-calendar/calendar/v3/calendars/primary/events?timeMin=2024-01-01T00:00:00Z&timeMax=2024-12-31T23:59:59Z&singleEvents=true&orderBy=startTime
GET /google-calendar/calendar/v3/calendars/primary/events/{eventId}
POST /google-calendar/calendar/v3/calendars/primary/events
Content-Type: application/json
{
"summary": "Team Meeting",
"description": "Weekly sync",
"start": {
"dateTime": "2024-01-15T10:00:00",
"timeZone": "America/Los_Angeles"
},
"end": {
"dateTime": "2024-01-15T11:00:00",
"timeZone": "America/Los_Angeles"
},
"attendees": [
{"email": "attendee@example.com"}
]
}
POST /google-calendar/calendar/v3/calendars/primary/events
Content-Type: application/json
{
"summary": "All Day Event",
"start": {"date": "2024-01-15"},
"end": {"date": "2024-01-16"}
}
PUT /google-calendar/calendar/v3/calendars/primary/events/{eventId}
Content-Type: application/json
{
"summary": "Updated Meeting Title",
"start": {"dateTime": "2024-01-15T10:00:00Z"},
"end": {"dateTime": "2024-01-15T11:00:00Z"}
}
PATCH /google-calendar/calendar/v3/calendars/primary/events/{eventId}
Content-Type: application/json
{
"summary": "New Title Only"
}
DELETE /google-calendar/calendar/v3/calendars/primary/events/{eventId}
POST /google-calendar/calendar/v3/calendars/primary/events/quickAdd?text=Meeting+with+John+tomorrow+at+3pm
POST /google-calendar/calendar/v3/freeBusy
Content-Type: application/json
{
"timeMin": "2024-01-15T00:00:00Z",
"timeMax": "2024-01-16T00:00:00Z",
"items": [{"id": "primary"}]
}
// List events
const response = await fetch(
'https://gateway.maton.ai/google-calendar/calendar/v3/calendars/primary/events?maxResults=10&singleEvents=true',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
// Create event
await fetch(
'https://gateway.maton.ai/google-calendar/calendar/v3/calendars/primary/events',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
},
body: JSON.stringify({
summary: 'Meeting',
start: { dateTime: '2024-01-15T10:00:00Z' },
end: { dateTime: '2024-01-15T11:00:00Z' }
})
}
);
import os
import requests
headers = {'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
# List events
events = requests.get(
'https://gateway.maton.ai/google-calendar/calendar/v3/calendars/primary/events',
headers=headers,
params={'maxResults': 10, 'singleEvents': 'true'}
).json()
# Create event
response = requests.post(
'https://gateway.maton.ai/google-calendar/calendar/v3/calendars/primary/events',
headers=headers,
json={
'summary': 'Meeting',
'start': {'dateTime': '2024-01-15T10:00:00Z'},
'end': {'dateTime': '2024-01-15T11:00:00Z'}
}
)
primary as calendarId for the user's main calendar2024-01-15T10:00:00Z)singleEvents=true to expand instancesorderBy=startTime requires singleEvents=truecurl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.| Status | Meaning |
|--------|---------|
| 400 | Missing Google Calendar connection |
| 401 | Invalid or missing Maton API key |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from Google Calendar API |
MATON_API_KEY environment variable is set:echo $MATON_API_KEY
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF
google-calendar. For example:https://gateway.maton.ai/google-calendar/calendar/v3/calendars/primary/eventshttps://gateway.maton.ai/calendar/v3/calendars/primary/eventsGenerated Mar 1, 2026
An AI assistant that automatically schedules meetings, sets reminders for deadlines, and blocks focus time on users' calendars. It can read emails to detect meeting requests and automatically create calendar events with proper time zones and participants.
A clinic management system that integrates with Google Calendar to schedule patient appointments, send automated reminders, and manage doctor availability. The system can sync across multiple healthcare providers' calendars to optimize scheduling and reduce no-shows.
An office management solution that connects with Google Calendar to manage meeting room reservations, equipment availability, and cleaning schedules. Employees can book rooms through the system, which automatically creates calendar events and prevents double-booking conflicts.
A university system that uses Google Calendar to schedule classes, exams, and faculty meetings. It can automatically create recurring events for semester-long courses, manage room assignments, and sync with student and professor calendars for availability checking.
An event management platform that leverages Google Calendar to coordinate vendor schedules, client meetings, and venue bookings. The system can create shared calendars for event teams, send automated updates to all stakeholders, and manage overlapping event timelines.
Offer the Google Calendar integration as part of a monthly or annual subscription service. Businesses pay based on the number of users, calendar connections, or advanced features like automated scheduling algorithms and analytics dashboards.
Charge based on API call volume, with different pricing tiers for light, medium, and heavy users. This model works well for developers building applications that need calendar integration, where costs scale with their application's usage and user base.
Sell custom enterprise licenses to large organizations needing advanced calendar management features, dedicated support, and security compliance. This includes white-label solutions, on-premise deployment options, and integration with existing corporate systems.
💬 Integration Tip
Start by testing with the quick start example to list events, then implement connection management before building full calendar operations. Use the Maton-Connection header when managing multiple user accounts.
Interact with Google Calendar via the Google Calendar API – list upcoming events, create new events, update or delete them. Use this skill when you need programmatic access to your calendar from OpenClaw.
Read, search, and manage Outlook emails and calendar via Microsoft Graph API. Use when the user asks about emails, inbox, Outlook, Microsoft mail, calendar events, or scheduling.
Google Calendar via gcalcli: today-only agenda by default, bounded meaning-first lookup via agenda scans, and fast create/delete with verification--optimized for low tool calls and minimal output.
This skill should be used when interacting with Apple Calendar on macOS. Use it for listing calendars, viewing events, creating/updating/deleting calendar events, and checking availability/free-busy times. Triggers on requests like "check my calendar", "schedule a meeting", "what's on my schedule", "am I free tomorrow", or any calendar-related operations.
Access and manage Google Calendar events with gogcli for cross-calendar agendas, keyword search, and filtered outputs avoiding unwanted calendars like holidays.
Daily morning rollup of important emails and calendar events at 8am with AI-generated summaries