Support

Send customer support message

Last updated 30 October 2026

post/v1/support/conversations/{conversationId}/messages

Reply to your own or an organization-shared conversation. Closed or resolved conversations reject messages until their creator reopens them. clientMessageId is a UUID for safe retries with the same text and ordered attachmentIds; 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 message with its author and complete attachment metadata. 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.

Authentication

  • bearerAuth
  • bearerAuth: http / bearer — Use an Inth API key or OAuth access token in the Authorization header. Product operations need a capability. Feedback intake only requires authentication. An OAuth access token carries the capabilities it was granted as scopes; an organization API key carries a fixed set (`organizations.read`, `projects.read`, `projects.write`, `api-keys.read`, `inbox.read`, `billing.read`), so writes that name the person who made them, such as `inbox.write` and `vendors.write`, need a user token. A credential without the capability an operation needs is answered with `403 INSUFFICIENT_SCOPE`. `GET /v1/me` reports the capabilities of the calling credential. OAuth scopes: - `organizations.read`: List the organizations you belong to. - `organizations.write`: Create organizations you will own. - `projects.read`: Read projects, their consent configuration, and the vendors seen on them. - `projects.write`: Create, update, and delete projects and their consent configuration. - `members.read`: Read member names, email addresses, profile images, roles, and pending invitation email addresses. - `members.write`: Invite members, change member roles, remove members, and cancel invitations. - `api-keys.read`: List organization API keys. - `api-keys.write`: Create, roll, and delete organization API keys. - `code-audit.read`: Read Code Audit scans, their findings, and connected repositories. - `code-audit.write`: Start Code Audit scans and unlock their reports. - `inbox.read`: Read Inbox findings. - `inbox.write`: Change Inbox status or assignment and open GitHub issues for findings. - `vendors.write`: Approve or ignore vendors detected on your projects, which resolves their Inbox findings. - `billing.read`: Read the plan and credit balance of an organization. - `billing.details.read`: Read invoices, billing profiles, and payment method summaries for organizations you own. - `consent.read`: Read consent records, analytics, configuration, and runtime status. - `consent.write`: Update consent settings, translations, IAB configuration, and policies. - `consent.keys.read`: Read consent runtime key metadata. Secret values are never returned. - `website-audit.read`: Read website audit targets, scans, reports, cookies, and evidence. - `website-audit.write`: Manage website audit targets, verify domains, review findings, and start scans. - `account.read`: Read your account profile. - `notifications.read`: Read your notification preferences and organization routing. - `organization-retention.read`: Read organization provider data retention policy. - `support.read`: Read support conversations you own or can access through sharing. - `support.write`: Create support conversations, send messages, share or close them, and upload support attachments. - `consent.lifecycle.write`: Update, upgrade or delete Consent runtimes. - `consent.keys.write`: Create, rotate and revoke Consent runtime keys. - `billing.write`: Preview and change plans, buy credits, manage billing details and subscriptions, and open hosted payment flows. - `account.security.read`: Read your active browser sessions and connected device grants. - `account.security.write`: Revoke your browser sessions and connected device grants. - `integrations.read`: Read connected integration accounts, repositories, provider properties and project links. - `integrations.write`: Connect and sync providers, manage repository settings, project links and paid pull request monitoring. - `account.write`: Update your name, avatar and PII masking preference. - `account.delete`: Permanently delete your account after ownership checks and confirmation. - `notifications.write`: Update your notification preferences. - `notifications.routing.write`: Manage organization notification routing. - `organization-retention.write`: Change organization provider data retention policy. - `organizations.settings.write`: Update organization name, logo and slug. - `organizations.delete`: Permanently delete organizations you own after confirmation. - `agents.read`: Read your Inth Agent chats and chats shared with your organization. - `agents.write`: Start Inth Agent chats, send messages, share your chats with the organization, and delete your chats. Agent replies use organization credits.

Request

Path Parameters

NameTypeRequiredDescription
conversationIdstringRequired—

