canonical: https://jentic.com/apis/myagentmail.com/myagentmail

# Myagentmail Anjal API

The Anjal API gives AI agents their own email inboxes: it creates inboxes on anjal.app or a custom domain, sends, replies, forwards, and schedules mail from them, and reads, labels, and searches what comes back. Mail is organized into threads and messages with attachments, raw .eml download, drafts that send at a set sendAt time, and contact lists per inbox, and a cross-inbox full-text search returns compact hits with a short snippet instead of whole bodies. Custom domains come with the DNS records to set, a verify call, and a BIND zone file export, and webhooks cover events such as message.received, message.bounced, and message.opened. The same API also runs LinkedIn sessions, intent signals, and multi-step outreach cadences that mix LinkedIn and email steps, all organized by tenant and workspace with tiered API keys.

## For AI agents

Give your agent its own email inbox: send, reply, forward, and schedule mail, search and label threads, handle attachments, register custom domains, subscribe to mail events, and run LinkedIn and email outreach cadences.

## Scope

Does not read or send from a person's existing Gmail or Outlook mailbox, run newsletter campaigns with templates, or send SMS. Use for agent-owned email inboxes, their mail and domains, and Anjal's outreach cadences only.

## Capabilities

- Create an agent inbox with POST `/v1/inboxes`, idempotent on the requested username, with a strict flag that returns 409 instead of falling back to a numbered username
- Send from an inbox with POST `/v1/inboxes/{id}/send`, passing an Idempotency-Key header so a retry never sends twice, plus labels and trackOpens
- Reply, reply-all, or forward a received message by its messageId with POST `/v1/inboxes/{id}/reply/{messageId}` and its reply-all and forward siblings
- Search mail across every inbox the key can see with GET `/v1/messages/search` by query, from, to, participant, direction, date range, or attachment filename
- Schedule a send by creating a draft with sendAt through POST `/v1/inboxes/{id}/drafts`
- Register a custom domain with POST `/v1/domains`, keeping an existing Google or Microsoft mail provider through sharedWith, then confirm it with GET `/v1/domains/{domain}/verify`
- Enroll a lead in a server-side outreach cadence of LinkedIn and email steps with POST `/cadences/{id}/enrollments`, with daily send caps and exit on reply

## Use cases

### An inbox your agent owns, through Jentic

An agent that handles support or scheduling needs a real address it can send from and read. Through Jentic it finds the Anjal operations by intent, creates its inbox with POST `/v1/inboxes` and a username, sends with POST `/v1/inboxes/{id}/send`, and picks up replies with GET `/v1/inboxes/{id}/threads` or a message.received webhook. Sends to addresses that have never replied to the inbox are rejected unless verified is true.

Example prompt: Call POST `/v1/inboxes` with username 'scout' and displayName 'Scout', then POST `/v1/inboxes/{id}/send` with an Idempotency-Key header, to 'ops@example.com', subject 'Weekly report', and plainBody containing the report

### Find the right message in one call

GET `/v1/messages/search` runs full-text search over subject, plain-text body, and participant addresses across every inbox the key can see, scoped automatically by key tier. Hits are lightweight: ids, participants, subject, receivedAt, hasAttachments, and a snippet of about 200 characters, never htmlBody, so an agent can scan results cheaply and then fetch the winning thread with GET `/v1/inboxes/{id}/threads/{threadId}.`

Example prompt: Call GET `/v1/messages/search` with query 'invoice', from 'billing@acme.com', and hasAttachment true, then call GET `/v1/inboxes/{id}/threads/{threadId}` for the newest hit

### Sending from your own domain

Agents often need to send as your brand rather than as anjal.app. POST `/v1/domains` returns the DNS records to set at your registrar and starts the domain in pending; if the domain already receives mail at Google Workspace or Microsoft 365, pass sharedWith to keep that provider or replaceMailProvider to move mail over, otherwise the call returns 422 DOMAIN_HAS_MAIL_PROVIDER. GET `/v1/domains/{domain}/verify` confirms it and GET `/v1/domains/{domain}/zone-file` exports a BIND zone file.

Example prompt: Call POST `/v1/domains` with domain 'mail.example.com' and sharedWith 'google', report the returned DNS records, then call GET `/v1/domains/mail.example.com/verify` after they are set

### Multi-step outreach cadences

Outbound sequences run on Anjal's side as cadences: an ordered list of steps such as a LinkedIn invite, a wait, a DM, and an email, with branching on events like an accepted invite or a reply. POST /cadences sets businessHoursOnly, exitOnReply, exitOnUnsubscribe, and a dailySendCap from 1 to 1000, and POST `/cadences/{id}/enrollments` enrolls each lead by leadExternalId.

