API Reference
Key Admin
Calls and history

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

GET/domains/~/users/{user}/vmailnag

Returns how and when a user is reminded about unheard voicemail.

Read Key Admin switch: Voicemail, Read. Read only keys also work. Sensitive data

Parameters

NameInTypeNotes
user requiredpathstringThe 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)
FieldTypeNotes
domainstringThe account the item belongs to. Max length 64
userstringThe user ID (extension).
voicemail-reminder-phonecall-enabledstringTurns voicemail reminder phonecall on or off (yes or no). One of: yes, no Default no
voicemail-reminder-phonecall-phonenumber-arrayarray of integer
voicemail-reminder-sms-enabledstringTurns voicemail reminder sms on or off (yes or no). One of: yes, no Default no
voicemail-reminder-sms-phonenumber-arrayarray of integer
voicemail-reminder-email-enabledstringTurns voicemail reminder email on or off (yes or no). One of: yes, no Default no
voicemail-reminder-email-address-arrayarray of string
voicemail-reminder-interval-minutesintegerVoicemail reminder interval, in minutes.
voicemail-reminder-last-sentinteger
voicemail-reminder-control-serverstring

Count voicemail reminders for a user

GET/domains/~/users/{user}/vmailnag/count

Returns 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

NameInTypeNotes
user requiredpathstringThe 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)
FieldTypeNotes
totalintegerHow many items matched.

Other responses: 400, 401, 403, 404. See errors.

List voicemail in a folder

GET/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

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16
folder requiredpathstringVoicemail 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)
FieldTypeNotes
filenamestring
ordinal-orderinteger
file-duration-secondsintegerFile duration, in seconds.
file-size-kilobytesstring
created-datetimestringCreated (date and time).
file-access-urlstring
file-script-textstring
file-sourcestring
text-to-speech-voice-idstringID of the text to speech voice. Default en-US-Wavenet-C
text-to-speech-languagestring Default en_US
FromNamestring
FromUserstring
FromHoststring
NmsAnistring
recorded-datetimestringRecorded (date and time).
NmsRecStartTimestring
NmsRecDurationstring
TimeZonestring
transcriptionstring

Count voicemail in a folder

GET/domains/~/users/{user}/voicemails/{folder}/count

Returns 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

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16
folder requiredpathstringVoicemail 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

GET/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

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16
folder requiredpathstringVoicemail folder: new, save or trash.
filename requiredpathstringThe 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)
FieldTypeNotes
filenamestring
ordinal-orderinteger
file-duration-secondsintegerFile duration, in seconds.
file-size-kilobytesstring
created-datetimestringCreated (date and time).
file-access-urlstring
file-script-textstring
file-sourcestring
text-to-speech-voice-idstringID of the text to speech voice. Default en-US-Wavenet-C
text-to-speech-languagestring Default en_US
FromNamestring
FromUserstring
FromHoststring
NmsAnistring
recorded-datetimestringRecorded (date and time).
NmsRecStartTimestring
NmsRecDurationstring
TimeZonestring
transcriptionstring

Turn on voicemail reminders

POST/domains/~/users/{user}/vmailnag

Adds a new voicemail reminder for one user.

Write Key Admin switch: Voicemail, Write. Sensitive data

Parameters

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16

Request body application/json

FieldTypeNotes
voicemail-reminder-phonecall-enabledstringTurns voicemail reminder phonecall on or off (yes or no). One of: yes, no Default no
voicemail-reminder-phonecall-phonenumber-arrayarray of integer
voicemail-reminder-sms-enabledstringTurns voicemail reminder sms on or off (yes or no). One of: yes, no Default no
voicemail-reminder-sms-phonenumber-arrayarray of integer
voicemail-reminder-email-enabledstringTurns voicemail reminder email on or off (yes or no). One of: yes, no Default no
voicemail-reminder-email-address-arrayarray of string
voicemail-reminder-interval-minutesintegerVoicemail reminder interval, in minutes.
voicemail-reminder-last-sentinteger
voicemail-reminder-control-serverstring

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

PUT/domains/~/users/{user}/vmailnag

