Create a pool
curl --request POST \
--url https://sandbox.voice.miraiminds.co/v2/phone-pools \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Outreach",
"purpose": "outreach",
"number_ids": [
"phn_01K9Q3A7C2E4G6J8M0P2R4T6V8"
]
}
'import requests
url = "https://sandbox.voice.miraiminds.co/v2/phone-pools"
payload = {
"name": "Outreach",
"purpose": "outreach",
"number_ids": ["phn_01K9Q3A7C2E4G6J8M0P2R4T6V8"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const url = 'https://sandbox.voice.miraiminds.co/v2/phone-pools';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Outreach',
purpose: 'outreach',
number_ids: ['phn_01K9Q3A7C2E4G6J8M0P2R4T6V8']
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));{
"id": "ppl_01K9V2C4E6G8J0M2P4R6T8W0Y2",
"name": "Outreach",
"purpose": "outreach",
"max_per_hour": 60,
"max_per_day": 400,
"sticky_retries": true,
"auto_rest": true,
"min_healthy": 1,
"default_for_campaigns": false,
"version": 1,
"created_at": "2026-10-15T06:40:12.118204Z",
"updated_at": "2026-10-15T06:40:12.118204Z",
"number_ids": [
"phn_01K9Q3A7C2E4G6J8M0P2R4T6V8"
],
"object": "phone_pool",
"numbers": 1,
"healthy": 1,
"resting": 0,
"answer_rate_7d": 0.6955,
"used_by": [],
"members": [
{
"id": "phn_01K9Q3A7C2E4G6J8M0P2R4T6V8",
"connection_id": "tcn_01K9Q2W5D8F3H6J9KMNPQRSTVW",
"provider": "plivo",
"ownership": "customer",
"number": "+918048123456",
"agent_id": "agt_01K2M4P7QRSTVWXYZ0A1B2C3",
"state": "ready",
"connection_state": "verified",
"version": 3,
"webhook_url": "",
"created_at": "2026-10-09T07:02:11.903215Z",
"health": {
"state": "active",
"resting_until": null,
"cooling_until": null,
"retired_at": null,
"warming": null,
"attempts_this_hour": 12,
"attempts_today": 24,
"answers_today": 17,
"answer_rate_7d": 0.6955,
"series_7d": [
{
"day": "2026-10-09",
"attempts": 52,
"answers": 31
},
{
"day": "2026-10-10",
"attempts": 60,
"answers": 39
},
{
"day": "2026-10-11",
"attempts": 0,
"answers": 0
},
{
"day": "2026-10-12",
"attempts": 58,
"answers": 41
},
{
"day": "2026-10-13",
"attempts": 61,
"answers": 40
},
{
"day": "2026-10-14",
"attempts": 59,
"answers": 43
},
{
"day": "2026-10-15",
"attempts": 24,
"answers": 17
}
],
"rests_today": 0
},
"pools": [
{
"id": "ppl_01K9V2C4E6G8J0M2P4R6T8W0Y2",
"name": "Outreach"
}
]
}
]
}Phone pools
Create a pool
number_ids are your numbers (List phone numbers), at least one that can make calls; a retired number can’t join. A number can be in several pools.
name is 1 to 100 characters. max_per_hour (1 to 180) is each number’s pace; above 60 an hour a number is more likely to be flagged as spam and answered less. max_per_day (1 to 10000) defaults to 400. min_healthy (0 to the pool’s size, default 2 or the size if smaller) is when you hear about it: fewer healthy numbers than that sends phone_pool.degraded. The answer is the pool with members.
POST
/
v2
/
phone-pools
Create a pool
curl --request POST \
--url https://sandbox.voice.miraiminds.co/v2/phone-pools \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Outreach",
"purpose": "outreach",
"number_ids": [
"phn_01K9Q3A7C2E4G6J8M0P2R4T6V8"
]
}
'import requests
url = "https://sandbox.voice.miraiminds.co/v2/phone-pools"
payload = {
"name": "Outreach",
"purpose": "outreach",
"number_ids": ["phn_01K9Q3A7C2E4G6J8M0P2R4T6V8"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const url = 'https://sandbox.voice.miraiminds.co/v2/phone-pools';
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Outreach',
purpose: 'outreach',
number_ids: ['phn_01K9Q3A7C2E4G6J8M0P2R4T6V8']
})
};
fetch(url, options)
.then(res => res.json())
.then(json => console.log(json))
.catch(err => console.error(err));{
"id": "ppl_01K9V2C4E6G8J0M2P4R6T8W0Y2",
"name": "Outreach",
"purpose": "outreach",
"max_per_hour": 60,
"max_per_day": 400,
"sticky_retries": true,
"auto_rest": true,
"min_healthy": 1,
"default_for_campaigns": false,
"version": 1,
"created_at": "2026-10-15T06:40:12.118204Z",
"updated_at": "2026-10-15T06:40:12.118204Z",
"number_ids": [
"phn_01K9Q3A7C2E4G6J8M0P2R4T6V8"
],
"object": "phone_pool",
"numbers": 1,
"healthy": 1,
"resting": 0,
"answer_rate_7d": 0.6955,
"used_by": [],
"members": [
{
"id": "phn_01K9Q3A7C2E4G6J8M0P2R4T6V8",
"connection_id": "tcn_01K9Q2W5D8F3H6J9KMNPQRSTVW",
"provider": "plivo",
"ownership": "customer",
"number": "+918048123456",
"agent_id": "agt_01K2M4P7QRSTVWXYZ0A1B2C3",
"state": "ready",
"connection_state": "verified",
"version": 3,
"webhook_url": "",
"created_at": "2026-10-09T07:02:11.903215Z",
"health": {
"state": "active",
"resting_until": null,
"cooling_until": null,
"retired_at": null,
"warming": null,
"attempts_this_hour": 12,
"attempts_today": 24,
"answers_today": 17,
"answer_rate_7d": 0.6955,
"series_7d": [
{
"day": "2026-10-09",
"attempts": 52,
"answers": 31
},
{
"day": "2026-10-10",
"attempts": 60,
"answers": 39
},
{
"day": "2026-10-11",
"attempts": 0,
"answers": 0
},
{
"day": "2026-10-12",
"attempts": 58,
"answers": 41
},
{
"day": "2026-10-13",
"attempts": 61,
"answers": 40
},
{
"day": "2026-10-14",
"attempts": 59,
"answers": 43
},
{
"day": "2026-10-15",
"attempts": 24,
"answers": 17
}
],
"rests_today": 0
},
"pools": [
{
"id": "ppl_01K9V2C4E6G8J0M2P4R6T8W0Y2",
"name": "Outreach"
}
]
}
]
}Authorizations
Your workspace secret key, sk_live_ followed by 32 hex characters. Create one in the console under Developers.
Body
application/json
Response
Created
⌘I