Email Infrastructure for Your Product & AI Agent — KIRIM.EMAIL
ktx v1.0.3, available now · The only email API with a CLI built for AI agents

Email your product sends. Without you.

"Kirim" means "send" in Indonesian. We've been sending for nearly a decade, for products in 20+ countries, built by developers who needed transactional email, marketing, and list validation in one place, without a monthly subscription they pay whether they send or not. And now, with a CLI your AI agent can call directly from the terminal.

KIRIM.EMAIL is the only email infrastructure with a CLI built for AI agents. Your agent like Claude, Cursor, Codex, and Windsurf can send email, check delivery logs, validate contacts, and manage domains directly from the terminal. No dashboard. No human required. Pay per credit, not per month.

AI agent builders
Developers building products
Variable-volume senders tired of paying monthly

Available now on Linux macOS Windows

Trusted by
Client logos

I started KIRIM.EMAIL in 2016 with one conviction: email is still the most important channel between a product and its users. Not social media. Not push notifications. Email.

Nearly a decade later, that conviction has only grown stronger. And now, with AI agents beginning to handle more and more of the work humans used to do, email infrastructure needs to be ready for that shift too. Agents shouldn't have to wait for a human to log into a dashboard.

That's what we're building. Not just an email service, but infrastructure that's ready for the agent era. So your product keeps running, keeps serving customers, and keeps sending the right message, even when no one is online.

This is an open invitation. Try it, and tell me what you think. I want to know what works, what doesn't, and what you'd like to see next.

I read and reply to every email personally, [email protected]. Whether you have a technical question, want to discuss a specific use case, or would like to schedule a demo for your team, just send an email and we'll figure out the rest.

Tanda Tangan Fikry Fatullah
Fikry Fatullah Signature
Fikry Fatullah Founder & CEO, KIRIM.EMAIL · [email protected]

Let your agent send email without you touching a dashboard.

ktx is the official KIRIM.EMAIL CLI. Send emails, manage domains, check logs, validate contacts, all from one terminal command. No local server. No manual DNS configuration.

Works with any AI agent that can run shell commands: Claude, Cursor, Codex, Windsurf, OpenCode.

For AI Agents: SKILLS.md

Every KIRIM.EMAIL repository ships with a SKILLS.md file. Load it into Claude, Cursor, or Windsurf, your agent immediately knows the right command for every task.

No manual onboarding. No explaining things one by one. Productive from minute one.
kirimemail/ktx on GitHub →

Install: one command, all platforms

curl -fsSL https://raw.githubusercontent.com/kirimemail/ktx/main/install.sh | bash

Usage examples

terminal
# Send a transactional email
ktx send \
  -from [email protected] \
  -to [email protected] \
  -subject "Order Confirmed" \
  -text "Order #1234 is confirmed."

# Stream delivery logs in real-time
ktx logs --follow

# Validate a list before sending
ktx validate batch [email protected],[email protected]

# Check sending quota
ktx quota

Configuration (~/.ktxrc)

~/.ktxrc
{
  "username": "your-username",
  "token":    "your-api-token",
  "base_url": "https://smtp-app.kirim.email",
  "domain":   "your-domain.com"
}

Call it directly from your code.

Prefer calling the API directly over using a CLI or SDK? KIRIM.EMAIL provides a full REST API for sending, domain management, validation, logs, and webhooks, consistent endpoints, JSON responses, Bearer token auth.

POST/api/v1/sendSend email
GET/api/v1/domainsList domains
POST/api/v1/domainsAdd domain
GET/api/v1/credentialsList credentials
POST/api/v1/validateValidate email
GET/api/v1/logsDelivery logs
POST/api/v1/webhooksRegister webhook
GET/api/v1/quotaCheck quota
Open Full API Documentation →

Example: send via REST API

curl
curl -X POST \
  https://smtp-app.kirim.email/api/v1/send \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "[email protected]",
    "to": "[email protected]",
    "subject": "Order Confirmed",
    "text": "Order #1234 is confirmed."
  }'

Authenticate with a Bearer token from your KIRIM.EMAIL dashboard. Standard JSON responses, easy to parse from any language or agent.

