API Reference
Key Admin
Messaging and integrations

Text messages (SMS)

Text messaging covers SMS, MMS and internal chat. Messages are grouped into threads (message sessions) per user. SMS numbers are the numbers that can send and receive texts.

In the Key Admin this is the Text messages (SMS) 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.

List SMS blocks

GET/domains/~/smsblocks

Returns the SMS blocks on the account.

Read Key Admin switch: Text messages (SMS), Read. Read only keys also work. Sensitive data

Example request

curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks", {
  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/~/smsblocks",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())

Response 200

[
  {
    "id": "string",
    "requesting-number": "15555550123",
    "blocked-number": "15555550123",
    "domain": "string",
    "status": "active",
    "created-datetime": "2026-11-02 09:00:00",
    "last-modified-datetime": "2026-11-02 09:00:00"
  }
]
Response fields (7)
FieldTypeNotes
idstringThe item's ID.
requesting-numberstring (e164)Requesting number.
blocked-numberstring (e164)Blocked number.
domainstringThe account the item belongs to.
statusstringCurrent status. One of: active, inactive Default active
created-datetimestring (date-time)Created (date and time).
last-modified-datetimestring (date-time)Last modified (date and time).

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

List SMS numbers

GET/domains/~/smsnumbers

Returns the SMS numbers on the account.

Read Key Admin switch: Text messages (SMS), Read. Read only keys also work. Sensitive data

Example request

curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers", {
  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/~/smsnumbers",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())

Response 200

[
  {
    "number": "string",
    "application": "string",
    "domain": "string",
    "carrier": "string",
    "dest": "string",
    "mms-capable": "false",
    "group-mms-capable": "false"
  }
]
Response fields (7)
FieldTypeNotes
numberstring
applicationstring
domainstringThe account the item belongs to. Max length 64
carrierstring
deststring
mms-capableboolean Default false
group-mms-capableboolean Default false

Block a number from texting

POST/domains/~/smsblocks

Adds a number to the account's SMS block list.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Request body application/json

FieldTypeNotes
requesting-number requiredstring (e164)Requesting number.
blocked-number requiredstring (e164)Blocked number.
statusstringCurrent status. One of: active, inactive Default active

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "requesting-number": "15555550123",
    "blocked-number": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "requesting-number": "15555550123",
    "blocked-number": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "requesting-number": "15555550123",
        "blocked-number": "15555550123"
    },
)
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.

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

Add an SMS number

POST/domains/~/smsnumbers

Turns on texting for a number and sets who receives its messages.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Request body application/json

FieldTypeNotes
number requiredstring
application requiredstring
deststring
carrierstring

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "number": "string",
    "application": "string"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "number": "string",
    "application": "string"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "number": "string",
        "application": "string"
    },
)
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.

Update an SMS block

PUT/domains/~/smsblocks/{id}

Changes an existing SMS block. Send the fields you want to set in the body.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

NameInTypeNotes
id requiredpathstringThe ID of the item, as returned when you list or create it.

Request body application/json

FieldTypeNotes
statusstringCurrent status. One of: active, inactive Default active
created-datetimestring (date-time)Created (date and time).
last-modified-datetimestring (date-time)Last modified (date and time).

Example request

curl -X PUT "https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks/{id}" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "active",
    "created-datetime": "2026-11-02 09:00:00",
    "last-modified-datetime": "2026-11-02 09:00:00"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks/{id}", {
  method: "PUT",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "status": "active",
    "created-datetime": "2026-11-02 09:00:00",
    "last-modified-datetime": "2026-11-02 09:00:00"
  }),
});
const data = await res.json();
import os, requests

r = requests.put(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks/{id}",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "status": "active",
        "created-datetime": "2026-11-02 09:00:00",
        "last-modified-datetime": "2026-11-02 09:00:00"
    },
)
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.

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

Update an SMS number

PUT/domains/~/smsnumbers/{smsnumber}

Changes an existing SMS number. Send the fields you want to set in the body.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

