Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions changelog.mdx
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
---
title: "Product updates"
description: "New features, improvements, and fixes across the Sendmux platform."

Check warning on line 3 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L3

Did you really mean 'Sendmux'?
rss: true
---

<Update label="19 June 2026" tags={["New features"]} rss={{ title: "Agent access can now start from auth.md" }}>
## Agent access

Agents can now discover Sendmux through `auth.md`, create an agent-managed team with one free `@myagent.mx` mailbox, and invite a verified human owner.

Check warning on line 10 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L10

Did you really mean 'Sendmux'?

Pre-claim agent tokens can read mailbox data and receive mail, but they cannot send mail until a human claims the team.

</Update>

<Update label="17 June 2026" tags={["Improvements"]} rss={{ title: "MCP authentication is easier for agents to discover" }}>
## Hosted MCP

Agents can now discover Sendmux's OAuth protected resource metadata from the app domain, including the supported authorisation server and scopes, so connection setup can start from standard OAuth discovery.

Check warning on line 19 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L19

Did you really mean 'Sendmux's'?

</Update>

<Update label="17 June 2026" tags={["New features"]} rss={{ title: "SDKs, CLI, and MCP are generally available" }}>
## Developer tools

Sendmux SDKs are now available for TypeScript, Python, Go, PHP, and Ruby, with package-managed installs from npm, PyPI, the Go module proxy, Packagist, and RubyGems.

Check warning on line 26 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L26

Did you really mean 'Sendmux'?

Check warning on line 26 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L26

Did you really mean 'SDKs'?

Check warning on line 26 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L26

Did you really mean 'Packagist'?

The `sendmux` CLI is now available from npm, with profile management and JSON output across generated Management, Mailbox, and Sending commands.

Expand Down Expand Up @@ -54,7 +63,7 @@
## Bug fixes

- New mailbox keys now confirm access before they are shown, so you can use the returned key immediately.
- If key setup is temporarily unavailable, the Management API now returns a retryable service unavailable response instead of showing a key that is not ready yet.

Check warning on line 66 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L66

Did you really mean 'retryable'?

</Update>

Expand All @@ -70,7 +79,7 @@
- Thread lists now stay aligned with the current mailbox, folder, and search even when a refresh finishes after you have switched views.
- Starting another compose action now saves the current draft before replacing the compose window, including when the draft is minimised.
- Inboxes with many messages now load thread lists more reliably by fetching attachment details only when a message is opened.
- Message opens, draft autosaves, sends, and label actions now refresh only the current inbox data needed, so those actions feel faster in day-to-day use.

Check warning on line 82 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L82

Did you really mean 'autosaves'?

</Update>

Expand Down Expand Up @@ -147,7 +156,7 @@

Local MCP setups can now use the same product-line selection for one, several, or all product lines.

Local all-product-line MCP setups can use separate keys for each product line, so teams can keep least-privilege key boundaries while still giving an agent the full curated toolset.

Check warning on line 159 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L159

Did you really mean 'toolset'?

Hosted Product MCP Sending tools now keep the same permission, sending-scope, and rate-limit checks as direct Sending API calls before each send request is accepted.

Expand All @@ -157,7 +166,7 @@

Re-authorising an existing connected app now replaces its previous product-line grant, so removed product lines disappear from that app instead of leaving stale access behind.

## SDKs and CLI

Check warning on line 169 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L169

Did you really mean 'SDKs'?

SDK and CLI surfaces now account for every documented operation and expose the supported options and filters.

Expand All @@ -183,7 +192,7 @@
<Update label="7 June 2026" tags={["Bug fixes"]} rss={{ title: "Inbox quota sync is more reliable" }}>
## Bug fixes

- Inbox quota sync now tells clients when quota data should be refetched instead of returning an invalid sync error.

Check warning on line 195 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L195

Did you really mean 'refetched'?

</Update>

Expand All @@ -207,20 +216,20 @@
<Update label="4 June 2026" tags={["New features"]} rss={{ title: "Hosted MCP access is ready for agents" }}>
## Hosted MCP

Teams can now connect supported agent tools to Sendmux through a hosted MCP endpoint, authorise access in the browser, and grant only the inbox and account permissions they choose.

Check warning on line 219 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L219

Did you really mean 'Sendmux'?

## Improvements

- The authorisation flow now has clear sign-in, consent, success, denied, and error states.
- Headless clients can use scoped access tokens with the same permission checks as browser-based connections.
- Agent tools now follow the same Sendmux role and key permissions used by the API, so unavailable actions stay hidden and blocked.

Check warning on line 225 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L225

Did you really mean 'Sendmux'?

</Update>

<Update label="2 June 2026" tags={["Improvements","Bug fixes"]} rss={{ title: "Inbox credentials are more reliable" }}>
## Inboxes

Inbox credentials now use provider-issued secrets while preserving Sendmux key IDs, improving compatibility with the managed mailbox platform.

Check warning on line 232 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L232

Did you really mean 'Sendmux'?

## Improvements

Expand All @@ -236,8 +245,8 @@
<Update label="2 June 2026" tags={["Bug fixes"]} rss={{ title: "Shared mailbox creation is more reliable" }}>
## Bug fixes

- Creating a mailbox on the shared Sendmux domain now checks the shared-domain setup before provisioning the mailbox, so generated addresses no longer fail when required domain records are missing.

Check warning on line 248 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L248

Did you really mean 'Sendmux'?
- Domain creation and deletion now consistently protect the shared Sendmux domain while still letting teams delete the mailboxes they created.

Check warning on line 249 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L249

Did you really mean 'Sendmux'?
- Sign-up legal links now use shorter labels so the agreement line fits better on narrow screens.

</Update>
Expand Down Expand Up @@ -268,7 +277,7 @@

## Bug fixes

- Draft autosave now backs off while a message is sending, reducing duplicate saves and avoidable rate-limit warnings.