Add email capability in minutes.

Pick your language. Our SDKs handle auth, retries, and error handling, so your code focuses on business logic, not HTTP plumbing.

KIRIM.EMAIL in n8n.

Official n8n nodes for teams that automate workflows without writing code, or for n8n-based agents that need to trigger email as part of a larger workflow.

KIRIM.EMAIL is the right fit if…

No single email provider is right for everyone. Here's how to know whether KIRIM.EMAIL fits your situation, and when it probably doesn't.

Your situation KIRIM.EMAIL Resend / Postmark SendGrid / Mailgun AWS SES
You're building an AI agent that needs to send email ktx CLI + SKILLS.md, built for this API only, no agent-ready CLI API only, no agent tooling aws cli, complex for agents
Your sending volume is irregular, you don't send every month Pay per credit, zero monthly fee Postmark has credit packs; Resend has monthly plans Monthly minimums apply Per-send pricing, but setup is complex
You need transactional + marketing + validation in one account All three, unified Transactional only Transactional + marketing; validation is paid add-on Transactional only; no marketing or validation
You manage email for multiple clients or products Sub-accounts with credential isolation Team access, not full client isolation Subuser / subaccount support IAM roles, requires AWS expertise
You want email validation built into your workflow Included, same credit system Not available Paid add-on, separate billing Not available
You need React-based email templating or modern JS-first DX Not our focus Resend + React Email is best-in-class Template support, but older approach No template tooling
You're sending 10M+ emails/month and already in AWS Yes, we've delivered 11M+ in a single day Not optimized for extreme volume SendGrid/Mailgun scale to this Cheapest at this scale, if you have the expertise

We'd rather lose you to the right tool than keep you on the wrong one. If Resend fits your stack better, use Resend. If you're building AI agent workflows and need a CLI that already knows how to send email, that's us.

Founded 2016. Profitable. Private. Not going anywhere.

In an industry where email providers keep getting acquired, rebranded, or shut down like SparkPost became Bird, Mandrill requires a Mailchimp subscription, SendGrid is now Twilio, staying independent is itself a differentiator.

KIRIM.EMAIL has been profitable since year one. No VC pressure, no exit timeline, no one telling us to pivot the product to fit an acquisition thesis. We answer to our customers, not to investors.

We've processed email for 35,000+ businesses across 20+ countries since 2016. That track record isn't marketing, it's nine years of keeping email moving for products that depend on it.

35,000+
businesses across 20+ countries
~10 yrs
of operational track record
9
webhook event types for reactive workflows

Something is being built.

Soon you'll be able to instruct Claude or Cursor directly, and they'll know exactly how to send email through KIRIM.EMAIL, without switching apps or writing integration code.

Illustration: coming soon

User: "Send a follow-up email to all customers whose orders are still unconfirmed."

Claude: Sent to 47 customers. All delivered. Delivery rate 98.3%.

Native integration with Claude / Cursor, coming soon

Things developers actually ask.

We've collected these from real conversations, support tickets, and the questions we get before someone signs up. Answered directly, no marketing fluff.

The Basics

"Kirim" means "send" in Indonesian. We're a company founded in Indonesia in 2016, with legal entities in both Indonesia (PT Kirim Email Indonesia, Bandung) and the US (Kirim Email, Inc., Delaware). We've been running for nearly a decade and serve 35,000+ businesses across 20+ countries. Our infrastructure handles global delivery, we route to Gmail, Outlook, Yahoo, and every major inbox provider worldwide.

Both, in a single account. Transactional email (OTPs, password resets, order confirmations, system alerts) through our SMTP/API. Email marketing (campaigns, sequences, list management) through our marketing dashboard. Built-in email validation included. Most teams using us don't pay separately for a transactional provider and a marketing platform. Whether that matters to you depends on your stack.

We use a credit system: 1 credit = 1 email sent (or 1 email validated). You buy credits, use them when you send, and pay nothing in months where you send nothing. No monthly minimum. Credits are valid for one year from purchase and accumulate if you top up. If you need unlimited sending to a fixed marketing list, we also have a contact-based monthly plan. Pricing details at en.kirim.email/pricing.

