Automations & Notifications
Every email Cobuntu sends on your behalf is driven by an automation — a small rule that listens for something happening in your community and takes an action in response. Automations are how membership confirmations, ticket receipts, payout alerts, and reminders go out without anyone touching a keyboard.
The model has three properties that are worth understanding up front, because together they give you full control over your community's communications:
-
Every email is brand-customizable. Emails render with your community's logo, colors, sender name, and reply-to address. Many also expose editable copy in the admin app, so you can rewrite subject lines and body text to match your voice.
-
Every email is optional. Cobuntu does not send transactional email as a side effect of an action. An email goes out only if an automation is configured and running for that touchpoint. Turn the automation off and the email simply stops — nothing else breaks.
-
Every email is mirrored by a public webhook. For every customer-visible email touchpoint, Cobuntu emits an equivalent webhook event. This means you can switch off Cobuntu's email for any touchpoint and drive your own system from the webhook instead — send the message from your own ESP, push it into your CRM, fire a Slack alert, or do nothing at all. The webhook fires whether or not the email is enabled, so your downstream systems keep working independently of what Cobuntu mails.
Account & security emails are separate
This page is about community notifications — the messages your community sends to its members and buyers. They are distinct from account emails (password resets, email verification, sign-in security). Account emails are sent by Cobuntu at the platform level for every user: they always send, they aren't community-branded, and they have no automation or webhook to configure. Everything below applies only to community notifications.
How automations work
An automation is a trigger paired with one or more actions:
- Trigger — the thing that happens in your community: a member is approved, a ticket is purchased, a payout fails, an event reminder window opens.
- Action — what runs in response: most commonly send a branded email to the relevant recipient.
A new community ships with a default set of automations already installed and enabled by default, so the expected emails (welcome messages, receipts, reminders, payout and dispute alerts) work the moment you go live. A few sensitive automations — like removal and ban notices, and the member digest — install in a draft state and only begin sending once a community leader reviews and activates them.
You manage all of this in admin → Automations.
Turning an email off and using the webhook instead
A common pattern: you already have your own email infrastructure and want Cobuntu to stop sending a particular message, while you take over that touchpoint from your own stack. Here's the flow:
- Subscribe to the webhook. Go to admin → Integrations → Webhooks, create (or edit) a webhook pointed at your receiver URL, and select the event for the touchpoint you want to own — for example
member.approvedorevent.ticket.purchased. (See Set up a webhook.) - Disable the matching automation. In admin → Automations, find the automation for that touchpoint and turn it off. Cobuntu stops sending that email.
- Drive your own action from the delivery. Your receiver now gets the webhook every time the touchpoint occurs, with a full payload (see the Event catalog). Render and send your own email, update your CRM, or trigger any other side effect.
Because the webhook is independent of the email automation, you can also do both — keep Cobuntu's branded email and subscribe to the webhook for analytics or syncing — or neither, if a particular touchpoint isn't relevant to you.
Idempotency & ordering. Webhooks are delivered at-least-once and without ordering guarantees. Always dedupe on the delivery id and rely on payload timestamps, not arrival order. See Delivery guarantees.
Notification catalog
The table below lists every email Cobuntu can send, who receives it, what triggers it, and the public webhook event you subscribe to in order to own that same touchpoint yourself.
A few notes that apply across the table:
- Default vs. draft. Most automations are enabled by default. Removal/ban notices and the member digest install as drafts and send only after a leader activates them — these are marked below.
- Purchase and refund touchpoints have both an umbrella event and channel-specific events. For purchases,
sale.completedis the umbrella webhook that fires on every paid checkout; the channel-specific events (event.ticket.purchased,product.purchased,subscription.purchase_receipt) own the buyer-facing email for their respective product class. For refunds,refund.issuedis the buyer-facing umbrella;event.ticket.refundedandproduct.refundedare the channel-specific buyer events. Subscribe to the umbrella when you want one stream for all sales or refunds; subscribe to the channel-specific event when you only care about one product class. Pick a single owner per touchpoint to avoid sending a buyer two messages for one action.
| Recipient | Triggered when | Webhook event | |
|---|---|---|---|
| Membership invitation | Prospective member | A leader personally invites someone to join | member.invited |
| Application received | Prospective member | Someone submits a membership application | member.requested |
| Application withdrawn | Prospective member | An applicant withdraws their own pending application | application.withdrawn |
| Membership approved | Member | A membership application is approved (manually or auto-approved) | member.approved |
| Removed from community | Member | A leader removes a member (installs as draft) | member.kicked |
| Banned from community | Member | A leader bans a member (installs as draft) | member.banned |
| New article published | Community member | A new article is published | article.published |
| Event published | Community member | An event goes live | event.published |
| Event cancelled | Event attendee | A live event is unpublished or deleted | event.cancelled |
| Registration confirmed | Event attendee | Someone registers for an event (free RSVP) | event.attendance.registered |
| Attendance approved | Event attendee | A host approves a pending attendance request | event.attendance.approved |
| Attendance declined | Event applicant | A host declines a pending attendance request | event.attendance.rejected |
| Registration cancelled | Event attendee | An attendee cancels their own registration | event.attendance.cancelled |
| Event reminder | Event attendee | A scheduled reminder window opens before the event | event.reminder.sent |
| Ticket receipt | Buyer | A paid event ticket checkout completes | event.ticket.purchased |
| Product receipt | Buyer | A paid marketplace product checkout completes | product.purchased |
| Purchase confirmation (umbrella) | Buyer | Any paid checkout completes (ticket, product, or subscription) | sale.completed |
| Refund issued | Buyer | A buyer's purchase is refunded | refund.issued |
| Ticket refunded | Buyer | An event-ticket purchase is refunded | event.ticket.refunded |
| Product refunded | Buyer | A marketplace product purchase is refunded | product.refunded |
| Refund processed | Seller | A refund is settled on the seller's side | refund.completed |
| Chargeback opened | Seller | A buyer files a chargeback dispute | dispute.created |
| Subscription started | Member | A subscription is activated | subscription.activated |
| Subscription receipt | Member | A paid subscription's first payment completes | subscription.purchase_receipt |
| Subscription renewed | Member | A subscription renews for a new period | subscription.renewed |
| Payment failed | Member | A subscription payment fails | subscription.payment_failed |
| Subscription cancelled | Member | A member cancels their own subscription | subscription.cancelled |
| Subscription cancelled by admin | Member | A leader cancels a member's subscription | subscription.cancelled_by_admin |
| Subscription expired | Member | A subscription lapses and access ends | subscription.expired |
| Membership tier changed | Member | A member moves to a different tier | tier.changed |
| Member discount ended | Member | A time-limited member discount ends | member.discount.ended |
| Listing submitted | Seller | A seller submits a marketplace listing for review | listing.requested |
| Listing approved | Seller | A leader approves a pending listing | listing.approved |
| Listing rejected | Seller | A leader rejects a pending listing | listing.rejected |
| Listing deactivated | Seller | An active listing is deactivated | listing.deactivated |
| Listing withdrawn | Seller | A seller withdraws their own listing | listing.withdrawn |
| Payout sent | Seller | A payout to a seller is confirmed | payout.confirmed |
| Payout failed | Seller | A payout to a seller fails | payout.failed |
| Funds on hold | Seller | A commission or balance is placed on hold | commission.held |
| Verification required | Community leader | A connected payout account needs verification | stripe.account.requires_verification |
| Payouts disabled | Community leader | Payouts are disabled on a connected account | stripe.account.payouts_disabled |
| Broadcast sent | Community member | A leader sends a broadcast campaign | broadcast.sent |
| Member digest | Community member | A scheduled member digest goes out (installs as draft, opt-in) | digest.scheduled |
Broadcasts and digests are campaign sends rather than reactive transactional emails. A broadcast is composed and sent by a leader on demand; the
broadcast.sentwebhook fires after the campaign goes out, as a completion signal. The member digest is a scheduled roll-up that a leader opts into.
For full webhook payloads, signature verification, retry behavior, and the complete event reference, see the Webhooks documentation and the Event catalog.