Check warning on line 280 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L280

Did you really mean 'autosave'?
- Email buttons now render with a consistent background across email clients.
- Deliverability alerts now count bounce rate and complaint rate separately when both need attention.

Expand Down Expand Up @@ -299,7 +308,7 @@
## Improvements

- The health strip now fills completed hours and shows the selected hour's sent, received, and failed counts directly in the summary.
- Activity chart tooltips now match the dashboard style and stay compact while you inspect daily sending and receiving totals.

Check warning on line 311 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L311

Did you really mean 'tooltips'?
- Domain status now uses the latest saved verification details so SPF, DKIM, and DMARC signals can be shown independently after checks run.

## Bug fixes
Expand All @@ -321,7 +330,7 @@

The team overview now shows a clearer health summary with recent sending, receiving, webhook, billing, domain, API key, and capacity signals together in one place.

Activity charts now use cached rollups so dashboard refreshes stay fast for busy teams.

Check warning on line 333 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L333

Did you really mean 'rollups'?

## Improvements

Expand Down Expand Up @@ -354,14 +363,14 @@
<Update label="28 May 2026" tags={["Improvements","Bug fixes"]} rss={{ title: "Inbox layout, autosave, and log tables are easier to use" }}>
## Improvements

- The dashboard sidebar now narrows on smaller screens and keeps **Documentation**, **Feedback**, balance, and **Top up** inside the scrollable menu.

Check warning on line 366 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L366

Did you really mean 'scrollable'?
- The **Inboxes** page now gives more room to the open message on narrower desktop screens while keeping the folder menu and conversation list usable.

## Bug fixes

- Sending and receiving log tables now fit typical browser widths without unnecessary horizontal scrolling.
- Long message IDs in log tables now show a short readable prefix, so columns stay aligned while the full value remains available.
- Drafts now autosave once the basic message details are present, and the **Drafts** count updates after the first save.

Check warning on line 373 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L373

Did you really mean 'autosave'?
- Inbox folder counts now only appear where they are meaningful: unread **Inbox**, all **Drafts**, and all **Spam**.
- Mailbox filters now hide inactive or deleted mailbox addresses.
- Incoming log senders now show the message sender instead of a message identifier.
Expand All @@ -383,7 +392,7 @@
## Improvements

- Webhook event selection now includes search, making it faster to choose the right events when setting up or editing a webhook.
- The dashboard setup checklist now adapts better on small screens and keeps long task lists within the viewport.

Check warning on line 395 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L395

Did you really mean 'viewport'?

## Bug fixes

Expand Down Expand Up @@ -467,7 +476,7 @@
<Update label="25 May 2026" tags={["New features","Improvements","Bug fixes"]} rss={{ title: "Team setup, sending account management, mailbox suspension, and attachment limits are improved" }}>
## Team setup

Team creation now walks you through the setup details we need upfront: your team name, website, industry, how you found Sendmux, preferences, and what you're building. If you want help, you can book a 15-minute consultation without leaving setup.

Check warning on line 479 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L479

Did you really mean 'Sendmux'?

Signed-in browser agents can create teams after login too, using retry-safe requests so automated onboarding doesn't double-create a team when a request is retried.

Expand Down Expand Up @@ -516,9 +525,9 @@

See [Billing](/guides/billing) and [Mailboxes](/guides/mailboxes).

## Realtime mailbox events

Check warning on line 528 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L528

Did you really mean 'Realtime'?

The Mailbox API now includes `GET /mailbox/events`, a Server-Sent Events stream for `message.received` and `message.received.spam`. Use it for agents, CLIs, and SDKs that need live mailbox updates without polling.

Check warning on line 530 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L530

Did you really mean 'CLIs'?

Check warning on line 530 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L530

Did you really mean 'SDKs'?

The stream supports heartbeats, bounded connection lifetimes, and resume with `Last-Event-ID` or `last_event_id`. If the replay window is no longer available, the stream tells the client to sync before reconnecting.

Expand All @@ -533,7 +542,7 @@
- Limit usage now appears at the bottom-right of the relevant dashboard pages, so it stays available without crowding the page header.
- The API key limit now covers active root and mailbox-class credentials, including send-only and mailbox credentials.
- The team limits guide now clarifies default limits, increase requests, and that email volume is not capped beyond existing sending limits.
- Webhooks and mailbox realtime events use the same public `message.received` event names for inbound mailbox activity.

Check warning on line 545 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L545

Did you really mean 'realtime'?

## Bug fixes

Expand All @@ -550,7 +559,7 @@

- Mailbox lists now show `Name` before `Email`, with clearer column labels.
- Long domain, mailbox, and webhook headings now stay on one line with cleaner truncation.
- Long webhook endpoint URLs are clipped in lists and can be inspected from the hover tooltip.

Check warning on line 562 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L562

Did you really mean 'tooltip'?
- Team menus now include a direct **Invite members** action.

## Bug fixes
Expand Down Expand Up @@ -638,7 +647,7 @@
- Consistent success and error response formats.
- A request ID on every response for support correlation.
- Cursor pagination on all list endpoints.
- ETags and conditional requests (`If-None-Match` / `If-Match`) to save bandwidth and prevent lost updates.

Check warning on line 650 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L650

Did you really mean 'ETags'?
- [Idempotency keys](/guides/idempotency) so create requests can be retried safely.
- Rate-limit responses now report the exact number of seconds until your limit resets.

Expand Down Expand Up @@ -700,10 +709,10 @@

</Update>

<Update label="20 March 2026" tags={["New features"]} rss={{ title: "Sendmux is here — dashboard, sending accounts, dollar-based billing, the Sending API, and a read-only Management API" }}>

Check warning on line 712 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L712

Did you really mean 'Sendmux'?
## Sendmux is here

Welcome to Sendmux. The initial release includes:

Check warning on line 715 in changelog.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

