synology-calendar

Manage Synology Calendar events and todos via API. Supports calendars, events, todos, and contacts. Based on official Calendar API Guide (v5).

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "synology-calendar" with this command: npx skills add fpengziyang/synology-calendar

Synology Calendar API Skill

Overview

Manage Synology Calendar using the official Calendar API.

Documentation: Calendar_API_Guide_enu.pdf

Connection

Environment Variables

export SYNOLOGY_URL="http://{nas_ip}:5000"  # 内网地址
export SYNOLOGY_USER="{username}"
export SYNOLOGY_PASSWORD="your-password"

Quick Start

from client import SynologyCalendar

cal = SynologyCalendar()
cal.login()

# List calendars
calendars = cal.get_calendars()
for c in calendars:
    print(f"{c['cal_id']}: {c['cal_displayname']}")

cal.logout()

API Reference

Calendar Operations (SYNO.Cal.Cal)

MethodDescriptionStatus
get_calendars()List all calendars✅ Working
get_calendar(cal_id)Get calendar details✅ Working
create_calendar(...)Create calendar✅ Working
delete_calendar(cal_id)Delete calendar✅ Working

Event Operations (SYNO.Cal.Event)

MethodDescriptionStatus
list_events(cal_id_list)List events✅ Working
get_event(evt_id)Get event details✅ Working
create_event(...)Create event✅ Working
delete_event(evt_id)Delete event✅ Working

Event Creation Notes:

✅ Working:

  • All event types now work correctly with v1 API

⚠️ Critical: SID must be in URL parameter, not JSON body

The Synology Calendar v1 API requires the _sid parameter in the URL query string, not in the JSON body.

create_event Parameters:

ParameterTypeRequiredExample
cal_idstring/admin/home/
summarystringEvent title
dtstartint1770440000
dtendint1770443600
is_all_dayboolfalse
is_repeat_evtboolfalse
colorstring#D9AE00
descriptionstringDescription
notify_settingarray[]
participantarray[]
timezonestring(if not all-day)Asia/Shanghai

Example:

# Non-all-day event (working)
cal.create_event(
    cal_id='/{username}/home/',
    summary='Meeting',
    dtstart=now,
    dtend=now + 3600,
    is_all_day=False,
    is_repeat_evt=False,
    description='Team meeting',
    color='#D9AE00',
    timezone='Asia/Shanghai'
)

Todo Operations (SYNO.Cal.Todo)

MethodDescriptionStatus
create_todo(...)Create task✅ Working
list_todos(...)List tasks✅ Working
get_todo(evt_id)Get task details✅ Working
delete_todo(evt_id)Delete task✅ Working
complete_todo(evt_id)Mark complete✅ Working

Contact Operations (SYNO.Cal.Contact)

MethodDescriptionStatus
list_contacts()List participants✅ Working

CLI Usage

# Login
python client.py login

# List calendars
python client.py list-calendars

# List todos
python client.py list-todos --cal-id "/{username}/home_todo/"

# Create todo
python client.py create-todo \
  --cal-id "/{username}/home_todo/" \
  --title "Task name"

# Complete todo
python client.py complete-todo --evt-id "1012"

Known Issues

Event Creation (Fixed with v1 API)

Previous Issue: Event creation returned error 9009 due to:

  1. Using v5 API instead of v1 API
  2. Missing original_cal_id parameter
  3. SID passed in wrong location (JSON body vs URL parameter)

Solution: Use v1 API with:

  • cal_id from get_calendars() response
  • original_cal_id = cal_id (for non-shared calendars)
  • SID in URL parameter: ?_sid=xxx

Calendars

IDNameType
/{username}/home/My Calendarevent
/{username}/home_todo/Inboxtodo

Links

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

ksdsl-skilll

Captures learnings, errors, and corrections to enable continuous improvement. Use when: (1) A command or operation fails unexpectedly, (2) User corrects Clau...

Registry SourceRecently Updated
3640f1zzyw
General

Openclaw Skill Intelligence Ingestion

Auto-analyze URLs/info for OpenClaw strategic value, classify, create Obsidian notes, update memory. Use when user shares a URL, article, tweet, or any exter...

Registry SourceRecently Updated
General

Truth first

Evidence-first verification for status, config, file contents, actions, connectivity, mounts, and model selection. Use before answering any such claim.

Registry SourceRecently Updated
General

http-retry

Automatically retries HTTP requests with exponential backoff, timeout control, and connection pooling to handle network errors and rate limits.

Registry SourceRecently Updated