Skip to main content
PATCH
/
contacts
/
{contactId}
Update contact by ID
curl --request PATCH \
  --url https://incoming.qomon.app/contacts/{contactId} \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "data": {
    "contact": {
      "action_ids": [
        1
      ],
      "address": {
        "addition": "<string>",
        "building": "<string>",
        "city": "<string>",
        "country": "<string>",
        "county": "<string>",
        "door": "<string>",
        "floor": "<string>",
        "housenumber": "<string>",
        "infos": "<string>",
        "pollingstation": "<string>",
        "postalcode": "<string>",
        "state": "<string>",
        "street": "<string>"
      },
      "age_category": 1,
      "birth_city": "<string>",
      "birth_country": "<string>",
      "birth_dept": "<string>",
      "birthdate": "2023-11-07T05:31:56Z",
      "black_list": true,
      "custom_fields": [
        {
          "data": "<string>",
          "form_id": 1,
          "form_ref_id": 1
        }
      ],
      "firstname": "<string>",
      "formdatas": [
        {
          "data": "<string>",
          "form_id": 1,
          "form_ref_id": 1,
          "date": "2023-11-07T05:31:56Z",
          "survey_id": 1
        }
      ],
      "mail": "jsmith@example.com",
      "married_name": "<string>",
      "mobile": "<string>",
      "mobile_invalid": true,
      "nationality": "<string>",
      "notes": [
        {
          "id": 1,
          "contact_id": 1,
          "created_at": "2023-11-07T05:31:56Z",
          "data": "<string>",
          "group_id": 1,
          "only_super_admin": true,
          "pinned": true,
          "updated_at": "2023-11-07T05:31:56Z",
          "user": {
            "address": "<string>",
            "avatar": "<string>",
            "birthdate": "2023-11-07T05:31:56Z",
            "city": "<string>",
            "firstname": "<string>",
            "group_id": [
              123
            ],
            "locale": "<string>",
            "location": "<string>",
            "mail": "jsmith@example.com",
            "phone": "<string>",
            "postal": "<string>",
            "role_data": {
              "color": "<string>",
              "id": 1,
              "mobile": true,
              "name": "<string>",
              "order": 1,
              "web": true
            },
            "status": "<string>",
            "surname": "<string>",
            "two_factor_enable": true
          }
        }
      ],
      "phone": "<string>",
      "phone_invalid": true,
      "surname": "<string>",
      "tags": [
        {
          "name": "<string>"
        }
      ],
      "user_contact_id": 123
    }
  }
}
'
{
  "data": {
    "contact": {
      "id": 1,
      "CreatedAt": "2023-11-07T05:31:56Z",
      "UpdatedAt": "2023-11-07T05:31:56Z",
      "action_ids": [
        1
      ],
      "address": {
        "addition": "<string>",
        "building": "<string>",
        "city": "<string>",
        "country": "<string>",
        "county": "<string>",
        "door": "<string>",
        "floor": "<string>",
        "housenumber": "<string>",
        "id": 1,
        "infos": "<string>",
        "latitude": "<string>",
        "location": "<string>",
        "longitude": "<string>",
        "pollingstation": "<string>",
        "postalcode": "<string>",
        "score": 123,
        "state": "<string>",
        "street": "<string>"
      },
      "age_category": 1,
      "birth_city": "<string>",
      "birth_country": "<string>",
      "birth_dept": "<string>",
      "birthdate": "2023-11-07T05:31:56Z",
      "black_list": true,
      "custom_fields": [
        {
          "data": "<string>",
          "form_id": 1,
          "form_ref_id": 1,
          "id": 1
        }
      ],
      "firstname": "<string>",
      "formdatas": [
        {
          "data": "<string>",
          "form_id": 1,
          "form_ref_id": 1,
          "id": 1,
          "contact_id": 1,
          "date": "2023-11-07T05:31:56Z",
          "group_id": 1,
          "survey_id": 1
        }
      ],
      "group_id": 1,
      "lastchange": "2023-11-07T05:31:56Z",
      "lastchangeuserid": 1,
      "mail": "jsmith@example.com",
      "married_name": "<string>",
      "mobile": "<string>",
      "mobile_invalid": true,
      "nationality": "<string>",
      "notes": [
        {
          "id": 1,
          "contact_id": 1,
          "created_at": "2023-11-07T05:31:56Z",
          "data": "<string>",
          "group_id": 1,
          "only_super_admin": true,
          "pinned": true,
          "updated_at": "2023-11-07T05:31:56Z",
          "user": {
            "CreatedAt": "2023-11-07T05:31:56Z",
            "UpdatedAt": "2023-11-07T05:31:56Z",
            "address": "<string>",
            "avatar": "<string>",
            "birthdate": "2023-11-07T05:31:56Z",
            "city": "<string>",
            "created": "2023-11-07T05:31:56Z",
            "firstname": "<string>",
            "group_id": [
              123
            ],
            "id": 123,
            "locale": "<string>",
            "location": "<string>",
            "mail": "jsmith@example.com",
            "phone": "<string>",
            "postal": "<string>",
            "role_data": {
              "color": "<string>",
              "id": 1,
              "mobile": true,
              "name": "<string>",
              "order": 1,
              "web": true
            },
            "status": "<string>",
            "surname": "<string>",
            "two_factor_enable": true
          }
        }
      ],
      "phone": "<string>",
      "phone_invalid": true,
      "surname": "<string>",
      "tags": [
        {
          "name": "<string>"
        }
      ],
      "user_contact_id": 123
    }
  },
  "status": "<string>"
}
This endpoint uses the PATCH verb but behaves like a PUT (full replacement). Any fields that are NOT included in the payload will be cleared/removed. Always send the full contact object if you don’t want to lose existing data.
To synchronize and mass update your contacts with Qomon database, use POST /contacts/upsert instead. This synchronous endpoint costs 5 rate-limit tokens per request.
To specify the advanced fields (survey, consents, etc), you need to use the formdatas structure with form_id and form_ref_id.
  • form_id: the ID of the advanced field
  • form_ref_id: the ID of the value of the advanced field
  • data: free text if the field (“forms”) type is Text, Integer, or Date (input format: YYYY-MM-DD'T'HH:mm:ss.SSS'Z'; responses may return up to microsecond precision: YYYY-MM-DD'T'HH:mm:ss.SSSSSS'Z'); otherwise, use the value of the refvalue
  • date: the date of the formdata entry
