---
title: "Add Internal Contact to a Partner"
method: POST
path: "/v2/partners/{partner_id}/internal-contacts"
tags: ["partners"]
---

# Add Internal Contact to a Partner

`POST /v2/partners/{partner_id}/internal-contacts`

## Request

- Base URL: `https://api.stuut.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.stuut.ai/v2/partners/{partner_id}/internal-contacts`
- Auth: HTTP bearer

Assigns an internal contact to this partner with the specified role.
The person is identified by email (within the organization) — reused if
they already exist, created if not.

## Path parameters

- `partner_id` string, required

## Request body

- AssignInternalContactRequest: Request body for assigning an internal contact to a partner. Finds or creates the InternalContact by (organization_id, email), then creates an InternalContactAssignment linking them to this partner with the given role.
  - `email` string, required: Email uniquely identifies the internal contact within the organization.
  - `internal_role` 'account_manager' | 'account_executive' | 'csm' | 'lead' | 'co_lead' | 'practice_lead', required
  - `given_name` string, nullable
  - `family_name` string, nullable
  - `name` string, nullable
  - `phone` string, nullable
  - `job_title` string, nullable

## Response `201`

Successful Response

- InternalContactAssignment: An InternalContact assigned to a Partner with a specific role. ``partner_id`` is null for "floating" assignments — contacts whose role is declared at the organization level but who have not yet been attached to a specific partner.
  - `created_at` string, date-time, required
  - `modified_at` string, date-time, nullable, required
  - `id` string, required
  - `internal_role` 'account_manager' | 'account_executive' | 'csm' | 'lead' | 'co_lead' | 'practice_lead', required
  - `partner_id` string, nullable, required
  - `remote_id` string, nullable, required: Third-party sync identifier for upsert deduplication.
  - `internal_contact` InternalContact, required: An internal contact (CSM, AM, etc.) at the organization level.
    - `created_at` string, date-time, required
    - `modified_at` string, date-time, nullable, required
    - `id` string, required
    - `email` string, required
    - `given_name` string, nullable, required: The internal contact's given name.
    - `family_name` string, nullable, required: The internal contact's family name.
    - `name` string, nullable, required: The internal contact's full name, if no given/family name.
    - `phone` string, phone, nullable, required: A phone number in [E.164](https://en.wikipedia.org/wiki/E.164) format
    - `job_title` string, nullable, required: The internal contact's job title.
    - `object` string, required: String representing the object's type. Objects of the same type share the same value.
  - `object` string, required: String representing the object's type. Objects of the same type share the same value.

## Other responses

- `404`: Not Found
- `409`: Conflict
- `422`: Unprocessable Content

---

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