✦ Full-flow AI automation · no clicking required

Say it once.
The agent does the rest

Register, add a mailbox, import lists, broadcast, read replies — twenty clicks in the UI, now a handful of HTTP calls. An AI runs the whole chain; your application only says “reach out to this batch of customers”.

Works with any model that can make HTTP calls: GPT, Claude, DeepSeek, Qwen…

1
Signs itself upRegistration returns a long-lived credential — no human onboarding.POST /agent/register
2
Adds a mailboxMailbox plus app password; the server address is detected.POST /agent/senders
3
Manages listsTens of thousands of addresses split into groups of 800.POST /agent/contacts
4
SendsBroadcast by group, one-off to a person, rotated mailboxes.POST /agent/broadcast
5
Follows upPolls delivery and opens, searches replies, decides next.GET /agent/tasks/:id
One real task

You state the goal, it builds the steps

Plain language on the left, actual calls on the right — the model assembles them itself.

You / your app
Send a quote email to both “Customers” groups. Subject “Model A-1200 quote”, mention 15-day lead time for 500 units.
Then tell me the open rate and who replied.
Checking the account first.
Two groups, 1600 contacts, mailbox healthy. Starting the send.
✓ Campaign created · 1600 recipients · sending
Done: 1587 delivered, 13 failed. Four replies — two asked about pricing; highlights below.
Calls the agent made
# 1. Inspect
GET /agent/me
→ 1 sender, 1600 contacts, 2 groups

# 2. Create a draft first
POST /agent/broadcast
{"subject":"Model A-1200 quote",
 "content":"Hi… 500 units, 15 days…",
 "categories":["Customers-Group 1",
               "Customers-Group 2"],
 "start":false}
→ campaign_id, recipient_count 1600

# 3. Verify, then start
POST /agent/tasks/6aea…/start

# 4. Poll
GET /agent/tasks/6aea…
→ sent 1600 success 1587 failed 13
   opened 412 clicked 63

# 5. Read replies
GET /agent/messages/search?q=price
→ 2 matches with excerpts
Why it can be fully automated

Email outreach, broken into parts a model understands

One job per endpoint, minimal parameters, and a next hint in the response so nothing has to be guessed.

Register and go

Registration returns a long-lived token, and you can issue revocable API keys for partners without sharing a password.

Mailbox auto-detection

QQ, 163, Gmail, Outlook, Alibaba and Tencent enterprise mail, plus MX lookups for custom domains. An address and an app password is all it needs.

Automatic grouping

800 contacts per group; overflow becomes Group 2, Group 3. Re-imports never duplicate, they just move the address.

Bulk and one-off, same path

Broadcast by group or write to one person — signatures, threading and delivery stats behave identically.

Rotation lowers risk

Multiple mailboxes share the load within their own daily limits, with retries and ban isolation.

Replies are searchable

Search correspondence by keyword or by person, so the model can follow up instead of asking you to dig through an inbox.

For developers

Two lines to put email behind your product

Plain HTTP and JSON. No SDK, no private protocol.

# Once: mint a long-lived key
curl -X POST $API/agent/keys -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' -d '{"name":"my-app"}'

# Then every send is one request
curl -X POST $API/agent/broadcast \
  -H "Authorization: Bearer mmk_xxx" -H 'Content-Type: application/json' \
  -d '{"subject":"New release","content":"…","categories":["Customers-Group 1"]}'

Hand the docs to your model and it knows what to do

/docs/openapi.json and /llms.txt are written for machines.

API documentation Try the web app