changelog.mdx#L715

Did you really mean 'Sendmux'?

- **Dashboard** — an at-a-glance overview with sending charts and a searchable, filterable delivery-log viewer with CSV export.
- **Sending accounts** — connect accounts over SMTP or with Gmail and Microsoft 365 (including GCC High, DoD, and China clouds), organise them into groups, bulk-test connections, and import in bulk from CSV. See [Sending accounts](/guides/sending-accounts).
Expand Down
7 changes: 4 additions & 3 deletions cli/index.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "CLI"
description: "Install and configure the Sendmux CLI for management, mailbox, and sending workflows."

Check warning on line 3 in cli/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

cli/index.mdx#L3

Did you really mean 'Sendmux'?
keywords:
[
"Sendmux CLI",
Expand All @@ -13,11 +13,12 @@
]
---

Use the `sendmux` CLI when you want terminal access to the same Management, Mailbox, and Sending API surfaces exposed by the SDKs.

Check warning on line 16 in cli/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

cli/index.mdx#L16

Did you really mean 'SDKs'?

<Info>
Sending and Mailbox commands require mailbox-scoped `smx_mbx_` keys.
Management commands require team-scoped `smx_root_` keys.
Sending and Mailbox commands accept mailbox-compatible `smx_mbx_` keys or
scoped `smx_agent_` tokens. Management commands require team-scoped
`smx_root_` keys.
</Info>

## Install
Expand Down Expand Up @@ -74,7 +75,7 @@

`--base-url` overrides the API base URL for one command. `SENDMUX_BASE_URL` overrides it for the current shell. A profile can also store a base URL override.

Before running the API call, the CLI checks that the key prefix matches the command surface. A management command fails early when it receives a mailbox key, and mailbox or sending commands fail early when they receive a root key.
Before running the API call, the CLI checks that the key prefix matches the command surface. A management command fails early when it receives a mailbox-compatible key, and mailbox or sending commands fail early when they receive a root key. API permissions still apply, so a pre-claim `smx_agent_` token cannot send email.

## Run commands

