IP Pool Management Guide
IP pools allow you to manage dedicated IP addresses for email sending, providing better control over deliverability and sender reputation.
Overview
IP pools enable you to:
- Segment traffic - Separate transactional and marketing emails
- Protect reputation - Isolate different email types
- Scale sending - Distribute load across multiple IPs
- Warm up IPs - Gradually increase volume on new IPs
Supported Providers
Currently, IP pools are supported for:
| Provider | Pool ID Format |
|---|---|
| SparkPost | Custom pool name |
Create an IP Pool
Endpoint
POST /v1/ip-pool/add
Purpose
Creates a new IP pool for organizing and managing dedicated IP addresses.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
provider | string | ✅ Yes | Email service provider. Currently supported: "sparkpost" |
pool_id | string | ✅ Yes | Unique identifier for the pool. Use descriptive names like "transactional", "marketing", "priority" |
Example Request
curl -X POST https://api.edith.example.com/v1/ip-pool/add \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"provider": "sparkpost",
"pool_id": "transactional-emails"
}'
Response
{
"success": true,
"message": "IP pool created successfully",
"data": {
"pool_id": "transactional-emails",
"provider": "sparkpost",
"created_at": "2024-01-15T10:30:00Z",
"details": {}
}
}
Get an IP Pool
Endpoint
GET /v1/ip-pool/get
Purpose
Retrieves details of a specific IP pool.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | string | ✅ Yes | The provider name (e.g., "sparkpost") |
pool_id | string | ✅ Yes | The pool identifier |
Example Request
curl -X GET "https://api.edith.example.com/v1/ip-pool/get?provider=sparkpost&pool_id=transactional-emails" \
-H "Authorization: Bearer YOUR_TOKEN"
Response
{
"success": true,
"message": "IP pool retrieved successfully",
"data": {
"pool_id": "transactional-emails",
"provider": "sparkpost",
"created_at": "2024-01-15T10:30:00Z",
"deleted_at": null,
"details": {
"ips": ["192.168.1.1", "192.168.1.2"],
"status": "active"
}
}
}
List IP Pools
Endpoint
GET /v1/ip-pool/list
Purpose
Retrieves a paginated list of all IP pools, optionally filtered by provider.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | string | No | Filter pools by provider |
page_token | string | No | Pagination token for next page |
Example Request - All Pools
curl -X GET "https://api.edith.example.com/v1/ip-pool/list" \
-H "Authorization: Bearer YOUR_TOKEN"
Example Request - Filter by Provider
curl -X GET "https://api.edith.example.com/v1/ip-pool/list?provider=sparkpost" \
-H "Authorization: Bearer YOUR_TOKEN"
Response
{
"success": true,
"message": "IP pools listed successfully",
"data": {
"ip_pools": [
{
"pool_id": "transactional-emails",
"provider": "sparkpost",
"created_at": "2024-01-15T10:30:00Z",
"details": {}
},
{
"pool_id": "marketing-campaigns",
"provider": "sparkpost",
"created_at": "2024-01-10T08:00:00Z",
"details": {}
}
],
"next_page_token": null,
"total_count": 2
}
}
Delete an IP Pool
Endpoint
DELETE /v1/ip-pool/delete
Purpose
Permanently deletes an IP pool.
⚠️ Warning: Ensure no active sending configurations use this pool before deletion.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | string | ✅ Yes | The provider name |
pool_id | string | ✅ Yes | The pool identifier to delete |
Example Request
curl -X DELETE "https://api.edith.example.com/v1/ip-pool/delete?provider=sparkpost&pool_id=old-pool" \
-H "Authorization: Bearer YOUR_TOKEN"
Response
{
"success": true,
"message": "IP pool deleted successfully"
}
Using IP Pools When Sending
Reference an IP pool in the email send request:
curl -X POST https://api.edith.example.com/v1/email/send \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"from": {
"email": "notifications@mail.yourcompany.com",
"name": "YourCompany"
},
"to": [
{ "email": "recipient@example.com" }
],
"subject": "Order Confirmation",
"content": [
{ "type": "text/html", "value": "<p>Your order is confirmed!</p>" }
],
"mailer_id": "domain_01JC3BBW8S9YGX2VNKG5MD7BTA",
"settings": {
"ip_pool": "transactional-emails",
"open_tracking": { "enable": true }
}
}'
Best Practices
1. Segment by Email Type
Create separate pools for different email categories:
| Pool Name | Use Case |
|---|---|
transactional | Password resets, order confirmations, receipts |
marketing | Newsletters, promotions, announcements |
onboarding | Welcome series, user activation |
alerts | Security alerts, system notifications |
2. IP Warming
When using new IPs:
- Start with low volume (50-100 emails/day)
- Gradually increase over 2-4 weeks
- Focus on engaged recipients initially
- Monitor deliverability metrics
Warming Schedule Example:
| Week | Daily Volume |
|---|---|
| 1 | 50-100 |
| 2 | 200-500 |
| 3 | 1,000-2,000 |
| 4 | 5,000-10,000 |
| 5+ | Production volume |
3. Monitor Reputation
Track metrics per pool:
- Bounce rates
- Spam complaints
- Inbox placement
- Engagement rates
4. Fallback Strategy
If a pool's reputation degrades:
- Temporarily route to a different pool
- Investigate and fix the cause
- Re-warm if necessary
Common Errors
| Error | Cause | Solution |
|---|---|---|
IP pool already exists | Pool ID is taken | Use a unique pool_id |
IP pool not found | Invalid pool_id or provider | Verify the pool exists |
Invalid provider | Unsupported provider | Use a supported provider |
Pool in use | Pool is referenced by sending configs | Update configs before deleting |
Related Endpoints
- Send Email - Use
settings.ip_poolto route emails - Domain Management - Associate IPs with domains