Concepts
Account and spaces
Your account holds your team, your bill and one or more spaces.
A space is one brand or product. Everything else belongs to a space: its sending domains, contacts, lists, campaigns, flows, templates, API keys and AI connections. Two spaces never share contacts, and each one has its own sending reputation: a bad send on one brand never hurts another.
Sending domain
A space sends only from a domain you have verified through DNS, such as acme.com. The same domain also carries every link inside your emails (click tracking, unsubscribe, preferences) through a subdomain like link.acme.com. Nothing in your emails points to a domain shared with other senders. Set up your domain.
Contacts
A contact is an email address with a first name, a last name and any attributes you need (plan, company, signup_date…). Contacts are unlimited on every plan.
A contact has a status:
| Status | Meaning |
|---|---|
| Active | Can receive emails |
| Unsubscribed | Unsubscribed from everything |
| Bounced | The address does not accept email |
| Complained | Marked one of your emails as spam |
Lists
A list is something people subscribe to: "Newsletter", "Product updates", "Events in Paris". It carries consent. A contact can be subscribed to several lists and unsubscribe from each one separately on the preferences page.
Segments
A segment is a saved filter: "plan is pro", "opened in the last 30 days", "performed trial_started". It never adds anyone to an audience, it only narrows it. Segments update on their own as contacts change.
Events
An event is something a contact did in your product, sent by your app through the API: signed_up, trial_started, order_paid. Events start flows and feed segments.
Campaigns
A campaign is a one-off email sent to a list, optionally narrowed by a segment: your newsletter, a launch announcement. You send it now or schedule it.
Flows
A flow is an automated sequence. It starts when a contact subscribes to a list or when your app sends an event, then runs its steps in order: send an email, wait, check a condition.
Transactional emails
A transactional email is sent by your app to one person because of something they did: a password reset, a receipt, an invitation. It needs no list, carries no unsubscribe link, and travels on its own stream, so it keeps flowing even if marketing is paused.
You write it once as a template in the dashboard, then send it through the API with variables.
Marketing and transactional streams
Campaigns and flows form the marketing stream, transactional emails the transactional stream. Kula keeps them apart:
- marketing is warmed up on new domains, capped for contacts who never opened and paused if your reputation drops;
- transactional skips all of this, so a password reset is never stuck behind a newsletter.
Use transactional emails only for messages a person expects after an action. Sending newsletters through the transactional API breaks the consent rules of inbox providers and of our acceptable use policy.
Who can do what
| Role | Can manage |
|---|---|
| Member | Contacts, lists, segments, campaigns, flows, templates |
| Admin | Everything a member can, plus domains, API keys, webhooks, AI connections and space settings |
| Owner | Everything, plus billing, members and deletion of spaces |