NameInTypeNotes
smsnumber requiredpathstringThe SMS number in E.164 digits.

Request body application/json

FieldTypeNotes
application requiredstring
deststring
carrierstring

Example request

curl -X PUT "https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers/15555550123" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "application": "string"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers/15555550123", {
  method: "PUT",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "application": "string"
  }),
});
const data = await res.json();
import os, requests

r = requests.put(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers/15555550123",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "application": "string"
    },
)
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.

Remove an SMS block

DELETE/domains/~/smsblocks/{id}

Removes an SMS block. This can't be undone.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

NameInTypeNotes
id requiredpathstringThe ID of the item, as returned when you list or create it.

Example request

curl -X DELETE "https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks/{id}" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/smsblocks/{id}", {
  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/~/smsblocks/{id}",
    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.

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

Delete an SMS number

DELETE/domains/~/smsnumbers/{smsnumber}

Removes an SMS number. This can't be undone.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

NameInTypeNotes
smsnumber requiredpathstringThe SMS number in E.164 digits.

Example request

curl -X DELETE "https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers/15555550123" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/smsnumbers/15555550123", {
  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/~/smsnumbers/15555550123",
    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.

List message threads for a user

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

Returns the message threads for one user.

Read Key Admin switch: Text messages (SMS), 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
limitquerynumber (int)Most results to return in one response. Default 100 Min 1 Max 1000

Example request

curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions", {
  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/messagesessions",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())

Response 200

[
  {
    "user": "1001",
    "domain": "string",
    "messagesession-remote": "string",
    "messagesession-muted": "string",
    "messagesession-id": "string",
    "messagesession-sms-number": "15555550123",
    "messagesession-last-datetime": "2026-11-02 09:00:00",
    "messagesession-start-datetime": "2026-11-02 09:00:00",
    "...": "15 more fields"
  }
]
Response fields (23)
FieldTypeNotes
userstringThe user ID (extension).
domainstringThe account the item belongs to. Max length 64
messagesession-remoteany
messagesession-mutedstring
messagesession-idstringID of the messagesession.
messagesession-sms-numberanyMessagesession sms number.
messagesession-last-datetimestringMessagesession last (date and time).
messagesession-start-datetimestringMessagesession start (date and time).
messagesession-last-messageany
messagesession-last-senderstring
messagesession-last-statusstring
messagesession-last-email-reminder-datetimestringMessagesession last email reminder (date and time).
messagesession-reciever-hostnamestring
messagesession-queue-terminationstring
messagesession-queue-statusstring
messagesession-queue-session-idstringID of the messagesession queue session.
messagesession-agent-start-datetimestringMessagesession agent start (date and time).
messagesession-last-typeany
messagesession-last-media-typestring
messagesession-last-media-sizeinteger
messagesession-typestring
messagesession-namestringName of the messagesession.
messagesession-participantsstring

Get a user's message thread

GET/domains/~/users/{user}/messagesessions/{messagesession}

Returns one of a user's message threads.

Read Key Admin switch: Text messages (SMS), 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
messagesession requiredpathstringThe message thread ID.

Example request

curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}", {
  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/messagesessions/{thread_id}",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())

Response 200

[
  {
    "user": "1001",
    "domain": "string",
    "messagesession-remote": "string",
    "messagesession-muted": "string",
    "messagesession-id": "string",
    "messagesession-sms-number": "15555550123",
    "messagesession-last-datetime": "2026-11-02 09:00:00",
    "messagesession-start-datetime": "2026-11-02 09:00:00",
    "...": "15 more fields"
  }
]
Response fields (23)
FieldTypeNotes
userstringThe user ID (extension).
domainstringThe account the item belongs to. Max length 64
messagesession-remoteany
messagesession-mutedstring
messagesession-idstringID of the messagesession.
messagesession-sms-numberanyMessagesession sms number.
messagesession-last-datetimestringMessagesession last (date and time).
messagesession-start-datetimestringMessagesession start (date and time).
messagesession-last-messageany
messagesession-last-senderstring
messagesession-last-statusstring
messagesession-last-email-reminder-datetimestringMessagesession last email reminder (date and time).
messagesession-reciever-hostnamestring
messagesession-queue-terminationstring
messagesession-queue-statusstring
messagesession-queue-session-idstringID of the messagesession queue session.
messagesession-agent-start-datetimestringMessagesession agent start (date and time).
messagesession-last-typeany
messagesession-last-media-typestring
messagesession-last-media-sizeinteger
messagesession-typestring
messagesession-namestringName of the messagesession.
messagesession-participantsstring