Expand Down
7 changes: 6 additions & 1 deletion docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,12 @@
{
"group": "AI integrations",
"icon": "robot",
"pages": ["guides/agent-skills", "guides/mcp", "guides/mcp-clients"]
"pages": [
"guides/agent-access",
"guides/agent-skills",
"guides/mcp",
"guides/mcp-clients"
]
},
{
"group": "Teams and access",
Expand Down
174 changes: 174 additions & 0 deletions guides/agent-access.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
---
title: "Agent access"
description: "Let an AI agent register a constrained Sendmux mailbox, get a short-lived agent token, and invite its human owner."

Check warning on line 3 in guides/agent-access.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-access.mdx#L3

Did you really mean 'Sendmux'?
keywords:
[
"agent access",
"auth.md",
"AI agents",
"agent mailbox",
"smx_agent",
"owner invite",
]
---

Agent access lets an AI agent start with one constrained `@myagent.mx` mailbox before a person joins the team. The agent can read and receive mail for that mailbox, then ask Sendmux to invite the human owner.

Check warning on line 15 in guides/agent-access.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-access.mdx#L15

Did you really mean 'Sendmux'?

<Info>
Pre-claim agent tokens include `mailbox.read` and `email.receive`. They do
not include `email.send`.
</Info>

## How it works

1. Discover Sendmux at `https://app.sendmux.ai/auth.md`.

Check warning on line 24 in guides/agent-access.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-access.mdx#L24

Did you really mean 'Sendmux'?
2. Create an anonymous agent identity.
3. Exchange the returned identity assertion for an `smx_agent_` access token.
4. Use the token as a Bearer token for allowed Mailbox API calls.
5. Ask Sendmux to send the owner invite.

Check warning on line 28 in guides/agent-access.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-access.mdx#L28

Did you really mean 'Sendmux'?
6. After the owner accepts, use normal team credentials and limits.

Sendmux sends the owner invite email through the invite system. The agent does not need Sending API access to invite its owner.

Check warning on line 31 in guides/agent-access.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-access.mdx#L31

Did you really mean 'Sendmux'?

## Discovery

Agents can read the human-readable service document first.

```bash
curl https://app.sendmux.ai/auth.md
```

API discovery also starts from the protected-resource metadata URL:

```text
https://app.sendmux.ai/.well-known/oauth-protected-resource/api/v1
```

The authorisation-server metadata advertises the token and revocation endpoints. Its `agent_auth` block names the identity and invite endpoints:

```text
https://app.sendmux.ai/.well-known/oauth-authorization-server/agent-auth
```

## Register an agent identity

Call the identity endpoint without an existing API key.

```bash
curl -X POST https://app.sendmux.ai/agent-auth/agent/identity \
-H "Content-Type: application/json" \
-d '{
"type": "anonymous",
"mailbox_local_part": "triage-agent",
"client_name": "Triage Agent",
"idempotency_key": "agent-register-001"
}'
```

The response includes an identity assertion and the assigned mailbox.

```json
{
"registration_id": "areg_abc123",
"registration_type": "anonymous",
"identity_assertion": "eyJ...",
"assertion_expires": "2026-06-18T04:15:00.000Z",
"pre_claim_scopes": ["mailbox.read", "email.receive"],
"mailbox": {
"email": "triage-agent@myagent.mx",
"status": "provisioning"
}
}
```

## Exchange the assertion

Use the OAuth JWT bearer grant to get an `smx_agent_` access token.

```bash
curl -X POST https://app.sendmux.ai/agent-auth/oauth2/token \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer" \
--data-urlencode "assertion=$SENDMUX_AGENT_IDENTITY_ASSERTION" \
--data-urlencode "resource=https://app.sendmux.ai/api/v1"
```

If the mailbox is still being prepared, the token endpoint returns `temporarily_unavailable` with `Retry-After`.

```json
{
"access_token": "smx_agent_...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "mailbox.read email.receive"
}
```

## Use the mailbox

Pass the `smx_agent_` token as a Bearer token to allowed Mailbox API endpoints.

```bash
curl https://app.sendmux.ai/api/v1/mailbox/me \
-H "Authorization: Bearer smx_agent_your_token_here"
```

The token is mailbox-compatible, but permissions still apply. A pre-claim token can read and receive mail. It cannot send through the Mailbox API or Sending API.

## Invite the owner

Ask Sendmux to invite the human owner.

Check warning on line 120 in guides/agent-access.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-access.mdx#L120

Did you really mean 'Sendmux'?

```bash
curl -X POST https://app.sendmux.ai/agent-auth/agent/identity/invite \
-H "Authorization: Bearer smx_agent_your_token_here" \
-H "Content-Type: application/json" \
-d '{
"email": "owner@example.com",
"requested_role": "owner",
"idempotency_key": "owner-invite-001"
}'
```

The response only confirms the invite request.

```json
{
"invite_id": "ainv_abc123",
"status": "pending"
}
```

The invite email goes to the owner. Membership starts only after that person verifies and accepts the invite. One live pre-claim owner invite can be pending per registration; retry the same request with the same `idempotency_key`.

## Revoke a token

Revoke an agent access token when it is no longer needed.

```bash
curl -X POST https://app.sendmux.ai/agent-auth/oauth2/revoke \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "token=$SENDMUX_AGENT_ACCESS_TOKEN" \
--data-urlencode "token_type_hint=access_token"
```

## Limits

Each anonymous registration gets exactly one constrained `@myagent.mx` mailbox. Unclaimed registrations expire after 24 hours. After the owner accepts the invite, the team uses normal Sendmux limits and can request increases like any other team.

Check warning on line 157 in guides/agent-access.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-access.mdx#L157

Did you really mean 'Sendmux'?

## Next steps

<CardGroup cols={2}>
<Card title="Mailbox API" icon="inbox" href="/mailbox-api/introduction">
Read and sync mailbox data with an agent token.
</Card>
<Card title="Agent skills" icon="sparkles" href="/guides/agent-skills">
Teach AI coding tools the Sendmux agent workflows.
</Card>
<Card title="SDKs" icon="code" href="/sdks">
Use SDK clients with mailbox-compatible tokens.
</Card>
<Card title="API keys" icon="key" href="/guides/api-keys">
Review manual keys, connected apps, and agent tokens.
</Card>
</CardGroup>
12 changes: 8 additions & 4 deletions guides/agent-skills.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Agent skills"
description: "Install Sendmux Agent Skills so AI coding tools choose the right Sendmux API, CLI, MCP, or SDK workflow."

Check warning on line 3 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L3

Did you really mean 'Sendmux'?

Check warning on line 3 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L3

Did you really mean 'Sendmux'?
keywords:
[
"Agent Skills",
Expand All @@ -14,11 +14,12 @@
]
---

Sendmux Agent Skills teach AI coding tools how to send email, read mailboxes, manage team resources, and choose low-token Sendmux calls. Use them when your agent needs Sendmux context before it writes commands, API calls, or integration code.

Check warning on line 17 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L17

Did you really mean 'Sendmux'?

Check warning on line 17 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L17

Did you really mean 'Sendmux'?

Check warning on line 17 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L17

Did you really mean 'Sendmux'?

<Info>
Skills do not grant Sendmux access by themselves. Create API keys or authorise
Product MCP separately, then let the skill choose the right surface for the task.
Skills do not grant Sendmux access by themselves. Create API keys, authorise

Check warning on line 20 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L20

Did you really mean 'Sendmux'?
Product MCP, or use agent access first, then let the skill choose the right
surface for the task.
</Info>

## Install
Expand Down Expand Up @@ -59,34 +60,37 @@

| Skill | Use when |
| --- | --- |
| `sendmux-getting-started` | Choosing a Sendmux surface, setting up authentication, or making a first verified call. |

Check warning on line 63 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L63

Did you really mean 'Sendmux'?
| `sendmux-send-email` | Sending one transactional email or batching multiple sends. |
| `sendmux-mailbox-agent` | Reading, triaging, replying from, or syncing one mailbox. |

Check warning on line 65 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L65

Did you really mean 'triaging'?
| `sendmux-management` | Managing domains, mailboxes, sending accounts, webhooks, billing, and logs. |
| `sendmux-cli` | Running Sendmux commands from a terminal. |

Check warning on line 67 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L67

Did you really mean 'Sendmux'?
| `sendmux-mcp-setup` | Connecting Sendmux MCP servers to an agent client. |

Check warning on line 68 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L68

Did you really mean 'Sendmux'?
| `sendmux-token-efficient-usage` | Choosing low-token calls such as batch sends, counts, snippets, deltas, cursors, and conditional requests. |
| `sendmux-email-for-agents` | Giving an AI agent an inbox, a send-receive workflow, or a human-approved draft flow. |
| `sendmux-email-for-agents` | Giving an AI agent an inbox, a self-registration flow, or a human-approved send workflow. |

## Choose the right surface

| Task | Default path |
| --- | --- |
| Agent already has Sendmux MCP connected | Use the relevant MCP tool first. |

Check warning on line 76 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L76

Did you really mean 'Sendmux'?
| Terminal one-shot or scripted admin work | Use the `sendmux` CLI. |
| Application code | Use an SDK package. |
| Endpoint detail or uncommon operation | Use the API reference. |

Use mailbox-scoped `smx_mbx_` keys for Sending and Mailbox work. Use team-scoped `smx_root_` keys for Management work.
Use mailbox-scoped `smx_mbx_` keys for Sending and Mailbox work. Use team-scoped `smx_root_` keys for Management work. Self-registered agents can also use `smx_agent_` tokens for their allowed Mailbox API work. Pre-claim `smx_agent_` tokens do not include `email.send`.

## Next steps

<CardGroup cols={2}>
<Card title="MCP" icon="plug" href="/guides/mcp">
Connect hosted or local Sendmux MCP tools.

Check warning on line 87 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L87

Did you really mean 'Sendmux'?
</Card>
<Card title="Agent access" icon="bot" href="/guides/agent-access">
Let an agent register a constrained mailbox and invite its owner.
</Card>
<Card title="CLI" icon="terminal" href="/cli">
Run Sendmux workflows from your terminal.

Check warning on line 93 in guides/agent-skills.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/agent-skills.mdx#L93

Did you really mean 'Sendmux'?
</Card>
<Card title="SDKs" icon="code" href="/sdks">
Choose an SDK package for application code.
Expand Down
4 changes: 4 additions & 0 deletions guides/api-keys.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "API keys"
description: "Create, scope, rotate, and revoke Sendmux API keys."

Check warning on line 3 in guides/api-keys.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/api-keys.mdx#L3

Did you really mean 'Sendmux'?
keywords:
[
"API keys",
Expand All @@ -21,8 +21,9 @@

| Credential class | Created by | Secret lifetime | Where to manage it |
| --- | --- | --- | --- |
| **Manual API key** | A team member creates a key in Sendmux. | Long-lived until you rotate or revoke it. | **API Keys** with the **Manual keys** filter. |

Check warning on line 24 in guides/api-keys.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/api-keys.mdx#L24

Did you really mean 'Sendmux'?
| **Connected app** | You authorise an app through OAuth, such as Product MCP. | 15-minute access tokens with rotating refresh tokens. | **API Keys** with the **Connected apps** filter. |
| **Agent access token** | An agent registers through agent access. | Short-lived access token. | Agent access flow, then normal team controls after owner acceptance. |

Revoking a manual API key stops that key. Disconnecting a connected app stops that app refreshing access and using its existing connection.

Expand All @@ -33,9 +34,12 @@
| **Infrastructure key** | Team automation, providers, routing, billing, logs, domains, mailboxes, and webhooks. | `smx_root_` |
| **Sending key** | Sending mail through the Sending API, SMTP, CLI tools, MCP clients, or agents. | `smx_mbx_` |
| **Mailbox key** | API, IMAP, and SMTP access for one mailbox. | `smx_mbx_` |
| **Agent token** | Constrained mailbox access for a self-registered agent. | `smx_agent_` |

Sending keys and mailbox keys share the `smx_mbx_` prefix. Their permissions and sending scope decide what each key can do.

Pre-claim agent tokens include `mailbox.read` and `email.receive`, not `email.send`. The agent can ask Sendmux to invite the owner through [agent access](/guides/agent-access).

Check warning on line 41 in guides/api-keys.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/api-keys.mdx#L41

Did you really mean 'Sendmux'?

<Note>
Each team starts with **100 active credentials** across manual API keys and
connected apps. See [Team limits](/guides/team-limits).
Expand All @@ -43,7 +47,7 @@

## Connected apps

Connected apps let tools such as Product MCP act with the product lines you authorise. During authorisation, you can choose Management, Mailbox, Sending, or a combination. If you choose Mailbox, you also choose the mailbox set the app can use. Sendmux then issues a short-lived access token for the app and a refresh token that rotates when used.

Check warning on line 50 in guides/api-keys.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/api-keys.mdx#L50

Did you really mean 'Sendmux'?

When a connected app asks for Management access, permissions are grouped by area, including Analytics, Billing, Domains, Email, Keys, Logs, Mailboxes, Providers, Routing, Team, and Webhooks. Each group can be set to **None**, **Read**, **Full**, or **Customise**, so you can review broad access quickly and open individual scopes only when needed.

Expand Down Expand Up @@ -74,7 +78,7 @@
through all providers, selected providers, or delivery groups.
</Step>
<Step title="Store the secret">
Copy the generated `smx_root_` or `smx_mbx_` value. Sendmux will not show it again.

Check warning on line 81 in guides/api-keys.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/api-keys.mdx#L81

Did you really mean 'Sendmux'?
</Step>
</Steps>

Expand All @@ -100,7 +104,7 @@
3. Deploy the new secret to every system that uses it.
4. Revoke the old key once all callers have moved.

If your team is already at the API key limit, Sendmux requires the old key to be revoked during rotation.

Check warning on line 107 in guides/api-keys.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/api-keys.mdx#L107

Did you really mean 'Sendmux'?

## Revoke a key

Expand Down
4 changes: 3 additions & 1 deletion guides/mcp-clients.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "MCP client setup"
sidebarTitle: "MCP clients"
description: "Configure Sendmux Product MCP in supported AI clients."

Check warning on line 4 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L4

Did you really mean 'Sendmux'?
keywords:
[
"MCP clients",
Expand All @@ -15,7 +15,7 @@
]
---

Use this page to connect Sendmux Product MCP to your AI client. Prefer hosted OAuth when your client supports it. Use local stdio or private HTTP when the client cannot complete hosted OAuth.

Check warning on line 18 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L18

Did you really mean 'Sendmux'?

<Warning>
Replace placeholder keys and tokens before running any snippet. Do not commit
Expand All @@ -26,7 +26,7 @@

<CardGroup cols={3}>
<Card title="Hosted OAuth" icon="shield-check" href="#hosted-oauth-clients">
Use this for Claude, Cursor, Codex, Gemini CLI, Qwen Code, Kiro, OpenCode, Zed, Visual Studio, and ChatGPT.

Check warning on line 29 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L29

Did you really mean 'Qwen'?

Check warning on line 29 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L29

Did you really mean 'Kiro'?
</Card>
<Card title="Local stdio" icon="terminal" href="#local-stdio-clients">
Use this when your client can launch `sendmux-mcp` on your machine.
Expand All @@ -45,8 +45,8 @@
| Codex | Hosted OAuth | Remote HTTP, local stdio, private HTTP |
| ChatGPT | Hosted OAuth app | Remote HTTPS MCP app |
| Gemini CLI | Hosted OAuth | Remote HTTP, local stdio, private HTTP |
| Qwen Code | Hosted OAuth | Remote HTTP, local stdio, private HTTP |

Check warning on line 48 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L48

Did you really mean 'Qwen'?
| Kiro | Hosted OAuth | Remote HTTP, local stdio, private HTTP |

Check warning on line 49 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L49

Did you really mean 'Kiro'?
| OpenCode | Hosted OAuth | Remote MCP, local MCP |
| Zed | Hosted OAuth | Remote OAuth, local command, private HTTP |
| Visual Studio | Hosted OAuth | Remote HTTP, local stdio |
Expand All @@ -63,11 +63,13 @@
</Accordion>

<Info>
A client can still use Sendmux when hosted OAuth is not listed. Use local

Check warning on line 66 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L66

Did you really mean 'Sendmux'?
stdio if the client can launch commands, or private HTTP if it needs a URL.
</Info>

## Hosted OAuth clients
<a id="hosted-oauth-clients" />

## Hosted OAuth clients (Recommended)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Preserve the hosted OAuth anchor

With this heading renamed to include (Recommended), the generated section fragment changes from #hosted-oauth-clients to #hosted-oauth-clients-recommended, but the cards in guides/mcp-clients.mdx and guides/mcp.mdx still link to #hosted-oauth-clients. Clicking those Hosted OAuth cards will no longer jump to this section; keep the heading text stable or update/add an explicit anchor for the existing fragment.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@chatgpt-codex-connector Fixed in d87e276. Added an explicit hosted-oauth-clients anchor before the renamed heading so existing card links keep working.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


Use the hosted endpoint when the client supports remote MCP OAuth:

Expand All @@ -77,14 +79,14 @@

<AccordionGroup>
<Accordion title="Claude and Claude Desktop" description="Custom connector with browser authorisation.">
Add a custom connector with server URL `https://mcp.sendmux.ai/mcp`, then connect and complete the Sendmux authorisation flow.

Check warning on line 82 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L82

Did you really mean 'Sendmux'?

On Team and Enterprise plans, an owner may need to add the custom connector for the organisation before members can connect it.
</Accordion>

<Accordion title="Claude Code" description="Remote HTTP server with OAuth login from the client.">
```bash
claude mcp add sendmux --transport http https://mcp.sendmux.ai/mcp

Check warning on line 89 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L89

Did you really mean 'claude'?

Check warning on line 89 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L89

Did you really mean 'mcp'?

Check warning on line 89 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L89

Did you really mean 'sendmux'?
```

Use `/mcp` in Claude Code if the server is listed as requiring authentication.
Expand All @@ -97,7 +99,7 @@
{
"mcpServers": {
"sendmux": {
"url": "https://mcp.sendmux.ai/mcp"

Check warning on line 102 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L102

Did you really mean 'mcp'?
}
}
}
Expand Down Expand Up @@ -257,7 +259,7 @@
<AccordionGroup>
<Accordion title="Claude Code" description="Command-launched stdio server.">
```bash
claude mcp add sendmux-mailbox \

Check warning on line 262 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L262

Did you really mean 'claude'?
--transport stdio \
--env SENDMUX_API_KEY="$SENDMUX_MBX_KEY" \
-- sendmux-mcp-mailbox
Expand Down Expand Up @@ -540,7 +542,7 @@
<AccordionGroup>
<Accordion title="Claude Code" description="HTTP transport with bearer header.">
```bash
claude mcp add sendmux-local \

Check warning on line 545 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L545

Did you really mean 'claude'?
--transport http \
--header "Authorization: Bearer local-mcp-token" \
http://127.0.0.1:8765/mcp
Expand Down Expand Up @@ -590,7 +592,7 @@
```toml
[mcp_servers.sendmux_local]
url = "http://127.0.0.1:8765/mcp"
bearer_token_env_var = "SENDMUX_MCP_HTTP_BEARER_TOKEN"

Check warning on line 595 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L595

Did you really mean 'bearer_token_env_var'?
```
</Accordion>

Expand Down Expand Up @@ -619,7 +621,7 @@
"Authorization": "Bearer local-mcp-token"
},
"disabled": false,
"autoApprove": []

Check warning on line 624 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L624

Did you really mean 'autoApprove'?
}
}
}
Expand All @@ -637,7 +639,7 @@
"Authorization": "Bearer local-mcp-token"
},
"disabled": false,
"alwaysAllow": []

