AI customer support agents that answer on WhatsApp.
Inside your product too. They improve your customer experience: they resolve each request in your systems and hand your team whatever needs a person.
SSupport agent · WhatsApprunning on Lelemon · Claude Sonnet
0.0 s
Customer · WhatsApp
Hi, the jacket from order 48213 arrived with a broken zipper. I want to return it.
0.4 s
Thought Looking up the order and checking the return policy.
1.1 s
get_orderorder: "48213"Waterproof jacket · $129.00 · delivered 6 days ago380 ms
1.7 s
search_knowledgequery: "defective item return"Full refund within 30 days, with a photo of the defect290 ms
2.3 s
This qualifies for a full refund of $129.00. Since it is over $100, a supervisor approves it before it is issued.
2.4 s
Approval requiredcreate_refund · $129.00 to the original payment methodWaiting for approvalApproved by Javiera, support supervisor
41 s
create_refundorder: "48213", amount: 129.00Refund R-2291 issued510 ms
42 s
Done. We refunded $129.00 to your card; it shows up in 3 to 5 business days. I sent you the return label.
Approval requiredcreate_refund · $129.00 to the original payment method
Illustrative example with sample data.
Trusted by
Why not build it ourselves?
You can. The model is the easy part; what takes months is everything around it, and that is already built. Your team keeps building your product.
WhatsApp on your numberConnect your WhatsApp Business number with a link and the agent answers from it.
A panel for your teamEvery conversation is a case, with teams, routing and an inbox. Whoever takes it pauses the agent.
Human approvalSensitive actions wait for the person you choose to approve them.
Hand-offs with contextThe case reaches your team with a summary of the conversation.
A log of every actionWhat the agent did, in which system and with what data, in the case history.
Connects to your systemsYour API, your MCP server or signed webhooks. No data migration.
Customer stories
A copilot inside accounting software
Plataforma Contable is accounting software for Chilean accountants. Its copilot runs on Lelemon: the accountant asks for the work in plain words and the agent does it in the system.
They connected their software’s actions to the agent without building an agent from scratch.
The same agent works inside the product and on WhatsApp.
The team follows conversations and takes over from the panel or from Claude.
How they control it
They grant the agent the tools it can use, one by one.
Anything that changes taxes stays out of its reach.
Before changing several records, the agent shows what it will do and waits for the accountant to approve it.
TUU support and sales on WhatsApp
Haulmer serves the merchants that use TUU with Lelemon agents integrated with its internal systems: tickets, knowledge base and customer data. Their team steps in when a case needs it.
I messaged them on WhatsApp and the agent picked the conversation back up.
Reply…
Whoever lives in Claude takes a case, replies and hands it back to the agent in the same conversation.
Fits your startup
Each startup connects its systems and sets its rules. Pick your kind of product and see how its agent looks.
P
Post-sale agentClaude Haiku
Works on
WhatsAppWebsite chat
Connects to
Your online storeShipping systemKnowledge base
Does on its own
Check an order’s statusChange the shipping addressCreate an exchange label
Asks approval for
Refunds over $100
Hands off when
Formal complaintThe customer asks
Team
Post-sale · 3 people
B
Buyer and seller agentClaude Sonnet
Works on
Inside your appWhatsApp
Connects to
Your orders APIPaymentsKnowledge base
Does on its own
Check an order’s statusAnswer buyers and sellersWalk a new seller through their first listing
Asks approval for
Refunding a purchasePausing a listing
Hands off when
Dispute between buyer and seller
Team
Operations · 4 people
P
Product copilotClaude Sonnet
Works on
Inside your softwareWhatsApp
Connects to
Your APIHelp centerTicketing system
Does on its own
Answer from your docsConfigure an accountOpen a ticket
Asks approval for
Deleting dataChanging the plan
Hands off when
An error it cannot solveEnterprise plan customer
Team
Support · 5 people
C
Collections agentClaude Haiku
Works on
WhatsApp
Connects to
Your lending APIPayment providerYour CRM
Does on its own
Check the balanceSend the payment linkLog a promise to pay
Asks approval for
Restructuring a debt
Hands off when
Customer disputes the charge
Team
Collections · 2 people
Connects to what you already use
Your API, an MCP server or webhooks. No system changes, no data migration.
You decide what it does alone
Each action is granted to the agent one by one. Sensitive steps wait for approval from the person you choose.
Hands off to your team at the right time
Following your rules, and the case arrives with a summary of the conversation.
The right model for each job
Claude Haiku for fast answers, Claude Sonnet for work that needs reasoning. They run on AWS Bedrock.
Security and control
Human approvalRefunds, deleting data or changing a plan wait for a yes from the person you choose.
A record of every actionWhat the agent did, in which system, with which data, and who approved it.
Data kept per organizationEach organization sees only its own data. API keys have limited permissions.
Chile’s Law 21.719When an action sends data to one of your systems, we record why and which country it goes to.
Pricing
You pay per conversation, not per seat, and it costs the same with any model. For more volume there is a 5,000-conversation plan at US$2,500 a month, and beyond that, an annual contract from US$0.35 per conversation.
US$700a month
1,000 conversations a month
WhatsApp, web and inside your software
Team panel, API and MCP
60-day pilot to get started
Developer world
Build something incredible.
A REST API, signed webhooks and an MCP server. API keys per organization with scopes. Everything the panel does, you can do in code.
# Register an action: an HTTP call to your system.# You define the schema; the agent fills in the parameters.curl -X POST https://api.lelemon.cl/v1/external/actions \ -H"Authorization: Bearer $LELEMON_API_KEY" \ -H"Content-Type: application/json" \ -d '{"slug": "create_ticket","name": "Create a ticket","description": "Opens a ticket when the customer reports a problem.","url": "https://api.yourcompany.com/tickets","method": "POST","parameters": {"type": "object","properties": { "summary": { "type": "string" } },"required": ["summary"] } }'
terminal$ sh 01-register-action.shrunningHTTP/1.1 201 Createdcreate_ticket is now in your organization’s catalog
● api.lelemon.clShellUTF-8
02-grant.sh
# Grant it to an agent. One at a time: other agents don't see it.curl -X PUT https://api.lelemon.cl/v1/external/agents/$AGENT_ID/actions/create_ticket \ -H"Authorization: Bearer $LELEMON_API_KEY"
terminal$ sh 02-grant.shrunningHTTP/1.1 204 No Contentthe support agent can now use create_ticket
● api.lelemon.clShellUTF-8
03-copilot.ts
// Your product talks to the agent from your backend.// externalRef makes every message idempotent: a retry never duplicates it.const api = 'https://api.lelemon.cl/v1/external';const headers = { Authorization: `Bearer ${process.env.LELEMON_API_KEY}`,'Content-Type': 'application/json',};const { conversationId } = await fetch(`${api}/agents/support/conversations`, { method: 'POST', headers, body: JSON.stringify({ externalId: user.id, contactName: user.name }),}).then((r) => r.json());const reply = await fetch(`${api}/conversations/${conversationId}/messages`, { method: 'POST', headers, body: JSON.stringify({ message: text, externalRef: message.id }),}).then((r) => r.json());
terminal$ npx tsx 03-copilot.tsrunning{ "conversationId": "4b1c9e…", "status": "answered", "response": "I opened ticket SAC-20481. Someone will reach out today."}
● api.lelemon.clTypeScriptUTF-8
04-webhook.ts
// When a case needs a person, you get a signed webhook.import { createHmac, timingSafeEqual } from'node:crypto';app.post('/lelemon', express.raw({ type: 'application/json' }), (req, res) => {const ts = req.header('X-Lelemon-Timestamp');const expected = createHmac('sha256', process.env.LELEMON_WEBHOOK_SECRET) .update(`${ts}.${req.body}`) .digest('hex');const received = req.header('X-Lelemon-Signature') ?? '';if (received.length !== expected.length || !timingSafeEqual(Buffer.from(received), Buffer.from(expected))) {return res.sendStatus(401); } notifyYourTeam(JSON.parse(req.body)); res.sendStatus(200);});
# The Lelemon MCP server, in Claude Code.# Have your own MCP server? Connect it to an agent from the panel.claude mcp add --transport http lelemon https://api.lelemon.cl/mcp
terminal$ clauderunning> Which cases are waiting for a person?● lelemon · consultas_pendientes2 cases are waiting. Ferretería Sur is asking about a duplicate invoice.
● api.lelemon.clShellUTF-8
Conversations
POST/agents/:slug/conversationsagents:converseOpen a conversation with an agent
POST/conversations/:id/messagesagents:converseSend a message and get the reply
POST/conversations/:id/derivarconversations:routeHand the case to a person
POST/conversations/:id/resolveconversations:resolveClose the case
Actions
POST/actionsactions:writeRegister an action from your system
PUT/agents/:agentId/actions/:slugactions:writeGrant it to an agent
DELETE/agents/:agentId/actions/:slugactions:writeRevoke it
Knowledge
POST/knowledge/collectionsknowledge:writeCreate a collection
PUT/knowledge/documentsknowledge:writeUpload or update a document
PUT/agents/:agentId/knowledge/:collectionIdknowledge:writeGive it to an agent
Scheduling and metrics
GET/scheduling/availabilityscheduling:readAvailable time slots
POST/scheduling/meetingsscheduling:writeBook a meeting
The agent only uses the actions you grant it, one by one. Before doing anything important, it shows what it will do and waits for approval. Every action is logged on the case and your team can take over at any time.
Do I have to change my systems?
No. The agent connects to your systems over API, webhook or your MCP server. You define each action and which agent gets it.
How does my team work with it?
In the Lelemon panel every conversation is a case, with teams, routing and an inbox. Whoever takes a case pauses the agent and hands it back when done. If your team uses Claude, they can handle cases from there over MCP.
Can I use my own WhatsApp number?
Yes. You connect your WhatsApp Business number with a setup link and the agent answers from that number.
Which models does it use and where is the data?
Claude models (Haiku and Sonnet) and open models, on AWS Bedrock. You choose the model for each agent. Each organization sees only its own data and API credentials are scoped. When an action sends data to one of your systems, the purpose and destination country are recorded, as Chile’s Law 21.719 requires.
What counts as a conversation?
One thread with one customer: up to 10 exchanges with the agent or 24 hours, whichever comes first. The next message starts a new conversation. It costs the same with any model. If you go over your plan in a month, each extra conversation costs US$0.80 (US$0.60 on the 5,000 plan) and service never stops. WhatsApp messages are billed by Meta directly to your number, separately from Lelemon.
What does implementation look like?
We start with a paid 60-day pilot: one channel, one or two actions in your system and a written goal before we begin. If the goal is met and you sign the annual contract, the full pilot is credited; if it is not met, we refund half. Implementation is quoted per project and covers setting up the agent, its actions, its knowledge and the hand-off to your team.
Does it replace my support team?
No. The agent handles the first line and resolves what you allowed it to do. Everything else reaches your team with a summary of the conversation.
Talk to the agent
Ask it how it would serve your customers, what it connects to, or how much it would cost. If it fits, it books you a call with Camilo.