List messages in a thread

GET/domains/~/users/{user}/messagesessions/{messagesession}/messages

Returns the messages in one message thread.

Read Key Admin switch: Text messages (SMS), 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
messagesession requiredpathstringThe message thread ID.
limitquerynumber (int)Most results to return in one response. Default 100 Min 1 Max 1000

Example request

curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages", {
  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/messagesessions/{thread_id}/messages",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())

Response 200

[
  {
    "id": "string",
    "timestamp": "YYYY-MM-DDTHH:MM:SS.ssZ",
    "type": "string",
    "domain": "string",
    "direction": "string",
    "from-number": "15555550123",
    "from-user-id": "string",
    "from-video-attendee-id": "string",
    "...": "13 more fields"
  }
]
Response fields (21)
FieldTypeNotes
idanyThe item's ID.
timestampstring One of: YYYY-MM-DDTHH:MM:SS.ssZ
typestringThe kind of item.
domainstringThe account the item belongs to. Max length 64
directionstring
from-numberanyThe number the message is sent from.
from-user-idstringID of the from user.
from-video-attendee-idstringID of the from video attendee.
from-user-agentstring
dialedstring
textstring
terminating-user-idstringID of the terminating user.
terminating-numberstringTerminating number.
statusstringCurrent status.
video-instance-idstringID of the video instance.
media-typestring
media-sizeinteger
deleted-datetimeanyDeleted (date and time).
messagesession-reciever-hostnamestring
messagesession-idstringID of the messagesession.
messagesession-participantsstring

List a user's SMS numbers

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

Returns the numbers a user can send and receive texts from.

Read Key Admin switch: Text messages (SMS), 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/smsnumbers" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/smsnumbers", {
  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/smsnumbers",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())

Response 200

[
  {
    "number": "string",
    "application": "string",
    "domain": "string",
    "carrier": "string",
    "dest": "string",
    "mms-capable": "false",
    "group-mms-capable": "false"
  }
]
Response fields (7)
FieldTypeNotes
numberstring
applicationstring
domainstringThe account the item belongs to. Max length 64
carrierstring
deststring
mms-capableboolean Default false
group-mms-capableboolean Default false

Count SMS numbers for a user

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

Returns how many SMS numbers there are for one user, as {"total": n}.

Read Key Admin switch: Text messages (SMS), 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/smsnumbers/count" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/smsnumbers/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/smsnumbers/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.

Send a chat message

POST/domains/~/users/{user}/messagesessions/{messagesession}/messages

Sends an internal chat message to another user on the account.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Request body application/json

FieldTypeNotes
type requiredstringThe kind of item.
message requiredstringWhat happened, in words.
destination requiredanyWhere to send it: a number, extension or address.
from-numberstringThe number the message is sent from.
datastringFile contents for media messages, as base64.
mime-typeanyThe file's content type, like image/jpeg.
sizeintegerFile size in bytes.

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "type": "string",
        "message": "Hello from NoodleVoice",
        "destination": "15555550123"
    },
)
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.

Send a group chat message

POST/domains/~/users/{user}/messagesessions/{messagesession}/messages

Sends an internal chat message to a group of users.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Request body application/json

FieldTypeNotes
type requiredstringThe kind of item.
message requiredstringWhat happened, in words.
destination requiredanyWhere to send it: a number, extension or address.
from-numberstringThe number the message is sent from.
datastringFile contents for media messages, as base64.
mime-typeanyThe file's content type, like image/jpeg.
sizeintegerFile size in bytes.

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "type": "string",
        "message": "Hello from NoodleVoice",
        "destination": "15555550123"
    },
)
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.

