API Reference
Key Admin
People and devices

Contacts

Contacts are address book entries. Account contacts are shared with everyone; user contacts are personal.

In the Key Admin this is the Contacts switch. Read lets a key call the GET endpoints below. Write lets it call the ones that change data.

List contacts

GET/domains/~/contacts

Returns the contacts on the account.

Read Key Admin switch: Contacts, Read. Read only keys also work.

Example request

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

Response 200

[
  {
    "unique-id": "string",
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "...": "4 more fields"
  }
]
Response fields (12)
FieldTypeNotes
unique-idstringID of the unique.
name-first-namestringFirst name.
name-middle-namestringName of the name middle.
name-last-namestringLast name.
emailstringEmail address. Separate more than one with commas.
companystring
phonenumber-workstring
phonenumber-cellstring
phonenumber-faxstring
phonenumber-homestring
tagsstring
created-datetimestringCreated (date and time).

Get a contact

GET/domains/~/contacts/{contact_id}

Returns one contact by its ID.

Read Key Admin switch: Contacts, Read. Read only keys also work.

Parameters

NameInTypeNotes
contact_id requiredpathstringThe contact ID.

Example request

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

Response 200

[
  {
    "unique-id": "string",
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "...": "4 more fields"
  }
]
Response fields (12)
FieldTypeNotes
unique-idstringID of the unique.
name-first-namestringFirst name.
name-middle-namestringName of the name middle.
name-last-namestringLast name.
emailstringEmail address. Separate more than one with commas.
companystring
phonenumber-workstring
phonenumber-cellstring
phonenumber-faxstring
phonenumber-homestring
tagsstring
created-datetimestringCreated (date and time).

Create a contact

POST/domains/~/contacts

Adds a new contact on the account.

Write Key Admin switch: Contacts, Write.

Request body application/json

FieldTypeNotes
name-first-name requiredstringFirst name.
name-middle-name requiredstringName of the name middle.
name-last-name requiredstringLast name.
email requiredstringEmail address. Separate more than one with commas.
company requiredstring
phonenumber-work requiredstring
phonenumber-cell requiredstring
phonenumber-fax requiredstring
phonenumber-home requiredstring

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/contacts" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "phonenumber-fax": "15555550123",
    "phonenumber-home": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/contacts", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "phonenumber-fax": "15555550123",
    "phonenumber-home": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/contacts",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "name-first-name": "Front Desk",
        "name-middle-name": "Front Desk",
        "name-last-name": "Front Desk",
        "email": "jane@example.com",
        "company": "string",
        "phonenumber-work": "15555550123",
        "phonenumber-cell": "15555550123",
        "phonenumber-fax": "15555550123",
        "phonenumber-home": "15555550123"
    },
)
print(r.status_code, r.json())

Response 200

Returns a status code with a short JSON message.

Update a contact

PUT/domains/~/contacts/{contact_id}

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

Write Key Admin switch: Contacts, Write.

Parameters

NameInTypeNotes
contact_id requiredpathstringThe contact ID.

Request body application/json

FieldTypeNotes
name-first-name requiredstringFirst name.
name-middle-name requiredstringName of the name middle.
name-last-name requiredstringLast name.
email requiredstringEmail address. Separate more than one with commas.
company requiredstring
phonenumber-work requiredstring
phonenumber-cell requiredstring
phonenumber-fax requiredstring
phonenumber-home requiredstring

Example request

curl -X PUT "https://api.noodlevoice.com/ns-api/v2/domains/~/contacts/{contact_id}" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "phonenumber-fax": "15555550123",
    "phonenumber-home": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/contacts/{contact_id}", {
  method: "PUT",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "phonenumber-fax": "15555550123",
    "phonenumber-home": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.put(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/contacts/{contact_id}",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "name-first-name": "Front Desk",
        "name-middle-name": "Front Desk",
        "name-last-name": "Front Desk",
        "email": "jane@example.com",
        "company": "string",
        "phonenumber-work": "15555550123",
        "phonenumber-cell": "15555550123",
        "phonenumber-fax": "15555550123",
        "phonenumber-home": "15555550123"
    },
)
print(r.status_code, r.json())

Response 200

Returns a status code with a short JSON message.

Delete a contact

DELETE/domains/~/contacts/{contact_id}

Removes a contact. This can't be undone.

Write Key Admin switch: Contacts, Write.

Parameters

NameInTypeNotes
contact_id requiredpathstringThe contact ID.

Example request

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

Response 202

Returns a status code with a short JSON message.

List contacts for a user

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

Returns the contacts for one user.

Read Key Admin switch: Contacts, Read. Read only keys also work.

Parameters

NameInTypeNotes
user requiredpathstringThe user ID, usually their extension number, like 1001. Default ~ Min length 0 Max length 16
includeDomainquerybooleanSet to yes to include the account's shared contacts too.

Example request

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

Response 200

