Bulk import SMTP mailboxes from CSV
Upload a CSV file to bulk import SMTP mailboxes. Maximum 500 mailboxes per import.
Required columns: email, password, smtphost, imaphost
Optional columns: smtpport (default 587), imapport (default 993), smtpsecure (default false), imapsecure (default true), displayname
SMTP connections are tested during import (20 concurrent connections). Use skipConnectionTest=true to skip testing — mailboxes will be created with "pending" status instead of "active".
Duplicate emails (already in workspace) are automatically skipped.
curl -X POST "https://api.sendkit.ai/v1/mailboxes/import/smtp" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
--form file=example_string \
--form tag=example_string \
--form skipConnectionTest=true
import requests
import json
url = "https://api.sendkit.ai/v1/mailboxes/import/smtp"
headers = {
"X-Api-Key": "YOUR_API_KEY",
"Authorization": "Bearer YOUR_API_TOKEN"
}
data = {
"file": "example_string",
"tag": "example_string",
"skipConnectionTest": "true"
}
response = requests.post(url, headers=headers, data=data)
print(response.json())
const formData = new FormData();
formData.append("file", "example_string");
formData.append("tag", "example_string");
formData.append("skipConnectionTest", "true");
const response = await fetch("https://api.sendkit.ai/v1/mailboxes/import/smtp", {
method: "POST",
headers: {
"X-Api-Key": "YOUR_API_KEY",
"Authorization": "Bearer YOUR_API_TOKEN"
},
body: formData
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"mime/multipart"
)
func main() {
body := &bytes.Buffer{}
writer := multipart.NewWriter(body)
writer.WriteField("file", "example_string")
writer.WriteField("tag", "example_string")
writer.WriteField("skipConnectionTest", "true")
writer.Close()
req, err := http.NewRequest("POST", "https://api.sendkit.ai/v1/mailboxes/import/smtp", body)
if err != nil {
panic(err)
}
req.Header.Set("X-Api-Key", "YOUR_API_KEY")
req.Header.Set("Authorization", "Bearer YOUR_API_TOKEN")
req.Header.Set("Content-Type", writer.FormDataContentType())
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.sendkit.ai/v1/mailboxes/import/smtp')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['X-Api-Key'] = 'YOUR_API_KEY'
request['Authorization'] = 'Bearer YOUR_API_TOKEN'
request.set_form([
["file", "example_string"],
["tag", "example_string"],
["skipConnectionTest", "true"]
], 'multipart/form-data')
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"imported": 45,
"skipped": 3,
"failed": 2,
"errors": [
{
"email": "bad@example.com",
"error": "Authentication failed. Check username/password."
},
{
"email": "missing@example.com",
"error": "Missing SMTP host or password"
}
]
}
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "CSV file is required"
}
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Missing required columns: smtphost, imaphost"
}
}
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Maximum 500 mailboxes per import"
}
}
/v1/mailboxes/import/smtp
Platform API key (sk_user_...) or Workspace API key (sk_...)
The media type of the request body
CSV file with required columns (email, password, smtphost, imaphost)
Tag to apply to all imported mailboxes
Skip SMTP connection testing (mailboxes created as "pending")
Request Preview
Response
Response will appear here after sending the request
Authentication
API Key for authentication. Platform API key (sk_user_...) or Workspace API key (sk_...)
Bearer token. API key as Bearer token
Body
CSV file with required columns (email, password, smtphost, imaphost)
Tag to apply to all imported mailboxes
Skip SMTP connection testing (mailboxes created as "pending")
truefalseResponses
Last updated today
Built with Documentation.AI