Check warning on line 642 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L642

Did you really mean 'alwaysAllow'?
}
}
}
Expand Down Expand Up @@ -831,7 +833,7 @@
</Step>

<Step title="Check the tools">
Open the client's MCP server list or tool picker and confirm Sendmux tools appear.

Check warning on line 836 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L836

Did you really mean 'Sendmux'?
</Step>

<Step title="Select a mailbox when needed">
Expand All @@ -853,9 +855,9 @@
Create mailbox and root keys for local MCP.
</Card>
<Card title="Agent skills" icon="sparkles" href="/guides/agent-skills">
Teach AI coding agents the Sendmux workflows and efficient defaults.

Check warning on line 858 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L858

Did you really mean 'Sendmux'?
</Card>
<Card title="CLI" icon="terminal" href="/cli">
Run Sendmux workflows from your terminal.

Check warning on line 861 in guides/mcp-clients.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

guides/mcp-clients.mdx#L861

Did you really mean 'Sendmux'?
</Card>
</CardGroup>
6 changes: 4 additions & 2 deletions mailbox-api/introduction.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Introduction"
description: "Mailbox-scoped API endpoints for Sendmux mailbox credentials and connected apps."

Check warning on line 3 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L3

Did you really mean 'Sendmux'?
keywords:
[
"mailbox API",
Expand All @@ -14,7 +14,7 @@
]
---

