# Inbox vendors

> Import mailboxes bought from Zapmail, InboxKit, Mailforge or Infraforge with your key. 8 REST endpoints with parameters, permissions and curl examples.

Canonical: https://ballast.to/docs/api/inbox-vendors

[API reference](https://ballast.to/docs/api)

Import mailboxes bought from Zapmail, InboxKit, Mailforge or Infraforge with your key. 8 endpoints, each also a tool for your AI through [MCP](https://ballast.to/docs/mcp). Authentication and errors are on the [overview](https://ballast.to/docs/api#authentication).

## List inbox vendors and whether each is connected

GET

/api/v1/mailbox-vendors

Zapmail, InboxKit, Mailforge and Infraforge, read with the workspace's own API key (connected in the dashboard, Integrations). Keys are never returned.

MCP tool

list\_mailbox\_vendors

Read-only

Returns

- **`vendors` required object\[\]**

cURL

```
curl https://ballast.to/api/v1/mailbox-vendors \
  -H "Authorization: Bearer $BALLAST_API_KEY"
```

## Test an inbox vendor's key again

POST

/api/v1/mailbox-vendors/{vendor}/check

Same call as on connect; a refused key marks the vendor Needs attention.

MCP tool

check\_mailbox\_vendor

Owners and admins

Parameters

- **`vendor` required path · "zapmail" | "inboxkit" | "mailforge" | "infraforge"**

Returns

- **`vendor` required "zapmail" | "inboxkit" | "mailforge" | "infraforge"**
- **`label` required string**
- **`kinds` required string**: What its mailboxes are: Google and Microsoft accounts, or SMTP and IMAP
- **`keyHelp` required string**: Where the API key is in the vendor's dashboard
- **`connected` required boolean**
- **`status` required "connected" | "error" | null**
- **`lastError` required string | null**
- **`lastCheckedAt` required string | null**
- **`keyHint` required string | null**: Last 4 characters of the key
- **`connectedBy` required string | null**
- **`workspaces` required number | null**: Vendor workspaces the key reached at the last check
- **`imported` required number**: Mailboxes in this workspace that came from this vendor

cURL

```
curl -X POST https://ballast.to/api/v1/mailbox-vendors/<vendor>/check \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

## List the mailboxes an inbox vendor's key reaches

GET

/api/v1/mailbox-vendors/{vendor}/mailboxes

Read live from the vendor across every workspace the key reaches (up to 10,000), with the ones already connected here marked. Passwords are never returned.

MCP tool

list\_vendor\_mailboxes

Read-only

Owners and admins

Parameters

- **`vendor` required path · "zapmail" | "inboxkit" | "mailforge" | "infraforge"**

Returns

- **`mailboxes` required object\[\]**
- **`truncated` required boolean**

cURL

```
curl https://ballast.to/api/v1/mailbox-vendors/<vendor>/mailboxes \
  -H "Authorization: Bearer $BALLAST_API_KEY"
```

## Import mailboxes from an inbox vendor

POST

/api/v1/mailbox-vendors/{vendor}/import

Connects the picked mailboxes (\`ids\` from list\_vendor\_mailboxes, or "all" for every one not connected yet) in the background; follow it with get\_mailbox\_import. Each is tested over SMTP and IMAP and saved only when both pass. Google mailboxes need the app password the vendor holds; Microsoft mailboxes wait for a Microsoft sign-in each, from the dashboard.

MCP tool

import\_vendor\_mailboxes

Needs an active plan

MCP asks to confirm

Parameters

- **`vendor` required path · "zapmail" | "inboxkit" | "mailforge" | "infraforge"**
- **`ids` required "all" | string\[\]**
- **`dailyLimit` integer**: Campaign emails a day for every mailbox it adds; left out = the default 30, ramped up

Returns

- **`importId` required string**
- **`picked` required number**
- **`existing` required number**: Picked mailboxes already connected here

cURL

```
curl -X POST https://ballast.to/api/v1/mailbox-vendors/<vendor>/import \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids":"all"}'
```

## Progress of a mailbox import from an inbox vendor

GET

/api/v1/mailbox-imports/{id}

Counts and every row with its outcome. A Microsoft row that was signed in since counts as added.

MCP tool

get\_mailbox\_import

Read-only

Parameters

- **`id` required path · string**

Returns

- **`id` required string**
- **`vendor` required "zapmail" | "inboxkit" | "mailforge" | "infraforge"**
- **`label` required string**
- **`status` required "running" | "done" | "canceled"**
- **`createdAt` required string**
- **`finishedAt` required string | null**
- **`counts` required object**
- **`rows` required object\[\]**: Every row: failed and sign-in rows first

cURL

```
curl https://ballast.to/api/v1/mailbox-imports/<id> \
  -H "Authorization: Bearer $BALLAST_API_KEY"
```

## Recent mailbox imports from inbox vendors

GET

/api/v1/mailbox-imports

The last 10, newest first, with counts (no rows).

MCP tool

list\_mailbox\_imports

Read-only

Returns

- **`imports` required object\[\]**

cURL

```
curl https://ballast.to/api/v1/mailbox-imports \
  -H "Authorization: Bearer $BALLAST_API_KEY"
```

## Stop a mailbox import

POST

/api/v1/mailbox-imports/{id}/cancel

Rows not worked yet are canceled; mailboxes already connected stay.

MCP tool

cancel\_mailbox\_import

Owners and admins

Parameters

- **`id` required path · string**

Returns the same fields as Progress of a mailbox import from an inbox vendor.

cURL

```
curl -X POST https://ballast.to/api/v1/mailbox-imports/<id>/cancel \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```

## Try a mailbox import's failed rows again

POST

/api/v1/mailbox-imports/{id}/retry

For after fixing them at the vendor (an app password created, a mailbox finished setting up). Credentials are read from the vendor again.

MCP tool

retry\_mailbox\_import

Needs an active plan

Parameters

- **`id` required path · string**

Returns the same fields as Progress of a mailbox import from an inbox vendor.

cURL

```
curl -X POST https://ballast.to/api/v1/mailbox-imports/<id>/retry \
  -H "Authorization: Bearer $BALLAST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
```
