find_events from yesterday reads upcoming events. What about creating them? When you get a deadline email from your committee, how many clicks does it take to add it to Calendar?
Open Calendar, click the date, type the title, set the start and end times, save. Four or five clicks. I do this for every deadline announcement.
GOOGLECALENDAR_CREATE_EVENT does it in one function call. Takes calendarId, summary (the event title), start, and end datetimes in ISO 8601 format. Write action — add a safety note: always test with a calendar you can verify, confirm the event looks right before automating with real deadlines:
result = toolset.execute_action(
Action.GOOGLECALENDAR_CREATE_EVENT,
{"calendarId": "primary", "summary": "Thesis draft due", "start": "2026-05-01T10:00:00Z", "end": "2026-05-01T11:00:00Z"}
)
print(f"Event created: {result.get('id', '')}")find_events used GOOGLECALENDAR_FIND_EVENT. create_event uses GOOGLECALENDAR_CREATE_EVENT. Is the naming always that parallel across Composio actions?
Intentionally parallel. Read actions: LIST_, FIND_, BATCH_GET. Write actions: CREATE_, INSERT_, UPDATE_, SEND_. Once you see the naming convention, the next unfamiliar action name becomes guessable:
def create_event(cal_id: str, title: str, start: str, end: str) -> dict:
result = toolset.execute_action(
Action.GOOGLECALENDAR_CREATE_EVENT,
{"calendarId": cal_id, "summary": title, "start": start, "end": end}
)
print(f"Event '{title}' created: {result.get('id', '')}")
return resultSo I can parse an email subject for a deadline date and call create_event with the parsed datetime — the whole pipeline from email to Calendar is two function calls.
Your committee meeting block appears in Calendar before you close the email.
I used find_events to look up the calendar first and confirm the ID — then created the event. That's the lookup-before-write pattern for write actions.
start and end must be ISO 8601 strings. Missing timezone offset makes the event appear at a wrong time. For all-day events use date-only format "2026-05-01" in the date field instead of dateTime. Check the event in Calendar after creation to confirm the time zone rendered correctly.
Required params:
| Param | Type | Example |
|---|---|---|
calendarId | str | "primary" |
summary | str | "Thesis draft due" |
start | str | "2026-05-01T10:00:00Z" |
end | str | "2026-05-01T11:00:00Z" |
list_calendars() to get the calendar ID — never hardcode itReturns the created event dict including id, htmlLink, and status. Save the id if you need to update or delete the event later.
find_events from yesterday reads upcoming events. What about creating them? When you get a deadline email from your committee, how many clicks does it take to add it to Calendar?
Open Calendar, click the date, type the title, set the start and end times, save. Four or five clicks. I do this for every deadline announcement.
GOOGLECALENDAR_CREATE_EVENT does it in one function call. Takes calendarId, summary (the event title), start, and end datetimes in ISO 8601 format. Write action — add a safety note: always test with a calendar you can verify, confirm the event looks right before automating with real deadlines:
result = toolset.execute_action(
Action.GOOGLECALENDAR_CREATE_EVENT,
{"calendarId": "primary", "summary": "Thesis draft due", "start": "2026-05-01T10:00:00Z", "end": "2026-05-01T11:00:00Z"}
)
print(f"Event created: {result.get('id', '')}")find_events used GOOGLECALENDAR_FIND_EVENT. create_event uses GOOGLECALENDAR_CREATE_EVENT. Is the naming always that parallel across Composio actions?
Intentionally parallel. Read actions: LIST_, FIND_, BATCH_GET. Write actions: CREATE_, INSERT_, UPDATE_, SEND_. Once you see the naming convention, the next unfamiliar action name becomes guessable:
def create_event(cal_id: str, title: str, start: str, end: str) -> dict:
result = toolset.execute_action(
Action.GOOGLECALENDAR_CREATE_EVENT,
{"calendarId": cal_id, "summary": title, "start": start, "end": end}
)
print(f"Event '{title}' created: {result.get('id', '')}")
return resultSo I can parse an email subject for a deadline date and call create_event with the parsed datetime — the whole pipeline from email to Calendar is two function calls.
Your committee meeting block appears in Calendar before you close the email.
I used find_events to look up the calendar first and confirm the ID — then created the event. That's the lookup-before-write pattern for write actions.
start and end must be ISO 8601 strings. Missing timezone offset makes the event appear at a wrong time. For all-day events use date-only format "2026-05-01" in the date field instead of dateTime. Check the event in Calendar after creation to confirm the time zone rendered correctly.
Required params:
| Param | Type | Example |
|---|---|---|
calendarId | str | "primary" |
summary | str | "Thesis draft due" |
start | str | "2026-05-01T10:00:00Z" |
end | str | "2026-05-01T11:00:00Z" |
list_calendars() to get the calendar ID — never hardcode itReturns the created event dict including id, htmlLink, and status. Save the id if you need to update or delete the event later.
Create a free account to get started. Paid plans unlock all tracks.