curl --request PUT \
--url https://api.sendpost.io/api/v1/account/ippool/{ippool_id} \
--header 'Content-Type: application/json' \
--data '
{
"name": "Marketing Promotional",
"ips": [
{
"publicIP": "52.12.10.12"
},
{
"publicIP": "52.10.12.17"
},
{
"publicIP": "35.11.10.5"
}
]
}
'import requests
url = "https://api.sendpost.io/api/v1/account/ippool/{ippool_id}"
payload = {
"name": "Marketing Promotional",
"ips": [{ "publicIP": "52.12.10.12" }, { "publicIP": "52.10.12.17" }, { "publicIP": "35.11.10.5" }]
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Marketing Promotional',
ips: [{publicIP: '52.12.10.12'}, {publicIP: '52.10.12.17'}, {publicIP: '35.11.10.5'}]
})
};
fetch('https://api.sendpost.io/api/v1/account/ippool/{ippool_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sendpost.io/api/v1/account/ippool/{ippool_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Marketing Promotional',
'ips' => [
[
'publicIP' => '52.12.10.12'
],
[
'publicIP' => '52.10.12.17'
],
[
'publicIP' => '35.11.10.5'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sendpost.io/api/v1/account/ippool/{ippool_id}"
payload := strings.NewReader("{\n \"name\": \"Marketing Promotional\",\n \"ips\": [\n {\n \"publicIP\": \"52.12.10.12\"\n },\n {\n \"publicIP\": \"52.10.12.17\"\n },\n {\n \"publicIP\": \"35.11.10.5\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.sendpost.io/api/v1/account/ippool/{ippool_id}")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Marketing Promotional\",\n \"ips\": [\n {\n \"publicIP\": \"52.12.10.12\"\n },\n {\n \"publicIP\": \"52.10.12.17\"\n },\n {\n \"publicIP\": \"35.11.10.5\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendpost.io/api/v1/account/ippool/{ippool_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Marketing Promotional\",\n \"ips\": [\n {\n \"publicIP\": \"52.12.10.12\"\n },\n {\n \"publicIP\": \"52.10.12.17\"\n },\n {\n \"publicIP\": \"35.11.10.5\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 756,
"name": "Marketing Promotional",
"type": 1,
"routingStrategy": 0,
"routingMetaData": "{}",
"shouldOverflow": false,
"overflowPoolName": "",
"ips": [
{
"id": 11429,
"publicIp": "52.12.10.12",
"type": 1,
"autoWarmupEnabled": true,
"state": 0,
"created": 1567512491588017700
},
{
"id": 11530,
"publicIp": "52.10.12.17",
"type": 1,
"autoWarmupEnabled": true,
"state": 0,
"created": 1567512491568815400
},
{
"id": 11531,
"publicIp": "35.11.10.5",
"type": 1,
"autoWarmupEnabled": true,
"state": 0,
"created": 1567512491568025300
}
],
"created": 1567512491586102000
}Update IPPool
Modify an existing IP pool’s configuration, including name, IPs, TPSPs, and routing strategy.
What Can Be Updated:
- Pool name
- IP addresses assigned to the pool
- Third-party sending providers (TPSPs)
- Routing strategy and metadata
- Warmup and monitoring settings
Use Cases:
- Add new IPs to scale capacity
- Remove underperforming IPs
- Change routing strategy
- Add/remove TPSP integrations
- Rename pool for clarity
Best Practices:
- Test routing changes during low-traffic periods
- Ensure at least one sending option remains in the pool
- Document changes for team awareness
curl --request PUT \
--url https://api.sendpost.io/api/v1/account/ippool/{ippool_id} \
--header 'Content-Type: application/json' \
--data '
{
"name": "Marketing Promotional",
"ips": [
{
"publicIP": "52.12.10.12"
},
{
"publicIP": "52.10.12.17"
},
{
"publicIP": "35.11.10.5"
}
]
}
'import requests
url = "https://api.sendpost.io/api/v1/account/ippool/{ippool_id}"
payload = {
"name": "Marketing Promotional",
"ips": [{ "publicIP": "52.12.10.12" }, { "publicIP": "52.10.12.17" }, { "publicIP": "35.11.10.5" }]
}
headers = {"Content-Type": "application/json"}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Marketing Promotional',
ips: [{publicIP: '52.12.10.12'}, {publicIP: '52.10.12.17'}, {publicIP: '35.11.10.5'}]
})
};
fetch('https://api.sendpost.io/api/v1/account/ippool/{ippool_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.sendpost.io/api/v1/account/ippool/{ippool_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Marketing Promotional',
'ips' => [
[
'publicIP' => '52.12.10.12'
],
[
'publicIP' => '52.10.12.17'
],
[
'publicIP' => '35.11.10.5'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sendpost.io/api/v1/account/ippool/{ippool_id}"
payload := strings.NewReader("{\n \"name\": \"Marketing Promotional\",\n \"ips\": [\n {\n \"publicIP\": \"52.12.10.12\"\n },\n {\n \"publicIP\": \"52.10.12.17\"\n },\n {\n \"publicIP\": \"35.11.10.5\"\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.sendpost.io/api/v1/account/ippool/{ippool_id}")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Marketing Promotional\",\n \"ips\": [\n {\n \"publicIP\": \"52.12.10.12\"\n },\n {\n \"publicIP\": \"52.10.12.17\"\n },\n {\n \"publicIP\": \"35.11.10.5\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendpost.io/api/v1/account/ippool/{ippool_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Marketing Promotional\",\n \"ips\": [\n {\n \"publicIP\": \"52.12.10.12\"\n },\n {\n \"publicIP\": \"52.10.12.17\"\n },\n {\n \"publicIP\": \"35.11.10.5\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 756,
"name": "Marketing Promotional",
"type": 1,
"routingStrategy": 0,
"routingMetaData": "{}",
"shouldOverflow": false,
"overflowPoolName": "",
"ips": [
{
"id": 11429,
"publicIp": "52.12.10.12",
"type": 1,
"autoWarmupEnabled": true,
"state": 0,
"created": 1567512491588017700
},
{
"id": 11530,
"publicIp": "52.10.12.17",
"type": 1,
"autoWarmupEnabled": true,
"state": 0,
"created": 1567512491568815400
},
{
"id": 11531,
"publicIp": "35.11.10.5",
"type": 1,
"autoWarmupEnabled": true,
"state": 0,
"created": 1567512491568025300
}
],
"created": 1567512491586102000
}Path Parameters
The unique ID of the IP pool to update.
756
Body
Request body for updating an existing IP pool
New display name for the IP pool
100"Marketing Promotional v2"
Updated list of IP addresses for this pool. This replaces the current IP list - include all IPs you want in the pool.
Show child attributes
Show child attributes
Updated list of third-party sending provider IDs
Updated routing strategy (see IPPoolCreateRequest for values)
0, 1, 2, 3 0
Updated routing configuration (JSON)
"{}"
Whether to enable overflow to backup pool
true
Name of the overflow pool
"shared-backup"
Response
The updated IPPool details
An IP Pool groups one or more dedicated IPs and/or third-party sending providers for email delivery. Use IP pools to:
- Separate transactional vs marketing email reputation
- Route emails based on recipient domain (Gmail, Yahoo, etc.)
- Implement volume-based routing strategies
- Configure failover to backup providers
When sending email, specify the ippool parameter to route through a specific pool.
Unique identifier for the IP pool
746
Display name for the IP pool. Must be unique within your account. Use descriptive names like "transactional", "marketing", "high-priority".
100"Transactional"
Type of IP pool:
0= Shared (uses shared IPs with pooled reputation)1= Dedicated (uses dedicated IPs exclusive to your account)
0, 1 1
How emails are distributed across IPs/providers in this pool:
0= Round Robin (equal distribution)1= Email Provider Strategy (route by recipient domain like Gmail, Yahoo)2= Volume Percentage Strategy (weighted distribution)3= Sending Domain Strategy (route by sender domain)
See the IPPools tag description for detailed routing configuration examples.
0, 1, 2, 3 0
JSON-encoded configuration for the selected routing strategy. Format depends on routingStrategy value. See IPPools documentation for examples.
For Round Robin (strategy 0): Use empty object {}
"{}"
Whether to automatically overflow to a backup pool when this pool is unavailable (all IPs down) or at capacity (warmup limits reached).
true
Name of the IP pool to overflow to when shouldOverflow is enabled. The overflow pool must exist. Common pattern: overflow to shared IP pool.
"shared-backup"
List of dedicated IPs assigned to this pool
Show child attributes
Show child attributes
UNIX epoch timestamp in nanoseconds when the IP pool was created
1704067200000000000
Was this page helpful?