Voicemail
Voicemail messages live in folders (new, saved, trash) in each user's mailbox. Voicemail reminders nag a user about unheard messages.
In the Key Admin this is the Voicemail switch. Read lets a key call the GET endpoints below. Write lets it call the ones that change data.
This feature holds sensitive data about callers and calls. Keep what you pull secure and only keep it as long as you need it.
Get voicemail reminder settings
/domains/~/users/{user}/vmailnagReturns how and when a user is reminded about unheard voicemail.
Read Key Admin switch: Voicemail, Read. Read only keys also work. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"domain": "string",
"user": "1001",
"voicemail-reminder-phonecall-enabled": "yes",
"voicemail-reminder-phonecall-phonenumber-array": [
1
],
"voicemail-reminder-sms-enabled": "yes",
"voicemail-reminder-sms-phonenumber-array": [
1
],
"voicemail-reminder-email-enabled": "yes",
"voicemail-reminder-email-address-array": [
"jane@example.com"
],
"...": "3 more fields"
}Response fields (11)
| Field | Type | Notes |
|---|---|---|
domain | string | The account the item belongs to. Max length 64 |
user | string | The user ID (extension). |
voicemail-reminder-phonecall-enabled | string | Turns voicemail reminder phonecall on or off (yes or no). One of: yes, no Default no |
voicemail-reminder-phonecall-phonenumber-array | array of integer | |
voicemail-reminder-sms-enabled | string | Turns voicemail reminder sms on or off (yes or no). One of: yes, no Default no |
voicemail-reminder-sms-phonenumber-array | array of integer | |
voicemail-reminder-email-enabled | string | Turns voicemail reminder email on or off (yes or no). One of: yes, no Default no |
voicemail-reminder-email-address-array | array of string | |
voicemail-reminder-interval-minutes | integer | Voicemail reminder interval, in minutes. |
voicemail-reminder-last-sent | integer | |
voicemail-reminder-control-server | string |
Count voicemail reminders for a user
/domains/~/users/{user}/vmailnag/countReturns how many voicemail reminders there are for one user, as {"total": n}.
Read Key Admin switch: Voicemail, Read. Read only keys also work. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag/count" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag/count", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag/count",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
{
"total": 1
}Response fields (1)
| Field | Type | Notes |
|---|---|---|
total | integer | How many items matched. |
Other responses: 400, 401, 403, 404. See errors.
List voicemail in a folder
/domains/~/users/{user}/voicemails/{folder}Returns a user's voicemail messages in one folder (new, saved or trash).
Read Key Admin switch: Voicemail, Read. Read only keys also work. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
folder required | path | string | Voicemail folder: new, save or trash. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
[
{
"filename": "string",
"ordinal-order": 1,
"file-duration-seconds": 1,
"file-size-kilobytes": "string",
"created-datetime": "2026-11-02 09:00:00",
"file-access-url": "https://example.com/webhooks/noodlevoice",
"file-script-text": "string",
"file-source": "string",
"...": "11 more fields"
}
]Response fields (19)
| Field | Type | Notes |
|---|---|---|
filename | string | |
ordinal-order | integer | |
file-duration-seconds | integer | File duration, in seconds. |
file-size-kilobytes | string | |
created-datetime | string | Created (date and time). |
file-access-url | string | |
file-script-text | string | |
file-source | string | |
text-to-speech-voice-id | string | ID of the text to speech voice. Default en-US-Wavenet-C |
text-to-speech-language | string | Default en_US |
FromName | string | |
FromUser | string | |
FromHost | string | |
NmsAni | string | |
recorded-datetime | string | Recorded (date and time). |
NmsRecStartTime | string | |
NmsRecDuration | string | |
TimeZone | string | |
transcription | string |
Count voicemail in a folder
/domains/~/users/{user}/voicemails/{folder}/countReturns how many voicemail messages there are for one user, as {"total": n}.
Read Key Admin switch: Voicemail, Read. Read only keys also work. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
folder required | path | string | Voicemail folder: new, save or trash. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/count" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/count", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/count",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
Returns a status code with a short JSON message.
Other responses: 400, 401, 403, 404. See errors.
Get a voicemail message
/domains/~/users/{user}/voicemails/{folder}/{filename}Returns one voicemail message, including a link to its audio.
Read Key Admin switch: Voicemail, Read. Read only keys also work. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
folder required | path | string | Voicemail folder: new, save or trash. |
filename required | path | string | The voicemail message's file name, as returned when you list the folder. |
Example request
curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}", {
method: "GET",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.get(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
[
{
"filename": "string",
"ordinal-order": 1,
"file-duration-seconds": 1,
"file-size-kilobytes": "string",
"created-datetime": "2026-11-02 09:00:00",
"file-access-url": "https://example.com/webhooks/noodlevoice",
"file-script-text": "string",
"file-source": "string",
"...": "11 more fields"
}
]Response fields (19)
| Field | Type | Notes |
|---|---|---|
filename | string | |
ordinal-order | integer | |
file-duration-seconds | integer | File duration, in seconds. |
file-size-kilobytes | string | |
created-datetime | string | Created (date and time). |
file-access-url | string | |
file-script-text | string | |
file-source | string | |
text-to-speech-voice-id | string | ID of the text to speech voice. Default en-US-Wavenet-C |
text-to-speech-language | string | Default en_US |
FromName | string | |
FromUser | string | |
FromHost | string | |
NmsAni | string | |
recorded-datetime | string | Recorded (date and time). |
NmsRecStartTime | string | |
NmsRecDuration | string | |
TimeZone | string | |
transcription | string |
Turn on voicemail reminders
/domains/~/users/{user}/vmailnagAdds a new voicemail reminder for one user.
Write Key Admin switch: Voicemail, Write. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
Request body application/json
| Field | Type | Notes |
|---|---|---|
voicemail-reminder-phonecall-enabled | string | Turns voicemail reminder phonecall on or off (yes or no). One of: yes, no Default no |
voicemail-reminder-phonecall-phonenumber-array | array of integer | |
voicemail-reminder-sms-enabled | string | Turns voicemail reminder sms on or off (yes or no). One of: yes, no Default no |
voicemail-reminder-sms-phonenumber-array | array of integer | |
voicemail-reminder-email-enabled | string | Turns voicemail reminder email on or off (yes or no). One of: yes, no Default no |
voicemail-reminder-email-address-array | array of string | |
voicemail-reminder-interval-minutes | integer | Voicemail reminder interval, in minutes. |
voicemail-reminder-last-sent | integer | |
voicemail-reminder-control-server | string |
Example request
curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag" \
-H "Authorization: Bearer $NOODLEVOICE_KEY" \
-H "Content-Type: application/json" \
-d '{
"voicemail-reminder-phonecall-enabled": "yes",
"voicemail-reminder-phonecall-phonenumber-array": [
1
],
"voicemail-reminder-sms-enabled": "yes",
"voicemail-reminder-sms-phonenumber-array": [
1
],
"voicemail-reminder-email-enabled": "yes"
}'const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag", {
method: "POST",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"voicemail-reminder-phonecall-enabled": "yes",
"voicemail-reminder-phonecall-phonenumber-array": [
1
],
"voicemail-reminder-sms-enabled": "yes",
"voicemail-reminder-sms-phonenumber-array": [
1
],
"voicemail-reminder-email-enabled": "yes"
}),
});
const data = await res.json();import os, requests
r = requests.post(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
json={
"voicemail-reminder-phonecall-enabled": "yes",
"voicemail-reminder-phonecall-phonenumber-array": [
1
],
"voicemail-reminder-sms-enabled": "yes",
"voicemail-reminder-sms-phonenumber-array": [
1
],
"voicemail-reminder-email-enabled": "yes"
},
)
print(r.status_code, r.json())Response 202
Returns a status code with a short JSON message.
Update voicemail reminders
/domains/~/users/{user}/vmailnagChanges voicemail reminders for one user.
Write Key Admin switch: Voicemail, Write. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
Request body application/json
| Field | Type | Notes |
|---|---|---|
voicemail-reminder-phonecall-enabled | string | Turns voicemail reminder phonecall on or off (yes or no). One of: yes, no Default no |
voicemail-reminder-phonecall-phonenumber-array | array of integer | |
voicemail-reminder-sms-enabled | string | Turns voicemail reminder sms on or off (yes or no). One of: yes, no Default no |
voicemail-reminder-sms-phonenumber-array | array of integer | |
voicemail-reminder-email-enabled | string | Turns voicemail reminder email on or off (yes or no). One of: yes, no Default no |
voicemail-reminder-email-address-array | array of string | |
voicemail-reminder-interval-minutes | integer | Voicemail reminder interval, in minutes. |
voicemail-reminder-last-sent | integer | |
voicemail-reminder-control-server | string |
Example request
curl -X PUT "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag" \
-H "Authorization: Bearer $NOODLEVOICE_KEY" \
-H "Content-Type: application/json" \
-d '{
"voicemail-reminder-phonecall-enabled": "yes",
"voicemail-reminder-phonecall-phonenumber-array": [
1
],
"voicemail-reminder-sms-enabled": "yes",
"voicemail-reminder-sms-phonenumber-array": [
1
],
"voicemail-reminder-email-enabled": "yes"
}'const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag", {
method: "PUT",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"voicemail-reminder-phonecall-enabled": "yes",
"voicemail-reminder-phonecall-phonenumber-array": [
1
],
"voicemail-reminder-sms-enabled": "yes",
"voicemail-reminder-sms-phonenumber-array": [
1
],
"voicemail-reminder-email-enabled": "yes"
}),
});
const data = await res.json();import os, requests
r = requests.put(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
json={
"voicemail-reminder-phonecall-enabled": "yes",
"voicemail-reminder-phonecall-phonenumber-array": [
1
],
"voicemail-reminder-sms-enabled": "yes",
"voicemail-reminder-sms-phonenumber-array": [
1
],
"voicemail-reminder-email-enabled": "yes"
},
)
print(r.status_code, r.json())Response 202
Returns a status code with a short JSON message.
Forward a voicemail message
/domains/~/users/{user}/voicemails/{folder}/{filename}/forwardSends a copy of a voicemail message to another user's mailbox.
Write Key Admin switch: Voicemail, Write. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
folder required | path | string | Voicemail folder: new, save or trash. |
filename required | path | string | The voicemail message's file name, as returned when you list the folder. |
Request body application/json
| Field | Type | Notes |
|---|---|---|
voicemail-forward-new-destination required | string |
Example request
curl -X PATCH "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}/forward" \
-H "Authorization: Bearer $NOODLEVOICE_KEY" \
-H "Content-Type: application/json" \
-d '{
"voicemail-forward-new-destination": "jane@example.com"
}'const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}/forward", {
method: "PATCH",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"voicemail-forward-new-destination": "jane@example.com"
}),
});
const data = await res.json();import os, requests
r = requests.patch(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}/forward",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
json={
"voicemail-forward-new-destination": "jane@example.com"
},
)
print(r.status_code, r.json())Response 200
[
{
"filename": "string",
"ordinal-order": 1,
"file-duration-seconds": 1,
"file-size-kilobytes": "string",
"created-datetime": "2026-11-02 09:00:00",
"file-access-url": "https://example.com/webhooks/noodlevoice",
"file-script-text": "string",
"file-source": "string",
"...": "11 more fields"
}
]Response fields (19)
| Field | Type | Notes |
|---|---|---|
filename | string | |
ordinal-order | integer | |
file-duration-seconds | integer | File duration, in seconds. |
file-size-kilobytes | string | |
created-datetime | string | Created (date and time). |
file-access-url | string | |
file-script-text | string | |
file-source | string | |
text-to-speech-voice-id | string | ID of the text to speech voice. Default en-US-Wavenet-C |
text-to-speech-language | string | Default en_US |
FromName | string | |
FromUser | string | |
FromHost | string | |
NmsAni | string | |
recorded-datetime | string | Recorded (date and time). |
NmsRecStartTime | string | |
NmsRecDuration | string | |
TimeZone | string | |
transcription | string |
Save a voicemail message
/domains/~/users/{user}/voicemails/{folder}/{filename}/saveMoves a voicemail message to the saved folder.
Write Key Admin switch: Voicemail, Write. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
folder required | path | string | Voicemail folder: new, save or trash. |
filename required | path | string | The voicemail message's file name, as returned when you list the folder. |
Example request
curl -X PATCH "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}/save" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}/save", {
method: "PATCH",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.patch(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}/save",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
[
{
"filename": "string",
"ordinal-order": 1,
"file-duration-seconds": 1,
"file-size-kilobytes": "string",
"created-datetime": "2026-11-02 09:00:00",
"file-access-url": "https://example.com/webhooks/noodlevoice",
"file-script-text": "string",
"file-source": "string",
"...": "11 more fields"
}
]Response fields (19)
| Field | Type | Notes |
|---|---|---|
filename | string | |
ordinal-order | integer | |
file-duration-seconds | integer | File duration, in seconds. |
file-size-kilobytes | string | |
created-datetime | string | Created (date and time). |
file-access-url | string | |
file-script-text | string | |
file-source | string | |
text-to-speech-voice-id | string | ID of the text to speech voice. Default en-US-Wavenet-C |
text-to-speech-language | string | Default en_US |
FromName | string | |
FromUser | string | |
FromHost | string | |
NmsAni | string | |
recorded-datetime | string | Recorded (date and time). |
NmsRecStartTime | string | |
NmsRecDuration | string | |
TimeZone | string | |
transcription | string |
Turn off voicemail reminders
/domains/~/users/{user}/vmailnagRemoves voicemail reminders for one user.
Write Key Admin switch: Voicemail, Write. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
Example request
curl -X DELETE "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag", {
method: "DELETE",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.delete(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/vmailnag",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 202
{
"code": 1,
"message": "Hello from NoodleVoice"
}Response fields (2)
| Field | Type | Notes |
|---|---|---|
code | integer | HTTP status code. |
message | string | What happened, in words. |
Delete a voicemail message
/domains/~/users/{user}/voicemails/{folder}/{filename}Moves a voicemail message to the trash, or removes it if it's already there.
Write Key Admin switch: Voicemail, Write. Sensitive data
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
user required | path | string | The user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16 |
folder required | path | string | Voicemail folder: new, save or trash. |
filename required | path | string | The voicemail message's file name, as returned when you list the folder. |
Example request
curl -X DELETE "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}" \
-H "Authorization: Bearer $NOODLEVOICE_KEY"const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}", {
method: "DELETE",
headers: {
Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
},
});
const data = await res.json();import os, requests
r = requests.delete(
"https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/voicemails/new/{filename}",
headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())Response 200
[
{
"filename": "string",
"ordinal-order": 1,
"file-duration-seconds": 1,
"file-size-kilobytes": "string",
"created-datetime": "2026-11-02 09:00:00",
"file-access-url": "https://example.com/webhooks/noodlevoice",
"file-script-text": "string",
"file-source": "string",
"...": "11 more fields"
}
]Response fields (19)
| Field | Type | Notes |
|---|---|---|
filename | string | |
ordinal-order | integer | |
file-duration-seconds | integer | File duration, in seconds. |
file-size-kilobytes | string | |
created-datetime | string | Created (date and time). |
file-access-url | string | |
file-script-text | string | |
file-source | string | |
text-to-speech-voice-id | string | ID of the text to speech voice. Default en-US-Wavenet-C |
text-to-speech-language | string | Default en_US |
FromName | string | |
FromUser | string | |
FromHost | string | |
NmsAni | string | |
recorded-datetime | string | Recorded (date and time). |
NmsRecStartTime | string | |
NmsRecDuration | string | |
TimeZone | string | |
transcription | string |