Dynamic IP Pools allow you to group your dedicated IPs into customized "pools" based on sender reputation. Domains enrolled in Dynamic IP Pools will be assigned to a pool based on the result of periodic health checks.
Domains enrolled in the Dynamic IP pools feature will be assigned an IP pool based on reputation. The feature must be enabled and configured before enrolling domains.
{- "message": "success"
}
The behavior of this endpoint depends on the value of the replacement_ip
and replacement_pool_id
parameters.
One of these parameters (but not both) must be provided. If replacement_ip
is provided, the IP(s) will be assigned to the domain.
replacement_ip
can include one of the following:
shared
: if the account is eligible for shared IPs, a suitable shared IP will be chosen and added to the domain
The 'replacement_ip' parameter cannot include any IPs that are already assigned to a Dedicated IP Pool or a Dynamic IP Pool.
If replacement_pool_id
is provided, the Dedicated IP Pool will be assigned to the domain.{- "message": "success"
}
Lists all domains that are not already enrolled in dynamic IP pools.
{- "items": [
- {
- "account_id": "685d9af2c8fb0aedc47912fa",
- "id": "685d9af2c8fb0aedc47912f9",
- "name": "example.com"
}
]
}
Begins an asynchronous background job to assign all domains to Dynamic IP Pools. This can also include domains belonging to subaccounts depending on the provided parameters. The Dynamic IP Pools feature must be enabled for the account and the request must come from a parent account user.
{- "message": "started"
}
Returns the list of IPs belonging to each of the account's Dynamic IP Pools.
{- "good_reputation": [
- "1.0.0.1",
- "1.0.0.2"
], - "poor_reputation": [
- "1.0.0.3"
], - "new_senders": [
- "1.0.0.4"
], - "pools": [
- {
- "account_id": "685d9af2c8fb0aedc4791300",
- "enabled": true,
- "id": "685d9af2c8fb0aedc4791301",
- "ips": [
- "1.0.0.1",
- "1.0.0.2"
], - "name": "dynamic_good"
}, - {
- "account_id": "685d9af2c8fb0aedc4791300",
- "enabled": true,
- "id": "685d9af2c8fb0aedc4791302",
- "ips": [
- "1.0.0.3"
], - "name": "dynamic_poor"
}, - {
- "account_id": "685d9af2c8fb0aedc4791300",
- "enabled": true,
- "id": "685d9af2c8fb0aedc4791303",
- "ips": [
- "1.0.0.4"
], - "name": "dynamic_new"
}
]
}
Any existing IPs in dynamic IP pools will be replaced. All IPs must be dedicated IPs and belong to the account. Additionally, each dynamic IP pool must contain at least 1 IP that is not currently warming.
{- "good_reputation": [
- "1.0.0.1",
- "1.0.0.2"
], - "poor_reputation": [
- "1.0.0.3"
], - "new_senders": [
- "1.0.0.4"
]
}
Adds a given IP to a Dynamic IP Pool. The IP must be dedicated and belong to the account.
A 200 response
"this is needed just so that examples are included into the output"
Adds and/or removes IPs to/from the specified dynamic IP pool. A given pool is required to have at least 1 IP that is not actively warming. Additionally, a single IP cannot be assigned to multiple dynamic pools.
A 200 response
{- "message": "success"
}
Retrieves all domains enrolled in dynamic IP pools across the parent account and subaccounts.
{- "items": [
- {
- "id": "685da027b1d02ec00a83fd9b",
- "account_id": "685da027b1d02ec00a83fd9c",
- "name": "example.com",
- "registered_at": "0001-01-01T00:00:00Z",
- "pool": "dynamic_good",
- "bounce_rate": 0.01,
- "complaint_rate": 0.1,
- "processed_count": 100
}, - {
- "id": "685da027b1d02ec00a83fd9d",
- "account_id": "685da027b1d02ec00a83fd9e",
- "name": "example.com",
- "registered_at": "0001-01-01T00:00:00Z",
- "pool": "dynamic_good",
- "bounce_rate": 0.01,
- "complaint_rate": 0,
- "processed_count": 100
}
], - "total_items": 2,
- "paging": { }
}
Runs a health check on a domain and returns which pool it would be placed in. It does NOT enroll the domain or set the band
{- "pool": "dynamic_poor",
- "bounce_rate": {
- "band": "dynamic_poor",
- "value": 0.25
}, - "complaint_rate": {
- "value": 0.0002,
- "band": "dynamic_good"
}
}
Retrieves a domain's history records
A 200 response
id required | string |
owning_account_id required | string |
account_id required | string |
account_name required | string |
domain_id required | string |
domain_name required | string |
new_band required | string |
prev_band required | string |
reason required | string |
bounce_rate required | number or null <float> |
timestamp required | string <date-time> |
complaint_rate | number or null <float> |
processed_count | integer or null <int64> |
initiated_by | string |
{- "id": "000000000000000000000000",
- "owning_account_id": "000000000000000000000000",
- "account_id": "685da027b1d02ec00a83fda0",
- "domain_id": "685da027b1d02ec00a83fd9f",
- "domain_name": "test.com",
- "new_band": "dynamic_good",
- "prev_band": "dynamic_poor",
- "reason": "Multiple metrics in good threshold",
- "bounce_rate": 0.2,
- "complaint_rate": 0.1,
- "processed_count": 100,
- "timestamp": "2025-06-26T14:31:51.870037-05:00"
}
Overrides a domain's dynamic IP pool assignment. A domain's pool will not be updated by health checks while an override is present.
{- "message": "success"
}
Removes any dynamic IP pool override for a domain. The domain's pool assignment will be managed by health checks.
{- "message": "success"
}
Retrieve history records for all domains assigned to Dynamic IP Pools across the parent and subaccounts.
Limit | integer [ 1 .. 100 ] The maximum number of events to return |
include_subaccounts | boolean If true, includes events from all subaccounts in addition to events from the parent account |
domain | string Filter events by domain name |
before | string Filter events emitted before a given timestamp (Format: Mon, 02 Jan 2006 15:04:05 MST) |
after | string Filter events emitted after a given timestamp (Format: Mon, 02 Jan 2006 15:04:05 MST) |
moved_to | string Filter events by which Dynamic Pool a domain was moved to (ex. dynamic_good, dynamic_poor, etc.) |
moved_from | string Filter events by which Dynamic Pool a domain was moved from (ex. dynamic_good, dynamic_poor, etc.) |
{- "items": [
- {
- "id": "685da027b1d02ec00a83fda1",
- "owning_account_id": "000000000000000000000000",
- "account_id": "685da027b1d02ec00a83fda2",
- "account_name": "My Account",
- "domain_id": "685da027b1d02ec00a83fda3",
- "domain_name": "test.com",
- "new_band": "dynamic_good",
- "prev_band": "dynamic_poor",
- "reason": "bounce_rate in good threshold",
- "bounce_rate": 0.04,
- "complaint_rate": 0.0001,
- "initiated_by": "system",
- "timestamp": "0001-01-01T00:00:00Z"
}, - {
- "id": "685da027b1d02ec00a83fda4",
- "owning_account_id": "000000000000000000000000",
- "account_id": "685da027b1d02ec00a83fda5",
- "account_name": "My Account",
- "domain_id": "685da027b1d02ec00a83fda6",
- "domain_name": "test.com",
- "new_band": "dynamic_good",
- "prev_band": "dynamic_new",
- "reason": "Multiple metrics in good threshold",
- "bounce_rate": 0.04,
- "complaint_rate": 0.0001,
- "initiated_by": "system",
- "timestamp": "0001-01-01T00:00:00Z"
}
], - "total_items": 2,
- "paging": { }
}