Query Parameters

NameTypeRequiredDescription
organizationIdstringOptionalFor lists, omit to use the saved organization. A known conversation resolves its organization independently; pass this to require a specific organization.

Required

Content type application/json

PropertyTypeRequiredDescription
clientMessageIdstring (uuid)Required—
textstringRequired—
attachmentIdsstring[] | nullOptional—
View JSON schema
{
  "type": "object",
  "properties": {
    "clientMessageId": {
      "type": "string",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$",
      "format": "uuid"
    },
    "text": {
      "type": "string"
    },
    "attachmentIds": {
      "anyOf": [
        {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 64,
            "pattern": "^sat_[1-9a-km-z]+$"
          },
          "maxItems": 5
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "clientMessageId",
    "text"
  ],
  "additionalProperties": false
}

Responses

201

Success

Content type application/json

PropertyTypeRequiredDescription
successunknownRequired—
dataobjectRequired—
data.idstringRequired—
data.conversationIdstringRequired—
data.role"customer" | "agent" | "system" | "internal_note"Required—
data.source"web" | "slack" | "backoffice" | "email"Required—
data.authorKind"human" | "system"Required—
data.authorobject | nullRequired—
data.clientMessageIdstring | nullRequired—
data.textstringRequired—
data.attachmentsobject[]Required—
data.attachments[].idstringRequired—
data.attachments[].messageIdstring | nullRequired—
data.attachments[].fileNamestringRequired—
data.attachments[].mediaTypestringRequired—
data.attachments[].sizeBytesintegerRequired—
data.attachments[].kind"image" | "screen_recording" | "file"Required—
data.attachments[].status"uploading" | "ready" | "failed"Required—
data.attachments[].downloadUrlstringRequired—
data.attachments[].failureReasonstring | nullOptional—
data.attachments[].createdAtstringRequiredAn ISO 8601 UTC date-time string.
data.attachments[].uploadedAtstring | nullRequired—
data.sentAtstringRequiredAn ISO 8601 UTC date-time string.
View JSON schema
{
  "type": "object",
  "required": [
    "success",
    "data"
  ],
  "properties": {
    "success": {
      "const": true
    },
    "data": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string",
          "maxLength": 64,
          "pattern": "^spm_[1-9a-km-z]+$"
        },
        "conversationId": {
          "type": "string",
          "maxLength": 64,
          "pattern": "^spc_[1-9a-km-z]+$"
        },
        "role": {
          "type": "string",
          "enum": [
            "customer",
            "agent",
            "system",
            "internal_note"
          ]
        },
        "source": {
          "type": "string",
          "enum": [
            "web",
            "slack",
            "backoffice",
            "email"
          ]
        },
        "authorKind": {
          "type": "string",
          "enum": [
            "human",
            "system"
          ]
        },
        "author": {
          "anyOf": [
            {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 255
                },
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 255
                }
              },
              "required": [
                "id",
                "name"
              ],
              "additionalProperties": false
            },
            {
              "type": "null"
            }
          ]
        },
        "clientMessageId": {
          "anyOf": [
            {
              "type": "string",
              "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|[fF]{8}-[fF]{4}-[fF]{4}-[fF]{4}-[fF]{12})$",
              "format": "uuid"
            },
            {
              "type": "null"
            }
          ]
        },
        "text": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64000
        },
        "attachments": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "maxLength": 64,
                "pattern": "^sat_[1-9a-km-z]+$"
              },
              "messageId": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 64,
                    "pattern": "^spm_[1-9a-km-z]+$"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "fileName": {
                "type": "string"
              },
              "mediaType": {
                "type": "string",
                "minLength": 1,
                "maxLength": 64
              },
              "sizeBytes": {
                "type": "integer",
                "minimum": 0,
                "maximum": 4294967295
              },
              "kind": {
                "type": "string",
                "enum": [
                  "image",
                  "screen_recording",
                  "file"
                ]
              },
              "status": {
                "type": "string",
                "enum": [
                  "uploading",
                  "ready",
                  "failed"
                ]
              },
              "downloadUrl": {
                "type": "string",
                "pattern": "^\\/v1\\/support\\/attachments\\/sat_[1-9a-km-z]+\\/content$"
              },
              "failureReason": {
                "anyOf": [
                  {
                    "type": "string",
                    "maxLength": 1000
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "createdAt": {
                "type": "string",
                "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?Z$",
                "title": "Support date-time",
                "description": "An ISO 8601 UTC date-time string."
              },
              "uploadedAt": {
                "anyOf": [
                  {
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?Z$",
                    "title": "Support date-time",
                    "description": "An ISO 8601 UTC date-time string."
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "required": [
              "id",
              "messageId",
              "fileName",
              "mediaType",
              "sizeBytes",
              "kind",
              "status",
              "downloadUrl",
              "createdAt",
              "uploadedAt"
            ],
            "additionalProperties": false
          }
        },
        "sentAt": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{1,9})?Z$",
          "title": "Support date-time",
          "description": "An ISO 8601 UTC date-time string."
        }
      },
      "required": [
        "id",
        "conversationId",
        "role",
        "source",
        "authorKind",
        "author",
        "clientMessageId",
        "text",
        "attachments",
        "sentAt"
      ],
      "additionalProperties": false
    }
  }
}

