---
title: "Create carrier contact"
method: POST
path: "/carrier-contacts"
tags: ["Carrier Contacts"]
---

# Create carrier contact

`POST /carrier-contacts`

Create a new carrier contact. The contactInfo will create a new Contact record,
and the CarrierContact will reference it via contactId (managed internally).

## Request body

- CarrierContactInput
  - `carrierId` string, uuid, required — Carrier this contact belongs to
  - `name` string, required — Contact person's name (should match contactInfo.name)
  - `contactInfo` ContactInfoInput, required — Contact information for creating a new contact record
    - `name` string, required — Contact person's full name
    - `email` string, email — Email address
    - `phoneNumber` string — Phone number
    - `title` string — Job title or position
  - `contactTypes` CarrierContactType[] — Types/roles this contact serves
  - `key` string — Client-defined reference identifier

## Response `201`

Carrier contact created successfully

- CarrierContact
  - `object` 'CARRIER_CONTACT' — Object type identifier
  - `id` string, uuid, required — Unique contact identifier
  - `carrier` CarrierReference, required — Enhanced reference to a carrier resource (returned in responses). Includes full carrier details in addition to id/key. Note: Does NOT include nested references (contacts, etc.) to prevent recursion. Maximum nesting depth: 1 level.
    - `id` string, uuid, required — Carrier UUID
    - `key` string, nullable — Client-defined reference ID if set
    - `name` string, required — Carrier company name
    - `phoneNumber` string, nullable — Primary phone number
    - `email` string, email, nullable — Primary email address
    - `createdAt` string, date-time, required — When the carrier was created
    - `updatedAt` string, date-time, required — When the carrier was last updated
    - `deletedAt` string, date-time, nullable — When the carrier was soft deleted (null if active)
  - `name` string, required — Contact person's name (denormalized from ContactInfo for convenience)
  - `contactInfo` ContactInfo, required — Contact information details (nested, without id). This is an embedded object representing a Contact record. The id is managed internally and not exposed in the API.
    - `name` string, required — Contact person's full name
    - `email` string, email, nullable — Email address
    - `phoneNumber` string, nullable — Phone number
    - `title` string, nullable — Job title or position
  - `contactTypes` CarrierContactType[], nullable — Types/roles this contact serves
  - `invitedUser` UserReference — Enhanced reference to a user resource (returned in responses). Includes full user details in addition to id/key. Note: Does NOT include nested references (teams, etc.) to prevent recursion. Maximum nesting depth: 1 level.
    - `id` string, uuid, required — User UUID
    - `key` string, nullable — Client-defined reference ID if set
    - `email` string, email, required — User's email address
    - `name` string, nullable — User's full name
    - `phone` string, nullable — User's phone number
    - `phoneExt` string, nullable — Phone extension
    - `status` 'PENDING' | 'ACTIVE' | 'INACTIVE', required — User account status
    - `avatarId` string, uuid, nullable — Profile avatar document ID
    - `createdAt` string, date-time, required — When the user was created
    - `updatedAt` string, date-time, required — When the user was last updated
    - `deletedAt` string, date-time, nullable — When the user was soft deleted (null if active)
  - `deletedBy` UserReference — Enhanced reference to a user resource (returned in responses). Includes full user details in addition to id/key. Note: Does NOT include nested references (teams, etc.) to prevent recursion. Maximum nesting depth: 1 level.
    - `id` string, uuid, required — User UUID
    - `key` string, nullable — Client-defined reference ID if set
    - `email` string, email, required — User's email address
    - `name` string, nullable — User's full name
    - `phone` string, nullable — User's phone number
    - `phoneExt` string, nullable — Phone extension
    - `status` 'PENDING' | 'ACTIVE' | 'INACTIVE', required — User account status
    - `avatarId` string, uuid, nullable — Profile avatar document ID
    - `createdAt` string, date-time, required — When the user was created
    - `updatedAt` string, date-time, required — When the user was last updated
    - `deletedAt` string, date-time, nullable — When the user was soft deleted (null if active)
  - `key` string, nullable — Client-defined reference identifier
  - `createdAt` string, date-time, required — When the contact was created
  - `deletedAt` string, date-time, nullable — When the contact was soft deleted (null if active)

## Other responses

- `400` — Bad request - invalid input
- `401` — Unauthorized - invalid or missing access token
- `409` — Conflict - resource already exists or constraint violation
- `500` — Internal server error

---

[API](https://skmtc.net/mvmnt/apis/mvmnt-api.md) · [All operations](https://skmtc.net/mvmnt/apis/mvmnt-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mvmnt/mvmnt-api/revisions/53b310bb74a0/schema)
