Manually complete warmup
Manually complete the warm-up ramp (warming_up to active), bypassing the schedule. Use only for an IP already warmed elsewhere. Completion sets warmup.progress to 100, clears warmup.daily_cap, and applies the ramp-complete allowance to the current UTC day: warmup.today.cap becomes 100000000, warmup.today.granted keeps the sends already released today, and warmup.today.remaining becomes cap minus granted. Once completion applies this allowance, an exhausted stage allowance does not block the next eligible first-attempt send. The response reports these values. On an active IP, warmup.progress and warmup.daily_cap are informational: they can keep earlier values after a suspension is lifted and do not limit sending.
curl --request POST \
--url https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup', 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.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "6a7f9a30-1234-4b5c-8d9e-0f1a2b3c4d5e",
"record_type": "dedicated_ip",
"ip_address": "64.16.239.170",
"ip_version": "ipv4",
"pool_id": "9b1c4d70-abcd-4e5f-8a9b-0c1d2e3f4a5b",
"region": "ewr-nj1",
"status": "active",
"warmup": {
"started_at": "2026-10-14T20:36:50.000000Z",
"progress": 100,
"daily_cap": null,
"paused": false,
"paused_at": null,
"today": {
"day": "2026-10-24",
"cap": 100000000,
"granted": 1250,
"remaining": 99998750
}
},
"billing": {
"status": "active",
"charged": true
},
"provisioning_status": "dns_confirmed",
"provisioning": {
"dns_status": "dns_confirmed",
"ptr_request_state": "confirmed",
"ptr_request_pr_url": null,
"checklist": {
"ptr_requested": true,
"ptr_authored": false,
"ptr_merged": true,
"forward_confirmed": true
}
},
"ptr_hostname": "mta-64-16-239-170.msgtelnyx.com",
"dns_confirmed_at": "2026-10-14T20:12:41.552310Z",
"quarantine_until": null,
"released_at": null,
"suspension_reason": null,
"created_at": "2026-09-30T02:03:09.474123Z",
"updated_at": "2026-10-24T21:45:00.000000Z"
}
}{
"errors": [
{
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>",
"parameter": "<string>"
}
}
]
}{
"errors": [
{
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>",
"parameter": "<string>"
}
}
]
}{
"errors": [
{
"code": "10001",
"title": "Not Found",
"detail": "The requested dedicated IP was not found"
}
]
}{
"errors": [
{
"code": "40901",
"title": "Conflict",
"detail": "a suspended dedicated IP is operator-held and cannot be activated by customer action (operator suspension: abuse review)"
}
]
}{
"errors": [
{
"code": "10015",
"title": "Validation Failed",
"detail": "complete_warmup requires status warming_up (cannot complete warmup from provisioning)",
"source": {
"pointer": "/data/attributes/status"
}
}
]
}Authorizations
Telnyx API key supplied as Authorization: Bearer <token>. In production, auth may be validated by the API gateway and forwarded via Telnyx auth headers.
Path Parameters
The dedicated IP identifier (UUID).
Response
Dedicated IP
A dedicated sending IP address owned by the account.
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup', 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.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.telnyx.com/v2/email/dedicated_ips/{id}/actions/complete_warmup")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": "6a7f9a30-1234-4b5c-8d9e-0f1a2b3c4d5e",
"record_type": "dedicated_ip",
"ip_address": "64.16.239.170",
"ip_version": "ipv4",
"pool_id": "9b1c4d70-abcd-4e5f-8a9b-0c1d2e3f4a5b",
"region": "ewr-nj1",
"status": "active",
"warmup": {
"started_at": "2026-10-14T20:36:50.000000Z",
"progress": 100,
"daily_cap": null,
"paused": false,
"paused_at": null,
"today": {
"day": "2026-10-24",
"cap": 100000000,
"granted": 1250,
"remaining": 99998750
}
},
"billing": {
"status": "active",
"charged": true
},
"provisioning_status": "dns_confirmed",
"provisioning": {
"dns_status": "dns_confirmed",
"ptr_request_state": "confirmed",
"ptr_request_pr_url": null,
"checklist": {
"ptr_requested": true,
"ptr_authored": false,
"ptr_merged": true,
"forward_confirmed": true
}
},
"ptr_hostname": "mta-64-16-239-170.msgtelnyx.com",
"dns_confirmed_at": "2026-10-14T20:12:41.552310Z",
"quarantine_until": null,
"released_at": null,
"suspension_reason": null,
"created_at": "2026-09-30T02:03:09.474123Z",
"updated_at": "2026-10-24T21:45:00.000000Z"
}
}{
"errors": [
{
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>",
"parameter": "<string>"
}
}
]
}{
"errors": [
{
"code": "<string>",
"title": "<string>",
"detail": "<string>",
"source": {
"pointer": "<string>",
"parameter": "<string>"
}
}
]
}{
"errors": [
{
"code": "10001",
"title": "Not Found",
"detail": "The requested dedicated IP was not found"
}
]
}{
"errors": [
{
"code": "40901",
"title": "Conflict",
"detail": "a suspended dedicated IP is operator-held and cannot be activated by customer action (operator suspension: abuse review)"
}
]
}{
"errors": [
{
"code": "10015",
"title": "Validation Failed",
"detail": "complete_warmup requires status warming_up (cannot complete warmup from provisioning)",
"source": {
"pointer": "/data/attributes/status"
}
}
]
}