Send a group SMS

POST/domains/~/users/{user}/messagesessions/{messagesession}/messages

Sends a text message to everyone in a group thread.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Request body application/json

FieldTypeNotes
type requiredstringThe kind of item.
message requiredstringWhat happened, in words.
destination requiredanyWhere to send it: a number, extension or address.
from-numberstringThe number the message is sent from.
datastringFile contents for media messages, as base64.
mime-typeanyThe file's content type, like image/jpeg.
sizeintegerFile size in bytes.

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "type": "string",
        "message": "Hello from NoodleVoice",
        "destination": "15555550123"
    },
)
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.

Send a media chat message

POST/domains/~/users/{user}/messagesessions/{messagesession}/messages

Sends a picture or file in an internal chat.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Request body application/json

FieldTypeNotes
type requiredstringThe kind of item.
message requiredstringWhat happened, in words.
destination requiredanyWhere to send it: a number, extension or address.
from-numberstringThe number the message is sent from.
datastringFile contents for media messages, as base64.
mime-typeanyThe file's content type, like image/jpeg.
sizeintegerFile size in bytes.

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "type": "string",
        "message": "Hello from NoodleVoice",
        "destination": "15555550123"
    },
)
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.

Send an MMS in a thread

POST/domains/~/users/{user}/messagesessions/{messagesession}/messages

Sends a picture or file as a multimedia message.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Request body application/json

FieldTypeNotes
type requiredstringThe kind of item.
message requiredstringWhat happened, in words.
destination requiredanyWhere to send it: a number, extension or address.
from-numberstringThe number the message is sent from.
datastringFile contents for media messages, as base64.
mime-typeanyThe file's content type, like image/jpeg.
sizeintegerFile size in bytes.

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "type": "string",
        "message": "Hello from NoodleVoice",
        "destination": "15555550123"
    },
)
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.

Send an SMS in a thread

POST/domains/~/users/{user}/messagesessions/{messagesession}/messages

Sends a text message to the other party in a thread.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Request body application/json

FieldTypeNotes
type requiredstringThe kind of item.
message requiredstringWhat happened, in words.
destination requiredanyWhere to send it: a number, extension or address.
from-numberstringThe number the message is sent from.
datastringFile contents for media messages, as base64.
mime-typeanyThe file's content type, like image/jpeg.
sizeintegerFile size in bytes.

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/messages",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "type": "string",
        "message": "Hello from NoodleVoice",
        "destination": "15555550123"
    },
)
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.

Change who is in a thread

PUT/domains/~/users/{user}/messagesessions/{messagesession}

Sets the participants of a group message thread.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Request body application/json

FieldTypeNotes
participants requiredstringThe people in it, as a list of numbers or user IDs.

Example request

curl -X PUT "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "participants": "string"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}", {
  method: "PUT",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "participants": "string"
  }),
});
const data = await res.json();
import os, requests

r = requests.put(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "participants": "string"
    },
)
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.

Rename a message thread

PUT/domains/~/users/{user}/messagesessions/{messagesession}

Changes one of a user's message threads.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Request body application/json

FieldTypeNotes
session-name requiredstringName of the thread.

Example request

curl -X PUT "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "session-name": "Front Desk"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}", {
  method: "PUT",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "session-name": "Front Desk"
  }),
});
const data = await res.json();
import os, requests

r = requests.put(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "session-name": "Front Desk"
    },
)
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.

Leave a message thread

PUT/domains/~/users/{user}/messagesessions/{messagesession}/leave

Removes the user from a group message thread.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Example request

curl -X PUT "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/leave" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/leave", {
  method: "PUT",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
  },
});
const data = await res.json();
import os, requests

r = requests.put(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}/leave",
    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 user's message thread

DELETE/domains/~/users/{user}/messagesessions/{messagesession}

Removes one of a user's message threads. This can't be undone.

