AI Connection (API)

Everyone's Vertical Calendar (みんなの縦型カレンダー) · Last updated: October 23, 2026

日本語

Let AI assistants such as ChatGPT and Claude, iOS Shortcuts, or your own programs read, add, change and delete events in your calendar.

What you can do

1. Getting a key

Changes made through the API appear in the app's edit history as "AI (service / requester)", and other members are notified.

2. Using the ChatGPT plugin

You can connect from most ChatGPT plans, including the free plan, without entering a URL.

  1. In ChatGPT, open Plugins, search for "Vertical Calendar" and add "みんなの縦型カレンダー / Everyone's Vertical Calendar" (Funeasy Soft).
  2. A page titled "みんなの縦型カレンダーにつなぐ" opens. Paste the API key shown in the app and press Allow.
  3. Then just ask, for example "What's on next week?" or "Add Dad's shopping on Saturday at 10".

3. Connecting ChatGPT or Claude with a connector

Add the following URL as a connector (custom connector / MCP server) in your AI service:

https://mcp.tatekare.com/mcp
  1. Claude: available from the free plan. In claude.ai, go to Settings → Connectors → Add custom connector, enter a name and the URL above, then press Connect.
  2. ChatGPT: connecting your own MCP server is available in ChatGPT Business, Enterprise and Edu workspaces (Pro is read-only; Free, Go and Plus cannot connect). On other plans, use the plugin above. An admin adds the URL above under Plugins → Add custom MCP server and chooses OAuth.
  3. A page titled "みんなの縦型カレンダーにつなぐ" opens. Paste the API key shown in the app and press Allow.
  4. Then just ask, for example "What's on next week?" or "Add Dad's shopping on Saturday at 10".

The AI can use the same 13 operations as the REST API below, including checking today's usage.

4. iOS Shortcuts example

  1. Use "Format Date" to format today as yyyy-MM-dd.
  2. Set "URL" to https://mcp.tatekare.com/api/v1/events?from=(date)&to=(date).
  3. In "Get Contents of URL", use GET and add the header Authorization = Bearer tk_....
  4. Get events with "Get Dictionary Value", then "Repeat with Each" to join item_name, start_time and title and pass them to "Speak Text".

To add an event, use POST with a JSON body containing item, date, title and so on.

For details (item, date and time formats, event kinds, errors and limits), see the following sections.

5. REST API basics

Base URLhttps://mcp.tatekare.com/api/v1
AuthAuthorization: Bearer tk_... (the API key shown in the app)
BodyContent-Type: application/json (POST, PATCH)
DatesYYYY-MM-DD. Calendar dates as shown in the app; no time zone conversion
TimesHH:MM (24h). In REST, an empty string "" clears a time. An end time earlier than the start time (e.g. 22:00–06:00) ends the next morning and is shown on the start date
Itemsitem accepts an item id or the exact item name
curl -H "Authorization: Bearer tk_xxxxxxxx" https://mcp.tatekare.com/api/v1/items

6. Event ids and kinds

kindMeaningidChange / delete with
singleOne-day events.202611.xxxx.xxxx/events/{id}
repeatRepeating eventr.xxxx/repeats/{id}
spanMulti-day event (e.g. a 3-day trip)r.xxxx/repeats/{id}

Repeating and multi-day events appear once per date in lists (the same id with different dates).

7. Items

GET /items

Returns the calendar name, today's date in the calendar owner's time zone, the items (rows) and the calendar's colors (colors). Call this first.

{
  "calendar": "Our family",
  "today": "2026-10-20",
  "timezone": "Asia/Tokyo",
  "items": [
    { "id": "WdkinSMj", "name": "Dad", "writable": true },
    { "id": "nZRHciBt", "name": "Mom", "writable": true }
  ],
  "colors": [
    { "color": "#ffffff", "color_name": "none" },
    { "color": "#a685ff", "color_name": "purple", "color_label": "Work" }
  ],
  "note": "…"
}

Items with writable: false (synced from Google Calendar) cannot be read or written.

8. Listing and getting events

GET /events?from=YYYY-MM-DD&to=YYYY-MM-DD

Parameter
from, toRequired, inclusive, at most 31 days
itemOptional item id or name
qOptional text filter on the title
{
  "from": "2026-11-01", "to": "2026-11-10",
  "events": [
    { "id": "s.202611.StEHSASn4dZUWqaVuU2z.bf1c543e", "kind": "single",
      "item_id": "nZRHciBt", "item_name": "Mom", "date": "2026-11-03",
      "start_time": "15:30", "end_time": "16:00", "title": "Dentist", "color": "#fa604b", "color_name": "red", "has_memo": true },
    { "id": "r.r1fvl6hskvyxm", "kind": "repeat",
      "item_id": "BKuGvbhE", "item_name": "Kids", "date": "2026-11-04",
      "start_time": "17:00", "end_time": "18:00", "title": "Lessons", "color": "#ffffff", "color_name": "none",
      "repeat": { "freq": "weekly", "interval": 1, "weekdays": [1, 3] },
      "repeat_start": "2026-11-02", "repeat_end": "2026-11-30" },
    { "id": "r.rdx15q5700sdy", "kind": "span",
      "item_id": "WdkinSMj", "item_name": "Dad", "date": "2026-11-06",
      "start_time": null, "end_time": null, "title": "Business trip", "color": "#ffffff", "color_name": "none",
      "start_date": "2026-11-06", "end_date": "2026-11-08" }
  ]
}

