Skip to main content
Each section lists the event’s data. In an SDK handler these fields arrive at the top level of the context, next to reintersect, actor, env, config and waitUntil. Literal values such as origin are open: new values can appear, so handle unknown ones. Text fields such as titles are at most 300 characters, and bodies (summary, recap, text) at most 4,000.

Shared shapes

Location fields circleId, conversationId and replyId are null when they don’t apply: replyId is null for an object in the conversation’s opening post, and conversationId is null for a chat message that isn’t filed in a conversation. When Reintersect files a chat message into a conversation later, or someone moves it, message.filed tells you where it went.

app.installed

version is the installed app version number. config is the install config the admin filled in.

app.uninstalled

app.reconsentRequired

widened lists every kind of access the new version adds: "scopes", "egress_hosts", "domains", "events", "mcp", "actions" or "message_actions". It can include kinds the added* lists don’t cover, such as a new MCP server or new actions. New categories may appear, so treat unknown values as “more access”. The install stays on currentVersion until an admin approves. See Publishing new versions.

block.created

clone means a member pasted a copy of an existing block; it starts with fresh state.

block.removed

reference.created and reference.removed

One event per occurrence: the same object linked in two replies produces two events. Like the conversation events, these need conversations:read and only arrive from circles your app can reach, because the occurrence tells you where a member linked your object.

decision.published and decision.updated

call.recapReady

post.created

reply.created

app.mentioned

In circles that use chat, reply.created and app.mentioned also cover chat messages. A chat message not filed in a conversation has conversationId (and, for reply.created, conversationTitle) set to null; answer it with replyTo or circleId. See Writing to circles. Mentions by members also invite your app to that circle.

message.filed

In circles that use chat, Reintersect files messages into conversations as people talk, and members can move, merge, split and unfile them. You get one event per message each time its conversation changes: previousConversationId is null when the message wasn’t filed before, and conversationId (with conversationTitle) is null when it was unfiled. filing says who placed it: machine for Reintersect, corrected for a member’s correction, explicit for a message sent straight into a conversation. A message staying where it was sends nothing, and your app never hears about its own messages.

conversation.updated

A chat conversation’s card: its title, line (where it stands), status and the people it’s waiting on. title is empty until the conversation has one. label is the circle’s own name for the status, or null when the conversation shows the plain phase. Reintersect refreshes cards often, so it gathers changes for about 30 seconds and sends one event with the latest card. changed lists what differs from the card as it was before those changes. Nothing is sent when no field you can see changed. source is person when a member set one of the changed fields, such as a status. revision is the card’s revision, which only goes up. Deliveries can arrive out of order, so keep the highest revision you have seen for each conversation and ignore a delivery with a lower one. Still apply a delivery with the same revision, because a member’s change, such as setting a status, keeps the revision.

conversation.agreed

Reintersect noticed that people agreed on something (machine), or a member confirmed the agreement (person). statement is what was agreed and sourceMessageIds are the messages behind it: the proposal first, then the replies that backed it. sourceMessageIds can be empty for an agreement made on a call. revision is the card’s revision when the agreement was recorded, the same counter as conversation.updated: ignore an agreement older than the last revision you saw for that conversation. Dismissing an agreement sends nothing. message.filed, conversation.updated and conversation.agreed exist only in circles that use chat, not in circles set to posts.

The envelope

Without the SDK, each event arrives as a signed POST with this body. See the delivery protocol.