Update a contact

PATCH /v1/contacts/{id}

Only the fields sent change. tags and fields replace what is stored; null clears name or notes, and null or an empty string clears any other optional property.

Send your API key as a bearer token: Authorization: Bearer ssms_sk_.... Test keys run this endpoint against the sandbox; see Authentication for key modes and scopes.

Path parameters

NameTypeRequiredDescription
idstringYes

Request body

JSON (Content-Type: application/json).

FieldTypeRequiredDescription
phone_numberstringNoE.164, US or Canada
namestringNoAt most 120 characters. Nullable.
tagsarray of stringNoAt most 20 items.
fieldsobjectNoUp to 20 string values
notesstringNoAt most 2000 characters. Nullable.
first_namestringNoAt most 80 characters. Nullable.
last_namestringNoAt most 80 characters. Nullable.
emailstringNoAt most 254 characters. Nullable.
companystringNoAt most 120 characters. Nullable.
statestringNoAt most 40 characters. Nullable.
sourcestringNoAt most 60 characters. Nullable.

Responses

StatusMeaningBody
200The contactContact
401Missing, malformed, or revoked API keyError
402Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or chargedError
404Not foundError
409phone_number already used by another contactError
429Rate limit or quota exceededError

200: Contact fields

FieldTypeDescription
idstringExample: ct_a1B2c3D4e5F6.
objectcontact
phone_numberstringExample: +14155550132.
namestringNullable.
tagsarray of stringFree-form labels; they double as broadcast audiences
fieldsobject
notesstringNullable.
first_namestringNullable.
last_namestringNullable.
emailstringNullable.
companystringNullable.
statestringNullable.
sourcestringNullable.
import_idstringThe last import that touched this contact Nullable.
opt_inobjectNullable.
opt_in.sourcestringNullable.
opt_in.collected_atstring (date-time)Nullable.
created_atstring (date-time)
updated_atstring (date-time)
consent_statusopted_out, opted_in, no_recordOnly on retrieve
topicsarray of TopicSubscriptionOnly on retrieve
segmentsarray of objectOnly on retrieve
segments[].idstring
segments[].namestring

Errors

StatusWhen
401Missing, malformed, or revoked API key
402Billable live calls only: the prepaid credit balance cannot cover the call (insufficient_credits); nothing was done or charged
404Not found
409phone_number already used by another contact
429Rate limit or quota exceeded

Every error has the same JSON shape, and request_id matches the X-Request-Id response header. Errors lists every code and what to do about it.

json
{
  "error": {
    "code": "invalid_request",
    "message": "What went wrong, in plain words.",
    "param": "the_field",
    "request_id": "req_a1B2c3D4e5F6g7H8"
  }
}

Examples

curl

bash
curl -X PATCH "https://api.joinsimplesms.com/v1/contacts/ct_a1B2c3D4e5F6" \
  -H "Authorization: Bearer $SIMPLESMS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Node.js

javascript
import { SimpleSMS } from 'joinsimplesms'; // npm install joinsimplesms

const sms = new SimpleSMS(process.env.SIMPLESMS_API_KEY);

const contact = await sms.contacts.update('ct_a1B2c3D4e5F6', { name: 'Jane D.' });

Python

python
import os
from joinsimplesms import SimpleSMS  # pip install joinsimplesms

client = SimpleSMS(os.environ["SIMPLESMS_API_KEY"])

contact = client.contacts.update("ct_a1B2c3D4e5F6", name="Jane D.")