Update a contact

posthttps://api.expiryedge.com/v1/updateContact
editor or admin60/min
Request
curl -X POST 'https://api.expiryedge.com/v1/updateContact?id=c_8Hk2pQ' \
  -H "Authorization: Bearer $EXPIRYEDGE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "jobTitle": "Office Director",
  "contactGroup": "Licensing",
  "sms_opt_in": false
}'
Response
{
  "message": "Contact updated successfully",
  "contact": {
    "id": "c_8Hk2pQ",
    "user_id": "u_71bXq",
    "organization_id": "org_northwind",
    "firstName": "Priya",
    "lastName": "Shah",
    "email": "priya.shah@northwinddental.example",
    "smsPhone": "+15550123456",
    "whatsappPhone": null,
    "contactType": "Staff",
    "jobTitle": "Office Director",
    "timezone": "America/New_York",
    "contactGroup": "Licensing",
    "is_default": true,
    "email_opt_in": true,
    "sms_opt_in": false,
    "whatsapp_opt_in": false,
    "sendNotifications": true,
    "createdAt": "2026-09-27T14:05:00.000Z",
    "updatedAt": "2026-09-28T09:12:00.000Z"
  }
}

Partial update: only the ContactInput fields present in the body change (other keys are ignored). The id comes from the id query parameter. Moving a contact into a new group name creates the group.

Query parameters

  • idstringrequired
    Contact id.

Body parameters

application/json
  • firstNamestring
  • lastNamestring
    Send '' when unknown (create stores it as given).
  • emailstring | null
    Unique per organization (case-insensitive) on create.
    format: email
  • smsPhonestring | null
    E.164 phone for SMS, e.g. +15550123456.
  • whatsappPhonestring | null
  • contactTypestring | null
    Free-text category, e.g. Client, Staff, Vendor.
  • jobTitlestring | null
  • timezonestring
    IANA timezone. Defaults to Europe/London on create.
  • contactGroupstring | null
    Group name (not id). A new name creates the group.
  • is_defaultboolean
    Default contact added to new expiries. Defaults to false. isDefault is also accepted on create.
  • email_opt_inboolean
    Defaults to true.
  • sms_opt_inboolean
    Defaults to false.
  • whatsapp_opt_inboolean
    Defaults to false.
  • sendNotificationsboolean
    Master switch for reminders to this contact. Defaults to true.

Returns

200
Contact updated; returns the stored contact.
  • messagestringrequired
  • contactobjectrequired
    A contact as returned by the API (camelCase; stored snake_case).

Errors

401
Missing, expired or invalid bearer token.
403
Authenticated, but your role or organization does not allow this action.
404
The record does not exist or is not in your organization.
429
Too many requests for this endpoint from your IP. Wait Retry-After seconds.
500
Unexpected server error. Retry later; quote requestId to support.