400

The request payload or parameters are invalid.

Content type application/json

PropertyTypeRequiredDescription
successbooleanRequired—
errorobjectRequired—
error.code"UNAUTHORIZED" | "FORBIDDEN" | "INSUFFICIENT_SCOPE" | "PLAN_LIMIT_REACHED" | "PLAN_REQUIRED" | "INVALID_ORIGIN" | "INVALID_REGION" | "INVALID_PAYLOAD" | "NOT_FOUND" | "CONFLICT" | "KEY_LIMIT_REACHED" | "INSUFFICIENT_CREDITS" | "SCAN_IN_PROGRESS" | "UNLOCK_REQUIRED" | "REPOSITORY_NOT_LINKED" | "PAYLOAD_TOO_LARGE" | "RATE_LIMITED" | "SERVICE_UNAVAILABLE" | "INTERNAL_ERROR"Required—
error.messagestringRequired—
error.detailsunknownOptionalOptional structured error details.
View JSON schema
{
  "type": "object",
  "required": [
    "success",
    "error"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": false
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "string",
          "enum": [
            "UNAUTHORIZED",
            "FORBIDDEN",
            "INSUFFICIENT_SCOPE",
            "PLAN_LIMIT_REACHED",
            "PLAN_REQUIRED",
            "INVALID_ORIGIN",
            "INVALID_REGION",
            "INVALID_PAYLOAD",
            "NOT_FOUND",
            "CONFLICT",
            "KEY_LIMIT_REACHED",
            "INSUFFICIENT_CREDITS",
            "SCAN_IN_PROGRESS",
            "UNLOCK_REQUIRED",
            "REPOSITORY_NOT_LINKED",
            "PAYLOAD_TOO_LARGE",
            "RATE_LIMITED",
            "SERVICE_UNAVAILABLE",
            "INTERNAL_ERROR"
          ]
        },
        "message": {
          "type": "string"
        },
        "details": {
          "description": "Optional structured error details."
        }
      }
    }
  }
}

401

Authentication is missing, invalid, or expired.

Content type application/json