Changes voicemail reminders for one user.

Write Key Admin switch: Voicemail, Write. Sensitive data

Parameters

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16

Request body application/json

FieldTypeNotes
voicemail-reminder-phonecall-enabledstringTurns voicemail reminder phonecall on or off (yes or no). One of: yes, no Default no
voicemail-reminder-phonecall-phonenumber-arrayarray of integer
voicemail-reminder-sms-enabledstringTurns voicemail reminder sms on or off (yes or no). One of: yes, no Default no
voicemail-reminder-sms-phonenumber-arrayarray of integer
voicemail-reminder-email-enabledstringTurns voicemail reminder email on or off (yes or no). One of: yes, no Default no
voicemail-reminder-email-address-arrayarray of string
voicemail-reminder-interval-minutesintegerVoicemail reminder interval, in minutes.
voicemail-reminder-last-sentinteger
voicemail-reminder-control-serverstring

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

PATCH/domains/~/users/{user}/voicemails/{folder}/{filename}/forward

Sends a copy of a voicemail message to another user's mailbox.

Write Key Admin switch: Voicemail, Write. Sensitive data

Parameters

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16
folder requiredpathstringVoicemail folder: new, save or trash.
filename requiredpathstringThe voicemail message's file name, as returned when you list the folder.

Request body application/json

FieldTypeNotes
voicemail-forward-new-destination requiredstring

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)
FieldTypeNotes
filenamestring
ordinal-orderinteger
file-duration-secondsintegerFile duration, in seconds.
file-size-kilobytesstring
created-datetimestringCreated (date and time).
file-access-urlstring
file-script-textstring
file-sourcestring
text-to-speech-voice-idstringID of the text to speech voice. Default en-US-Wavenet-C
text-to-speech-languagestring Default en_US
FromNamestring
FromUserstring
FromHoststring
NmsAnistring
recorded-datetimestringRecorded (date and time).
NmsRecStartTimestring
NmsRecDurationstring
TimeZonestring
transcriptionstring

Save a voicemail message

PATCH/domains/~/users/{user}/voicemails/{folder}/{filename}/save

Moves a voicemail message to the saved folder.

Write Key Admin switch: Voicemail, Write. Sensitive data

Parameters

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16
folder requiredpathstringVoicemail folder: new, save or trash.
filename requiredpathstringThe 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)
FieldTypeNotes
filenamestring
ordinal-orderinteger
file-duration-secondsintegerFile duration, in seconds.
file-size-kilobytesstring
created-datetimestringCreated (date and time).
file-access-urlstring
file-script-textstring
file-sourcestring
text-to-speech-voice-idstringID of the text to speech voice. Default en-US-Wavenet-C
text-to-speech-languagestring Default en_US
FromNamestring
FromUserstring
FromHoststring
NmsAnistring
recorded-datetimestringRecorded (date and time).
NmsRecStartTimestring
NmsRecDurationstring
TimeZonestring
transcriptionstring

Turn off voicemail reminders

DELETE/domains/~/users/{user}/vmailnag

Removes voicemail reminders for one user.

Write Key Admin switch: Voicemail, Write. Sensitive data

Parameters

NameInTypeNotes
user requiredpathstringThe 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)
FieldTypeNotes
codeintegerHTTP status code.
messagestringWhat happened, in words.

Delete a voicemail message

DELETE/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

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16
folder requiredpathstringVoicemail folder: new, save or trash.
filename requiredpathstringThe 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)
FieldTypeNotes
filenamestring
ordinal-orderinteger
file-duration-secondsintegerFile duration, in seconds.
file-size-kilobytesstring
created-datetimestringCreated (date and time).
file-access-urlstring
file-script-textstring
file-sourcestring
text-to-speech-voice-idstringID of the text to speech voice. Default en-US-Wavenet-C
text-to-speech-languagestring Default en_US
FromNamestring
FromUserstring
FromHoststring
NmsAnistring
recorded-datetimestringRecorded (date and time).
NmsRecStartTimestring
NmsRecDurationstring
TimeZonestring
transcriptionstring