---
title: "Upsert margin notes"
method: POST
path: "/reader/books/{book_id}/margin-notes"
tags: ["AI"]
---

# Upsert margin notes

`POST /reader/books/{book_id}/margin-notes`

Create or update margin notes (client → server sync)

## Path parameters

- `book_id` string, required

## Request body

- SchemaMarginNote[]
  - `book_id` string
  - `cfi` string
  - `chapter` string
  - `confidence` number
  - `content` string
  - `ctime` integer
  - `dismissed` boolean
  - `helpful` boolean
  - `id` integer
  - `related_book_id` string
  - `related_book_title` string
  - `related_highlight` string
  - `user_id` integer
  - `utime` integer

## Response `200`

OK

- object

## Other responses

- `400` — Bad Request

## Changes

- **2026-04-23** `20e19d9cbb5a` — 1 info
  - endpoint added
- **2026-03-21** `ffed97aaec4f` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/lxpio/apis/omnigram-api/changes/reader/books/:book_id/margin-notes/post.md)

---

[API](https://skmtc.dev/lxpio/apis/omnigram-api.md) · [All operations](https://skmtc.dev/lxpio/apis/omnigram-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/lxpio/omnigram-api/revisions/58911ffb3093/schema)
