Refuse a mailbox past the organization's email licenses
Owner rule 2026-10-22: per-user add-ons bill the licenses purchased; how many mailboxes may be in use is limited only by them. Before a mailbox is put into use,...
BILLING_INVOICE, gated on viewing subscription invoices
Raised by SecurityService to the selling organization's owners when a subscription invoice draft is waiting for review or a customer's invoice goes past due. Al...
An event names its organiser; an RSVP that cannot be taken says why (SITP TP12)
- EventDto carries organizerEmail, so the Tool Plane's calendar_rsvp names who the answer is mailed to (and classifies an outside organiser as an external mee...
IOT_ALARM phone push body and withdraw-with-update (SP10)
An IOT_ALARM event card (source **************** as iot-service's AlarmNotifier writes it, or <alarmUuid>:<seq>) is mirrored as an IOT_ALARM push: channel/colou...
Preview sample variables for the iot share letters
Rebuilt on the new shared library BEFORE IoTService sends (a missing template key 404s forever).
NoReplySubsystem.IOT, the preview sample and mirrorToPush
IoT Devices SP06: alarm letters (iot.alarm_notice) audit under IOT; the template preview has sample values; POST /api/internal/notifications takes an optional m...
An unsubscribe from one of the organization's own protected addresses is noted, not listed
Owner 2026-10-15: the do-not-block list beside the do-not-contact list. DoNotContactEmailBeans declares shared-lib's DoNotBlockList and hands it to the DoNotCon...
Gate the RPM_ALERT kind on REVIEW_CLINICAL_RESULTS and list it after LEAD_CALLBACK
Email unsubscribes reach the do-not-contact list, and campaigns, shares and an SI's mail check it
Owner 2026-10-15: one company-wide do-not-contact list per organization, scoped per channel; an email unsubscribe blocks email only. - Writer: MirroringEmailOp...
A meeting that arrives by email asks once, then keeps itself current
A new invitation in the mail reader now offers "Add to calendar". Once a member has added it, the organiser's follow-ups apply on their own: a moved time, a new...
Gate the eight IoT kinds on their rights with the owner rule, in one display order (IoT SP00)
Preview the new-lead-available letter
Adds the LEADS_AVAILABLE arm to sampleVariables, built through the same shared-lib LeadsAvailableEmail helper SecurityService sends with, so the admin preview s...
CALENDAR_EVENT labels and thread keys on mail rows β the labels endpoint serves every resolver, CalendarEventLabelResolver labels an event of the org (owner, member, department and job-title audiences through the org graph, member attendees; others EMAIL:), and search and conversation rows carry threadKey (KamoCollab CP07 Task 7)
CalendarEventLabelReads reads the event by primary key and organization (live only), its audience and attendees by the event-id indexes, and users to members by...
Confidential thread markers and EMAIL_THREAD labels β PUT β¦/thread-confidential on member and shared mailboxes, one audited writer, threadKey and threadConfidential on both message GETs, POST **************** the org graph (KamoCollab CP05 Task 20)
EmailThreadKeys is the one thread-naming rule **************** now calls it): root Message-ID, UUIDv5 thread id, and the EMAIL_THREAD key without angle brackets...
Declare the disclosure ledger recorder, paired with its repository scan (KamoCollab CP08 Task 12)
DisclosureLedgerConfig declares DisclosureRecorder; EmailServiceApplication's @EnableJpaRepositories gains **************** in the same commit. DisclosureLedger...
The two contact notification kinds, and which members an internal address reaches (KamoCollab CP04 Task 11)
CONTACT_REQUESTED and CONTACT_DECIDED are gated on ACCESS_CHAT and listed after MENTIONED. POST **************** ({orgId, addresses[]}, at most 100, KAMOAI_INTE...
The CP05 DDL for per-thread Confidential markers and the thread_id indexes
KamoCollab CP05 Task 4 (spec 5.1): public.email_thread_labels keyed by (org_id, thread_key), ix_thread_messages_thread and the partial ix_search_index_thread. H...
Message listings say how many messages they hold (X-Total-Count)
The message list in kamo-internal can now be browsed by pages, and its pager needs the listing's size for "51-100 of 1,240" and a Last button. Every listing ans...
A composed message carries its meeting, and calendar edits ask before telling guests
- /api/email/send takes meetingInvite: the event is filed on the sender's calendar in the same transaction, its ics rides on the composed message with an X-...
Calendar chat lines say they are system lines (KamoCollab CP00 T5)
MediaChatClient.sendDirect now posts "source": "SYSTEM" beside fromMemberId, toMemberId and message: a calendar invitation or cancellation is a notice written i...
A member's new name reaches their mailbox's display name (SP95 T35)
POST **************** {previous, current} -> {updated}, behind the KamoAI internal secret like provision-mailbox. The mailboxes the member holds as primary whos...
Personal-mailbox connects send the api.kamouniverse.com redirect
The owner has added **************** to the platform Google and Microsoft consoles, keeping the api.kamocrm.com one. Both hosts serve the path.
The platform's Gmail, Microsoft 365 and Zoho connects send api.kamouniverse.com redirects
The owner added **************** (Google) and **************** (Microsoft, Zoho) to the platform apps' consoles and kept the api.kamocrm.com ones, so both are v...
The platform organization's letters are signed KamoUniverse, not its legal name
The platform org's title is the company's legal name, "KamoCRM Inc.", and it stays in legal text. Its letters now carry the brand, its short title "KamoUniverse...
EmailService sends, links and names the platform as kamouniverse.com
The platform's primary apex is kamouniverse.com; kamocrm.com stays served in full. What EmailService writes today now names the primary apex, and what it recogn...
Dovecot push authoritative for KamoMail; NEW_EMAIL no longer self-raisable
POST /api/notifications/self is removed with SELF_RAISABLE: NEW_EMAIL is raised by NewMailAnnouncer and CHAT_MESSAGE by MediaService, so a browser has nothing l...
An emailed invitation keeps its recurrence, edited and cancelled instances
An invitation to one date of someone else's series stays the event it describes instead of being refused as an orphan instance, and a series whose organiser mov...
Guests hear about one moved or cancelled instance; invitations state the repeat
The instance's ics names the whole guest list and goes to every guest already told; a cancelled instance outranks every notice sent about it; an all-day invitat...
Provision an AI member's mailbox for the SP02 MAILBOX hire step
POST **************** (spec E6, Β§4.12) behind KAMOAI_INTERNAL_SECRET: KamoMail creates <first.last>@<verified domain> (base, base2 β¦ base99), other providers as...
Read ics from Google, Outlook and Apple β zones, dates, series and instances
Dovecot push endpoint; push-covered KamoMail mailboxes stop holding IMAP IDLE
One ics writer for invitations, CalDAV and export β series, exceptions, zones
Watch active AI members' mailboxes for arrivals
AiMailboxWatcher keeps a pod-local "ai" IDLE claim on every active AI member's IMAP-reachable mailbox (ARTIFICIAL, record active, membership ACTIVE), skips mail...
Meeting emails wear the organizer's compose template; escape event fields
Invite, update, cancel and RSVP bodies are wrapped for the sending member and their data: images leave as cid: parts (InlineImageTransport). **************** su...
Free/busy that never widens visibility, and a slot finder over working hours
No transaction across the members (a Yugabyte read restart is transparent only as a transaction's first statement), one guest read for every member, zero-length...
Send and drafts return Message-ID and UIDs, thread, wrap, dry-run, supersede drafts
Working hours from the timecard schedule, the AI charter, or the org default
A schedule set today counts for all of today, a day ending at its start is a 24-hour shift, only the window's own holidays are reported, and an unreachable Secu...
Server-side threading, quotes, forwards and the outgoing pipeline
Replies thread on the server (In-Reply-To/References from the original, capped at 20 ids), default their recipients and subject, and set \Answered after the sen...
Server-built mail carries its icons as PNG parts and its data: images as cid: parts
The API reads and writes occurrences by key, with scopes, recurrence and IANA zones
Event windows bind as Instants, so a whole-second or offset instant is read (a Date read only the millisecond form, and its failure answered 404); a malformed q...
Minted Message-IDs, Sent/Draft UIDs via UIDPLUS, MIME sends to Microsoft 365
Phone mirror for cards, chat cards raised server-side, calendar lines through chat's fan-out
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
