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

# Resolve a handoff and close its conversation

> End the session: ``set_status(resolved)`` + conversation ``→ CLOSED``
with ``termination_reason = HANDOFF_RESOLVED``, in one transaction (§6.4).



## OpenAPI

````yaml /api-reference/openapi.json post /v1/hitl/handoffs/{handoff_id}/resolve
openapi: 3.1.0
info:
  title: Feather API
  description: >-
    Unified customer experience platform API. Manages identity, conversations,
    memory, agents, procedures, policies, model routing, knowledge bases,
    integrations, and runtime execution.
  version: 1.21.0
servers:
  - url: https://api-sandbox.featherhq.com
    description: Sandbox
  - url: http://localhost:8000
    description: Local dev
security: []
paths:
  /v1/hitl/handoffs/{handoff_id}/resolve:
    post:
      tags:
        - hitl
      summary: Resolve a handoff and close its conversation
      description: >-
        End the session: ``set_status(resolved)`` + conversation ``→ CLOSED``

        with ``termination_reason = HANDOFF_RESOLVED``, in one transaction
        (§6.4).
      operationId: resolve_handoff_v1_hitl_handoffs__handoff_id__resolve_post
      parameters:
        - name: handoff_id
          in: path
          required: true
          schema:
            type: string
            format: uuid
            title: Handoff Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HandoffRead'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - APIKeyHeader: []
components:
  schemas:
    HandoffRead:
      properties:
        id:
          type: string
          format: uuid
          title: Id
        organization_id:
          type: string
          format: uuid
          title: Organization Id
        conversation_id:
          type: string
          format: uuid
          title: Conversation Id
        conv_turn_id:
          anyOf:
            - type: string
              format: uuid
            - type: 'null'
          title: Conv Turn Id
        reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Reason
        static_text:
          type: string
          title: Static Text
        status:
          type: string
          enum:
            - requested
            - assigned
            - accepted
            - resolved
            - cancelled
          title: Status
        assignee:
          anyOf:
            - type: string
            - type: 'null'
          title: Assignee
        source:
          type: string
          enum:
            - workflow_terminal
            - router
            - policy
          title: Source
        packet:
          $ref: '#/components/schemas/HandoffPacket'
        created_at:
          type: string
          format: date-time
          title: Created At
        resolved_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Resolved At
      additionalProperties: false
      type: object
      required:
        - id
        - organization_id
        - conversation_id
        - conv_turn_id
        - reason
        - static_text
        - status
        - assignee
        - source
        - packet
        - created_at
        - resolved_at
      title: HandoffRead
      description: >-
        The API-response shape for a single ``handoffs`` row (UI + channel
        runtime).
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    HandoffPacket:
      properties:
        static_text:
          type: string
          title: Static Text
        reason:
          anyOf:
            - type: string
            - type: 'null'
          title: Reason
        context_vars:
          additionalProperties: true
          type: object
          title: Context Vars
        summary:
          anyOf:
            - type: string
            - type: 'null'
          title: Summary
        transcript_ptr:
          anyOf:
            - $ref: '#/components/schemas/TranscriptPtr'
            - type: 'null'
        transfer_to:
          anyOf:
            - type: string
            - type: 'null'
          title: Transfer To
        transfer_label:
          anyOf:
            - type: string
            - type: 'null'
          title: Transfer Label
      additionalProperties: false
      type: object
      required:
        - static_text
      title: HandoffPacket
      description: >-
        The complete, enriched handoff packet — the channel-runtime contract.


        Two halves, by who fills them:


        * *engine-supplied intent* (rides on the ``handoff`` signal):
        ``reason``,
          ``static_text``, ``context_vars``.
        * *service-enriched at record time* (needs DB access — ``packet.py``):
          ``summary`` (from ``conversations.summary``) and ``transcript_ptr``.
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    TranscriptPtr:
      properties:
        conversation_id:
          type: string
          format: uuid
          title: Conversation Id
        up_to_seq:
          anyOf:
            - type: integer
            - type: 'null'
          title: Up To Seq
      additionalProperties: false
      type: object
      required:
        - conversation_id
      title: TranscriptPtr
      description: >-
        A pointer into the conversation's append-only ``conv_messages``
        transcript.


        ``up_to_seq`` is the highest ``conv_messages.seq`` written for the

        conversation at handoff time (``None`` when the thread has no messages
        yet) —

        so a human can replay everything the brain saw before it stepped aside.


        Stored on the seam packet as the compact string ``conv:{id}@{seq}`` (or

        ``conv:{id}`` when ``up_to_seq`` is None); this model is the parsed,

        API-facing form. :meth:`to_wire` / :meth:`parse` bridge the two.
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: x-api-key

````