curl --request POST \
--url https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"summary": "<string>",
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z",
"description": "<string>",
"location": "<string>",
"timeZone": "<string>",
"attendees": [
"jsmith@example.com"
],
"createMeetLink": true,
"rrule": [
"<string>"
]
}
'import requests
url = "https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events"
payload = {
"summary": "<string>",
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z",
"description": "<string>",
"location": "<string>",
"timeZone": "<string>",
"attendees": ["jsmith@example.com"],
"createMeetLink": True,
"rrule": ["<string>"]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
summary: '<string>',
start: '2023-11-07T05:31:56Z',
end: '2023-11-07T05:31:56Z',
description: '<string>',
location: '<string>',
timeZone: '<string>',
attendees: ['jsmith@example.com'],
createMeetLink: true,
rrule: ['<string>']
})
};
fetch('https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'summary' => '<string>',
'start' => '2023-11-07T05:31:56Z',
'end' => '2023-11-07T05:31:56Z',
'description' => '<string>',
'location' => '<string>',
'timeZone' => '<string>',
'attendees' => [
'jsmith@example.com'
],
'createMeetLink' => true,
'rrule' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events"
payload := strings.NewReader("{\n \"summary\": \"<string>\",\n \"start\": \"2023-11-07T05:31:56Z\",\n \"end\": \"2023-11-07T05:31:56Z\",\n \"description\": \"<string>\",\n \"location\": \"<string>\",\n \"timeZone\": \"<string>\",\n \"attendees\": [\n \"jsmith@example.com\"\n ],\n \"createMeetLink\": true,\n \"rrule\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"summary\": \"<string>\",\n \"start\": \"2023-11-07T05:31:56Z\",\n \"end\": \"2023-11-07T05:31:56Z\",\n \"description\": \"<string>\",\n \"location\": \"<string>\",\n \"timeZone\": \"<string>\",\n \"attendees\": [\n \"jsmith@example.com\"\n ],\n \"createMeetLink\": true,\n \"rrule\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"summary\": \"<string>\",\n \"start\": \"2023-11-07T05:31:56Z\",\n \"end\": \"2023-11-07T05:31:56Z\",\n \"description\": \"<string>\",\n \"location\": \"<string>\",\n \"timeZone\": \"<string>\",\n \"attendees\": [\n \"jsmith@example.com\"\n ],\n \"createMeetLink\": true,\n \"rrule\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"eventId": "<string>",
"htmlLink": "<string>",
"summary": "<string>",
"start": "<string>",
"end": "<string>",
"meetLink": "<string>",
"recurrence": [
"<string>"
]
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "needs_connection",
"message": "<string>"
}{
"error": "google_api_error",
"message": "<string>"
}Create a Google Calendar event (one-time or recurring series) as the calling member
Create a recurring meeting, repeat weekly, or create a one-time event on the member’s primary calendar. Recurrence writes require the googleCalendarRecurrence feature; pass structured recurrence or advanced rrule (not both), a finite count/until, and an explicit IANA timeZone. eventId identifies the new series master. Set createMeetLink to request a Google Meet link.
curl --request POST \
--url https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"summary": "<string>",
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z",
"description": "<string>",
"location": "<string>",
"timeZone": "<string>",
"attendees": [
"jsmith@example.com"
],
"createMeetLink": true,
"rrule": [
"<string>"
]
}
'import requests
url = "https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events"
payload = {
"summary": "<string>",
"start": "2023-11-07T05:31:56Z",
"end": "2023-11-07T05:31:56Z",
"description": "<string>",
"location": "<string>",
"timeZone": "<string>",
"attendees": ["jsmith@example.com"],
"createMeetLink": True,
"rrule": ["<string>"]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
summary: '<string>',
start: '2023-11-07T05:31:56Z',
end: '2023-11-07T05:31:56Z',
description: '<string>',
location: '<string>',
timeZone: '<string>',
attendees: ['jsmith@example.com'],
createMeetLink: true,
rrule: ['<string>']
})
};
fetch('https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'summary' => '<string>',
'start' => '2023-11-07T05:31:56Z',
'end' => '2023-11-07T05:31:56Z',
'description' => '<string>',
'location' => '<string>',
'timeZone' => '<string>',
'attendees' => [
'jsmith@example.com'
],
'createMeetLink' => true,
'rrule' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events"
payload := strings.NewReader("{\n \"summary\": \"<string>\",\n \"start\": \"2023-11-07T05:31:56Z\",\n \"end\": \"2023-11-07T05:31:56Z\",\n \"description\": \"<string>\",\n \"location\": \"<string>\",\n \"timeZone\": \"<string>\",\n \"attendees\": [\n \"jsmith@example.com\"\n ],\n \"createMeetLink\": true,\n \"rrule\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"summary\": \"<string>\",\n \"start\": \"2023-11-07T05:31:56Z\",\n \"end\": \"2023-11-07T05:31:56Z\",\n \"description\": \"<string>\",\n \"location\": \"<string>\",\n \"timeZone\": \"<string>\",\n \"attendees\": [\n \"jsmith@example.com\"\n ],\n \"createMeetLink\": true,\n \"rrule\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.openworklabs.com/v1/capabilities/google-workspace/calendar-events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"summary\": \"<string>\",\n \"start\": \"2023-11-07T05:31:56Z\",\n \"end\": \"2023-11-07T05:31:56Z\",\n \"description\": \"<string>\",\n \"location\": \"<string>\",\n \"timeZone\": \"<string>\",\n \"attendees\": [\n \"jsmith@example.com\"\n ],\n \"createMeetLink\": true,\n \"rrule\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"eventId": "<string>",
"htmlLink": "<string>",
"summary": "<string>",
"start": "<string>",
"end": "<string>",
"meetLink": "<string>",
"recurrence": [
"<string>"
]
}{
"error": "invalid_request",
"details": [
{
"message": "<string>",
"path": [
"<string>"
]
}
],
"message": "<string>",
"capability": "<string>"
}{
"error": "unauthorized"
}{
"error": "needs_connection",
"message": "<string>"
}{
"error": "google_api_error",
"message": "<string>"
}Authorizations
Organization API key passed as the x-api-key header. The raw key is the header value; do not prefix it with Bearer.
Body
Event title.
1 - 1000Event start date-time with a UTC offset or Z.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$Event end date-time with a UTC offset or Z.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$Optional event description.
20000Optional event location.
1000IANA timeZone for start and end; required for recurring meetings. Never guess the user's time zone.
1 - 128Optional attendee email addresses.
100^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$Set true to request a Google Meet link; the response returns meetLink when Google creates it.
Structured recurrence for a recurring meeting (repeat weekly, daily, monthly or yearly). Requires count or until and an explicit IANA timeZone. Do not combine with rrule.
Show child attributes
Show child attributes
Advanced recurrence escape hatch, mutually exclusive with recurrence. At most 32 lines of 2048 characters; RRULE:, EXDATE:, RDATE: only. RRULE requires COUNT (1-730) or UTC UNTIL; unbounded series are rejected. Supports FREQ daily/weekly/monthly/yearly, INTERVAL 1-99, BYDAY, BYMONTH, BYMONTHDAY, BYSETPOS and WKST. EXDATE/RDATE and RRULE UNTIL use basic UTC YYYYMMDDTHHmmssZ, matching this API's timed events; date-only values are not supported.
1 - 32 elements1 - 2048Response
Google Calendar event created.
Google-confirmed recurrence rules for the created series; null for a one-time event. eventId is the series master ID.
Was this page helpful?