Stream Chat API

Server-side REST API for Stream Chat — channels, messages, users, threads, reactions, attachments, push notifications, search and import/export. JWT-based auth using a Stream API key/secret pair.

OpenAPI Specification

stream-io-chat-openapi.yml Raw ↑
components:
  schemas:
    APIError:
      nullable: true
      properties:
        StatusCode:
          description: Response HTTP status code
          format: int32
          title: Status code
          type: integer
          x-stream-index: "004"
        code:
          description: API error code
          format: int32
          title: Code
          type: integer
          x-stream-index: "001"
        details:
          description: Additional error-specific information
          items:
            type: integer
          title: Details
          type: array
          x-stream-index: "007"
        duration:
          description: Request duration
          title: Duration
          type: string
          x-stream-index: "005"
        exception_fields:
          additionalProperties:
            type: string
          description: Additional error info
          title: Exception fields
          type: object
          x-stream-index: "003"
        message:
          description: Message describing an error
          title: Message
          type: string
          x-stream-index: "002"
        more_info:
          description: URL with additional information
          title: More info
          type: string
          x-stream-index: "006"
        unrecoverable:
          description: Flag that indicates if the error is unrecoverable, requests
            that return unrecoverable errors should not be retried, this error only
            applies to the request that caused it
          title: Unrecoverable
          type: boolean
          x-stream-index: "008"
      required:
      - code
      - message
      - StatusCode
      - duration
      - more_info
      - details
      title: Error response
      type: object
    APNConfig:
      properties:
        Disabled:
          type: boolean
          writeOnly: true
          x-stream-index: "005"
        auth_key:
          type: string
          x-stream-index: "006.001"
        auth_type:
          enum:
          - certificate
          - token
          type: string
          x-stream-index: "001"
        bundle_id:
          type: string
          x-stream-index: "004"
        development:
          type: boolean
          x-stream-index: "002"
        host:
          type: string
          x-stream-index: "003"
        key_id:
          type: string
          x-stream-index: "006.002"
        notification_template:
          type: string
          x-stream-index: "008"
        p12_cert:
          type: string
          x-stream-index: "007.001"
        team_id:
          type: string
          x-stream-index: "006.003"
      type: object
    APNConfigFields:
      properties:
        auth_key:
          type: string
          x-stream-index: "009"
        auth_type:
          type: string
          x-stream-index: "003"
        bundle_id:
          type: string
          x-stream-index: "006"
        development:
          type: boolean
          x-stream-index: "002"
        enabled:
          type: boolean
          x-stream-index: "001"
        host:
          type: string
          x-stream-index: "005"
        key_id:
          type: string
          x-stream-index: "008"
        notification_template:
          type: string
          x-stream-index: "004"
        p12_cert:
          type: string
          x-stream-index: "010"
        team_id:
          type: string
          x-stream-index: "007"
      required:
      - enabled
      - development
      type: object
    APNS:
      properties:
        body:
          type: string
          x-stream-index: "002"
        content-available:
          format: int32
          type: integer
          x-stream-index: "004"
        data:
          additionalProperties: {}
          type: object
          x-stream-index: "006"
        mutable-content:
          format: int32
          type: integer
          x-stream-index: "005"
        sound:
          type: string
          x-stream-index: "003"
        title:
          type: string
          x-stream-index: "001"
      required:
      - title
      - body
      type: object
    Action:
      nullable: true
      properties:
        name:
          type: string
          x-stream-index: "001"
        style:
          type: string
          x-stream-index: "003"
        text:
          type: string
          x-stream-index: "002"
        type:
          type: string
          x-stream-index: "004"
        value:
          type: string
          x-stream-index: "005"
      required:
      - name
      - text
      - type
      type: object
    AddUserGroupMembersRequest:
      description: Request body for adding members to a user group
      nullable: true
      properties:
        as_admin:
          description: Whether to add the members as group admins. Defaults to false
          title: As Admin
          type: boolean
          x-stream-index: "003"
        member_ids:
          description: List of user IDs to add as members
          items:
            type: string
          maxItems: 100
          minItems: 1
          title: Member IDs
          type: array
          x-stream-index: "002"
        team_id:
          maxLength: 255
          type: string
          x-stream-index: "004"
      required:
      - member_ids
      title: AddUserGroupMembersRequest
      type: object
    AddUserGroupMembersResponse:
      description: Response for adding members to a user group
      nullable: true
      properties:
        duration:
          type: string
          x-stream-index: "002.001"
        user_group:
          $ref: '#/components/schemas/UserGroupResponse'
          description: The updated user group
          title: UserGroup
          x-stream-index: "001"
      required:
      - duration
      title: AddUserGroupMembersResponse
      type: object
    AppResponseFields:
      properties:
        activity_metrics_config:
          additionalProperties:
            format: int32
            type: integer
          type: object
          x-stream-index: "057"
        allow_multi_user_devices:
          type: boolean
          x-stream-index: "018"
        allowed_flag_reasons:
          items:
            type: string
          type: array
          x-stream-index: "022"
        async_url_enrich_enabled:
          type: boolean
          x-stream-index: "020"
        auto_translation_enabled:
          type: boolean
          x-stream-index: "023"
        before_message_send_hook_url:
          type: string
          x-stream-index: "024"
        call_types:
          additionalProperties:
            $ref: '#/components/schemas/CallType'
          type: object
          x-stream-index: "009"
        campaign_enabled:
          type: boolean
          x-stream-index: "037"
        cdn_expiration_seconds:
          format: int32
          type: integer
          x-stream-index: "040"
        channel_configs:
          additionalProperties:
            $ref: '#/components/schemas/ChannelConfig'
          type: object
          x-stream-index: "008"
        custom_action_handler_url:
          type: string
          x-stream-index: "025"
        datadog_info:
          $ref: '#/components/schemas/DataDogInfo'
          x-stream-index: "043"
        disable_auth_checks:
          type: boolean
          x-stream-index: "013"
        disable_permissions_checks:
          type: boolean
          x-stream-index: "014"
        enforce_unique_usernames:
          type: string
          x-stream-index: "026"
        event_hooks:
          items:
            $ref: '#/components/schemas/EventHook'
          type: array
          x-stream-index: "048"
        feed_audit_logs_enabled:
          type: boolean
          x-stream-index: "053"
        file_upload_config:
          $ref: '#/components/schemas/FileUploadConfig'
          x-stream-index: "033"
        geofences:
          items:
            $ref: '#/components/schemas/GeofenceResponse'
          type: array
          x-stream-index: "042"
        grants:
          additionalProperties:
            items:
              type: string
            type: array
          type: object
          x-stream-index: "036"
        guest_user_creation_disabled:
          type: boolean
          x-stream-index: "046"
        id:
          format: int32
          type: integer
          x-stream-index: "001"
        image_moderation_enabled:
          type: boolean
          x-stream-index: "019"
        image_moderation_labels:
          items:
            type: string
          type: array
          x-stream-index: "021"
        image_upload_config:
          $ref: '#/components/schemas/FileUploadConfig'
          x-stream-index: "034"
        max_aggregated_activities_length:
          format: int32
          type: integer
          x-stream-index: "052"
        moderation_audio_call_moderation_enabled:
          type: boolean
          x-stream-index: "055"
        moderation_dashboard_preferences:
          $ref: '#/components/schemas/ModerationDashboardPreferences'
          x-stream-index: "047"
        moderation_enabled:
          type: boolean
          x-stream-index: "044"
        moderation_llm_configurability_enabled:
          type: boolean
          x-stream-index: "051"
        moderation_multitenant_blocklist_enabled:
          type: boolean
          x-stream-index: "045"
        moderation_s3_image_access_role_arn:
          type: string
          x-stream-index: "056"
        moderation_video_call_moderation_enabled:
          type: boolean
          x-stream-index: "054"
        moderation_webhook_url:
          type: string
          x-stream-index: "007"
        multi_tenant_enabled:
          type: boolean
          x-stream-index: "017"
        name:
          type: string
          x-stream-index: "002"
        organization:
          type: string
          x-stream-index: "003"
        permission_version:
          type: string
          x-stream-index: "015"
        placement:
          type: string
          x-stream-index: "004"
        policies:
          additionalProperties:
            items:
              $ref: '#/components/schemas/Policy'
            type: array
          type: object
          x-stream-index: "010"
        push_notifications:
          $ref: '#/components/schemas/PushNotificationFields'
          x-stream-index: "005"
        reminders_interval:
          format: int32
          type: integer
          x-stream-index: "039"
        revoke_tokens_issued_before:
          format: date-time
          type: string
          x-stream-index: "035"
        sns_key:
          type: string
          x-stream-index: "031"
        sns_secret:
          type: string
          x-stream-index: "032"
        sns_topic_arn:
          type: string
          x-stream-index: "030"
        sqs_key:
          type: string
          x-stream-index: "028"
        sqs_secret:
          type: string
          x-stream-index: "029"
        sqs_url:
          type: string
          x-stream-index: "027"
        suspended:
          type: boolean
          x-stream-index: "011"
        suspended_explanation:
          type: string
          x-stream-index: "012"
        use_hook_v2:
          type: boolean
          x-stream-index: "049"
        user_response_time_enabled:
          type: boolean
          x-stream-index: "050"
        user_search_disallowed_roles:
          items:
            type: string
          type: array
          x-stream-index: "016"
        webhook_events:
          items:
            type: string
          type: array
          x-stream-index: "038"
        webhook_url:
          type: string
          x-stream-index: "006"
      required:
      - id
      - name
      - organization
      - placement
      - push_notifications
      - webhook_url
      - moderation_webhook_url
      - channel_configs
      - call_types
      - policies
      - suspended
      - suspended_explanation
      - disable_auth_checks
      - disable_permissions_checks
      - permission_version
      - user_search_disallowed_roles
      - multi_tenant_enabled
      - allow_multi_user_devices
      - image_moderation_enabled
      - async_url_enrich_enabled
      - auto_translation_enabled
      - custom_action_handler_url
      - enforce_unique_usernames
      - sqs_url
      - sqs_key
      - sqs_secret
      - sns_topic_arn
      - sns_key
      - sns_secret
      - file_upload_config
      - image_upload_config
      - grants
      - campaign_enabled
      - webhook_events
      - reminders_interval
      - cdn_expiration_seconds
      - video_provider
      - moderation_enabled
      - moderation_multitenant_blocklist_enabled
      - guest_user_creation_disabled
      - event_hooks
      - use_hook_v2
      - user_response_time_enabled
      - moderation_llm_configurability_enabled
      - max_aggregated_activities_length
      - feed_audit_logs_enabled
      - moderation_video_call_moderation_enabled
      - moderation_audio_call_moderation_enabled
      type: object
    AsyncBulkImageModerationEvent:
      nullable: true
      properties:
        created_at:
          format: date-time
          type: string
          x-stream-index: "003.003"
        custom:
          additionalProperties: {}
          type: object
          x-stream-index: "003.007"
        finished_at:
          format: date-time
          type: string
          x-stream-index: "002.003"
        received_at:
          format: date-time
          type: string
          x-stream-index: "003.004"
        started_at:
          format: date-time
          type: string
          x-stream-index: "002.002"
        task_id:
          type: string
          x-stream-index: "002.001"
        type:
          default: export.bulk_image_moderation.success
          type: string
          x-stream-index: "003.002"
        url:
          type: string
          x-stream-index: "001"
      required:
      - url
      - task_id
      - started_at
      - finished_at
      - type
      - created_at
      - custom
      title: AsyncBulkImageModerationEvent
      type: object
      x-stream-event-client-type: true
      x-stream-event-doc-group: other
      x-stream-is-event: true
      x-stream-ws-base-event-name: VideoEvent
    AsyncExportChannelsEvent:
      nullable: true
      properties:
        created_at:
          format: date-time
          type: string
          x-stream-index: "003.003"
        custom:
          additionalProperties: {}
          type: object
          x-stream-index: "003.007"
        finished_at:
          format: date-time
          type: string
          x-stream-index: "002.003"
        received_at:
          format: date-time
          type: string
          x-stream-index: "003.004"
        started_at:
          format: date-time
          type: string
          x-stream-index: "002.002"
        task_id:
          type: string
          x-stream-index: "002.001"
        type:
          default: export.channels.success
          type: string
          x-stream-index: "003.002"
        url:
          type: string
          x-stream-index: "001"
      required:
      - url
      - task_id
      - started_at
      - finished_at
      - type
      - created_at
      - custom
      title: AsyncExportChannelsEvent
      type: object
      x-stream-event-client-type: true
      x-stream-event-doc-group: other
      x-stream-is-event: true
      x-stream-ws-base-event-name: VideoEvent
    AsyncExportErrorEvent:
      nullable: true
      properties:
        created_at:
          format: date-time
          type: string
          x-stream-index: "003.003"
        custom:
          additionalProperties: {}
          type: object
          x-stream-index: "003.007"
        error:
          type: string
          x-stream-index: "001"
        finished_at:
          format: date-time
          type: string
          x-stream-index: "002.003"
        received_at:
          format: date-time
          type: string
          x-stream-index: "003.004"
        started_at:
          format: date-time
          type: string
          x-stream-index: "002.002"
        task_id:
          type: string
          x-stream-index: "002.001"
        type:
          default: export.moderation_logs.error
          type: string
          x-stream-index: "003.002"
      required:
      - error
      - task_id
      - started_at
      - finished_at
      - type
      - created_at
      - custom
      title: AsyncExportErrorEvent
      type: object
      x-stream-event-client-type: true
      x-stream-event-doc-group: other
      x-stream-is-event: true
      x-stream-ws-base-event-name: VideoEvent
    AsyncExportModerationLogsEvent:
      nullable: true
      properties:
        created_at:
          format: date-time
          type: string
          x-stream-index: "003.003"
        custom:
          additionalProperties: {}
          type: object
          x-stream-index: "003.007"
        finished_at:
          format: date-time
          type: string
          x-stream-index: "002.003"
        received_at:
          format: date-time
          type: string
          x-stream-index: "003.004"
        started_at:
          format: date-time
          type: string
          x-stream-index: "002.002"
        task_id:
          type: string
          x-stream-index: "002.001"
        type:
          default: export.moderation_logs.success
          type: string
          x-stream-index: "003.002"
        url:
          type: string
          x-stream-index: "001"
      required:
      - url
      - task_id
      - started_at
      - finished_at
      - type
      - created_at
      - custom
      title: AsyncExportModerationLogsEvent
      type: object
      x-stream-event-client-type: true
      x-stream-event-doc-group: other
      x-stream-is-event: true
      x-stream-ws-base-event-name: VideoEvent
    AsyncExportUsersEvent:
      nullable: true
      properties:
        created_at:
          format: date-time
          type: string
          x-stream-index: "003.003"
        custom:
          additionalProperties: {}
          type: object
          x-stream-index: "003.007"
        finished_at:
          format: date-time
          type: string
          x-stream-index: "002.003"
        received_at:
          format: date-time
          type: string
          x-stream-index: "003.004"
        started_at:
          format: date-time
          type: string
          x-stream-index: "002.002"
        task_id:
          type: string
          x-stream-index: "002.001"
        type:
          default: export.users.success
          type: string
          x-stream-index: "003.002"
        url:
          type: string
          x-stream-index: "001"
      required:
      - url
      - task_id
      - started_at
      - finished_at
      - type
      - created_at
      - custom
      title: AsyncExportUsersEvent
      type: object
      x-stream-event-client-type: true
      x-stream-event-doc-group: other
      x-stream-is-event: true
      x-stream-ws-base-event-name: VideoEvent
    AsyncModerationCallbackConfig:
      properties:
        mode:
          enum:
          - CALLBACK_MODE_NONE
          - CALLBACK_MODE_REST
          - CALLBACK_MODE_TWIRP
          type: string
          x-stream-index: "002"
        server_url:
          type: string
          x-stream-index: "001"
      type: object
    AsyncModerationConfiguration:
      properties:
        callback:
          $ref: '#/components/schemas/AsyncModerationCallbackConfig'
          x-stream-index: "002"
        timeout_ms:
          format: int32
          type: integer
          x-stream-index: "001"
      type: object
    Attachment:
      description: An attachment is a message object that represents a file uploaded
        by a user.
      nullable: true
      properties:
        actions:
          items:
            $ref: '#/components/schemas/Action'
          type: array
          x-stream-index: "015"
        asset_url:
          type: string
          x-stream-index: "017"
        author_icon:
          type: string
          x-stream-index: "007"
        author_link:
          type: string
          x-stream-index: "006"
        author_name:
          type: string
          x-stream-index: "005"
        color:
          type: string
          x-stream-index: "003"
        custom:
          additionalProperties: {}
          type: object
          x-stream-index: "018"
        fallback:
          type: string
          x-stream-index: "002"
        fields:
          items:
            $ref: '#/components/schemas/Field'
          type: array
          x-stream-index: "016"
        footer:
          type: string
          x-stream-index: "013"
        footer_icon:
          type: string
          x-stream-index: "014"
        giphy:
          $ref: '#/components/schemas/Images'
          x-stream-index: "019"
        image_url:
          type: string
          x-stream-index: "011"
        og_scrape_url:
          type: string
          x-stream-index: "020"
        original_height:
          format: int32
          type: integer
          x-stream-index: "022"
        original_width:
          format: int32
          type: integer
          x-stream-index: "021"
        pretext:
          type: string
          x-stream-index: "004"
        text:
          type: string
          x-stream-index: "010"
        thumb_url:
          type: string
          x-stream-index: "012"
        title:
          type: string
          x-stream-index: "008"
        title_link:
          type: string
          x-stream-index: "009"
        type:
          description: Attachment type (e.g. image, video, url)
          title: Type
          type: string
          x-stream-index: "001"
      required:
      - custom
      title: Attachment
      type: object
      x-stream-docs-page-id: file_uploads
    AudioSettings:
      properties:
        access_request_enabled:
          type: boolean
          x-stream-index: "001"
        default_device:
          enum:
          - speaker
          - earpiece
          type: string
          x-stream-index: "006"
        hifi_audio_enabled:
          type: boolean
          x-stream-index: "008"
        mic_default_on:
          type: boolean
          x-stream-index: "004"
        noise_cancellation:
          $ref: '#/components/schemas/NoiseCancellationSettings'
          x-stream-index: "007"
        opus_dtx_enabled:
          type: boolean
          x-stream-index: "002"
        redundant_coding_enabled:
          type: boolean
          x-stream-index: "003"
        speaker_default_on:
          type: boolean
          x-stream-index: "005"
      required:
      - access_request_enabled
      - opus_dtx_enabled
      - redundant_coding_enabled
      - mic_default_on
      - speaker_default_on
      - default_device
      - hifi_audio_enabled
      type: object
    AutomodDetailsResponse:
      properties:
        action:
          type: string
          x-stream-index: "001"
        image_labels:
          items:
            type: string
          type: array
          x-stream-index: "005"
        message_details:
          $ref: '#/components/schemas/FlagMessageDetailsResponse'
          x-stream-index: "004"
        original_message_type:
          type: string
          x-stream-index: "002"
        result:
          $ref: '#/components/schemas/MessageModerationResult'
          x-stream-index: "003"
      type: object
    AzureRequest:
      description: Config for creating Azure Blob Storage storage
      properties:
        abs_account_name:
          description: The account name
          title: AccountName
          type: string
          x-stream-index: "001"
        abs_client_id:
          description: The client id
          title: ClientID
          type: string
          x-stream-index: "003"
        abs_client_secret:
          description: The client secret
          title: ClientSecret
          type: string
          x-stream-index: "004"
        abs_tenant_id:
          description: The tenant id
          title: TenantID
          type: string
          x-stream-index: "002"
      required:
      - abs_account_name
      - abs_tenant_id
      - abs_client_id
      - abs_client_secret
      title: AzureRequest
      type: object
    BackstageSettings:
      properties:
        enabled:
          type: boolean
          x-stream-index: "001"
        join_ahead_time_seconds:
          format: int32
          type: integer
          x-stream-index: "002"
      required:
      - enabled
      type: object
    BanRequest:
      nullable: true
      properties:
        ban_from_future_channels:
          description: Whether to also ban the user from all future channels created
            by the banner
          title: Ban from future channels
          type: boolean
          x-stream-index: "013"
        banned_by:
          $ref: '#/components/schemas/UserRequest'
          description: User who issued a ban
          title: Banned by
          x-stream-index: "010"
        banned_by_id:
          description: User ID who issued a ban
          title: Banned by ID
          type: string
          x-stream-index: "009"
        channel_cid:
          description: Channel CID to ban user in eg. messaging:123
          title: Channel CID
          type: string
          x-stream-index: "006"
        delete_messages:
          enum:
          - soft
          - pruning
          - hard
          type: string
          x-stream-index: "011"
        delete_reactions:
          description: Whether to delete reactions by the banned user on other users'
            messages
          title: Delete reactions
          type: boolean
          x-stream-index: "012"
        ip_ban:
          description: Whether to perform IP ban or not
          title: IP ban
          type: boolean
          x-stream-index: "008"
        reason:
          description: Ban reason
          title: Reason
          type: string
          x-stream-index: "003"
        shadow:
          description: Whether to perform shadow ban or not
          title: Shadow
          type: boolean
          x-stream-index: "007"
        target_user_id:
          description: ID of user to ban
          title: Target user ID
          type: string
          x-stream-index: "001"
        timeout:
          description: Timeout of ban in minutes. User will be unbanned after this
            period of time
          title: Timeout
          type: integer
          x-stream-index: "002"
        user:
          $ref: '#/components/schemas/UserRequest'
          x-stream-index: "014.002"
        user_id:
          type: string
          x-stream-index: "014.001"
      required:
      - target_user_id
      type: object
    BanResponse:
      nullable: true
      properties:
        banned_by:
          $ref: '#/components/schemas/UserResponse'
          x-stream-index: "006"
        channel:
          $ref: '#/components/schemas/ChannelResponse'
          x-stream-index: "001"
        created_at:
          format: date-time
          type: string
          x-stream-index: "007"
        expires:
          format: date-time
          type: string
          x-stream-index: "003"
        reason:
          type: string
          x-stream-index: "004"
        shadow:
          type: boolean
          x-stream-index: "005"
        user:
          $ref: '#/components/schemas/UserResponse'
          x-stream-index: "002"
      required:
      - created_at
      type: object
    BlockListOptions:
      properties:
        behavior:
          description: 'Blocklist behavior. One of: flag, block, shadow_block'
          enum:
          - flag
          - block
          - shadow_block
          title: Behavior
          type: string
          x-stream-index: "002"
        blocklist:
          description: Blocklist name
          title: Blocklist
          type: string
          x-stream-index: "001"
      required:
      - blocklist
      - behavior
      type: object
    BlockListResponse:
      description: Block list contains restricted words
      properties:
        created_at:
          description: Date/time of creation
          format: date-time
          title: Created at
          type: string
          x-stream-index: "001"
        id:
          type: string
          x-stream-index: "003"
        is_leet_check_enabled:
          type: boolean
          x-stream-index: "008"
        is_plural_check_enabled:
          type: boolean
          x-stream-index: "009"
        name:
          description: Block list name
          title: Name
          type: string
          x-stream-index: "004"
        team:
          type: string
          x-stream-index: "007"
        type:
          description: 'Block list type. One of: regex, domain, domain_allowlist,
            email, email_allowlist, word'
          title: Type
          type: string
          x-stream-index: "005"
        updated_at:
          description: Date/time of the last update
          format: date-time
          title: Updated at
          type: string
          x-stream-index: "002"
        words:
          description: List of words to block
          items:
            type: string
          title: Words
          type: array
          x-stream-index: "006"
      required:
      - name
      - type
      - words
      - is_leet_check_enabled
      - is_plural_check_enabled
      title: Block list
      type: object
      x-stream-docs-page-id: block_lists
    BlockUsersRequest:
      nullable: true
      properties:
        blocked_user_id:
          description: User id to block
          title: BlockedUserID
          type: string
          x-stream-index: "001"
        user:
          $ref: '#/components/schemas/UserRequest'
          x-stream-index: "003.002"
        user_id:
          type: string
          x-stream-index: "003.001"
      required:
      - blocked_user_id
      type: object
    BlockUsersResponse:
      nullable: true
      properties:
        blocked_by_user_id:
          description: User id who blocked another user
          title: BlockedByUserID
          type: string
          x-stream-index: "002"
        blocked_user_id:
          description: User id who got blocked
          title: BlockedUserID
          type: string
          x-stream-index: "003"
        created_at:
          description: Timestamp when the user was blocked
          format: date-time
          title: CreatedAt
          type: string
          x-stream-index: "004"
        duration:
          description: Duration of the request in milliseconds
          title: Duration
          type: string
          x-stream-index: "001.001"
      required:
      - duration
      - blocked_by_user_id
      - blocked_user_id
      - created_at
      type: object
    BlockedUserResponse:
      nullable: true
      properties:
        blocked_user:
          $ref: '#/components/schemas/UserResponse'
          description: User who got blocked
          title: User
          x-stream-index: "003"
        blocked_user_id:
          description: ID of the user who got blocked
          title: UserID
          type: string
          x-stream-index: "004"
        created_at:
          format: date-time
          type: string
          x-stream-index: "005"
        user:
          $ref: '#/components/schemas/UserResponse'
          description: User who blocked another user
          title: User
          x-stream-index: "001"
        user_id:
          description: ID of the user who blocked another user
          title: UserID
          type: string
          x-stream-index: "002"
      required:
      - user
      - user_id
      - blocked_user
      - blocked_user_id
      - created_at
      type: object
    BroadcastSettings:
      properties:
        enabled:
          type: boolean
          x-stream-index: "001"
        hls:
          $ref: '#/components/schemas/HLSSettings'
          x-stream-index: "002"
        rtmp:
          $ref: '#/components/schemas/RTMPSettings'
          x-stream-index: "003"
      required:
      - enabled
      type: object
    CallSettings:
      properties:
        audio:
          $ref: '#/components/schemas/AudioSettings'
          x-stream-index: "001"
        backstage:
          $ref: '#/components/schemas/BackstageSettings'
          x-stream-index: "002"
        broadcasting:
          $ref: '#/components/schemas/BroadcastSettings'
          x-stream-index: "009"
        frame_recording:
          $ref: '#/components/schemas/FrameRecordSettings'
          x-stream-index: "006"


# --- truncated at 32 KB (785 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/stream-io/refs/heads/main/openapi/stream-io-chat-openapi.yml