Bulk warmup operations
Runs a warmup lifecycle operation across many mailboxes in one call. Each item may carry
its own config (start only); an item without one falls back to the top-level config,
then to that mailbox's provider default. Each mailbox is processed independently — a
failure (bad DNS, wrong state, inactive) is reported per-mailbox and does not fail the
request. For start, each mailbox is DNS-gated exactly like the single-mailbox endpoint.
Repeated mailboxIds are de-duplicated. Maximum 100 mailboxes per request.
curl -X POST "https://api.sendkit.ai/v1/warmup/bulk" \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_API_KEY" \
-d '{
"operation": "start",
"mailboxes": [
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d03"
},
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d04"
}
]
}'
import requests
import json
url = "https://api.sendkit.ai/v1/warmup/bulk"
headers = {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY"
}
data = {
"operation": "start",
"mailboxes": [
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d03"
},
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d04"
}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://api.sendkit.ai/v1/warmup/bulk", {
method: "POST",
headers: {
"Content-Type": "application/json",
"X-Api-Key": "YOUR_API_KEY"
},
body: JSON.stringify({
"operation": "start",
"mailboxes": [
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d03"
},
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d04"
}
]
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"operation": "start",
"mailboxes": [
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d03"
},
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d04"
}
]
}`)
req, err := http.NewRequest("POST", "https://api.sendkit.ai/v1/warmup/bulk", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("X-Api-Key", "YOUR_API_KEY")
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/warmup/bulk')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['X-Api-Key'] = 'YOUR_API_KEY'
request.body = '{
"operation": "start",
"mailboxes": [
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d03"
},
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d04"
}
]
}'
response = http.request(request)
puts response.body
{
"success": true,
"data": {
"operation": "start",
"total": 2,
"succeeded": 1,
"failed": 1,
"results": [
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d03",
"success": true,
"status": "in_progress",
"healthScore": 100,
"config": {
"startingVolume": 10,
"dailyIncrease": 1,
"targetVolume": 25
}
},
{
"mailboxId": "664a1b2c3d4e5f6a7b8c9d04",
"success": false,
"error": "DNS records incomplete",
"healthScore": 60,
"issues": [
"DMARC record not configured"
]
}
]
}
}
{
"error": "Bad Request",
"message": "The request contains invalid parameters or malformed data",
"code": 400,
"details": [
{
"field": "email",
"message": "Invalid email format"
}
]
}
/v1/warmup/bulk
Target server for requests. Edit to use your own host.
Platform API key (sk_user_...) or Workspace API key (sk_...)
The media type of the request body
Global fallback config applied to start items without their own config
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_...)
Body
startpauseresumestopGlobal fallback config applied to start items without their own config