No free tier, but there's a full sandbox environment for testing before you commit to any credits.

About 5 minutes to first send. Three paths: (1) Install ktx CLI with one curl command and run ktx send. (2) Call our REST API directly with a Bearer token from your dashboard. (3) Plug in SMTP credentials to your existing library (Nodemailer, PHPMailer, Laravel Mail, all work. DNS verification for your sending domain takes 5–30 minutes, but you can test immediately with Sandbox Recipients while that's processing.

REST API if you're writing new code, more flexible, structured JSON errors, programmatic access to logs, webhooks, and validation. SMTP if you're plugging into an existing library that already expects SMTP credentials (WordPress, Laravel, legacy PHP, Nodemailer). Both are fully supported. Port 587 with STARTTLS is recommended; port 465 with SSL/TLS also works.

Yes. Add your sending domain to KIRIM.EMAIL, verify DNS, test with Sandbox Recipients, then switch your app's SMTP credentials or API calls. You can run both providers in parallel during testing. The main thing to migrate is your suppression list, export bounces and unsubscribes from your current provider to avoid re-sending to addresses that already had problems. We can help walk through this, email [email protected].

Deliverability

Honest answer: we don't publish benchmark numbers because deliverability depends heavily on your own domain reputation, list hygiene, and content, not just the provider's infrastructure. What we do: properly maintained IP pools, SPF/DKIM enforcement, active bounce and complaint handling, and a nine-year track record with 35,000+ businesses. The best way to evaluate is to run tests from your own domain and watch the logs. That's what the sandbox is for.

We support dedicated IP configuration for accounts with appropriate sending volume. For most transactional senders under ~100,000 emails/month, shared IPs from a well-managed pool perform as well as dedicated IPs, and dedicated IPs require careful warming to avoid deliverability problems. If you're at a volume where dedicated IPs make sense, reach out to discuss. They're not the right answer for everyone.

Yes. Transactional email (user-triggered) and marketing email (campaigns) run through separate infrastructure and IP pools. A spam complaint on a marketing campaign won't affect the deliverability of your OTPs or password resets. The separation is architectural, not just a dashboard setting.

IP warming is gradually increasing email volume on a new IP so inbox providers build a reputation signal on it. On KIRIM.EMAIL's shared IP pools, IPs already have established reputation, you don't warm them from scratch. If you're on a dedicated IP, warming is essential and typically takes 4–6 weeks. Most new accounts on shared IPs can start at production volumes without manual warming.

In order of likelihood:

  • Run ktx domains verify yourdomain.com, missing DMARC is the most common Gmail filtering cause in 2026
  • Validate your list before bulk sends: ktx validate batch, high bounce rates tank sender reputation
  • Check for content triggers, certain subject line patterns cause filtering regardless of technical setup
  • Look at your sending volume ramp, a sudden spike from a cold domain triggers spam filters

The specific error message in ktx logs usually tells you exactly what Gmail or Outlook rejected and why.

AI Agents & ktx

Most email providers are designed for humans who click dashboards. AI agents like Claude, Cursor, Codex, OpenCode, can run shell commands natively but can't log into a UI. ktx means your agent can send email, check delivery logs, validate a contact list, manage webhooks, and check quota all from terminal commands, without any human in the loop. SKILLS.md gives agents the context to do this correctly from the start.

SKILLS.md is a compact reference file for LLMs. It describes what KIRIM.EMAIL can do with example commands, giving an agent enough context to be immediately productive. To use it: open the file from the ktx repo on GitHub, copy the content, paste it into your agent's system prompt or context window (Claude, Cursor, Windsurf, or any other). The agent then knows how to send email, read logs, manage suppressions, test webhooks, and more, without being taught each step.

If your agent runs shell commands: ktx send is simplest, one command, no integration code. If your agent calls Python functions: pip install kirimemail-smtp, then import and call the send function. The SDK handles auth, retries, and error handling. Node.js, PHP, and Go SDKs also available.

That's the recommended approach. Set KIRIM_TOKEN=your_token as an environment variable and ktx reads it automatically, no token in code or version control. Priority order: flag > environment variable > ~/.ktxrc config file.

Technical

Delivery logs are accessible via ktx logs and the dashboard, filterable by date range, sender, and recipient. Exact retention period varies by account tier, check your dashboard or ask support. If you need long-term audit trails, stream webhook events to your own storage as they happen rather than relying on our log retention.

Our infrastructure has delivered over 11 million emails in a single day. For most products sending OTPs, confirmations, and notifications, rate limiting isn't something you'll encounter. If you need to fire thousands of emails per second consistently, contact us to discuss dedicated infrastructure. Check remaining quota anytime with ktx quota.

Yes. The API and CLI both accept full HTML bodies. We have a drag-and-drop template builder in the dashboard. We don't have React Email integration, if that's a hard requirement, Resend is better suited for that. If you have existing HTML templates or build them with your own tooling, those work fine via the API.

Not currently, KIRIM.EMAIL is outbound-focused. If you need to receive and process inbound email programmatically (parse replies, handle bounces from your own MX), Mailgun, SendGrid, and Postmark all offer inbound email processing.

When a delivery event occurs, KIRIM.EMAIL POSTs to the webhook URL you've registered. Nine event types: delivered, opened, clicked, bounced, temporary_fail, permanent_fail, unsubscribed, rejected, sent. Register with ktx webhooks create delivered https://yourapp.com/hook and test with ktx webhooks test.

Yes. Same install script handles Linux, macOS, and Windows. Binaries compiled for linux/darwin/windows × amd64/arm64, M-series Macs, Intel Macs, Ubuntu VPS, Windows via WSL, all work without modification.

Security & Compliance

Our primary infrastructure operates from data centers in Southeast Asia. All SMTP and API connections are TLS-encrypted. For EU data residency requirements, we're transparent: we don't operate EU-region infrastructure. If GDPR data residency is non-negotiable for your product (EU entities, regulated data), Brevo (France-based) or Mailjet (EU infrastructure) may be better suited. We'd rather tell you that upfront. For teams where data residency isn't the blocker, our privacy policy and data handling details are at en.kirim.email/privacy.

Yes, current status and incident history are available. Ask support for the link or check your dashboard. We publish incident information when there are service disruptions affecting delivery.

Suspensions happen when we detect sending patterns that violate our AUP, high bounce rates, spam complaints above threshold, or confirmed policy violations. If suspended, you'll receive an email explaining the reason. We don't suspend accounts silently without explanation. If you believe your account was suspended in error, contact [email protected] directly, not a bot queue, actual people who can investigate and explain.

No. Cold email to contacts who haven't opted in is prohibited and will result in account suspension. This is the same policy at every legitimate transactional email provider. The reason is practical: spam damages shared IP reputation that all customers rely on. What's allowed: transactional email (user-triggered), and marketing email to opted-in subscribers. See our Acceptable Usage Policy.

Company & Support

Founded 2016. Nearly a decade. Profitable from the beginning, no VC funding, no exit pressure, no pivot risk. In an industry where providers keep getting acquired and rebranded (SparkPost → Bird, Mandrill → Mailchimp add-on, SendGrid → Twilio), staying independent is deliberate. We answer to customers, not investors.

Email at [email protected], live chat from the dashboard. Our team handles technical questions in English, if your issue involves deliverability debugging, API integration, or DNS setup, go straight to the specifics and we'll match that level of detail. We're a smaller team than SendGrid, which means you talk to people who actually understand the problem rather than a tiered support queue.

Yes. Email [email protected], that's our CEO, he reads and responds personally. Or contact [email protected] with your use case and we'll help figure out if KIRIM.EMAIL is the right fit. We'd rather have a 10-minute conversation than have you sign up for the wrong tool.

Yes, Sub-Accounts. Create separate accounts for each client or product without password sharing. Each sub-account has its own domains, credentials, and sending reputation, managed from your master dashboard. Agencies and platform builders use this to keep client email isolated from each other.

Email [email protected]. If it's technical, include what you've already tried, we'll skip the basics and get into the actual problem. API documentation: smtp-app.kirim.email/api/documentation.