Skip to main content

Request format

Event list

A subscription can choose from 17 events: 8 page, 4 database, 2 data source, and 3 comment. See Batching for timing.

Page

Events for rows and subpages. Moving a row to another database sends page.moved (with the new database as parent) and data_source.content_updated for the old database.

Database

Inline database events also send page.content_updated for the parent document. A move sends it for both documents. Deleting a document that holds an inline database sends only that document’s page.deleted.

Data source

There’s no data_source.created, moved, deleted, or undeleted. A Bottari database has one data source, so these don’t occur separately.

Comment

These aren’t sent while Read comments is off.

Data fields

parent

The format depends on the target. It differs from parent in API objects: type here is database, page, space, or block. For a row, data.parent.id and data.parent.data_source_id are both the database ID. The parent of a comment on text follows these rules:
  • It comes from the saved content. If the comment marker isn’t saved yet, parent can be the page. Saving takes up to 10 seconds. GET /v1/comments reads the open content, so it answers with the block.
  • If the marker disappears from the content, the old block can’t be found, so parent is the page.
  • For a comment on text in a subpage card, parent has the form {document id}.{block}. The block API returns that card as child_page, so reading a block with this ID returns 404. You can still use it as block_id in GET /v1/comments.

updated_properties

In page.properties_updated, this is an array of property ID strings.
  • The title is title. Other IDs appear exactly as the API returns them.
  • Formula properties don’t appear.
  • Changing a relation sends an event to the rows on both sides. Relations pointing at a database the integration can’t read are left out.
  • A value changed and restored within 60 seconds sends an empty array.
In data_source.schema_updated, this is an array of objects, and changes within 60 seconds merge into one event.
action is created, updated, or deleted. Creating two properties puts two created entries in one event, and renaming one property while deleting another puts updated and deleted in one event. Changing options reports that property as updated.

updated_blocks

An array of { id, type } objects. type is block, page, or database; the last two are subpages and inline databases.
  • It includes deleted blocks and new subpages. Reading a deleted block’s ID returns 404.
  • It includes blocks edited and restored within 60 seconds.
  • Documents and databases the integration can’t read are left out.
  • Adding or removing a synced block puts it in the array, only when the integration can read it.
  • Button and Bottari notes blocks are left out of content comparison. If only such a block changes outside app editing, the array can be empty.

Comment data

entity.id is the comment ID, and discussion_id is the thread ID. They match for the first comment of a thread.

Authors

When changes merge, each author appears once, in writing order. Changes written by a task agent or a session appear as the session owner, with type person.
Changes the integration writes itself also send events. If your server writes back after an event, skip events whose authors contains only the bot ID from GET /v1/users/me, so it doesn’t loop.
Reading a row an automation wrote through the API shows last_edited_by as 00000000-0000-0000-0000-000000000003, which differs from the value in webhook authors.

When no event is sent

There are no view or file upload events.