Google has updated their official Google Calendar API documentation for v3 including an updated events reference. The updated documentation also includes a guide for creating events.
Other helpful resources:
https://calendar.google.com/calendar/render or https://calendar.google.com/calendar/r/eventedit
The render URL is a thin entry point: it redirects to /calendar/u/0/r/eventedit and keeps the whole query string.
Everything below therefore applies to both URLs.
Prefer render when you do not control the device the link is opened on. It is the form Google itself
hands out, and it is reported to be the only one that reaches the event editor on Android, where the
eventedit path opens the Google Calendar app without starting event creation (see issue #56).
The parameters below were recovered by reading the Google Calendar web client bundle
(the Sbh deep link parser inside the calendar-web JavaScript modules) and then replaying
each parameter against the live event editor.
Each parameter carries one of two confidence markers:
Last check: 2026-08-19.
required: yes (only for the render URL)
format: string/eval
possible values: TEMPLATE
example: action=TEMPLATE
confidence: verified
description: a default required parameter. (If you’re using https://calendar.google.com/calendar/r/eventedit, this parameter is not required.)
required: yes
format: text
example: text=Birthday
confidence: verified
description: event title.
required: yes
format: YYYYMMDDTHHmmSSZ/YYYYMMDDTHHmmSSZ
example: dates=20201231T193000Z/20201231T223000Z
confidence: verified
description: gives the start and end dates and times (in Greenwich Mean Time) for the event. Dates must have both start and end time or it won’t work. The start and end date can be the same (if appropriate). Special cases:
20201231T193000/20201231T223000 (don’t specify a timezone);Z suffix: 20201231T193000Z/20201231T223000Z;20201231/20210101. You must use the following date as the end date for a one day all day event, or +1 day to whatever you want the end date to be;dates=now opens the editor at the next half hour or full hour slot, using the current time.Note: the parser treats the pair as a UTC range only when both halves end with Z.
required: no
format: timezone name
example: ctz=America/New_York
confidence: verified
description: custom timezone. It is used for both the start and the end of the event, unless stz or etz override it.
required: no
format: timezone name
example: stz=Asia/Tokyo
confidence: verified
description: start timezone. Takes priority over ctz.
required: no
format: timezone name
example: etz=America/Los_Angeles
confidence: verified
description: end timezone. Combined with stz it produces an event that starts in one timezone and ends in another.
required: no
format: text (basic HTML is accepted)
example: details=With clowns and stuff
confidence: verified
description: description of your event.
Simple markup such as <b> and <a href="..."> survives into the description editor, so remember to URL encode it.
required: no
format: text
example: location=North Pole
confidence: verified
description: set location of the event. Make sure it’s an address google maps can read easily.
required: no
format: text
example: location_name=Empire State Building
confidence: verified
description: structured location. When present, Google builds a rich location object instead of a plain string, and the companion location_* parameters below fill in its fields.
required: no
format: text
example: location_address_formatted_address=20 W 34th St, New York
confidence: verified (for location_address_formatted_address), from code (for the rest)
description: address parts of the structured location. They are only read when location_name is present.
required: no
format: text (Google Maps identifiers)
example: location_place_id=ChIJaXQRs6lZwokRY6EFpJnhNNE
confidence: from code
description: link the structured location to a Google Maps place.
required: no
format: float
example: location_geo_latitude=40.7484&location_geo_longitude=-73.9857
confidence: from code
description: coordinates of the structured location.
required: no
format: URL
example: location_url=https://example.com
confidence: from code
description: a link attached to the structured location.
required: no
possible values: AVAILABLE, BUSY, BLOCKING, UNKNOWN
format: string
example: crm=AVAILABLE
confidence: verified
description: if Free, Busy, or Out of Office respectively. UNKNOWN clears the value.
required: no
possible values: DEFAULT, PUBLIC, PRIVATE, SECRET, CONFIDENTIAL
format: string
example: icc=PRIVATE
confidence: verified
description: event visibility.
required: no
format: string
example: trp=false
confidence: verified as no longer supported
description: used to toggle transparency (RFC 5545 transparency).
The current web client does not read this parameter at all, and the event stays “Busy”. Use crm instead.
required: no
format: repeatable key:value pair
example: sprop=goo.allowModify:false&sprop=goo.allowInvitesOther:false&sprop=goo.showInvitees:false
confidence: verified
description: guest permissions. Only three keys are read by the current client:
goo.allowModify: let guests modify the event;goo.allowInvitesOther: let guests invite others;goo.showInvitees: let guests see the guest list.Values are compared against the literal string true, so anything else counts as false.
The old sprop=website:... and sprop=name:... pairs (source attribution) are parsed into the same map but no longer used.
required: no
format: repeatable key:value pair
example: pprop=eventColor:5
confidence: from code
description: private properties of the event. The only key the client looks up is eventColor.
required: no
format: repeatable, text (comma-separated emails)
example: add=elf1@example.com,elf2@example.com
confidence: verified
description: a list of guests. The parameter may be repeated, and each occurrence may hold a comma-separated list.
Append _o (or _O) to an address to add that person as an optional guest: add=elf1@example.com,elf2@example.com_o.
required: no
format: text (email)
example: src=santa@example.com
confidence: from code
description: add an event to a shared calendar rather than a user’s default.
required: no
format: text (email)
example: targ=santa@example.com
confidence: from code
description: same purpose as src, and it wins when both are present. The value must contain @, otherwise it is ignored.
required: no
format: text (RFC-5545 specs)
example: recur=RRULE:FREQ=DAILY
confidence: verified
description: set recurring events. Note that this one is not handled by the client side deep link parser, so it behaves independently of the parameters above.
required: no
possible values: meet
format: string
example: vcon=meet
confidence: verified
description: add a video meeting link. The client compares the value against the literal meet, so no other conferencing provider can be requested this way. A real Meet link is generated immediately.
required: no
format: text (base64 event id)
example: eid=<event id>
confidence: from code
description: opens an existing event instead of creating a new one.
required: no
format: text
example: elid=5
confidence: from code
description: event color id. It is only read when an internal feature flag is on, otherwise the client falls back to pprop=eventColor:....
required: no
format: repeatable, three numbers separated by :
example: erem=1:60:0
confidence: partially verified
description: switches the event to custom reminders and adds one notification row per occurrence.
The third component must not be -1, otherwise the entry is dropped.
In the current UI the rows are added but the values themselves are not applied, so treat this parameter as unreliable.
required: no
format: text
example: csid=<conference solution id>&ctid=<conference type id>
confidence: from code
description: conference identifiers. ctid is only read when csid is present.
required: no
format: base64 encoded protobuf
confidence: from code
description: structured conference data attached to the event, plus the operation to perform with it.
required: no
format: repeatable, space separated id title url extra
example: gdoc-attachment=<id>+<title>+<url>+empty
confidence: from code
description: attaches Google Drive documents. Each part is URL encoded individually, and the literal empty marks a missing part. Between three and five parts are accepted.
required: no
format: integer
example: cls=1
confidence: from code
description: undocumented classification field.
required: no
format: boolean (true or 1)
example: ab=true
confidence: from code
description: undocumented boolean flag.
required: no
format: integer (0, 1 or 2)
example: egep=1
confidence: from code
description: undocumented guest permission preset. Values outside the enum are ignored.
required: no
format: text (taskId, taskBundleId), datetime (ddl)
confidence: from code
description: these switch the editor into task mode rather than event mode. ddl is the task deadline.