Update a contact

Preview
patchhttps://api.expiryedge.com/v2/contacts/{id}
editor or admin60/min
Request
curl -X PATCH 'https://api.expiryedge.com/v2/contacts/c_8Hk2pQ' \
  -H "Authorization: Bearer $EXPIRYEDGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "job_title": "Office Manager",
  "sms_opt_in": true
}'
Response
{
  "id": "c_8Hk2pQ",
  "organization_id": "org_northwind",
  "user_id": "u_71bXq",
  "first_name": "Priya",
  "last_name": "Shah",
  "email": "priya.shah@northwinddental.example",
  "sms_phone": "+15550123456",
  "whatsapp_phone": null,
  "contact_type": "Staff",
  "job_title": "Practice Manager",
  "timezone": "America/New_York",
  "contact_group": "Licensing",
  "is_default": false,
  "email_opt_in": true,
  "sms_opt_in": true,
  "whatsapp_opt_in": false,
  "sendNotifications": true,
  "created_at": "2026-09-27T14:05:00.000Z",
  "updated_at": "2026-09-27T14:05:00.000Z"
}

Only fields present change; unknown fields are rejected (400). Returns the updated contact.

Path parameters

  • idstringrequired

Body parameters

application/json
  • first_namestring
  • last_namestring
    Defaults to empty on create.
  • emailstring | null
    format: email
  • sms_phonestring | null
  • whatsapp_phonestring | null
  • contact_typestring | null
  • job_titlestring | null
  • timezonestring
    IANA timezone; defaults to Europe/London on create.
  • contact_groupstring | null
    Group name; a new name creates the group.
  • is_defaultboolean
  • email_opt_inboolean
  • sms_opt_inboolean
  • whatsapp_opt_inboolean
  • sendNotificationsboolean
    Stored camelCase (legacy name).

Returns

200
The updated contact.
  • first_namestring
  • last_namestring
    Defaults to empty on create.
  • emailstring | null
    format: email
  • sms_phonestring | null
  • whatsapp_phonestring | null
  • contact_typestring | null
  • job_titlestring | null
  • timezonestring
    IANA timezone; defaults to Europe/London on create.
  • contact_groupstring | null
    Group name; a new name creates the group.
  • is_defaultboolean
  • email_opt_inboolean
  • sms_opt_inboolean
  • whatsapp_opt_inboolean
  • sendNotificationsboolean
    Stored camelCase (legacy name).
  • idstringread-only
  • organization_idstringread-only
  • user_idstringread-only
  • created_atstring
    UTC timestamp, ISO 8601. Every v1 response uses this form, never a raw Firestore Timestamp ({_seconds, _nanoseconds}).
    format: date-time
  • updated_atstring
    UTC timestamp, ISO 8601. Every v1 response uses this form, never a raw Firestore Timestamp ({_seconds, _nanoseconds}).
    format: date-time

Errors

400
Invalid parameters or body (VALIDATION_FAILED; details names the fields).
401
Missing, invalid or expired token (UNAUTHORIZED).
403
Your role can't do this, or your account has no organization (FORBIDDEN).
404
No such record in your organization (records in other organizations are also 404).
405
Wrong HTTP method for this path; the Allow header lists the valid ones.
429
Too many requests for this endpoint from your IP. Wait Retry-After seconds.