---
title: "Create Vendor Contact"
method: POST
path: "/vendor-contacts/{vendor_id}"
tags: ["vendor-contacts"]
---

# Create Vendor Contact

`POST /vendor-contacts/{vendor_id}`

Create a new contact for a vendor. Creates the user if they don't exist,
then adds a VendorContacts row linking them to the vendor.

## Path parameters

- `vendor_id` string, uuid, required

## Request body

- CreateVendorContactRequest
  - `email_address` string, email, required
  - `first_name` string, required
  - `last_name` string, 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

## Response `201`

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/fastapi.md) · [All operations](https://skmtc.dev/kobaltlabs/apis/fastapi/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/kobaltlabs/fastapi/revisions/f85ef083df64/schema)
