> ## Documentation Index
> Fetch the complete documentation index at: https://docs.handauncle.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Restore Conversation

> Restore an archived conversation to active status. Supports both Auth0 JWT and device-based authentication.

Restores an archived conversation back to the active state. This endpoint
preserves the message history and metadata, making it safe to expose as an
“Unarchive” action in the UI.


## OpenAPI

````yaml POST /api/v1/user/conversations/{conversationId}/restore
openapi: 3.1.0
info:
  title: Handa Uncle API
  version: 1.0.0
  description: Public specification for the Handa Uncle web and mobile APIs.
  contact:
    name: Handa Uncle Engineering
    email: hello@handauncle.com
servers:
  - url: https://handauncle-backend-prod-205012263523.asia-south1.run.app
    description: Prod API base (Cloud Run)
  - url: https://api.handauncle.com
    description: Production
  - url: https://staging-api.handauncle.com
    description: Staging
  - url: http://localhost:8080
    description: Local development
security: []
tags:
  - name: Mobile App
    description: Endpoints used by the native Handa Uncle app.
  - name: Platform
    description: Cross-service operational endpoints.
  - name: Auth
    description: Authentication endpoints handled by the backend adapter.
  - name: AI
    description: LLM chat endpoints supporting streaming and device-auth guests.
  - name: OTP
    description: Phone OTP lifecycle powered by Exotel.
  - name: Webhooks
    description: Server-to-server hooks invoked by Auth0.
  - name: Conversations
    description: Authenticated user conversation management.
  - name: Chat Share
    description: Create, manage, and consume shared conversations.
  - name: Files
    description: Upload, list, and delete user files.
  - name: Prompt management
    description: Admin and public APIs for managing masked pre-prompts.
  - name: User Profile
    description: Profile card collection and user data for personalized AI responses.
  - name: Visual Embeds
    description: Manage visual embed images that attach to AI chat responses.
  - name: Second Opinion
    description: Admin and public APIs for Second Opinion suggestion cards.
  - name: Profile Cards
    description: >-
      APIs for managing profile card questions used in onboarding and
      personalization.
paths:
  /api/v1/user/conversations/{conversationId}/restore:
    post:
      tags:
        - Conversations
      summary: Restore conversation
      description: >-
        Restore an archived conversation to active status. Supports both Auth0
        JWT and device-based authentication.
      operationId: restoreConversation
      parameters:
        - $ref: '#/components/parameters/ConversationIdParam'
      responses:
        '200':
          description: Conversation restored.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ConversationDetailsResponseEnvelope'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '500':
          $ref: '#/components/responses/InternalError'
      security:
        - bearerAuth: []
        - deviceAuth: []
components:
  parameters:
    ConversationIdParam:
      name: conversationId
      in: path
      required: true
      description: Conversation ID (24 character MongoDB ObjectId).
      schema:
        type: string
        minLength: 24
        maxLength: 24
  schemas:
    ConversationDetailsResponseEnvelope:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - true
        data:
          $ref: '#/components/schemas/ConversationDetails'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
      required:
        - success
        - data
        - meta
    ConversationDetails:
      allOf:
        - $ref: '#/components/schemas/ConversationSummary'
        - type: object
          properties:
            userId:
              type: string
            createdAt:
              type: string
              format: date-time
            metadata:
              $ref: '#/components/schemas/ConversationMetadata'
          required:
            - userId
            - createdAt
    ResponseMeta:
      type: object
      properties:
        timestamp:
          type: string
          format: date-time
        requestId:
          type: string
          description: Server generated correlation identifier.
      required:
        - timestamp
        - requestId
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          enum:
            - false
        error:
          $ref: '#/components/schemas/ErrorObject'
        meta:
          $ref: '#/components/schemas/ResponseMeta'
      required:
        - success
        - error
        - meta
    ConversationSummary:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
          nullable: true
        type:
          type: string
          enum:
            - chat
            - second_opinion
          description: >-
            Conversation type - 'chat' for main chat, 'second_opinion' for
            second opinion feature
        inputType:
          type: string
          enum:
            - text
            - file
            - voice
          nullable: true
          description: >-
            How the conversation was initiated - 'text' for plain messages,
            'file' for file uploads, 'voice' for voice input
        prepromptKey:
          type: string
          nullable: true
          description: The pre-prompt key used when creating this conversation
        lastMessageAt:
          type: string
          format: date-time
        status:
          type: string
          enum:
            - active
            - archived
            - deleted
        messageCount:
          type: integer
        preview:
          type: string
          nullable: true
        pinned:
          type: boolean
          nullable: true
        tags:
          type: array
          items:
            type: string
          nullable: true
      required:
        - id
        - lastMessageAt
        - status
        - messageCount
    ConversationMetadata:
      type: object
      properties:
        firstMessage:
          type: string
        tags:
          type: array
          items:
            type: string
        pinned:
          type: boolean
        model:
          type: string
      additionalProperties: false
    ErrorObject:
      type: object
      properties:
        message:
          type: string
          description: Human-readable error message describing the issue.
          example: Please enter a valid 10-digit phone number (e.g., 9876543210)
        code:
          type: string
          description: Error code for programmatic handling.
          example: VALIDATION_ERROR
        details:
          type: array
          description: >-
            Array of field-specific validation errors (for VALIDATION_ERROR
            responses).
          items:
            type: object
            properties:
              field:
                type: string
                description: Field name that failed validation.
                example: phone
              message:
                type: string
                description: Specific validation error message for this field.
                example: Please enter a valid 10-digit phone number (e.g., 9876543210)
            required:
              - field
              - message
      required:
        - message
  responses:
    ValidationError:
      description: The request payload or headers were invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    UnauthorizedError:
      description: Authentication failed or is missing.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    ForbiddenError:
      description: Caller is not allowed to access this resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFoundError:
      description: Requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalError:
      description: Unexpected server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Auth0 access token for registered users.
    deviceAuth:
      type: apiKey
      in: header
      name: x-device-id
      description: >-
        Device-based authentication for guest users. Requires x-device-id,
        x-user-id (optional), and x-platform headers.

````