---
title: "Update Vendor Contact"
method: PUT
path: "/vendor-contacts/{vendor_id}/{user_id}"
tags: ["vendor-contacts"]
---

# Update Vendor Contact

`PUT /vendor-contacts/{vendor_id}/{user_id}`

## Request

- Base URL: `https://api.kobaltlabs.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.kobaltlabs.com/vendor-contacts/{vendor_id}/{user_id}`
- Auth: none declared

Update a contact's editable fields. Both `role` and the custom field values
are scoped to this vendor's link row, so the same person carries an
independent set at every vendor that lists them.

## Path parameters

- `vendor_id` string, uuid, required
- `user_id` string, uuid, required

## Request body

- UpdateVendorContactRequest: The contact's whole editable surface. A replace, not a patch: an omitted `role` clears it, and the custom field values overwrite what is stored. Custom fields are the one exception — omitting them leaves the stored set alone, so a client whose editor has not loaded yet cannot wipe it. Each field is cleared by sending it with an empty payload, not by leaving it out.
  - `role` string, nullable
  - `custom_field_values` union[], nullable
    - union
      - CustomFieldDropdownValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'DROPDOWN'
        - `option_id` string, uuid, nullable
        - `label` string, nullable
        - `hex_color` string, nullable
        - `order_index` integer, nullable
      - CustomFieldFreeTextValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'FREE_TEXT'
        - `text_value` string, nullable
      - CustomFieldNumberValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'NUMBER'
        - `number_value` integer, nullable
      - CustomFieldDateValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'DATE'
        - `date_value` string, date, nullable
      - CustomFieldBooleanValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'BOOLEAN'
        - `boolean_value` boolean, nullable
      - CustomFieldMultiselectValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'MULTISELECT'
        - `selected_options` CustomFieldMultiselectOptionValue[]
          - `option_id` string, uuid, nullable
          - `label` string, nullable
          - `hex_color` string, nullable
          - `order_index` integer, nullable
      - CustomFieldUserValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'USER'
        - `user_id` string, uuid, nullable
        - `user_first_name` string, nullable
        - `user_last_name` string, nullable
        - `email_address` string, nullable
      - CustomFieldMultiUserValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'MULTI_USER'
        - `selected_users` CustomFieldUserRef[]
          - `user_id` string, uuid, nullable
          - `user_first_name` string, nullable
          - `user_last_name` string, nullable
          - `email_address` string, nullable

## Response `200`

Successful Response

- VendorContactResponse
  - `user_id` string, uuid, required
  - `user_first_name` string, required
  - `user_last_name` string, required
  - `email_address` string, required
  - `company_id` string, uuid, required
  - `profile_picture_url` string, nullable
  - `masquerade_status` MasqueradeStatus
    - `mode` 'soft' | 'hard', required
    - `target_company_id` string, uuid, required
    - `target_company_name` string, required
  - `whats_new_last_viewed_at` string, date-time, nullable
  - `vendor_contact_id` string, uuid, required
  - `role` string, nullable
  - `custom_field_values` union[]
    - union
      - CustomFieldDropdownValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'DROPDOWN'
        - `option_id` string, uuid, nullable
        - `label` string, nullable
        - `hex_color` string, nullable
        - `order_index` integer, nullable
      - CustomFieldFreeTextValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'FREE_TEXT'
        - `text_value` string, nullable
      - CustomFieldNumberValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'NUMBER'
        - `number_value` integer, nullable
      - CustomFieldDateValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'DATE'
        - `date_value` string, date, nullable
      - CustomFieldBooleanValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'BOOLEAN'
        - `boolean_value` boolean, nullable
      - CustomFieldMultiselectValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'MULTISELECT'
        - `selected_options` CustomFieldMultiselectOptionValue[]
          - `option_id` string, uuid, nullable
          - `label` string, nullable
          - `hex_color` string, nullable
          - `order_index` integer, nullable
      - CustomFieldUserValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'USER'
        - `user_id` string, uuid, nullable
        - `user_first_name` string, nullable
        - `user_last_name` string, nullable
        - `email_address` string, nullable
      - CustomFieldMultiUserValue
        - `custom_field_id` string, uuid, nullable
        - `custom_field_type` 'INHERENT_RISK_LEVEL' | 'RESIDUAL_RISK_LEVEL' | 'CRITICALITY' | 'LIFECYCLE_STATUS'
        - `name` string, nullable
        - `type` 'MULTI_USER'
        - `selected_users` CustomFieldUserRef[]
          - `user_id` string, uuid, nullable
          - `user_first_name` string, nullable
          - `user_last_name` string, nullable
          - `email_address` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api.md) - [All operations](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/llms.txt) - [OpenAPI document](https://skmtc.dev/kobaltlabs/apis/kobaltlabs-api/revisions/8587332d5e43?raw)
