composio-calendar
Original:🇺🇸 English
Translated
Google Calendar via Composio API. Use when: (1) Creating calendar events with correct durations (2) Finding/searching events (3) Updating or deleting events (4) Finding free time slots CRITICAL: CREATE and UPDATE use DIFFERENT duration parameters. This skill prevents the common 30-minute default bug.
2installs
Added on
NPX Install
npx skill4agent add prashaantr/teach-claude-something-new composio-calendarTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Google Calendar via Composio
Critical: CREATE vs UPDATE Parameters
This is the most common bug. CREATE and UPDATE use different parameters for event duration:
| Action | Duration Method | Example |
|---|---|---|
| | |
| | |
| | |
If you pass to CREATE, it is IGNORED and the event defaults to 30 minutes.
end_datetimeEnvironment
bash
COMPOSIO_API_KEY # API key
COMPOSIO_USER_ID # Entity ID (required for all requests)
COMPOSIO_CONNECTIONS # JSON with .googlecalendar connection IDCore Pattern
bash
CONNECTION_ID=$(echo $COMPOSIO_CONNECTIONS | jq -r '.googlecalendar')
curl -s "https://backend.composio.dev/api/v3/tools/execute/ACTION_NAME" \
-H "x-api-key: $COMPOSIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"connected_account_id": "'$CONNECTION_ID'",
"entity_id": "'$COMPOSIO_USER_ID'",
"arguments": {}
}' | jq '.data'Creating Events
bash
curl -s "https://backend.composio.dev/api/v3/tools/execute/GOOGLECALENDAR_CREATE_EVENT" \
-H "x-api-key: $COMPOSIO_API_KEY" -H "Content-Type: application/json" \
-d '{
"connected_account_id": "'$CONNECTION_ID'",
"entity_id": "'$COMPOSIO_USER_ID'",
"arguments": {
"title": "Work Block: API Docs",
"start_datetime": "2026-02-24T09:00:00",
"event_duration_hour": 2,
"event_duration_minutes": 0,
"timezone": "America/Los_Angeles",
"description": "Focus time for API documentation",
"calendar_id": "primary"
}
}' | jqDuration rules:
- : 0-59 ONLY. Never use 60+.
event_duration_minutes - For 90 minutes:
event_duration_hour: 1, event_duration_minutes: 30 - For 2 hours:
event_duration_hour: 2, event_duration_minutes: 0
Defaults:
- : "primary" if omitted
calendar_id - : true (adds Google Meet link)
create_meeting_room - : UTC if omitted
timezone
Finding Events
bash
curl -s "https://backend.composio.dev/api/v3/tools/execute/GOOGLECALENDAR_FIND_EVENT" \
-H "x-api-key: $COMPOSIO_API_KEY" -H "Content-Type: application/json" \
-d '{
"connected_account_id": "'$CONNECTION_ID'",
"entity_id": "'$COMPOSIO_USER_ID'",
"arguments": {
"text_query": "API Docs",
"time_min": "2026-02-24T00:00:00Z",
"time_max": "2026-02-25T00:00:00Z",
"calendar_id": "primary"
}
}' | jqUse to get before updating or deleting.
GOOGLECALENDAR_FIND_EVENTevent_idUpdating Events
Use PATCH for partial updates (preferred), UPDATE for full replacement:
bash
curl -s "https://backend.composio.dev/api/v3/tools/execute/GOOGLECALENDAR_PATCH_EVENT" \
-H "x-api-key: $COMPOSIO_API_KEY" -H "Content-Type: application/json" \
-d '{
"connected_account_id": "'$CONNECTION_ID'",
"entity_id": "'$COMPOSIO_USER_ID'",
"arguments": {
"event_id": "abc123",
"calendar_id": "primary",
"end_datetime": "2026-02-24T11:00:00"
}
}' | jqNote: UPDATE replaces the entire event; unspecified fields may be cleared.
Deleting Events
bash
curl -s "https://backend.composio.dev/api/v3/tools/execute/GOOGLECALENDAR_DELETE_EVENT" \
-H "x-api-key: $COMPOSIO_API_KEY" -H "Content-Type: application/json" \
-d '{
"connected_account_id": "'$CONNECTION_ID'",
"entity_id": "'$COMPOSIO_USER_ID'",
"arguments": {
"event_id": "abc123",
"calendar_id": "primary"
}
}' | jqFinding Free Slots
bash
curl -s "https://backend.composio.dev/api/v3/tools/execute/GOOGLECALENDAR_FREE_BUSY" \
-H "x-api-key: $COMPOSIO_API_KEY" -H "Content-Type: application/json" \
-d '{
"connected_account_id": "'$CONNECTION_ID'",
"entity_id": "'$COMPOSIO_USER_ID'",
"arguments": {
"time_min": "2026-02-24T09:00:00Z",
"time_max": "2026-02-24T18:00:00Z"
}
}' | jqCommon Patterns
Scheduling Multiple Work Blocks
When creating multiple events in sequence:
- Calculate each explicitly
start_datetime - Use +
event_duration_hourfor eachevent_duration_minutes - Account for breaks between blocks
Example: 3 two-hour blocks with 30-min breaks:
- Block 1: 9:00-11:00 ()
start: 09:00, duration: 2h - Block 2: 11:30-13:30 ()
start: 11:30, duration: 2h - Block 3: 14:00-16:00 ()
start: 14:00, duration: 2h
Fixing Duration After Creation
If events were created with wrong duration:
- Find events:
GOOGLECALENDAR_FIND_EVENT - Patch each: with correct
GOOGLECALENDAR_PATCH_EVENTend_datetime
Datetime Formats
- ISO 8601: (e.g.,
YYYY-MM-DDTHH:MM:SS)2026-02-24T09:00:00 - With timezone: or use
2026-02-24T09:00:00-08:00paramtimezone - Natural language NOT supported: "tomorrow", "next Monday" will be rejected
All Actions
See references/actions.md for complete API reference.
Discover Actions
bash
curl -s "https://backend.composio.dev/api/v2/actions?apps=googlecalendar" \
-H "x-api-key: $COMPOSIO_API_KEY" | jq '.items[] | {name, description}'