PropertyTypeRequiredDescription
successbooleanRequired—
errorobjectRequired—
error.code"UNAUTHORIZED" | "FORBIDDEN" | "INSUFFICIENT_SCOPE" | "PLAN_LIMIT_REACHED" | "PLAN_REQUIRED" | "INVALID_ORIGIN" | "INVALID_REGION" | "INVALID_PAYLOAD" | "NOT_FOUND" | "CONFLICT" | "KEY_LIMIT_REACHED" | "INSUFFICIENT_CREDITS" | "SCAN_IN_PROGRESS" | "UNLOCK_REQUIRED" | "REPOSITORY_NOT_LINKED" | "PAYLOAD_TOO_LARGE" | "RATE_LIMITED" | "SERVICE_UNAVAILABLE" | "INTERNAL_ERROR"Required—
error.messagestringRequired—
error.detailsunknownOptionalOptional structured error details.
View JSON schema
{
  "type": "object",
  "required": [
    "success",
    "error"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": false
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "string",
          "enum": [
            "UNAUTHORIZED",
            "FORBIDDEN",
            "INSUFFICIENT_SCOPE",
            "PLAN_LIMIT_REACHED",
            "PLAN_REQUIRED",
            "INVALID_ORIGIN",
            "INVALID_REGION",
            "INVALID_PAYLOAD",
            "NOT_FOUND",
            "CONFLICT",
            "KEY_LIMIT_REACHED",
            "INSUFFICIENT_CREDITS",
            "SCAN_IN_PROGRESS",
            "UNLOCK_REQUIRED",
            "REPOSITORY_NOT_LINKED",
            "PAYLOAD_TOO_LARGE",
            "RATE_LIMITED",
            "SERVICE_UNAVAILABLE",
            "INTERNAL_ERROR"
          ]
        },
        "message": {
          "type": "string"
        },
        "details": {
          "description": "Optional structured error details."
        }
      }
    }
  }
}

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.

Content type application/json

PropertyTypeRequiredDescription
successbooleanRequired—
errorobjectRequired—
error.code"UNAUTHORIZED" | "FORBIDDEN" | "INSUFFICIENT_SCOPE" | "PLAN_LIMIT_REACHED" | "PLAN_REQUIRED" | "INVALID_ORIGIN" | "INVALID_REGION" | "INVALID_PAYLOAD" | "NOT_FOUND" | "CONFLICT" | "KEY_LIMIT_REACHED" | "INSUFFICIENT_CREDITS" | "SCAN_IN_PROGRESS" | "UNLOCK_REQUIRED" | "REPOSITORY_NOT_LINKED" | "PAYLOAD_TOO_LARGE" | "RATE_LIMITED" | "SERVICE_UNAVAILABLE" | "INTERNAL_ERROR"Required—
error.messagestringRequired—
error.detailsunknownOptionalOptional structured error details.
View JSON schema
{
  "type": "object",
  "required": [
    "success",
    "error"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": false
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "string",
          "enum": [
            "UNAUTHORIZED",
            "FORBIDDEN",
            "INSUFFICIENT_SCOPE",
            "PLAN_LIMIT_REACHED",
            "PLAN_REQUIRED",
            "INVALID_ORIGIN",
            "INVALID_REGION",
            "INVALID_PAYLOAD",
            "NOT_FOUND",
            "CONFLICT",
            "KEY_LIMIT_REACHED",
            "INSUFFICIENT_CREDITS",
            "SCAN_IN_PROGRESS",
            "UNLOCK_REQUIRED",
            "REPOSITORY_NOT_LINKED",
            "PAYLOAD_TOO_LARGE",
            "RATE_LIMITED",
            "SERVICE_UNAVAILABLE",
            "INTERNAL_ERROR"
          ]
        },
        "message": {
          "type": "string"
        },
        "details": {
          "description": "Optional structured error details."
        }
      }
    }
  }
}

Headers

NameTypeDescription
WWW-AuthenticatestringPresent on `INSUFFICIENT_SCOPE`: `Bearer error="insufficient_scope", scope="<required scope>"`.

404

The requested resource was not found.

Content type application/json

