curl --request POST \
--url https://api.sendpost.io/api/v1/account/ippool \
--header 'Content-Type: application/json' \
--header 'X-Account-ApiKey: <api-key>' \
--data '
{
"name": "Marketing Promotional",
"tpsps": [
1
],
"ips": [
{
"publicIP": "3.238.19.87"
}
]
}
'import requests
url = "https://api.sendpost.io/api/v1/account/ippool"
payload = {
"name": "Marketing Promotional",
"tpsps": [1],
"ips": [{ "publicIP": "3.238.19.87" }]
}
headers = {
"X-Account-ApiKey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Account-ApiKey': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Marketing Promotional', tpsps: [1], ips: [{publicIP: '3.238.19.87'}]})
};
fetch('https://api.sendpost.io/api/v1/account/ippool', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Marketing Promotional',
'tpsps' => [
1
],
'ips' => [
[
'publicIP' => '3.238.19.87'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Account-ApiKey: <api-key>"
],
]);
$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"
payload := strings.NewReader("{\n \"name\": \"Marketing Promotional\",\n \"tpsps\": [\n 1\n ],\n \"ips\": [\n {\n \"publicIP\": \"3.238.19.87\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Account-ApiKey", "<api-key>")
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.post("https://api.sendpost.io/api/v1/account/ippool")
.header("X-Account-ApiKey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Marketing Promotional\",\n \"tpsps\": [\n 1\n ],\n \"ips\": [\n {\n \"publicIP\": \"3.238.19.87\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendpost.io/api/v1/account/ippool")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Account-ApiKey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Marketing Promotional\",\n \"tpsps\": [\n 1\n ],\n \"ips\": [\n {\n \"publicIP\": \"3.238.19.87\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 3,
"name": "Marketing Promotional",
"type": 1,
"routingStrategy": 0,
"routingMetaData": "{}",
"shouldOverflow": false,
"overflowPoolName": "",
"ips": [
{
"id": 6,
"publicIp": "3.238.19.86",
"reverseDnsHostname": "sp0006.mtaspb.email",
"type": 1,
"autoWarmupEnabled": false,
"state": 1,
"created": 1597511124804000
}
],
"created": 1686304219037565000
}Create IPPool
Create a new IP pool to organize your sending infrastructure. Pools group IPs and third-party sending providers (TPSPs) for intelligent routing.
Pool Components:
- IPs: Dedicated IP addresses from your account
- TPSPs: Third-party sending providers (SendGrid, Mailgun, etc.)
TPSP Types:
| Value | Provider |
|---|---|
0 | Amazon SES |
1 | SendGrid |
2 | Mailgun |
3 | Custom SMTP |
4 | PostMark |
5 | Gmail |
Routing Strategies:
0= Round Robin - Distribute traffic evenly1= Email Provider - Route by recipient’s mailbox provider2= Volume Percentage - Split by defined percentages3= Sending Domain - Route by your from domain
Use Cases:
- Separate transactional from marketing emails
- Route high-volume traffic through TPSPs
- Implement provider-specific routing for deliverability
- Create backup pools for failover
Naming Best Practices:
- Use descriptive names:
Transactional_Orders,Marketing_Newsletter - Include purpose:
HighPriority_Alerts,Bulk_Promotions
curl --request POST \
--url https://api.sendpost.io/api/v1/account/ippool \
--header 'Content-Type: application/json' \
--header 'X-Account-ApiKey: <api-key>' \
--data '
{
"name": "Marketing Promotional",
"tpsps": [
1
],
"ips": [
{
"publicIP": "3.238.19.87"
}
]
}
'import requests
url = "https://api.sendpost.io/api/v1/account/ippool"
payload = {
"name": "Marketing Promotional",
"tpsps": [1],
"ips": [{ "publicIP": "3.238.19.87" }]
}
headers = {
"X-Account-ApiKey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Account-ApiKey': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Marketing Promotional', tpsps: [1], ips: [{publicIP: '3.238.19.87'}]})
};
fetch('https://api.sendpost.io/api/v1/account/ippool', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Marketing Promotional',
'tpsps' => [
1
],
'ips' => [
[
'publicIP' => '3.238.19.87'
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Account-ApiKey: <api-key>"
],
]);
$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"
payload := strings.NewReader("{\n \"name\": \"Marketing Promotional\",\n \"tpsps\": [\n 1\n ],\n \"ips\": [\n {\n \"publicIP\": \"3.238.19.87\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Account-ApiKey", "<api-key>")
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.post("https://api.sendpost.io/api/v1/account/ippool")
.header("X-Account-ApiKey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Marketing Promotional\",\n \"tpsps\": [\n 1\n ],\n \"ips\": [\n {\n \"publicIP\": \"3.238.19.87\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendpost.io/api/v1/account/ippool")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Account-ApiKey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Marketing Promotional\",\n \"tpsps\": [\n 1\n ],\n \"ips\": [\n {\n \"publicIP\": \"3.238.19.87\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": 3,
"name": "Marketing Promotional",
"type": 1,
"routingStrategy": 0,
"routingMetaData": "{}",
"shouldOverflow": false,
"overflowPoolName": "",
"ips": [
{
"id": 6,
"publicIp": "3.238.19.86",
"reverseDnsHostname": "sp0006.mtaspb.email",
"type": 1,
"autoWarmupEnabled": false,
"state": 1,
"created": 1597511124804000
}
],
"created": 1686304219037565000
}Authorizations
This api key can be used for all account level operations
Body
Request body for creating a new IP pool
Display name for the IP pool. Must be unique within your account. Use descriptive names like "transactional", "marketing-bulk", "high-priority"
1 - 100"Marketing Promotional"
List of dedicated IP addresses to include in this pool. IPs must already be allocated to your account.
Show child attributes
Show child attributes
List of third-party sending provider IDs to include in this pool. TPSPs must be pre-configured in your account.
[101, 102]
Email routing strategy:
0= Round Robin (equal distribution)1= Email Provider Strategy (route by recipient domain)2= Volume Percentage Strategy (weighted distribution)3= Sending Domain Strategy (route by sender domain)
0, 1, 2, 3 0
JSON-encoded routing configuration. See IPPools documentation for format.
Use {} for round-robin strategy.
"{}"
Whether to overflow to shared pool when this pool is unavailable
true
Name of the IP pool to overflow to (if shouldOverflow is true)
"shared-backup"
Response
Created 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?