diff --git a/apps/backend/src/lib/openapi.tsx b/apps/backend/src/lib/openapi.tsx index 204cfaeae..a5da85da4 100644 --- a/apps/backend/src/lib/openapi.tsx +++ b/apps/backend/src/lib/openapi.tsx @@ -8,6 +8,10 @@ import { typedEntries, typedFromEntries } from '@hexclave/shared/dist/utils/obje import { deindent, stringCompare } from '@hexclave/shared/dist/utils/strings'; import * as yup from 'yup'; +function isInternalApiPath(path: string) { + return path === '/internal' || path.startsWith('/internal/'); +} + export function parseOpenAPI(options: { endpoints: Map>, audience: 'client' | 'server' | 'admin', @@ -25,6 +29,11 @@ export function parseOpenAPI(options: { }], paths: Object.fromEntries( [...options.endpoints] + // `/internal/*` routes are scoped to the internal Hexclave project (project.id === "internal") + // and are not part of the public API. Many of them use a permissive auth.type (e.g. adaptSchema), + // so the per-audience heuristic below does not exclude them; filter them out explicitly here so + // they never leak into the public API reference, regardless of their individual route metadata. + .filter(([path]) => !isInternalApiPath(path)) .map(([path, handlersByMethod]) => ( [path, Object.fromEntries( [...handlersByMethod] diff --git a/docs-mintlify/openapi/admin.json b/docs-mintlify/openapi/admin.json index 9ad4f3003..9151534bd 100644 --- a/docs-mintlify/openapi/admin.json +++ b/docs-mintlify/openapi/admin.json @@ -189,58 +189,6 @@ } } }, - "/internal/ai-chat/{threadId}": { - "patch": { - "summary": "Save a chat message", - "description": "Save a chat message", - "parameters": [ - { - "name": "threadId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "message": { - "type": "object" - } - }, - "required": [ - "message" - ], - "example": {} - } - } - } - }, - "tags": [ - "AI Chat" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-chat/{threadId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - } - }, "/auth/anonymous/sign-up": { "post": { "summary": "Sign up anonymously", @@ -3055,315 +3003,6 @@ } } }, - "/internal/feature-requests": { - "get": { - "summary": "Get feature requests", - "description": "Fetch all feature requests with upvote status for the current user", - "parameters": [], - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feature-requests", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "posts": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "content": { - "type": "string" - }, - "upvotes": { - "type": "number" - }, - "date": { - "type": "string" - }, - "postStatus": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "required": [ - "name", - "color" - ] - }, - "userHasUpvoted": { - "type": "boolean" - } - }, - "required": [ - "id", - "title", - "upvotes", - "date", - "userHasUpvoted" - ] - } - } - }, - "required": [ - "posts" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create feature request", - "description": "Create a new feature request", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "content": { - "type": "string" - }, - "category": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "commentsAllowed": { - "type": "boolean" - }, - "customInputValues": { - "type": "object", - "properties": {}, - "required": [] - } - }, - "required": [ - "title" - ], - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feature-requests", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "id": { - "type": "string" - } - }, - "required": [ - "success" - ] - } - } - } - } - } - } - }, - "/internal/feature-requests/{featureRequestId}/upvote": { - "post": { - "summary": "Toggle upvote on feature request", - "description": "Toggle upvote on a feature request for the current user", - "parameters": [ - { - "name": "featureRequestId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {}, - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feature-requests/{featureRequestId}/upvote", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "upvoted": { - "type": "boolean" - } - }, - "required": [ - "success" - ] - } - } - } - } - } - } - }, - "/internal/feedback": { - "post": { - "summary": "Submit support feedback", - "description": "Send a support feedback message to the internal Hexclave inbox. Auth is optional — works from both the dashboard (authenticated) and the dev tool (unauthenticated).", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "message": { - "type": "string" - }, - "feedback_type": { - "type": "string", - "enum": [ - "feedback", - "bug" - ] - } - }, - "required": [ - "email", - "message" - ], - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feedback", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - } - }, - "required": [ - "success" - ] - } - } - } - } - } - } - }, - "/internal/preview/create-project": { - "post": { - "summary": "Create a preview project", - "description": "Creates a new project pre-filled with dummy data for the preview environment. Only available when NEXT_PUBLIC_STACK_IS_PREVIEW=true.", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {}, - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/preview/create-project", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "project_id": { - "type": "string" - } - }, - "required": [ - "project_id" - ] - } - } - } - } - } - } - }, "/auth/oauth/authorize/{provider_id}": { "get": { "summary": "OAuth authorize endpoint", @@ -4291,1333 +3930,6 @@ } } }, - "/internal/ai-conversations": { - "get": { - "summary": "List AI conversations", - "description": "List AI conversations for the current user filtered by project", - "parameters": [ - { - "name": "projectId", - "in": "query", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "title", - "projectId", - "updatedAt" - ] - } - } - }, - "required": [ - "conversations" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create AI conversation", - "description": "Create a new AI conversation with optional initial messages", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "role": { - "type": "string", - "enum": [ - "user", - "assistant" - ] - }, - "content": { - "type": "object" - } - }, - "required": [ - "role", - "content" - ] - } - } - }, - "required": [ - "title", - "projectId", - "messages" - ], - "example": {} - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "required": [ - "id", - "title" - ] - } - } - } - } - } - } - }, - "/internal/ai-conversations/{conversationId}": { - "get": { - "summary": "Get AI conversation", - "description": "Fetch a single AI conversation with all its messages", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "role": { - "type": "string" - }, - "content": { - "type": "object" - } - }, - "required": [ - "id", - "role", - "content" - ] - } - } - }, - "required": [ - "id", - "title", - "projectId", - "messages" - ] - } - } - } - } - } - }, - "delete": { - "summary": "Delete AI conversation", - "description": "Delete an AI conversation and all its messages", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - }, - "patch": { - "summary": "Update AI conversation", - "description": "Update the title of an AI conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - } - }, - "required": [ - "title" - ], - "example": {} - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - } - }, - "/internal/ai-conversations/{conversationId}/messages": { - "put": { - "summary": "Replace conversation messages", - "description": "Replace all messages in a conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "role": { - "type": "string", - "enum": [ - "user", - "assistant" - ] - }, - "content": { - "type": "object" - } - }, - "required": [ - "role", - "content" - ] - } - } - }, - "required": [ - "messages" - ], - "example": {} - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}/messages", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - } - }, - "/internal/conversations": { - "get": { - "summary": "List conversations", - "description": "List conversations for a managed project", - "parameters": [ - { - "name": "projectId", - "in": "query", - "schema": { - "type": "string", - "example": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "description": "The unique identifier of the project" - }, - "description": "The unique identifier of the project", - "required": true - }, - { - "name": "query", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - }, - { - "name": "status", - "in": "query", - "schema": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "required": false - }, - { - "name": "userId", - "in": "query", - "schema": { - "type": "string", - "example": "3241a285-8329-4d69-8f3d-316e08cf140c", - "description": "The unique identifier of the user" - }, - "description": "The unique identifier of the user", - "required": false - }, - { - "name": "limit", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - }, - { - "name": "offset", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "userDisplayName": { - "type": "string" - }, - "userPrimaryEmail": { - "type": "string" - }, - "userProfileImageUrl": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "lastMessageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "preview": { - "type": "string" - }, - "lastActivityAt": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assignedToUserId": { - "type": "string" - }, - "assignedToDisplayName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "firstResponseDueAt": { - "type": "string" - }, - "firstResponseAt": { - "type": "string" - }, - "nextResponseDueAt": { - "type": "string" - }, - "lastCustomerReplyAt": { - "type": "string" - }, - "lastAgentReplyAt": { - "type": "string" - } - }, - "required": [ - "tags" - ] - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastMessageAt": { - "type": "string" - }, - "lastInboundAt": { - "type": "string" - }, - "lastOutboundAt": { - "type": "string" - }, - "closedAt": { - "type": "string" - }, - "recordMetadata": { - "type": "object" - } - }, - "required": [ - "conversationId", - "subject", - "status", - "priority", - "source", - "lastMessageType", - "lastActivityAt", - "metadata" - ] - } - }, - "hasMore": { - "type": "boolean" - } - }, - "required": [ - "conversations", - "hasMore" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create conversation", - "description": "Create a managed project conversation for a user", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "projectId": { - "type": "string", - "example": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "description": "The unique identifier of the project" - }, - "userId": { - "type": "string", - "example": "3241a285-8329-4d69-8f3d-316e08cf140c", - "description": "The unique identifier of the user" - }, - "subject": { - "type": "string" - }, - "initialMessage": { - "type": "string" - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - } - }, - "required": [ - "projectId", - "userId", - "subject", - "initialMessage", - "priority" - ], - "example": { - "projectId": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "userId": "3241a285-8329-4d69-8f3d-316e08cf140c" - } - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - } - }, - "required": [ - "conversationId" - ] - } - } - } - } - } - } - }, - "/internal/conversations/{conversationId}": { - "get": { - "summary": "Get conversation detail", - "description": "Get conversation detail for a managed project", - "parameters": [ - { - "name": "projectId", - "in": "query", - "schema": { - "type": "string", - "example": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "description": "The unique identifier of the project" - }, - "description": "The unique identifier of the project", - "required": true - }, - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "userDisplayName": { - "type": "string" - }, - "userPrimaryEmail": { - "type": "string" - }, - "userProfileImageUrl": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "lastMessageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "preview": { - "type": "string" - }, - "lastActivityAt": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assignedToUserId": { - "type": "string" - }, - "assignedToDisplayName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "firstResponseDueAt": { - "type": "string" - }, - "firstResponseAt": { - "type": "string" - }, - "nextResponseDueAt": { - "type": "string" - }, - "lastCustomerReplyAt": { - "type": "string" - }, - "lastAgentReplyAt": { - "type": "string" - } - }, - "required": [ - "tags" - ] - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastMessageAt": { - "type": "string" - }, - "lastInboundAt": { - "type": "string" - }, - "lastOutboundAt": { - "type": "string" - }, - "closedAt": { - "type": "string" - }, - "recordMetadata": { - "type": "object" - } - }, - "required": [ - "conversationId", - "subject", - "status", - "priority", - "source", - "lastMessageType", - "lastActivityAt", - "metadata" - ] - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "messageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "body": { - "type": "string" - }, - "attachments": { - "type": "array", - "items": { - "type": "object" - } - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "sender": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "user", - "agent", - "system" - ] - }, - "id": { - "type": "string" - }, - "displayName": { - "type": "string" - }, - "primaryEmail": { - "type": "string" - } - }, - "required": [ - "type" - ] - } - }, - "required": [ - "id", - "conversationId", - "subject", - "status", - "priority", - "source", - "messageType", - "attachments", - "createdAt", - "sender" - ] - } - }, - "entryPoints": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "channelType": { - "type": "string" - }, - "adapterKey": { - "type": "string" - }, - "externalChannelId": { - "type": "string" - }, - "isEntryPoint": { - "type": "boolean" - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "channelType", - "adapterKey", - "isEntryPoint", - "createdAt", - "updatedAt" - ] - } - } - }, - "required": [ - "conversation", - "messages", - "entryPoints" - ] - } - } - } - } - } - }, - "patch": { - "summary": "Update conversation", - "description": "Append a message or update conversation attributes on a managed project conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "userDisplayName": { - "type": "string" - }, - "userPrimaryEmail": { - "type": "string" - }, - "userProfileImageUrl": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "lastMessageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "preview": { - "type": "string" - }, - "lastActivityAt": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assignedToUserId": { - "type": "string" - }, - "assignedToDisplayName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "firstResponseDueAt": { - "type": "string" - }, - "firstResponseAt": { - "type": "string" - }, - "nextResponseDueAt": { - "type": "string" - }, - "lastCustomerReplyAt": { - "type": "string" - }, - "lastAgentReplyAt": { - "type": "string" - } - }, - "required": [ - "tags" - ] - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastMessageAt": { - "type": "string" - }, - "lastInboundAt": { - "type": "string" - }, - "lastOutboundAt": { - "type": "string" - }, - "closedAt": { - "type": "string" - }, - "recordMetadata": { - "type": "object" - } - }, - "required": [ - "conversationId", - "subject", - "status", - "priority", - "source", - "lastMessageType", - "lastActivityAt", - "metadata" - ] - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "messageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "body": { - "type": "string" - }, - "attachments": { - "type": "array", - "items": { - "type": "object" - } - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "sender": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "user", - "agent", - "system" - ] - }, - "id": { - "type": "string" - }, - "displayName": { - "type": "string" - }, - "primaryEmail": { - "type": "string" - } - }, - "required": [ - "type" - ] - } - }, - "required": [ - "id", - "conversationId", - "subject", - "status", - "priority", - "source", - "messageType", - "attachments", - "createdAt", - "sender" - ] - } - }, - "entryPoints": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "channelType": { - "type": "string" - }, - "adapterKey": { - "type": "string" - }, - "externalChannelId": { - "type": "string" - }, - "isEntryPoint": { - "type": "boolean" - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "channelType", - "adapterKey", - "isEntryPoint", - "createdAt", - "updatedAt" - ] - } - } - }, - "required": [ - "conversation", - "messages", - "entryPoints" - ] - } - } - } - } - } - } - }, "/auth/mfa/sign-in": { "post": { "summary": "MFA sign in", diff --git a/docs-mintlify/openapi/client.json b/docs-mintlify/openapi/client.json index a690ff7d6..280ec9e28 100644 --- a/docs-mintlify/openapi/client.json +++ b/docs-mintlify/openapi/client.json @@ -2058,642 +2058,6 @@ } } }, - "/internal/dogfood/support/conversations": { - "get": { - "summary": "List conversations for the current user", - "description": "List conversations visible to the currently authenticated user", - "parameters": [ - { - "name": "query", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - }, - { - "name": "limit", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - }, - { - "name": "offset", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - } - ], - "tags": [ - "Conversations" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/dogfood/support/conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "conversation_id": { - "type": "string" - }, - "user_id": { - "type": "string" - }, - "team_id": { - "type": "string" - }, - "user_display_name": { - "type": "string" - }, - "user_primary_email": { - "type": "string" - }, - "user_profile_image_url": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string" - }, - "priority": { - "type": "string" - }, - "source": { - "type": "string" - }, - "last_message_type": { - "type": "string" - }, - "preview": { - "type": "string" - }, - "last_activity_at": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assigned_to_user_id": { - "type": "string" - }, - "assigned_to_display_name": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "first_response_due_at": { - "type": "string" - }, - "first_response_at": { - "type": "string" - }, - "next_response_due_at": { - "type": "string" - }, - "last_customer_reply_at": { - "type": "string" - }, - "last_agent_reply_at": { - "type": "string" - } - }, - "required": [ - "tags" - ] - } - }, - "required": [ - "conversation_id", - "subject", - "status", - "priority", - "source", - "last_message_type", - "last_activity_at", - "metadata" - ] - } - }, - "has_more": { - "type": "boolean" - } - }, - "required": [ - "conversations", - "has_more" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create a conversation", - "description": "Create a new conversation as the current user", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "subject": { - "type": "string" - }, - "message": { - "type": "string" - } - }, - "required": [ - "subject", - "message" - ], - "example": {} - } - } - } - }, - "tags": [ - "Conversations" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/dogfood/support/conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation_id": { - "type": "string" - } - }, - "required": [ - "conversation_id" - ] - } - } - } - } - } - } - }, - "/internal/dogfood/support/conversations/{conversationId}": { - "get": { - "summary": "Get a conversation for the current user", - "description": "Get conversation detail visible to the currently authenticated user", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Conversations" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/dogfood/support/conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation": { - "type": "object", - "properties": { - "conversation_id": { - "type": "string" - }, - "user_id": { - "type": "string" - }, - "team_id": { - "type": "string" - }, - "user_display_name": { - "type": "string" - }, - "user_primary_email": { - "type": "string" - }, - "user_profile_image_url": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string" - }, - "priority": { - "type": "string" - }, - "source": { - "type": "string" - }, - "last_message_type": { - "type": "string" - }, - "preview": { - "type": "string" - }, - "last_activity_at": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assigned_to_user_id": { - "type": "string" - }, - "assigned_to_display_name": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "first_response_due_at": { - "type": "string" - }, - "first_response_at": { - "type": "string" - }, - "next_response_due_at": { - "type": "string" - }, - "last_customer_reply_at": { - "type": "string" - }, - "last_agent_reply_at": { - "type": "string" - } - }, - "required": [ - "tags" - ] - } - }, - "required": [ - "conversation_id", - "subject", - "status", - "priority", - "source", - "last_message_type", - "last_activity_at", - "metadata" - ] - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "conversation_id": { - "type": "string" - }, - "user_id": { - "type": "string" - }, - "team_id": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string" - }, - "priority": { - "type": "string" - }, - "source": { - "type": "string" - }, - "message_type": { - "type": "string" - }, - "body": { - "type": "string" - }, - "attachments": { - "type": "array", - "items": { - "type": "object" - } - }, - "metadata": { - "type": "object" - }, - "created_at": { - "type": "string" - }, - "sender": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "id": { - "type": "string" - }, - "display_name": { - "type": "string" - }, - "primary_email": { - "type": "string" - } - }, - "required": [ - "type" - ] - } - }, - "required": [ - "id", - "conversation_id", - "subject", - "status", - "priority", - "source", - "message_type", - "attachments", - "created_at", - "sender" - ] - } - } - }, - "required": [ - "conversation", - "messages" - ] - } - } - } - } - } - }, - "patch": { - "summary": "Reply to a conversation", - "description": "Append a user message to an existing conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "required": [ - "message" - ], - "example": {} - } - } - } - }, - "tags": [ - "Conversations" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/dogfood/support/conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation": { - "type": "object", - "properties": { - "conversation_id": { - "type": "string" - }, - "user_id": { - "type": "string" - }, - "team_id": { - "type": "string" - }, - "user_display_name": { - "type": "string" - }, - "user_primary_email": { - "type": "string" - }, - "user_profile_image_url": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string" - }, - "priority": { - "type": "string" - }, - "source": { - "type": "string" - }, - "last_message_type": { - "type": "string" - }, - "preview": { - "type": "string" - }, - "last_activity_at": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assigned_to_user_id": { - "type": "string" - }, - "assigned_to_display_name": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "first_response_due_at": { - "type": "string" - }, - "first_response_at": { - "type": "string" - }, - "next_response_due_at": { - "type": "string" - }, - "last_customer_reply_at": { - "type": "string" - }, - "last_agent_reply_at": { - "type": "string" - } - }, - "required": [ - "tags" - ] - } - }, - "required": [ - "conversation_id", - "subject", - "status", - "priority", - "source", - "last_message_type", - "last_activity_at", - "metadata" - ] - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "conversation_id": { - "type": "string" - }, - "user_id": { - "type": "string" - }, - "team_id": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string" - }, - "priority": { - "type": "string" - }, - "source": { - "type": "string" - }, - "message_type": { - "type": "string" - }, - "body": { - "type": "string" - }, - "attachments": { - "type": "array", - "items": { - "type": "object" - } - }, - "metadata": { - "type": "object" - }, - "created_at": { - "type": "string" - }, - "sender": { - "type": "object", - "properties": { - "type": { - "type": "string" - }, - "id": { - "type": "string" - }, - "display_name": { - "type": "string" - }, - "primary_email": { - "type": "string" - } - }, - "required": [ - "type" - ] - } - }, - "required": [ - "id", - "conversation_id", - "subject", - "status", - "priority", - "source", - "message_type", - "attachments", - "created_at", - "sender" - ] - } - } - }, - "required": [ - "conversation", - "messages" - ] - } - } - } - } - } - } - }, "/emails/notification-preference/{user_id}": { "get": { "summary": "List notification preferences", @@ -2853,315 +2217,6 @@ } } }, - "/internal/feature-requests": { - "get": { - "summary": "Get feature requests", - "description": "Fetch all feature requests with upvote status for the current user", - "parameters": [], - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feature-requests", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "posts": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "content": { - "type": "string" - }, - "upvotes": { - "type": "number" - }, - "date": { - "type": "string" - }, - "postStatus": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "required": [ - "name", - "color" - ] - }, - "userHasUpvoted": { - "type": "boolean" - } - }, - "required": [ - "id", - "title", - "upvotes", - "date", - "userHasUpvoted" - ] - } - } - }, - "required": [ - "posts" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create feature request", - "description": "Create a new feature request", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "content": { - "type": "string" - }, - "category": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "commentsAllowed": { - "type": "boolean" - }, - "customInputValues": { - "type": "object", - "properties": {}, - "required": [] - } - }, - "required": [ - "title" - ], - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feature-requests", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "id": { - "type": "string" - } - }, - "required": [ - "success" - ] - } - } - } - } - } - } - }, - "/internal/feature-requests/{featureRequestId}/upvote": { - "post": { - "summary": "Toggle upvote on feature request", - "description": "Toggle upvote on a feature request for the current user", - "parameters": [ - { - "name": "featureRequestId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {}, - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feature-requests/{featureRequestId}/upvote", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "upvoted": { - "type": "boolean" - } - }, - "required": [ - "success" - ] - } - } - } - } - } - } - }, - "/internal/feedback": { - "post": { - "summary": "Submit support feedback", - "description": "Send a support feedback message to the internal Hexclave inbox. Auth is optional — works from both the dashboard (authenticated) and the dev tool (unauthenticated).", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "message": { - "type": "string" - }, - "feedback_type": { - "type": "string", - "enum": [ - "feedback", - "bug" - ] - } - }, - "required": [ - "email", - "message" - ], - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feedback", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - } - }, - "required": [ - "success" - ] - } - } - } - } - } - } - }, - "/internal/preview/create-project": { - "post": { - "summary": "Create a preview project", - "description": "Creates a new project pre-filled with dummy data for the preview environment. Only available when NEXT_PUBLIC_STACK_IS_PREVIEW=true.", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {}, - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/preview/create-project", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "project_id": { - "type": "string" - } - }, - "required": [ - "project_id" - ] - } - } - } - } - } - } - }, "/auth/oauth/authorize/{provider_id}": { "get": { "summary": "OAuth authorize endpoint", @@ -3919,1333 +2974,6 @@ } } }, - "/internal/ai-conversations": { - "get": { - "summary": "List AI conversations", - "description": "List AI conversations for the current user filtered by project", - "parameters": [ - { - "name": "projectId", - "in": "query", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "title", - "projectId", - "updatedAt" - ] - } - } - }, - "required": [ - "conversations" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create AI conversation", - "description": "Create a new AI conversation with optional initial messages", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "role": { - "type": "string", - "enum": [ - "user", - "assistant" - ] - }, - "content": { - "type": "object" - } - }, - "required": [ - "role", - "content" - ] - } - } - }, - "required": [ - "title", - "projectId", - "messages" - ], - "example": {} - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "required": [ - "id", - "title" - ] - } - } - } - } - } - } - }, - "/internal/ai-conversations/{conversationId}": { - "get": { - "summary": "Get AI conversation", - "description": "Fetch a single AI conversation with all its messages", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "role": { - "type": "string" - }, - "content": { - "type": "object" - } - }, - "required": [ - "id", - "role", - "content" - ] - } - } - }, - "required": [ - "id", - "title", - "projectId", - "messages" - ] - } - } - } - } - } - }, - "delete": { - "summary": "Delete AI conversation", - "description": "Delete an AI conversation and all its messages", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - }, - "patch": { - "summary": "Update AI conversation", - "description": "Update the title of an AI conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - } - }, - "required": [ - "title" - ], - "example": {} - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - } - }, - "/internal/ai-conversations/{conversationId}/messages": { - "put": { - "summary": "Replace conversation messages", - "description": "Replace all messages in a conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "role": { - "type": "string", - "enum": [ - "user", - "assistant" - ] - }, - "content": { - "type": "object" - } - }, - "required": [ - "role", - "content" - ] - } - } - }, - "required": [ - "messages" - ], - "example": {} - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}/messages", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - } - }, - "/internal/conversations": { - "get": { - "summary": "List conversations", - "description": "List conversations for a managed project", - "parameters": [ - { - "name": "projectId", - "in": "query", - "schema": { - "type": "string", - "example": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "description": "The unique identifier of the project" - }, - "description": "The unique identifier of the project", - "required": true - }, - { - "name": "query", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - }, - { - "name": "status", - "in": "query", - "schema": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "required": false - }, - { - "name": "userId", - "in": "query", - "schema": { - "type": "string", - "example": "3241a285-8329-4d69-8f3d-316e08cf140c", - "description": "The unique identifier of the user" - }, - "description": "The unique identifier of the user", - "required": false - }, - { - "name": "limit", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - }, - { - "name": "offset", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "userDisplayName": { - "type": "string" - }, - "userPrimaryEmail": { - "type": "string" - }, - "userProfileImageUrl": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "lastMessageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "preview": { - "type": "string" - }, - "lastActivityAt": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assignedToUserId": { - "type": "string" - }, - "assignedToDisplayName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "firstResponseDueAt": { - "type": "string" - }, - "firstResponseAt": { - "type": "string" - }, - "nextResponseDueAt": { - "type": "string" - }, - "lastCustomerReplyAt": { - "type": "string" - }, - "lastAgentReplyAt": { - "type": "string" - } - }, - "required": [ - "tags" - ] - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastMessageAt": { - "type": "string" - }, - "lastInboundAt": { - "type": "string" - }, - "lastOutboundAt": { - "type": "string" - }, - "closedAt": { - "type": "string" - }, - "recordMetadata": { - "type": "object" - } - }, - "required": [ - "conversationId", - "subject", - "status", - "priority", - "source", - "lastMessageType", - "lastActivityAt", - "metadata" - ] - } - }, - "hasMore": { - "type": "boolean" - } - }, - "required": [ - "conversations", - "hasMore" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create conversation", - "description": "Create a managed project conversation for a user", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "projectId": { - "type": "string", - "example": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "description": "The unique identifier of the project" - }, - "userId": { - "type": "string", - "example": "3241a285-8329-4d69-8f3d-316e08cf140c", - "description": "The unique identifier of the user" - }, - "subject": { - "type": "string" - }, - "initialMessage": { - "type": "string" - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - } - }, - "required": [ - "projectId", - "userId", - "subject", - "initialMessage", - "priority" - ], - "example": { - "projectId": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "userId": "3241a285-8329-4d69-8f3d-316e08cf140c" - } - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - } - }, - "required": [ - "conversationId" - ] - } - } - } - } - } - } - }, - "/internal/conversations/{conversationId}": { - "get": { - "summary": "Get conversation detail", - "description": "Get conversation detail for a managed project", - "parameters": [ - { - "name": "projectId", - "in": "query", - "schema": { - "type": "string", - "example": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "description": "The unique identifier of the project" - }, - "description": "The unique identifier of the project", - "required": true - }, - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "userDisplayName": { - "type": "string" - }, - "userPrimaryEmail": { - "type": "string" - }, - "userProfileImageUrl": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "lastMessageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "preview": { - "type": "string" - }, - "lastActivityAt": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assignedToUserId": { - "type": "string" - }, - "assignedToDisplayName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "firstResponseDueAt": { - "type": "string" - }, - "firstResponseAt": { - "type": "string" - }, - "nextResponseDueAt": { - "type": "string" - }, - "lastCustomerReplyAt": { - "type": "string" - }, - "lastAgentReplyAt": { - "type": "string" - } - }, - "required": [ - "tags" - ] - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastMessageAt": { - "type": "string" - }, - "lastInboundAt": { - "type": "string" - }, - "lastOutboundAt": { - "type": "string" - }, - "closedAt": { - "type": "string" - }, - "recordMetadata": { - "type": "object" - } - }, - "required": [ - "conversationId", - "subject", - "status", - "priority", - "source", - "lastMessageType", - "lastActivityAt", - "metadata" - ] - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "messageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "body": { - "type": "string" - }, - "attachments": { - "type": "array", - "items": { - "type": "object" - } - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "sender": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "user", - "agent", - "system" - ] - }, - "id": { - "type": "string" - }, - "displayName": { - "type": "string" - }, - "primaryEmail": { - "type": "string" - } - }, - "required": [ - "type" - ] - } - }, - "required": [ - "id", - "conversationId", - "subject", - "status", - "priority", - "source", - "messageType", - "attachments", - "createdAt", - "sender" - ] - } - }, - "entryPoints": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "channelType": { - "type": "string" - }, - "adapterKey": { - "type": "string" - }, - "externalChannelId": { - "type": "string" - }, - "isEntryPoint": { - "type": "boolean" - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "channelType", - "adapterKey", - "isEntryPoint", - "createdAt", - "updatedAt" - ] - } - } - }, - "required": [ - "conversation", - "messages", - "entryPoints" - ] - } - } - } - } - } - }, - "patch": { - "summary": "Update conversation", - "description": "Append a message or update conversation attributes on a managed project conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "userDisplayName": { - "type": "string" - }, - "userPrimaryEmail": { - "type": "string" - }, - "userProfileImageUrl": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "lastMessageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "preview": { - "type": "string" - }, - "lastActivityAt": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assignedToUserId": { - "type": "string" - }, - "assignedToDisplayName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "firstResponseDueAt": { - "type": "string" - }, - "firstResponseAt": { - "type": "string" - }, - "nextResponseDueAt": { - "type": "string" - }, - "lastCustomerReplyAt": { - "type": "string" - }, - "lastAgentReplyAt": { - "type": "string" - } - }, - "required": [ - "tags" - ] - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastMessageAt": { - "type": "string" - }, - "lastInboundAt": { - "type": "string" - }, - "lastOutboundAt": { - "type": "string" - }, - "closedAt": { - "type": "string" - }, - "recordMetadata": { - "type": "object" - } - }, - "required": [ - "conversationId", - "subject", - "status", - "priority", - "source", - "lastMessageType", - "lastActivityAt", - "metadata" - ] - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "messageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "body": { - "type": "string" - }, - "attachments": { - "type": "array", - "items": { - "type": "object" - } - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "sender": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "user", - "agent", - "system" - ] - }, - "id": { - "type": "string" - }, - "displayName": { - "type": "string" - }, - "primaryEmail": { - "type": "string" - } - }, - "required": [ - "type" - ] - } - }, - "required": [ - "id", - "conversationId", - "subject", - "status", - "priority", - "source", - "messageType", - "attachments", - "createdAt", - "sender" - ] - } - }, - "entryPoints": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "channelType": { - "type": "string" - }, - "adapterKey": { - "type": "string" - }, - "externalChannelId": { - "type": "string" - }, - "isEntryPoint": { - "type": "boolean" - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "channelType", - "adapterKey", - "isEntryPoint", - "createdAt", - "updatedAt" - ] - } - } - }, - "required": [ - "conversation", - "messages", - "entryPoints" - ] - } - } - } - } - } - } - }, "/auth/mfa/sign-in": { "post": { "summary": "MFA sign in", diff --git a/docs-mintlify/openapi/server.json b/docs-mintlify/openapi/server.json index d10c412cd..5f2c5d6a2 100644 --- a/docs-mintlify/openapi/server.json +++ b/docs-mintlify/openapi/server.json @@ -2963,315 +2963,6 @@ } } }, - "/internal/feature-requests": { - "get": { - "summary": "Get feature requests", - "description": "Fetch all feature requests with upvote status for the current user", - "parameters": [], - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feature-requests", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "posts": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "content": { - "type": "string" - }, - "upvotes": { - "type": "number" - }, - "date": { - "type": "string" - }, - "postStatus": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "color": { - "type": "string" - } - }, - "required": [ - "name", - "color" - ] - }, - "userHasUpvoted": { - "type": "boolean" - } - }, - "required": [ - "id", - "title", - "upvotes", - "date", - "userHasUpvoted" - ] - } - } - }, - "required": [ - "posts" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create feature request", - "description": "Create a new feature request", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "content": { - "type": "string" - }, - "category": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "commentsAllowed": { - "type": "boolean" - }, - "customInputValues": { - "type": "object", - "properties": {}, - "required": [] - } - }, - "required": [ - "title" - ], - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feature-requests", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "id": { - "type": "string" - } - }, - "required": [ - "success" - ] - } - } - } - } - } - } - }, - "/internal/feature-requests/{featureRequestId}/upvote": { - "post": { - "summary": "Toggle upvote on feature request", - "description": "Toggle upvote on a feature request for the current user", - "parameters": [ - { - "name": "featureRequestId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {}, - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feature-requests/{featureRequestId}/upvote", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - }, - "upvoted": { - "type": "boolean" - } - }, - "required": [ - "success" - ] - } - } - } - } - } - } - }, - "/internal/feedback": { - "post": { - "summary": "Submit support feedback", - "description": "Send a support feedback message to the internal Hexclave inbox. Auth is optional — works from both the dashboard (authenticated) and the dev tool (unauthenticated).", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "email": { - "type": "string" - }, - "message": { - "type": "string" - }, - "feedback_type": { - "type": "string", - "enum": [ - "feedback", - "bug" - ] - } - }, - "required": [ - "email", - "message" - ], - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/feedback", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean" - } - }, - "required": [ - "success" - ] - } - } - } - } - } - } - }, - "/internal/preview/create-project": { - "post": { - "summary": "Create a preview project", - "description": "Creates a new project pre-filled with dummy data for the preview environment. Only available when NEXT_PUBLIC_STACK_IS_PREVIEW=true.", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {}, - "example": {} - } - } - } - }, - "tags": [ - "Internal" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/preview/create-project", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "project_id": { - "type": "string" - } - }, - "required": [ - "project_id" - ] - } - } - } - } - } - } - }, "/auth/oauth/authorize/{provider_id}": { "get": { "summary": "OAuth authorize endpoint", @@ -4199,1333 +3890,6 @@ } } }, - "/internal/ai-conversations": { - "get": { - "summary": "List AI conversations", - "description": "List AI conversations for the current user filtered by project", - "parameters": [ - { - "name": "projectId", - "in": "query", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "title", - "projectId", - "updatedAt" - ] - } - } - }, - "required": [ - "conversations" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create AI conversation", - "description": "Create a new AI conversation with optional initial messages", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "role": { - "type": "string", - "enum": [ - "user", - "assistant" - ] - }, - "content": { - "type": "object" - } - }, - "required": [ - "role", - "content" - ] - } - } - }, - "required": [ - "title", - "projectId", - "messages" - ], - "example": {} - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - } - }, - "required": [ - "id", - "title" - ] - } - } - } - } - } - } - }, - "/internal/ai-conversations/{conversationId}": { - "get": { - "summary": "Get AI conversation", - "description": "Fetch a single AI conversation with all its messages", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "title": { - "type": "string" - }, - "projectId": { - "type": "string" - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "role": { - "type": "string" - }, - "content": { - "type": "object" - } - }, - "required": [ - "id", - "role", - "content" - ] - } - } - }, - "required": [ - "id", - "title", - "projectId", - "messages" - ] - } - } - } - } - } - }, - "delete": { - "summary": "Delete AI conversation", - "description": "Delete an AI conversation and all its messages", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - }, - "patch": { - "summary": "Update AI conversation", - "description": "Update the title of an AI conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string" - } - }, - "required": [ - "title" - ], - "example": {} - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - } - }, - "/internal/ai-conversations/{conversationId}/messages": { - "put": { - "summary": "Replace conversation messages", - "description": "Replace all messages in a conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "role": { - "type": "string", - "enum": [ - "user", - "assistant" - ] - }, - "content": { - "type": "object" - } - }, - "required": [ - "role", - "content" - ] - } - } - }, - "required": [ - "messages" - ], - "example": {} - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/ai-conversations/{conversationId}/messages", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": {} - } - } - } - } - } - } - }, - "/internal/conversations": { - "get": { - "summary": "List conversations", - "description": "List conversations for a managed project", - "parameters": [ - { - "name": "projectId", - "in": "query", - "schema": { - "type": "string", - "example": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "description": "The unique identifier of the project" - }, - "description": "The unique identifier of the project", - "required": true - }, - { - "name": "query", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - }, - { - "name": "status", - "in": "query", - "schema": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "required": false - }, - { - "name": "userId", - "in": "query", - "schema": { - "type": "string", - "example": "3241a285-8329-4d69-8f3d-316e08cf140c", - "description": "The unique identifier of the user" - }, - "description": "The unique identifier of the user", - "required": false - }, - { - "name": "limit", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - }, - { - "name": "offset", - "in": "query", - "schema": { - "type": "string" - }, - "required": false - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversations": { - "type": "array", - "items": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "userDisplayName": { - "type": "string" - }, - "userPrimaryEmail": { - "type": "string" - }, - "userProfileImageUrl": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "lastMessageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "preview": { - "type": "string" - }, - "lastActivityAt": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assignedToUserId": { - "type": "string" - }, - "assignedToDisplayName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "firstResponseDueAt": { - "type": "string" - }, - "firstResponseAt": { - "type": "string" - }, - "nextResponseDueAt": { - "type": "string" - }, - "lastCustomerReplyAt": { - "type": "string" - }, - "lastAgentReplyAt": { - "type": "string" - } - }, - "required": [ - "tags" - ] - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastMessageAt": { - "type": "string" - }, - "lastInboundAt": { - "type": "string" - }, - "lastOutboundAt": { - "type": "string" - }, - "closedAt": { - "type": "string" - }, - "recordMetadata": { - "type": "object" - } - }, - "required": [ - "conversationId", - "subject", - "status", - "priority", - "source", - "lastMessageType", - "lastActivityAt", - "metadata" - ] - } - }, - "hasMore": { - "type": "boolean" - } - }, - "required": [ - "conversations", - "hasMore" - ] - } - } - } - } - } - }, - "post": { - "summary": "Create conversation", - "description": "Create a managed project conversation for a user", - "parameters": [], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "projectId": { - "type": "string", - "example": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "description": "The unique identifier of the project" - }, - "userId": { - "type": "string", - "example": "3241a285-8329-4d69-8f3d-316e08cf140c", - "description": "The unique identifier of the user" - }, - "subject": { - "type": "string" - }, - "initialMessage": { - "type": "string" - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - } - }, - "required": [ - "projectId", - "userId", - "subject", - "initialMessage", - "priority" - ], - "example": { - "projectId": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "userId": "3241a285-8329-4d69-8f3d-316e08cf140c" - } - } - } - } - }, - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - } - }, - "required": [ - "conversationId" - ] - } - } - } - } - } - } - }, - "/internal/conversations/{conversationId}": { - "get": { - "summary": "Get conversation detail", - "description": "Get conversation detail for a managed project", - "parameters": [ - { - "name": "projectId", - "in": "query", - "schema": { - "type": "string", - "example": "e0b52f4d-dece-408c-af49-d23061bb0f8d", - "description": "The unique identifier of the project" - }, - "description": "The unique identifier of the project", - "required": true - }, - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "userDisplayName": { - "type": "string" - }, - "userPrimaryEmail": { - "type": "string" - }, - "userProfileImageUrl": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "lastMessageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "preview": { - "type": "string" - }, - "lastActivityAt": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assignedToUserId": { - "type": "string" - }, - "assignedToDisplayName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "firstResponseDueAt": { - "type": "string" - }, - "firstResponseAt": { - "type": "string" - }, - "nextResponseDueAt": { - "type": "string" - }, - "lastCustomerReplyAt": { - "type": "string" - }, - "lastAgentReplyAt": { - "type": "string" - } - }, - "required": [ - "tags" - ] - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastMessageAt": { - "type": "string" - }, - "lastInboundAt": { - "type": "string" - }, - "lastOutboundAt": { - "type": "string" - }, - "closedAt": { - "type": "string" - }, - "recordMetadata": { - "type": "object" - } - }, - "required": [ - "conversationId", - "subject", - "status", - "priority", - "source", - "lastMessageType", - "lastActivityAt", - "metadata" - ] - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "messageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "body": { - "type": "string" - }, - "attachments": { - "type": "array", - "items": { - "type": "object" - } - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "sender": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "user", - "agent", - "system" - ] - }, - "id": { - "type": "string" - }, - "displayName": { - "type": "string" - }, - "primaryEmail": { - "type": "string" - } - }, - "required": [ - "type" - ] - } - }, - "required": [ - "id", - "conversationId", - "subject", - "status", - "priority", - "source", - "messageType", - "attachments", - "createdAt", - "sender" - ] - } - }, - "entryPoints": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "channelType": { - "type": "string" - }, - "adapterKey": { - "type": "string" - }, - "externalChannelId": { - "type": "string" - }, - "isEntryPoint": { - "type": "boolean" - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "channelType", - "adapterKey", - "isEntryPoint", - "createdAt", - "updatedAt" - ] - } - } - }, - "required": [ - "conversation", - "messages", - "entryPoints" - ] - } - } - } - } - } - }, - "patch": { - "summary": "Update conversation", - "description": "Append a message or update conversation attributes on a managed project conversation", - "parameters": [ - { - "name": "conversationId", - "in": "path", - "schema": { - "type": "string" - }, - "required": true - } - ], - "tags": [ - "Others" - ], - "x-full-url": "https://api.hexclave.com/api/v1/internal/conversations/{conversationId}", - "responses": { - "200": { - "description": "Successful response", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "conversation": { - "type": "object", - "properties": { - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "userDisplayName": { - "type": "string" - }, - "userPrimaryEmail": { - "type": "string" - }, - "userProfileImageUrl": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "lastMessageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "preview": { - "type": "string" - }, - "lastActivityAt": { - "type": "string" - }, - "metadata": { - "type": "object", - "properties": { - "assignedToUserId": { - "type": "string" - }, - "assignedToDisplayName": { - "type": "string" - }, - "tags": { - "type": "array", - "items": { - "type": "string" - } - }, - "firstResponseDueAt": { - "type": "string" - }, - "firstResponseAt": { - "type": "string" - }, - "nextResponseDueAt": { - "type": "string" - }, - "lastCustomerReplyAt": { - "type": "string" - }, - "lastAgentReplyAt": { - "type": "string" - } - }, - "required": [ - "tags" - ] - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - }, - "lastMessageAt": { - "type": "string" - }, - "lastInboundAt": { - "type": "string" - }, - "lastOutboundAt": { - "type": "string" - }, - "closedAt": { - "type": "string" - }, - "recordMetadata": { - "type": "object" - } - }, - "required": [ - "conversationId", - "subject", - "status", - "priority", - "source", - "lastMessageType", - "lastActivityAt", - "metadata" - ] - }, - "messages": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "conversationId": { - "type": "string" - }, - "userId": { - "type": "string" - }, - "teamId": { - "type": "string" - }, - "subject": { - "type": "string" - }, - "status": { - "type": "string", - "enum": [ - "open", - "pending", - "closed" - ] - }, - "priority": { - "type": "string", - "enum": [ - "low", - "normal", - "high", - "urgent" - ] - }, - "source": { - "type": "string", - "enum": [ - "manual", - "chat", - "email", - "api" - ] - }, - "messageType": { - "type": "string", - "enum": [ - "message", - "internal-note", - "status-change" - ] - }, - "body": { - "type": "string" - }, - "attachments": { - "type": "array", - "items": { - "type": "object" - } - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "sender": { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "user", - "agent", - "system" - ] - }, - "id": { - "type": "string" - }, - "displayName": { - "type": "string" - }, - "primaryEmail": { - "type": "string" - } - }, - "required": [ - "type" - ] - } - }, - "required": [ - "id", - "conversationId", - "subject", - "status", - "priority", - "source", - "messageType", - "attachments", - "createdAt", - "sender" - ] - } - }, - "entryPoints": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "channelType": { - "type": "string" - }, - "adapterKey": { - "type": "string" - }, - "externalChannelId": { - "type": "string" - }, - "isEntryPoint": { - "type": "boolean" - }, - "metadata": { - "type": "object" - }, - "createdAt": { - "type": "string" - }, - "updatedAt": { - "type": "string" - } - }, - "required": [ - "id", - "channelType", - "adapterKey", - "isEntryPoint", - "createdAt", - "updatedAt" - ] - } - } - }, - "required": [ - "conversation", - "messages", - "entryPoints" - ] - } - } - } - } - } - } - }, "/auth/mfa/sign-in": { "post": { "summary": "MFA sign in",