> For the complete documentation index, see [llms.txt](https://docs.kinwall.family/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kinwall.family/connecting-calendars/writable-vs-read-only.md).

# Writable vs read-only

Every calendar is either **writable** or **read-only**, and the calendar decides which. Each event carries a `readOnly` flag.

| Calendar kind             | Writable?                                                                                                                  |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Local ("Kinwall only")    | Yes                                                                                                                        |
| Google, Microsoft, CalDAV | Yes, unless the provider says you can't write to it (shared or holiday calendars show a **read-only** badge in the picker) |
| ICS feed                  | Never                                                                                                                      |

Through the API, `writable: false` on `POST /api/calendars` can only *lower* access. Sync re-checks it with the provider.

## What you can still do on read-only events

The event's own fields (title, time, location, description, recurrence) come from the source and can't be changed. These Kinwall-only annotations still work, because they never touch the provider:

* **Family members**: tap chips in the detail sheet.
* **Category**: via [keywords](/using-kinwall/categories.md), the calendar default, or `set_event_category` / `PATCH /api/events/{id} {categoryId}`.
* **Travel time / leave-by**.
* **Linked tasks** from lists.

The detail sheet shows no **Edit**/**Delete** and says "Only the family members are saved in Kinwall — the event itself comes from *calendar*."

## Where annotations are stored

Synced events are replaced on every sync, so Kinwall keeps annotations in separate tables keyed by the provider's event ID. Member and category tags can apply per occurrence or per series, and travel time applies per occurrence. They survive re-syncs. [Export/import](/your-data/export-import.md) carries both the per-event and the series-wide ones.

## Writes to writable calendars

Creating, editing or deleting an event on a Google, Outlook or CalDAV calendar goes **to the provider first**. If that fails, you get an error (HTTP 502 from the API) and nothing is stored locally. Deleting a synced event deletes it at the source: "If it came from Google or Outlook it is deleted there too."


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.kinwall.family/connecting-calendars/writable-vs-read-only.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
