Jelliu agents send and answer email through a mailbox your workspace connects: Gmail, Outlook or Zoho Mail. Mail leaves from that mailbox, is signed by that provider with your domain, and appears in its Sent folder. Every send goes through the same do-not-contact, opt-out and daily-cap checks as the rest of the platform.
Email is always sent from your own mailbox. Jelliu does not send your customer email from a platform address. Until a mailbox is connected and selected, POST /api/email/send fails with 409.
How it works
- Connect a mailbox as an integration. See Integrations.
- Select it as the sender. Jelliu checks with the provider that the connection works before saving it.
- Send. Proactive email goes out through the API, campaigns or an agent.
- Receive replies. Turn on reply ingestion for the mailbox so the agent can answer. A reply is answered only if the conversation is one your workspace started.
Endpoints
Sending identity
Read the settings
Select the sending mailbox
gmail, outlook or zoho_mail. null is rejected: there is no platform sender to go back to.
Which connection to use when several of the same provider are connected. Defaults to the most recently connected one.
Before saving, Jelliu makes a read-only call to the provider to confirm the connection still works and to learn the address it controls. The response is the full settings object with the address that will really be used. A connection that is missing, not active, has a recorded error, has no known address, or (for Zoho Mail) has no account ID is refused with 409 and a message naming what to fix, for example:
Connecting a mailbox in Integrations gives agents tools to use it, but does not by itself change where email is sent from. Selecting the sender with this endpoint (or in the dashboard under Settings → Account → Email) is a separate step.
Set the contact address
PATCH /api/email/settings with { "replyToEmail": "contacto@clinicanorte.example.com" } (a valid email, up to 254 characters) sets the workspace contact address and returns the settings object.
Sending email
POST /api/email/send sends one email to one contact.
The contact to write to. It must belong to your workspace and have an email address.
1 to 998 characters. Line breaks are replaced with spaces.
Plain-text body, 1 to 50,000 characters. Leading and trailing whitespace is trimmed.
Continue an existing thread instead of starting a new one: the provider’s thread ID (Gmail) or message ID (Outlook, Zoho Mail), up to 998 characters.
The message is also recorded in the contact’s email conversation, so when the contact replies the agent knows what was sent. Read it through Conversations.
Checks before every send
In order, stopping at the first failure:
- The contact exists in your workspace and has an email address.
- A connected mailbox is selected and usable.
- Compliance. The contact is checked against the suppression list, do-not-call status, blocked prefixes and the daily and total attempt limits of your compliance configuration.
- Opt-out. Contacts with status
dnc,do_not_callor an opt-out date are refused. - Daily cap. One unit of the workspace’s daily email cap is consumed. It is refunded if the send fails.
Allowed contact hours do not apply to email. They come from telemarketing calling-time rules, which say nothing about when an email is delivered. WhatsApp and calls still respect them.
Threads
Pass inReplyTo to answer inside a conversation the contact is already reading. The mailbox’s reply action is then used (Gmail replies to the thread; Outlook and Zoho Mail reply to the message), so the email lands in the same thread instead of arriving as a new message.
- When replying in a thread, the provider’s thread determines the subject; your
subjectis still required and validated. - When
inReplyTois omitted, a new email is sent. inReplyTochanges only how the email is delivered. Every check above still runs.
Agent replies to inbound mail always use the thread or message ID of the email they answer.
Attachments and formatting
The API sends plain-text bodies only. There is no attachment field on POST /api/email/send.
Retries and duplicates
A failed send is not retried when the result is uncertain, because retrying could deliver the same email twice. If you receive a 5xx or a network error, check the contact’s conversation before sending again.
Receiving replies
Replies arrive in the connected mailbox. For an agent to answer them, turn on reply ingestion for that mailbox.
Check support
Turn on replies
The connected mailbox: gmail or outlook.
The agent that answers.
Create a contact for a sender your workspace has never seen and let the agent answer people who write to the mailbox on their own. Off by default.
The result is an ordinary trigger. Pause, resume or delete it through the trigger endpoints described in Integrations.
Activating an email campaign sends email but does not, by itself, make the agent answer replies. Reply ingestion is a switch for the whole mailbox, not for a campaign.
The reply gate
A mailbox receives newsletters, vendor mail and cold lists, and knowing a sender’s address is not a reason to answer them. For every incoming email, Jelliu decides whether the agent may reply:
Then, even when the gate allows it, the agent does not answer if:
- the email is automated: an
Auto-Submittedheader other thanno;Precedence: bulk,listorjunk; auto-reply headers; mailing-list headers such asList-IdorList-Unsubscribe; a sender such asmailer-daemon,postmasterorno-reply; or an out-of-office or delivery-failure subject. The contact is left untouched and their next real email is answered; - the email is an opt-out (see below);
- the contact has already opted out;
- the daily email cap is reached, or the monthly AI message allowance is used up.
Unanswered emails are not an error. When the provider delivers the same email as two events, it is claimed by its message ID and processed once.
Opt-out
An incoming email is an opt-out when:
- its first non-empty line is one of the opt-out keywords used on every text channel:
stop,stopall,stop all,cancel,unsubscribe,quit,end,baja,cancelar,darme de baja,dar de baja,no molestar; or - its first 500 characters contain a phrase such as
unsubscribe,darme de baja,dar de baja,no me envíen más,remove me fromorstop emailing.
Jelliu then marks every contact in your workspace with that email address (compared case-insensitively) as dnc, records the date and the phrase, and sends nothing back. Later sends to those contacts fail with 403: Contact has opted out — cannot send email.
Automated email is checked before opt-out, so an unsubscribe footer quoted inside a bounce never suppresses a contact.
Bounces
Delivery failures and out-of-office replies are recognized as automated mail and are not answered. They do not change the contact’s status: Jelliu does not currently suppress an address because a message to it bounced.
Email campaigns
A campaign with channel set to email writes first to every contact, using the campaign’s emailSubject (up to 300 characters) and emailBody (up to 20,000 characters). Campaign sends are deliberately paced, about one every 700 milliseconds per worker, and stop at 80% of the daily cap so replies always have room. See Campaigns.
Errors
Send and settings errors use code EMAIL_ERROR with the HTTP status that describes the cause. Messages are shown verbatim; some are in Spanish.
Limits
Your mailbox provider’s own sending limits also apply to every email sent from it.

