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

# Post sessions speaker claims



## OpenAPI

````yaml /openapi.json post /sessions/{session_id}/speaker-claims
openapi: 3.0.0
info:
  title: Kair Voice
  version: '1.0'
servers:
  - url: http://0.0.0.0:8000/api
security: []
tags:
  - name: Admin
  - name: ApiKey
  - name: Auth
  - name: Concerns
  - name: Device
  - name: Graph
  - name: Health
  - name: Job
  - name: Session
  - name: Workshop
  - name: Workspace
paths:
  /sessions/{session_id}/speaker-claims:
    post:
      tags:
        - Session
      operationId: post-sessions-session-id-speaker-claims
      parameters:
        - name: session_id
          schema:
            type: string
            format: uuid
          in: path
          required: true
          deprecated: false
          explode: true
      requestBody:
        content:
          application/json; charset=utf-8:
            schema:
              $ref: '#/components/schemas/CreateSpeakerClaimRequest'
        required: true
      responses:
        '201':
          description: ''
          content:
            application/json; charset=utf-8:
              schema:
                $ref: '#/components/schemas/SpeakerClaimResponse'
        '400':
          description: ''
        '403':
          description: ''
        '404':
          description: ''
        '409':
          description: ''
components:
  schemas:
    CreateSpeakerClaimRequest:
      type: object
      title: CreateSpeakerClaimRequest
      required:
        - speaker_label
        - source
      properties:
        speaker_label:
          type: string
          description: The per-session diarisation pseudonym, e.g. `"S1"`.
        source:
          type: string
          description: >-
            `"self_claim"` for the caller claiming the label themselves;

            `"moderator_assignment"` for the session owner assigning another
            user.
        assigned_user_id:
          type: string
          format: uuid
          description: Required when `source = "moderator_assignment"`. Ignored otherwise.
    SpeakerClaimResponse:
      type: object
      title: SpeakerClaimResponse
      required:
        - speaker_label
        - source
      properties:
        speaker_label:
          type: string
        source:
          type: string
        claimed_user_id:
          type: string
          format: uuid
          description: |-
            Only populated when the caller is the session owner / moderator. For
            other viewers the field stays `None` so cross-session identity
            inference is impossible from the public surface.

````