---
title: "Create customer support conversation"
method: POST
path: "/v1/support/conversations"
tags: ["Support"]
---

# Create customer support conversation

`POST /v1/support/conversations`

## Request

- Base URL: `https://api.inth.com`
- URL: `https://api.inth.com/v1/support/conversations`
- Auth: HTTP bearer

Create a private conversation and its first message. clientMessageId is a UUID for safe retries: reuse it with identical text and ordered attachmentIds to get the same conversation. Different content conflicts. attachmentIds defaults to an empty list and accepts up to five unique, finalized uploads owned by the caller in this organization. Returns the conversation, complete first message and polling checkpoint. Queues delivery to support. Requires support.write and a user token. Organization API keys cannot call this operation. Uses customer permissions, with no operator or staff bypass. New mutations require rollout-agent-access-writes and allow-public-agent-writes to be enabled. Pausing writes leaves history and downloads available. Known IDs resolve their own organization; organizationId can require a specific tenant. Creation defaults to the saved organization.

## Query parameters

- `organizationId` string

## Request body

- PublicSupportCreateConversation
  - `clientMessageId` string, uuid, required
  - `text` string, required
  - `attachmentIds` string[], nullable

## Response `201`

Success

- object
  - `success` unknown, required
  - `data` PublicSupportConversationThread, required
    - `organizationId` string, required
    - `conversation` SupportConversationEncoded, required
      - `id` string, required
      - `subject` string, required
      - `status` 'open' | 'closed', required
      - `visibility` 'personal' | 'organization', required
      - `creator` SupportAuthorEncoded, required
        - `id` string, required
        - `name` string, required
      - `closedAt` string, nullable, required: An ISO 8601 UTC date-time string.
      - `createdAt` string, required: An ISO 8601 UTC date-time string.
      - `updatedAt` string, required: An ISO 8601 UTC date-time string.
    - `messages` object[], required
      - `id` string, required
      - `conversationId` string, required
      - `role` 'customer' | 'agent' | 'system' | 'internal_note', required
      - `source` 'web' | 'slack' | 'backoffice' | 'email', required
      - `authorKind` 'human' | 'system', required
      - `author` SupportAuthorEncoded, required
        - `id` string, required
        - `name` string, required
      - `clientMessageId` string, uuid, nullable, required
      - `text` string, required
      - `attachments` object[], required
        - `id` string, required
        - `messageId` string, nullable, required
        - `fileName` string, required
        - `mediaType` string, required
        - `sizeBytes` integer, required
        - `kind` 'image' | 'screen_recording' | 'file', required
        - `status` 'uploading' | 'ready' | 'failed', required
        - `downloadUrl` string, required
        - `failureReason` string, nullable
        - `createdAt` string, required: An ISO 8601 UTC date-time string.
        - `uploadedAt` string, nullable, required: An ISO 8601 UTC date-time string.
      - `sentAt` string, required: An ISO 8601 UTC date-time string.
    - `nextCursor` string, nullable, required
    - `checkpoint` string, nullable, required
    - `hasMore` boolean, required

## Other responses

- `400`: The request payload or parameters are invalid.
- `401`: Authentication is missing, invalid, or expired.
- `403`: The credential is valid but may not perform the operation. `INSUFFICIENT_SCOPE`: the credential was never granted the capability the operation needs. `details.requiredScope` names it, and the `WWW-Authenticate` header carries `Bearer error="insufficient_scope"`. An OAuth client fixes this by requesting the scope; an organization API key cannot gain it. `FORBIDDEN`: the capability is present but the membership behind the credential lacks the role, or the resource belongs to another organization.
- `404`: The requested resource was not found.
- `409`: The request conflicts with the current resource state.
- `503`: Public agent writes are paused by allow-public-agent-writes. Retry after operators resume writes.

## Changes

- **2026-10-31** `a3f4100e14c9`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/inth/apis/inth-api/changes/v1/support/conversations/post.md)

---

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