The Sendmux Mailbox API is for mailbox-scoped access. Use it when a client should act as a mailbox, or as one mailbox from a connected-app mailbox set, without managing team-wide resources.

Check warning on line 17 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L17

Did you really mean 'Sendmux'?

Team-wide mailbox provisioning stays in the [Management API](/api/introduction). High-volume provider-routed sending stays in the [Sending API](/sending-api/introduction).

Expand All @@ -28,14 +28,14 @@

## Authentication

Authenticate with a mailbox credential or connected-app access token from the Sendmux app. Pass it as a Bearer token in the `Authorization` header.
Authenticate with a mailbox credential, connected-app access token, or agent access token from Sendmux. Pass it as a Bearer token in the `Authorization` header.

Check warning on line 31 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L31

Did you really mean 'Sendmux'?

```bash
curl https://app.sendmux.ai/api/v1/mailbox/me \
-H "Authorization: Bearer smx_mbx_your_key_here"
```

Manual mailbox credentials are scoped to one mailbox. The same credential is also accepted as the mailbox password for SMTP submission and IMAP retrieval. Connected-app tokens can be granted one or more mailboxes, and each mailbox request is limited to that granted set. Root API keys are rejected on Mailbox API endpoints.
Manual mailbox credentials are scoped to one mailbox. The same credential is also accepted as the mailbox password for SMTP submission and IMAP retrieval. Connected-app tokens can be granted one or more mailboxes, and each mailbox request is limited to that granted set. Agent access tokens use the `smx_agent_` prefix and are limited by their granted scopes. Root API keys are rejected on Mailbox API endpoints.