"formdatas": [
  {
    "form_id": 47566,
    "form_ref_id": 15648,
    "data": "consent_email"
  }
]
To specify the custom fields, you need to use the custom_fields structure with form_id and form_ref_id.
  • form_id: the ID of the custom field
  • form_ref_id: the ID of the value of the custom field
  • data: free text if the field (“forms”) type is Text, Integer, or Date (input format: YYYY-MM-DD'T'HH:mm:ss.SSS'Z'; responses may return up to microsecond precision: YYYY-MM-DD'T'HH:mm:ss.SSSSSS'Z'); otherwise, use the value of the refvalue
  • date: the date of the custom_field entry
"custom_fields": [
  {
    "form_id": 879854,
    "form_ref_id": 98741,
    "data": "hamburger",
    "date": "2024-07-17T11:34:42.195Z"
  }
]
NB:
  • Each patch will generate new ids for formdatas and custom_fields. (due to the full replace behavior: soft delete + recreate)
  • If you don’t send the exhaustive list of formdatas or custom_fields, the missing ones will be deleted (soft).
  • For Text, Integer and Date Fields, if you add a formdata or custom_field, it will be added to the existing ones.
  • For Radio (single select), if you add a formdata or custom_field, it will replace the existing ones.
  • For Checkbox (multi-select) fields, any new value will be added to the existing ones.
  • If you change a formdata or custom_field, it will update it. (the id is not required here because of the full-replace behavior).

Authorizations

Authorization
string
header
required

OAuth2 access token. Pass the token in the Authorization header as Bearer <token>. The token is looked up in Redis to resolve the caller identity.

Path Parameters

contactId
integer<int64>
required

Contact ID.

Required range: x >= 0
Example:

42

Body

application/json
data
object
required

Response

OK

data
object
required
status
string
required

Operation result.

Example:

"success"

Last modified on June 16, 2026