
Create Cal Com Link
- 2 installs
- 29 repo stars
- Updated March 27, 2026
- different-ai/openwork-hub
Creates targeted, time-boxed Cal.com booking links for specific people via scripts that set up schedules, availability windows, and event types.
About
Automates Cal.com link creation using bundled scripts to make a schedule, remove default availability, add a window, and time-box an event type. A developer uses it to generate a booking link for a specific person or team over a limited date range.
- Time-boxed link playbook with per-step scripts
- Requires only CAL_API_KEY env var for a fresh setup
Create Cal Com Link by the numbers
- 2 all-time installs (skills.sh)
- Ranked #1,839 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/different-ai/openwork-hub --skill create-cal-com-linkAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 2 |
|---|---|
| repo stars | ★ 29 |
| Last updated | March 27, 2026 |
| Repository | different-ai/openwork-hub ↗ |
What it does
Creates targeted, time-boxed Cal.com booking links for specific people via scripts that set up schedules, availability windows, and event types.
Files
Quick Usage (Time-Boxed Link)
1) Configure env
- Copy
.env.exampleto.envand setCAL_API_KEY. - This is the only required env var for a fresh setup.
2) Run scripts
bash skills/create-cal-com-link/scripts/create-schedule.sh "Jasper" "Asia/Singapore"
# copy schedule id + default availability id from the output
bash skills/create-cal-com-link/scripts/delete-default-availability.sh <availability-id>
bash skills/create-cal-com-link/scripts/add-availability-window.sh <schedule-id> "[1,2,3,4,5]" "10:00:00" "13:00:00"
bash skills/create-cal-com-link/scripts/create-event-type.sh <schedule-id> "Jasper x Benjamin" "jasper-x-benjamin" 30 "integrations:daily"
bash skills/create-cal-com-link/scripts/set-event-type-range.sh <event-type-id> 4 "Asia/Singapore"Time-Boxed Link Playbook
Use this when someone says: "Create a link for Jasper, he's on Singapore time, next 4 days."
1) Choose a schedule time zone
- Pick the invitee's time zone for clarity (ex:
Asia/Singapore).
2) Create schedule + remove default availability
bash skills/create-cal-com-link/scripts/create-schedule.sh "Jasper (next 4 days)" "Asia/Singapore"
# capture schedule id + availability id from the response
bash skills/create-cal-com-link/scripts/delete-default-availability.sh <availability-id>3) Add a clean availability window
bash skills/create-cal-com-link/scripts/add-availability-window.sh <schedule-id> "[1,2,3,4,5]" "10:00:00" "13:00:00"4) Create the event type + time-box it
bash skills/create-cal-com-link/scripts/create-event-type.sh <schedule-id> "Jasper x Benjamin" "jasper-x-benjamin" 30 "integrations:daily"
bash skills/create-cal-com-link/scripts/set-event-type-range.sh <event-type-id> 4 "Asia/Singapore"Common Gotchas
- Availability times must be ISO strings like
1970-01-01T08:00:00.000Z. - Availabilities are weekly; use
set-event-type-range.shto time-box the link. - A new schedule defaults to a 9-5 weekday availability you may want to delete.
First-Time Setup (If Not Configured)
1. Create a Cal.com API key in Settings > Security. 2. Copy .env.example to .env and set CAL_API_KEY. 3. The scripts use runtime IDs (from the prior response) for schedule and availability.
Notes
- Use the invitee's time zone when sending a targeted link.
- Days are numbers: 1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat, 0=Sun.
scripts/uses.env.exampleas the minimum configuration reference.
CAL_API_KEY=
.env
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ROOT_DIR=$(dirname "$SCRIPT_DIR")
if [ -f "$ROOT_DIR/.env" ]; then
set -a
. "$ROOT_DIR/.env"
set +a
fi
: "${CAL_API_KEY:?CAL_API_KEY is required}"
SCHEDULE_ID=${1:-""}
if [ -z "$SCHEDULE_ID" ]; then
echo "Usage: add-availability-window.sh <schedule-id> [days-json] [start-time] [end-time]" >&2
exit 1
fi
DAYS_JSON=${2:-"[1,2,3,4,5]"}
START_TIME=${3:-"09:00:00"}
END_TIME=${4:-"17:00:00"}
payload=$(cat <<EOF
{"scheduleId":${SCHEDULE_ID},"days":${DAYS_JSON},"startTime":"1970-01-01T${START_TIME}.000Z","endTime":"1970-01-01T${END_TIME}.000Z"}
EOF
)
curl -sS -X POST "https://api.cal.com/v1/availabilities?apiKey=${CAL_API_KEY}" \
-H "Content-Type: application/json" \
-d "$payload"
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ROOT_DIR=$(dirname "$SCRIPT_DIR")
if [ -f "$ROOT_DIR/.env" ]; then
set -a
. "$ROOT_DIR/.env"
set +a
fi
: "${CAL_API_KEY:?CAL_API_KEY is required}"
SCHEDULE_ID=${1:-""}
if [ -z "$SCHEDULE_ID" ]; then
echo "Usage: create-event-type.sh <schedule-id> [title] [slug] [length] [location-type]" >&2
exit 1
fi
EVENT_TITLE=${2:-"Tom x OpenWork"}
EVENT_SLUG=${3:-"tom-x-openwork"}
EVENT_LENGTH=${4:-30}
LOCATION_TYPE=${5:-"integrations:daily"}
payload=$(cat <<EOF
{"title":"${EVENT_TITLE}","slug":"${EVENT_SLUG}","length":${EVENT_LENGTH},"scheduleId":${SCHEDULE_ID},"metadata":{},"locations":[{"type":"${LOCATION_TYPE}"}]}
EOF
)
curl -sS -X POST "https://api.cal.com/v1/event-types?apiKey=${CAL_API_KEY}" \
-H "Content-Type: application/json" \
-d "$payload"
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ROOT_DIR=$(dirname "$SCRIPT_DIR")
if [ -f "$ROOT_DIR/.env" ]; then
set -a
. "$ROOT_DIR/.env"
set +a
fi
: "${CAL_API_KEY:?CAL_API_KEY is required}"
SCHEDULE_NAME=${1:-"PST Spotty This Week"}
SCHEDULE_TIME_ZONE=${2:-"America/Los_Angeles"}
payload=$(cat <<EOF
{"name":"${SCHEDULE_NAME}","timeZone":"${SCHEDULE_TIME_ZONE}"}
EOF
)
curl -sS -X POST "https://api.cal.com/v1/schedules?apiKey=${CAL_API_KEY}" \
-H "Content-Type: application/json" \
-d "$payload"
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ROOT_DIR=$(dirname "$SCRIPT_DIR")
if [ -f "$ROOT_DIR/.env" ]; then
set -a
. "$ROOT_DIR/.env"
set +a
fi
: "${CAL_API_KEY:?CAL_API_KEY is required}"
DEFAULT_AVAILABILITY_ID=${1:-""}
if [ -z "$DEFAULT_AVAILABILITY_ID" ]; then
echo "Usage: delete-default-availability.sh <availability-id>" >&2
exit 1
fi
curl -sS -X DELETE "https://api.cal.com/v1/availabilities/${DEFAULT_AVAILABILITY_ID}?apiKey=${CAL_API_KEY}"
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
ROOT_DIR=$(dirname "$SCRIPT_DIR")
if [ -f "$ROOT_DIR/.env" ]; then
set -a
. "$ROOT_DIR/.env"
set +a
fi
: "${CAL_API_KEY:?CAL_API_KEY is required}"
EVENT_TYPE_ID=${1:-""}
if [ -z "$EVENT_TYPE_ID" ]; then
echo "Usage: set-event-type-range.sh <event-type-id> [days] [time-zone]" >&2
exit 1
fi
DAYS=${2:-3}
TIME_ZONE=${3:-"America/Los_Angeles"}
START_UTC=$(date -u "+%Y-%m-%dT%H:%M:%S.000Z")
END_LOCAL=$(TZ="$TIME_ZONE" date -v+"${DAYS}"d "+%Y-%m-%dT23:59:59")
END_UTC=$(TZ="$TIME_ZONE" date -j -f "%Y-%m-%dT%H:%M:%S" "$END_LOCAL" -u "+%Y-%m-%dT%H:%M:%S.000Z")
payload=$(cat <<EOF
{"periodType":"RANGE","periodStartDate":"${START_UTC}","periodEndDate":"${END_UTC}"}
EOF
)
curl -sS -X PATCH "https://api.cal.com/v1/event-types/${EVENT_TYPE_ID}?apiKey=${CAL_API_KEY}" \
-H "Content-Type: application/json" \
-d "$payload"