## Current endpoints

Expand Down Expand Up @@ -90,6 +90,8 @@

Connected-app tokens can grant a set of mailboxes. Use `GET /mailbox/mailboxes` to list or search the granted set, then pass the selected mailbox's `id` as `mailbox_id` on Mailbox API requests.

Self-registered agent tokens target their assigned mailbox. Omit `mailbox_id` when you use a pre-claim `smx_agent_` token. Pre-claim tokens can read and receive mail, but they cannot send.

```bash
curl "https://app.sendmux.ai/api/v1/mailbox/mailboxes?q=support" \
-H "Authorization: Bearer connected_app_access_token"
Expand All @@ -100,7 +102,7 @@
-H "Authorization: Bearer connected_app_access_token"
```

If a connected app has exactly one granted mailbox, Mailbox API requests use that mailbox by default. If several mailboxes are granted and you omit `mailbox_id`, Sendmux returns `400 missing_parameter`. If you pass a mailbox outside the grant, Sendmux returns `403 insufficient_permissions`.

Check warning on line 105 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L105

Did you really mean 'Sendmux'?

Check warning on line 105 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L105

Did you really mean 'Sendmux'?

## Capability discovery

Expand Down Expand Up @@ -421,7 +423,7 @@
| `from` | Search the From header. |
| `to` | Search the To header. |
| `cc` | Search the Cc header. |
| `bcc` | Search the Bcc header. |

Check warning on line 426 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L426

Did you really mean 'Bcc'?
| `subject` | Search subject text. |
| `body` | Search body text. |
| `header_name` | Match messages with a specific header. |
Expand Down Expand Up @@ -829,7 +831,7 @@
### Event stream

`GET /mailbox/events` streams mailbox events as Server-Sent Events. Use it for
agents, CLIs, MCP servers, and SDKs that need to react when inbound mail arrives.

Check warning on line 834 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L834

Did you really mean 'CLIs'?

Check warning on line 834 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L834

Did you really mean 'SDKs'?
Use [webhooks](/guides/webhooks-setup) instead when a backend service should
receive signed event POSTs without keeping a live connection open.

Expand Down Expand Up @@ -1035,12 +1037,12 @@

## Conventions

- **snake_case** fields in JSON request and response bodies

Check warning on line 1040 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L1040

Did you really mean 'snake_case'?
- **UTC ISO 8601 timestamps** in RFC 3339 format: `2026-03-19T10:30:00Z`
- **Opaque IDs only** for mailbox, message, folder, and attachment resources
- **`Cache-Control: no-store`** on authenticated responses
- **Weak `ETag`** headers on single-resource GETs where supported
- **Header-based idempotency** for retriable POST requests where supported

Check warning on line 1045 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L1045

Did you really mean 'idempotency'?

Check warning on line 1045 in mailbox-api/introduction.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

mailbox-api/introduction.mdx#L1045

Did you really mean 'retriable'?

## OpenAPI specification

Expand Down
14 changes: 10 additions & 4 deletions sdks/go.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Go SDK"
description: "Install and configure the Sendmux Go module."

Check warning on line 3 in sdks/go.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/go.mdx#L3

