Skip to content
Browse docs
Open in ChatGPTView as Markdown

#Contacts

Contacts let you push people into the shared softphone directory from your own software. A contact created through the API resolves caller ID across the softphone: when that number calls or texts, your team sees the name, company and details instead of a raw number.

Contacts are a write- and lookup-oriented resource. You create a contact and you retrieve it by id. The softphone app surfaces the full directory and conversation history in real time.

#Create a contact

A single POST to /v1/contacts adds a person to the directory. Only phone is required; name, email and company are optional but improve caller-ID resolution.

curl https://api.netexem.com/v1/contacts \
-H "Authorization: Bearer $NETEXEM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "name": "Jane Doe",
  "phone": "+15557654321",
  "email": "jane@example.com",
  "company": "Acme Co"
}'

Phone numbers use E.164 format — a leading + and country code, e.g. +15557654321.

#The contact object

A successful create returns 201 with the stored contact. The same shape is returned when you retrieve a contact later.

{
  "id": "ct_01h…",
  "name": "Jane Doe",
  "phone": "+15557654321",
  "email": "jane@example.com",
  "company": "Acme Co",
  "createdAt": "2026-05-31T14:02:11Z"
}
FieldTypeNotes
idstringUnique contact id, prefixed ct_.
namestringDisplay name shown for caller ID.
phonestringThe contact's number in E.164.
emailstringOptional email address.
companystringOptional company name.
createdAtstringISO 8601 timestamp of creation.

#From a web form

A common pattern: a visitor submits a form on your website, your server creates a contact, and the next time that person calls or texts the softphone already knows who they are.

The flow is two hops — the browser posts the form to your server, and your server (where the API key lives) creates the contact. Never call the API directly from the browser; that would expose your key. See Authentication.

// POST /lead — your server's form handler
app.post("/lead", async (req, res) => {
const { name, phone, email, company } = req.body;

// Create the contact so the softphone resolves caller ID
await fetch("https://api.netexem.com/v1/contacts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.NETEXEM_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ name, phone, email, company }),
});

res.redirect("/thanks");
});

Once created, the contact is shared across the softphone. An inbound call or text from that number now shows the person's name and company instead of a bare number.

To follow up immediately, pair this with a deep link on your dashboard, or send a confirmation text — see Send an SMS.

#Retrieve a contact

Fetch a contact by id with a GET to /v1/contacts/{id}. Store the id from the create response to look it up later.

curl https://api.netexem.com/v1/contacts/ct_01h… \
  -H "Authorization: Bearer $NETEXEM_API_KEY"

A successful lookup returns 200 with the contact object. An unknown id returns 404 Not Found — see Errors for the full error shape.

#Next steps

  • Deep links — launch a call or pre-addressed text to a contact
  • Webhooks — react to inbound messages and call events
  • API reference — try the contacts endpoints live