PropertyTypeRequiredDescription
successbooleanRequired—
errorobjectRequired—
error.code"UNAUTHORIZED" | "FORBIDDEN" | "INSUFFICIENT_SCOPE" | "PLAN_LIMIT_REACHED" | "PLAN_REQUIRED" | "INVALID_ORIGIN" | "INVALID_REGION" | "INVALID_PAYLOAD" | "NOT_FOUND" | "CONFLICT" | "KEY_LIMIT_REACHED" | "INSUFFICIENT_CREDITS" | "SCAN_IN_PROGRESS" | "UNLOCK_REQUIRED" | "REPOSITORY_NOT_LINKED" | "PAYLOAD_TOO_LARGE" | "RATE_LIMITED" | "SERVICE_UNAVAILABLE" | "INTERNAL_ERROR"Required—
error.messagestringRequired—
error.detailsunknownOptionalOptional structured error details.
View JSON schema
{
  "type": "object",
  "required": [
    "success",
    "error"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": false
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "string",
          "enum": [
            "UNAUTHORIZED",
            "FORBIDDEN",
            "INSUFFICIENT_SCOPE",
            "PLAN_LIMIT_REACHED",
            "PLAN_REQUIRED",
            "INVALID_ORIGIN",
            "INVALID_REGION",
            "INVALID_PAYLOAD",
            "NOT_FOUND",
            "CONFLICT",
            "KEY_LIMIT_REACHED",
            "INSUFFICIENT_CREDITS",
            "SCAN_IN_PROGRESS",
            "UNLOCK_REQUIRED",
            "REPOSITORY_NOT_LINKED",
            "PAYLOAD_TOO_LARGE",
            "RATE_LIMITED",
            "SERVICE_UNAVAILABLE",
            "INTERNAL_ERROR"
          ]
        },
        "message": {
          "type": "string"
        },
        "details": {
          "description": "Optional structured error details."
        }
      }
    }
  }
}

409

The request conflicts with the current resource state.

Content type application/json

PropertyTypeRequiredDescription
successbooleanRequired—
errorobjectRequired—
error.code"UNAUTHORIZED" | "FORBIDDEN" | "INSUFFICIENT_SCOPE" | "PLAN_LIMIT_REACHED" | "PLAN_REQUIRED" | "INVALID_ORIGIN" | "INVALID_REGION" | "INVALID_PAYLOAD" | "NOT_FOUND" | "CONFLICT" | "KEY_LIMIT_REACHED" | "INSUFFICIENT_CREDITS" | "SCAN_IN_PROGRESS" | "UNLOCK_REQUIRED" | "REPOSITORY_NOT_LINKED" | "PAYLOAD_TOO_LARGE" | "RATE_LIMITED" | "SERVICE_UNAVAILABLE" | "INTERNAL_ERROR"Required—
error.messagestringRequired—
error.detailsunknownOptionalOptional structured error details.
View JSON schema
{
  "type": "object",
  "required": [
    "success",
    "error"
  ],
  "properties": {
    "success": {
      "type": "boolean",
      "const": false
    },
    "error": {
      "type": "object",
      "required": [
        "code",
        "message"
      ],
      "properties": {
        "code": {
          "type": "string",
          "enum": [
            "UNAUTHORIZED",
            "FORBIDDEN",
            "INSUFFICIENT_SCOPE",
            "PLAN_LIMIT_REACHED",
            "PLAN_REQUIRED",
            "INVALID_ORIGIN",
            "INVALID_REGION",
            "INVALID_PAYLOAD",
            "NOT_FOUND",
            "CONFLICT",
            "KEY_LIMIT_REACHED",
            "INSUFFICIENT_CREDITS",
            "SCAN_IN_PROGRESS",
            "UNLOCK_REQUIRED",
            "REPOSITORY_NOT_LINKED",
            "PAYLOAD_TOO_LARGE",
            "RATE_LIMITED",
            "SERVICE_UNAVAILABLE",
            "INTERNAL_ERROR"
          ]
        },
        "message": {
          "type": "string"
        },
        "details": {
          "description": "Optional structured error details."
        }
      }
    }
  }
}

503

Public agent writes are paused by allow-public-agent-writes. Retry after operators resume writes.