Did you really mean 'Sendmux'?
keywords:
[
"Go SDK",
Expand All @@ -15,18 +15,19 @@
Use the Go SDK when your application needs importable clients for the Sending, Mailbox, or Management API.

<Info>
Sending and Mailbox clients require mailbox-scoped `smx_mbx_` keys.
Management clients require team-scoped `smx_root_` keys.
Sending and Mailbox clients accept mailbox-compatible `smx_mbx_` keys or
scoped `smx_agent_` tokens. Management clients require team-scoped
`smx_root_` keys.
</Info>

## Requirements

- Go 1.23 or newer.
- A Sendmux API key for the surface you are calling.

Check warning on line 26 in sdks/go.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/go.mdx#L26

Did you really mean 'Sendmux'?

## Install

The Go SDK is one module with surface subpackages.

Check warning on line 30 in sdks/go.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/go.mdx#L30

Did you really mean 'subpackages'?

```bash
go get sendmux.ai/go@v1.0.0
Expand Down Expand Up @@ -104,10 +105,15 @@

| Surface | Import path | Factory | API key |
| --- | --- | --- | --- |
| Sending | `sendmux.ai/go/sending` | `sending.New` | `smx_mbx_` |
| Mailbox | `sendmux.ai/go/mailbox` | `mailbox.New` | `smx_mbx_` |
| Sending | `sendmux.ai/go/sending` | `sending.New` | `smx_mbx_` or scoped `smx_agent_` |
| Mailbox | `sendmux.ai/go/mailbox` | `mailbox.New` | `smx_mbx_` or scoped `smx_agent_` |
| Management | `sendmux.ai/go/management` | `management.New` | `smx_root_` |

<Note>
The SDK accepts `smx_agent_` on mailbox-compatible clients, but the API still
enforces endpoint permissions. Pre-claim agent tokens cannot send email.
</Note>

Sending uses `https://smtp.sendmux.ai/api/v1` by default. Mailbox and Management use `https://app.sendmux.ai/api/v1`.

## Shared API behaviour
Expand All @@ -122,9 +128,9 @@

Surface clients use `core.NewHTTPClient()` by default. It retries safe requests and requests that carry `Idempotency-Key`, then honours `Retry-After` and `X-RateLimit-Reset` response headers.

Pass `WithRetryOptions(core.RetryOptions{...})` into a surface factory to change attempts and backoff.

Check warning on line 131 in sdks/go.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/go.mdx#L131

Did you really mean 'backoff'?

### Idempotency and ETags

Check warning on line 133 in sdks/go.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/go.mdx#L133

Did you really mean 'Idempotency'?

Check warning on line 133 in sdks/go.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/go.mdx#L133

Did you really mean 'ETags'?

Use surface header helpers when a generated operation accepts optional header values.

Expand All @@ -136,7 +142,7 @@
_, _, _ = idempotencyKey, ifMatch, ifNoneMatch
```

Use `Idempotency-Key` for retry-safe mutating requests. Use `If-Match` and `If-None-Match` with single-resource endpoints that support ETags.

Check warning on line 145 in sdks/go.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/go.mdx#L145

Did you really mean 'ETags'?

### Errors

Expand Down
15 changes: 10 additions & 5 deletions sdks/index.mdx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: "SDKs"

Check warning on line 2 in sdks/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/index.mdx#L2

Did you really mean 'SDKs'?
sidebarTitle: "Overview"
description: "Choose a Sendmux SDK package and the API surface it should use."

Check warning on line 4 in sdks/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/index.mdx#L4

Did you really mean 'Sendmux'?
keywords:
[
"SDKs",
Expand All @@ -16,31 +16,36 @@
]
---

Sendmux SDKs give your application package-managed clients for the Sending, Mailbox, and Management APIs.

Check warning on line 19 in sdks/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/index.mdx#L19

Did you really mean 'Sendmux'?

Check warning on line 19 in sdks/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/index.mdx#L19

Did you really mean 'SDKs'?

Use an umbrella package when one application needs more than one API surface. Use a surface package when you want a smaller dependency for one job.

<Info>
Create the API key in Sendmux before you install a package. Sending and
Mailbox clients use mailbox-scoped `smx_mbx_` keys. Management clients use
team-scoped `smx_root_` keys.
Create the credential in Sendmux before you install a package. Sending and

Check warning on line 24 in sdks/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/index.mdx#L24

Did you really mean 'Sendmux'?
Mailbox clients accept mailbox-compatible `smx_mbx_` keys or scoped
`smx_agent_` tokens. Management clients use team-scoped `smx_root_` keys.
</Info>

## Choose a surface

| Surface | Use it for | API key |
| --- | --- | --- |
| Sending | Send single or batch emails. | `smx_mbx_` |
| Mailbox | Read, search, organise, and send from a mailbox. | `smx_mbx_` |
| Sending | Send single or batch emails. | `smx_mbx_` or scoped `smx_agent_` |
| Mailbox | Read, search, organise, and send from a mailbox. | `smx_mbx_` or scoped `smx_agent_` |
| Management | Manage team resources such as domains, sending accounts, mailboxes, webhooks, logs, metrics, and billing data. | `smx_root_` |

<Note>
SDK prefix validation treats `smx_agent_` as mailbox-compatible. The API still
enforces scopes. Pre-claim agent tokens do not include `email.send`.
</Note>

## Choose a package family

| Language | Umbrella package | Surface packages |
| --- | --- | --- |
| TypeScript | `@sendmux/sdk` | `@sendmux/sending`, `@sendmux/mailbox`, `@sendmux/management` |
| Python | `sendmux-sdk` | `sendmux-sending`, `sendmux-mailbox`, `sendmux-management` |
| Go | `sendmux.ai/go` | `sending`, `mailbox`, `management`, and `sdk` subpackages |

Check warning on line 48 in sdks/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/index.mdx#L48

Did you really mean 'subpackages'?
| PHP | `sendmux/sdk` | `sendmux/sending`, `sendmux/mailbox`, `sendmux/management` |
| Ruby | `sendmux-sdk` | `sendmux-sending`, `sendmux-mailbox`, `sendmux-management` |

Expand All @@ -48,10 +53,10 @@

<CardGroup cols={2}>
<Card title="CLI" icon="terminal" href="/cli">
Run Sendmux management, mailbox, and sending commands from your terminal.

Check warning on line 56 in sdks/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/index.mdx#L56

Did you really mean 'Sendmux'?
</Card>
<Card title="MCP servers" icon="plug" href="/guides/mcp">
Connect AI tools to Sendmux docs and authorised product tools.

Check warning on line 59 in sdks/index.mdx

View check run for this annotation

Mintlify / Mintlify Validation (sendmux) - vale-spellcheck

sdks/index.mdx#L59

Did you really mean 'Sendmux'?
</Card>
</CardGroup>

Expand Down
Loading