[
  {
    "unique-id": "string",
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "...": "4 more fields"
  }
]
Response fields (12)
FieldTypeNotes
unique-idstringID of the unique.
name-first-namestringFirst name.
name-middle-namestringName of the name middle.
name-last-namestringLast name.
emailstringEmail address. Separate more than one with commas.
companystring
phonenumber-workstring
phonenumber-cellstring
phonenumber-faxstring
phonenumber-homestring
tagsstring
created-datetimestringCreated (date and time).

Count contacts for a user

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

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

Read Key Admin switch: Contacts, Read. Read only keys also work.

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/contacts/count" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY"
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/contacts/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/contacts/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.

Get a user's contact

GET/domains/~/users/{user}/contacts/{contact_id}

Returns one of a user's contacts.

Read Key Admin switch: Contacts, Read. Read only keys also work.

Parameters

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

Example request

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

Response 200

{
  "unique-id": "string",
  "name-first-name": "Front Desk",
  "name-middle-name": "Front Desk",
  "name-last-name": "Front Desk",
  "email": "jane@example.com",
  "company": "string",
  "phonenumber-work": "15555550123",
  "phonenumber-cell": "15555550123",
  "...": "4 more fields"
}
Response fields (12)
FieldTypeNotes
unique-idstringID of the unique.
name-first-namestringFirst name.
name-middle-namestringName of the name middle.
name-last-namestringLast name.
emailstringEmail address. Separate more than one with commas.
companystring
phonenumber-workstring
phonenumber-cellstring
phonenumber-faxstring
phonenumber-homestring
tagsstring
created-datetimestringCreated (date and time).

Create a contact for a user

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

Adds a new contact for one user.

Write Key Admin switch: Contacts, Write.

Parameters

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

Request body application/json

FieldTypeNotes
name-first-name requiredstringFirst name.
name-middle-name requiredstringName of the name middle.
name-last-name requiredstringLast name.
email requiredstringEmail address. Separate more than one with commas.
company requiredstring
phonenumber-work requiredstring
phonenumber-cell requiredstring
phonenumber-fax requiredstring
phonenumber-home requiredstring

Example request

curl -X POST "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/contacts" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "phonenumber-fax": "15555550123",
    "phonenumber-home": "15555550123"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/contacts", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "phonenumber-fax": "15555550123",
    "phonenumber-home": "15555550123"
  }),
});
const data = await res.json();
import os, requests

r = requests.post(
    "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/contacts",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "name-first-name": "Front Desk",
        "name-middle-name": "Front Desk",
        "name-last-name": "Front Desk",
        "email": "jane@example.com",
        "company": "string",
        "phonenumber-work": "15555550123",
        "phonenumber-cell": "15555550123",
        "phonenumber-fax": "15555550123",
        "phonenumber-home": "15555550123"
    },
)
print(r.status_code, r.json())

Response 200

Returns a status code with a short JSON message.

Update a user's contact

PUT/domains/~/users/{user}/contacts/{contact_id}

Changes one of a user's contacts.

Write Key Admin switch: Contacts, Write.

Parameters

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

Request body application/json

FieldTypeNotes
name-first-name requiredstringFirst name.
name-middle-name requiredstringName of the name middle.
name-last-name requiredstringLast name.
email requiredstringEmail address. Separate more than one with commas.
company requiredstring
phonenumber-work requiredstring
phonenumber-cell requiredstring
phonenumber-fax requiredstring
phonenumber-home requiredstring
created-datetime requiredstringCreated (date and time).

Example request

curl -X PUT "https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/contacts/{contact_id}" \
  -H "Authorization: Bearer $NOODLEVOICE_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "phonenumber-fax": "15555550123",
    "phonenumber-home": "15555550123",
    "created-datetime": "2026-11-02 09:00:00"
  }'
const res = await fetch("https://api.noodlevoice.com/ns-api/v2/domains/~/users/1001/contacts/{contact_id}", {
  method: "PUT",
  headers: {
    Authorization: "Bearer " + process.env.NOODLEVOICE_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "name-first-name": "Front Desk",
    "name-middle-name": "Front Desk",
    "name-last-name": "Front Desk",
    "email": "jane@example.com",
    "company": "string",
    "phonenumber-work": "15555550123",
    "phonenumber-cell": "15555550123",
    "phonenumber-fax": "15555550123",
    "phonenumber-home": "15555550123",
    "created-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/~/users/1001/contacts/{contact_id}",
    headers={"Authorization": "Bearer " + os.environ["NOODLEVOICE_KEY"]},
    json={
        "name-first-name": "Front Desk",
        "name-middle-name": "Front Desk",
        "name-last-name": "Front Desk",
        "email": "jane@example.com",
        "company": "string",
        "phonenumber-work": "15555550123",
        "phonenumber-cell": "15555550123",
        "phonenumber-fax": "15555550123",
        "phonenumber-home": "15555550123",
        "created-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.

Delete a user's contact

DELETE/domains/~/users/{user}/contacts/{contact_id}

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

Write Key Admin switch: Contacts, Write.

Parameters

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

Example request

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

Response 202

Returns a status code with a short JSON message.