Events without times have null times. Lists do not include memos; has_memo: true is set when there is one.

GET /events/{id}

Returns one event with its memo and attachments.

9. Adding, changing and deleting events

POST /events

Field
itemRequired. Item id or name
dateRequired. YYYY-MM-DD
end_dateOptional. Makes a multi-day event (kind: "span"). Give both start_time and end_time, or neither
titleEvent text (up to 500 characters)
start_time, end_timeHH:MM
memoMemo (up to 5000 characters)
colorA color name (red, blue, …), #RRGGBB, or a color label of the calendar (e.g. Work). See Colors

Either title or a time is required.

curl -X POST https://mcp.tatekare.com/api/v1/events \
  -H "Authorization: Bearer tk_xxxxxxxx" -H "Content-Type: application/json" \
  -d '{"item":"Mom","date":"2026-11-03","title":"Dentist","start_time":"15:00","end_time":"16:00"}'

Returns the created event (same shape as GET /events/{id}).

PATCH /events/{id}

Changes a one-day event. Only the fields you send change; sending date or item moves the event.

DELETE /events/{id}

{ "deleted": true, "id": "s.202611.StEHSASn4dZUWqaVuU2z.bf1c543e" }

10. Repeating and multi-day events

POST /repeats

Fields: item, start_date (required), end_date (omit for no end), repeat (required), plus title, start_time, end_time, memo, color.

repeat
freqdaily, weekly, monthly, yearly
intervalEvery N days/weeks/months/years (default 1)
weekdaysFor weekly. 1 = Mon … 7 = Sun
monthly{"day": 15}, {"day": -1} (last day), {"nth": 2, "weekday": 2} (2nd Tuesday), {"nth": -1, "weekday": 5} (last Friday)

Each occurrence lasts less than 24 hours. Overnight events (e.g. every Friday 22:00–06:00) can repeat, but events lasting 24 hours or more (e.g. 3 days from the 1st of every month) cannot. Create each occurrence with POST /events and end_date instead. end_date of a repeat is when the series ends, not the length of each occurrence.

{"item":"Kids","start_date":"2026-11-02","end_date":"2026-11-30",
 "title":"Lessons","start_time":"17:00","end_time":"18:00",
 "repeat":{"freq":"weekly","weekdays":[1,3]}}

PATCH /repeats/{id}

scope: all, from_date (this date and later) or only_date (just this date; it becomes a one-day event). date is required for the last two. changes may contain title, start_time, end_time, memo, color, item, start_date, end_date, repeat.

{"scope":"from_date","date":"2026-11-16","changes":{"start_time":"17:30"}}

DELETE /repeats/{id}?scope=all|from_date|only_date&date=YYYY-MM-DD

Colors

color accepts any of the following. Responses include color (#RRGGBB) and, when available, color_name and color_label.

11. Attachments

JPEG, PNG and PDF files can be attached to one-day events: up to 1 MB per file and 5 files per event. Plan-based upload limits apply (shared with the app).

POST /events/{id}/files

{"name": "card.jpg", "data": "<base64>"}

DELETE /events/{id}/files/{fileId}

GET /events/{id}/files/{fileId}/url

Returns a temporary download URL valid for 15 minutes.

12. Errors

Errors return an HTTP status and JSON like the following. message is in Japanese.

{ "error": "bad_request", "message": "…" }
StatuserrorTypical cause
400bad_requestBad date/time format, range over 31 days, invalid id, using /events for a repeating event
401unauthorizedMissing, wrong, revoked or expired key; the requester lost access to the calendar
403forbiddenPlan no longer eligible (e.g. the subscription ended, or changed from Business to Pro while still having 21+ items), item synced from Google, attachment limit
404not_foundEvent, item or attachment not found
413too_largeAttachment over 1 MB
429rate_limitedLimits (next section)
500internalServer error; please retry later

13. Limits

The daily limits are shared by all keys of the calendar (ChatGPT, Claude and REST combined) and depend on the calendar's plan. Resets at midnight Japan time.

PlanCalls per dayOf which reads
Family20050
Pro800150
Business2,000300

To see today's usage and what remains:

{"calls": {"used": 120, "limit": 800, "remaining": 680},
 "reads": {"used": 45, "limit": 150, "remaining": 105},
 "this_key": {"calls": 80, "reads": 30},
 "shared_by_all_keys_of_calendar": true,
 "per_minute_limit": 30, "resets_at": "2026-11-01T15:00:00.000Z", ...}

14. Notes

See also: Privacy Policy. Questions: admin@funeasy-soft.com