curl --request PUT \
--url https://api.sendpost.io/api/v1/account/ip/allocate \
--header 'Content-Type: application/json' \
--header 'X-Account-ApiKey: <api-key>' \
--data '
{
"ips": [
"34.21.14.11",
"34.21.14.12"
],
"autoWarmupEnabled": true
}
'import requests
url = "https://api.sendpost.io/api/v1/account/ip/allocate"
payload = {
"ips": ["34.21.14.11", "34.21.14.12"],
"autoWarmupEnabled": True
}
headers = {
"X-Account-ApiKey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Account-ApiKey': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({ips: ['34.21.14.11', '34.21.14.12'], autoWarmupEnabled: true})
};
fetch('https://api.sendpost.io/api/v1/account/ip/allocate', 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/ip/allocate",
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([
'ips' => [
'34.21.14.11',
'34.21.14.12'
],
'autoWarmupEnabled' => true
]),
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/ip/allocate"
payload := strings.NewReader("{\n \"ips\": [\n \"34.21.14.11\",\n \"34.21.14.12\"\n ],\n \"autoWarmupEnabled\": true\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.sendpost.io/api/v1/account/ip/allocate")
.header("X-Account-ApiKey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"ips\": [\n \"34.21.14.11\",\n \"34.21.14.12\"\n ],\n \"autoWarmupEnabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendpost.io/api/v1/account/ip/allocate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Account-ApiKey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ips\": [\n \"34.21.14.11\",\n \"34.21.14.12\"\n ],\n \"autoWarmupEnabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": 11321,
"publicIp": "52.34.11.12",
"reverseDnsHostname": "sp11321.mtaspg.email",
"type": 1,
"autoWarmupEnabled": true,
"labels": [],
"state": 1,
"created": 1704067200000000000
}Allocate IP
Request allocation of a new dedicated IP address to your account. New IPs start in warmup state to build sender reputation gradually.
Warmup Process:
- New IPs have limited daily sending capacity
- Volume increases automatically each day while
autoWarmupEnabledis set - Full capacity typically reached after 30-45 days
- Consistent, engagement-positive sending accelerates warmup
When to Allocate New IPs:
- Scaling beyond current IP capacity
- Separating different email streams (transactional vs marketing)
- Geographic IP requirements
- Replacing an IP with poor reputation
Best Practices:
- Dedicated IPs require consistent volume (10k+ emails/month ideal)
- Low volume on dedicated IPs can harm deliverability
- Consider shared IPs for low-volume senders
curl --request PUT \
--url https://api.sendpost.io/api/v1/account/ip/allocate \
--header 'Content-Type: application/json' \
--header 'X-Account-ApiKey: <api-key>' \
--data '
{
"ips": [
"34.21.14.11",
"34.21.14.12"
],
"autoWarmupEnabled": true
}
'import requests
url = "https://api.sendpost.io/api/v1/account/ip/allocate"
payload = {
"ips": ["34.21.14.11", "34.21.14.12"],
"autoWarmupEnabled": True
}
headers = {
"X-Account-ApiKey": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'X-Account-ApiKey': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({ips: ['34.21.14.11', '34.21.14.12'], autoWarmupEnabled: true})
};
fetch('https://api.sendpost.io/api/v1/account/ip/allocate', 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/ip/allocate",
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([
'ips' => [
'34.21.14.11',
'34.21.14.12'
],
'autoWarmupEnabled' => true
]),
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/ip/allocate"
payload := strings.NewReader("{\n \"ips\": [\n \"34.21.14.11\",\n \"34.21.14.12\"\n ],\n \"autoWarmupEnabled\": true\n}")
req, _ := http.NewRequest("PUT", 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.put("https://api.sendpost.io/api/v1/account/ip/allocate")
.header("X-Account-ApiKey", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"ips\": [\n \"34.21.14.11\",\n \"34.21.14.12\"\n ],\n \"autoWarmupEnabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sendpost.io/api/v1/account/ip/allocate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["X-Account-ApiKey"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"ips\": [\n \"34.21.14.11\",\n \"34.21.14.12\"\n ],\n \"autoWarmupEnabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": 11321,
"publicIp": "52.34.11.12",
"reverseDnsHostname": "sp11321.mtaspg.email",
"type": 1,
"autoWarmupEnabled": true,
"labels": [],
"state": 1,
"created": 1704067200000000000
}Authorizations
This api key can be used for all account level operations
Body
Request body for allocating new dedicated IPs to your account. New IPs should be warmed up gradually before sending at full volume.
List of IP addresses to allocate. These must be available IPs from SendPost's IP pool. Contact support to request IP allocation.
1["34.21.14.11", "34.21.14.12"]
Enable automatic IP warmup for newly allocated IPs. Recommended: true for new IPs to gradually build sender reputation.
true
Response
Details of the newly allocated IP, including initial warmup status.
A dedicated IP address used for sending emails. Dedicated IPs give you full control over your sender reputation, as your deliverability is not affected by other senders.
IP Warmup: New IPs should be gradually "warmed up" by slowly increasing sending volume over 4-6 weeks to establish reputation with ISPs.
Unique identifier for the IP resource
11321
The public IPv4 address used for sending emails. This is the IP that receiving mail servers will see.
"52.34.11.12"
The reverse DNS (PTR record) hostname for this IP. Properly configured rDNS is important for deliverability. Format: sp{id}.{region}.sendpost.email
"sp11321.mtaspg.email"
Type of IP allocation:
0= Shared IP (shared with other SendPost senders, pooled reputation)1= Dedicated IP (exclusive to your account, your own reputation)
0, 1 1
Whether automatic IP warmup is enabled. When enabled, SendPost automatically manages sending volume to gradually build reputation on this IP.
true
Custom labels/tags for organizing IPs
Show child attributes
Show child attributes
Current state of the IP:
0= Warmup (IP is in warmup phase, gradually building reputation)1= Normal (IP is fully warmed and ready for full sending volume)
0, 1 1
UNIX epoch timestamp in nanoseconds when the IP was allocated
1704067200000000000
Was this page helpful?