Write Key Admin switch: Text messages (SMS), Write. Sensitive data

Parameters

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

Example request

curl -X DELETE "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messagesessions/{thread_id}", {
  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/messagesessions/{thread_id}",
    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.

List all message threads

GET/domains/~/messagesessions

Returns the text message threads for every user on the account.

Full access No feature switch covers this endpoint. It needs a Full access key.

Parameters

NameInTypeNotes
limitquerynumber (int)Most results to return in one response. Default 100 Min 1 Max 1000

Example request

curl -X GET "https://api.noodlevoice.com/ns-api/v2/domains/~/messagesessions" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/messagesessions", {
  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/~/messagesessions",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
)
print(r.status_code, r.json())

Response 200

[
  {
    "user": "1001",
    "domain": "string",
    "messagesession-remote": "string",
    "messagesession-muted": "string",
    "messagesession-id": "string",
    "messagesession-sms-number": "15555550123",
    "messagesession-last-datetime": "2026-11-02 09:00:00",
    "messagesession-start-datetime": "2026-11-02 09:00:00",
    "...": "15 more fields"
  }
]
Response fields (23)
FieldTypeNotes
userstringThe user ID (extension).
domainstringThe account the item belongs to. Max length 64
messagesession-remoteany
messagesession-mutedstring
messagesession-idstringID of the messagesession.
messagesession-sms-numberanyMessagesession sms number.
messagesession-last-datetimestringMessagesession last (date and time).
messagesession-start-datetimestringMessagesession start (date and time).
messagesession-last-messageany
messagesession-last-senderstring
messagesession-last-statusstring
messagesession-last-email-reminder-datetimestringMessagesession last email reminder (date and time).
messagesession-reciever-hostnamestring
messagesession-queue-terminationstring
messagesession-queue-statusstring
messagesession-queue-session-idstringID of the messagesession queue session.
messagesession-agent-start-datetimestringMessagesession agent start (date and time).
messagesession-last-typeany
messagesession-last-media-typestring
messagesession-last-media-sizeinteger
messagesession-typestring
messagesession-namestringName of the messagesession.
messagesession-participantsstring

Send a message

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

Sends a text message from a user. A new thread is started if one doesn't exist.

Full access No feature switch covers this endpoint. It needs a Full access key.

Parameters

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

Request body application/json

FieldTypeNotes
type requiredstringThe kind of item.
message requiredstringWhat happened, in words.
destination requiredanyWhere to send it: a number, extension or address.
from-numberstringThe number the message is sent from.
datastringFile contents for media messages, as base64.
mime-typeanyThe file's content type, like image/jpeg.
sizeintegerFile size in bytes.

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messages" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messages", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "type": "string",
    "message": "Hello from NoodleVoice",
    "destination": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/messages",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "type": "string",
        "message": "Hello from NoodleVoice",
        "destination": "15555550123"
    },
)
print(r.status_code, r.json())

Response 200

{
  "id": "string",
  "timestamp": "YYYY-MM-DDTHH:MM:SS.ssZ",
  "type": "string",
  "domain": "string",
  "direction": "string",
  "from-number": "15555550123",
  "from-user-id": "string",
  "from-video-attendee-id": "string",
  "...": "13 more fields"
}
Response fields (21)
FieldTypeNotes
idanyThe item's ID.
timestampstring One of: YYYY-MM-DDTHH:MM:SS.ssZ
typestringThe kind of item.
domainstringThe account the item belongs to. Max length 64
directionstring
from-numberanyThe number the message is sent from.
from-user-idstringID of the from user.
from-video-attendee-idstringID of the from video attendee.
from-user-agentstring
dialedstring
textstring
terminating-user-idstringID of the terminating user.
terminating-numberstringTerminating number.
statusstringCurrent status.
video-instance-idstringID of the video instance.
media-typestring
media-sizeinteger
deleted-datetimeanyDeleted (date and time).
messagesession-reciever-hostnamestring
messagesession-idstringID of the messagesession.
messagesession-participantsstring