Comments

Collaboration & history

Comments

Leave threaded feedback on a design, anchored to a block.

Reviewers add comments tied to a specific block, reply in threads, and resolve them. Open the block's settings and use the Comments section. Type @ and the start of a name to mention a teammate; in the dashboard they get an email. Comments are part of collaboration. Whether a design is ready to send is a separate step, see review and approval.

In the dashboard

Comments on an email are saved with it, so everyone on the team sees the same threads. A view-only member can read them but not write. The person who wrote a comment can delete it, and so can an owner or an admin. Resolved threads fold away under "Show resolved". A design keeps at most 500 comment threads and 200 replies per thread, and each comment is up to 2,000 characters. Deleting a design deletes its comments, and every comment, resolve and delete is written to the audit log.

In your own app

Without a server the editor keeps comments in the browser. To keep them on your own server, give it a comments adapter in the config. The adapter holds the signed-in person and five functions; the editor shows a comment at once and takes it back, with your error message, when a call fails.

tsx
<EmailEditor
  config={{
    comments: {
      key: design.id,                       // load again when another design opens
      user: { id: me.id, name: me.name },
      members: team,                        // [{ name, email }], for @ suggestions
      canWrite: me.role !== "viewer",
      canModerate: me.role === "owner" || me.role === "admin",
      load: () => api.listComments(design.id),
      create: ({ block_id, text }) => api.addComment(design.id, { block_id, text }),
      reply: (commentId, text) => api.reply(design.id, commentId, text),
      resolve: (commentId, resolved) => api.resolve(design.id, commentId, resolved),
      remove: (commentId) => api.remove(design.id, commentId)
    }
  }}
/>

Each function returns the saved record in snake_case: { id, block_id, author_id, author_name, text, mentions, resolved, resolved_by, replies, created_at }. The dashboard API serves exactly this under /{org}/designs/:id/comments (it signs in with a user session and is not part of the /v3 server-key API). Emails for mentions are sent by that dashboard API only; with your own adapter, sending any notice is up to your server.