Example prompt: Call POST /cadences with name 'Q4 founders', dailySendCap 40, and exitOnReply true, then POST `/cadences/{id}/enrollments` with leadExternalId 'crm-1042', leadName 'Dana Lee', and leadEmail 'dana@example.com'

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/v1/inboxes` | Create an inbox |
| POST | `/v1/inboxes/{id}/send` | Send a message |
| POST | `/v1/inboxes/{id}/reply/{messageId}` | Reply to a message |
| GET | `/v1/inboxes/{id}/threads` | List threads |
| GET | `/v1/messages/search` | Search messages across inboxes |
| POST | `/v1/inboxes/{id}/drafts` | Create a draft, optionally scheduled |
| POST | `/v1/domains` | Register a custom domain |
| POST | `/v1/webhooks` | Create a webhook |

## Key resources

- **Inboxes** — Agent mailboxes with alias addresses, display names, and metadata
- **Messages and threads** — Send, reply, forward, label, search, and download raw .eml source and attachments
- **Drafts and lists** — Drafts that can be scheduled with sendAt, and per-inbox contact lists
- **Domains** — Custom sending domains with DNS records, verification, and BIND zone file export
- **Webhooks and metrics** — Event subscriptions such as message.received and message.bounced, plus send metrics
- **Tenants, workspaces, and keys** — Multi-tenant organization with workspace master keys
- **LinkedIn and cadences** — LinkedIn sessions, messages, posts, intent signals, and server-side outreach cadences

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 56 / 100
- **Maturity:** Foundational
- **Dimensions:**
  - Foundational Compliance: 45 / 100
  - Developer Experience & Jentic Compatibility: 60 / 100
  - AI-Readiness & Agent Experience: 48 / 100
  - Agent Usability: 81 / 100
  - Security: 50 / 100
  - AI Discoverability: 79 / 100
- **View full report:** https://jentic.com/apis/myagentmail.com/myagentmail/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring Anjal by hand means picking the right key tier among sa_, tk_, wk_, ak_, and mam_ for each endpoint, sending it in X-API-Key, and generating an Idempotency-Key for every send. Through Jentic you install once, import the Anjal API from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** Anjal puts the inbox id in the URL path (`/v1/inboxes/{id}/...`), so a rule can pin your agent to one inbox and the operations you pick. You choose the operations it may call, so ones like deleting threads, registering domains, or LinkedIn outreach are not included unless you add them.
- **Credential handling:** Your Anjal API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'send an email from my agent inbox' or 'search my email for an invoice', and Jentic returns the matching Anjal operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **MailSlurp API** — Programmable email inboxes created on demand
- **Nylas API** — Email, calendar, and contacts access for existing Google and Microsoft mailboxes
- **Resend API** — Developer email sending focused on transactional mail
- **ZeroBounce API** — Email address validation and list cleaning

## FAQ

### Is there an Anjal MCP server?

You don't need an MCP server to give your agent the Anjal API. Jentic connects it directly from the API Directory: import it, store your Anjal API key once, and your agent calls it. Operations are discovered on demand, so no extra tool definitions sit in the agent's context.

### What authentication does the Anjal API use?

Per its OpenAPI spec, the Anjal API takes an API key in the X-API-Key header. Keys come in tiers with the prefixes sa_, tk_, wk_, ak_, and mam_, and scope is enforced per endpoint; for example, creating an inbox needs a tenant master or workspace master key. Two operations use a one-time t query token instead of a key: GET `/downloads/{downloadId}` and PUT `/uploads/{uploadId}.` Through Jentic, the key is stored encrypted by your own Jentic One instance and injected at call time.

### Can I limit what my agent is allowed to do with the Anjal API?

Yes. For example, write a rule that allows only GET `/v1/inboxes/{id}/threads`, GET `/v1/inboxes/{id}/threads/{threadId}`, and POST `/v1/inboxes/{id}/reply/{messageId}` for one inbox id. Your agent can then read that inbox and answer mail in it, but it cannot send fresh outbound mail, delete threads, touch domains, or run LinkedIn actions, and every call it makes is logged.

### What are the rate limits for the Anjal API?

The OpenAPI spec does not state a general request rate limit. It does describe per-session quotas for the LinkedIn operations, reported by GET `/linkedin/sessions/utilization`, and a dailySendCap of 1 to 1000 per cadence. Check https://anjal.app for current account limits.

### How do I send an email from my agent's inbox through Jentic?

Search Jentic for 'send an email from my agent inbox', load the sendMessage operation, and call POST `/v1/inboxes/{id}/send` with to and subject, a plainBody or htmlBody, and an Idempotency-Key header. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Why was my Anjal send rejected?

As a deliverability safeguard, sends to an address that has never replied to the inbox are rejected unless you pass verified: true. Check recipients first with POST `/v1/verify-email`, which MX-probes the domain, then send with verified set to true.

### Can I schedule an email with the Anjal API?

Yes. Create a draft with POST `/v1/inboxes/{id}/drafts` and set sendAt, and Anjal sends it at that time with no cron on your side. A draft.send_failed webhook event reports a scheduled send that did not go out.
