Google Gemini · AsyncAPI Specification

Google Gemini Streaming and Live API

Version 1.0.0

AsyncAPI specification describing Google Gemini's real-time and streaming surface area: * The Live API bidirectional WebSocket service (BidiGenerateContent) used for low-latency multimodal voice, video and text interactions. * The streamGenerateContent HTTP server-sent events (SSE) endpoint used for token-by-token streaming of generated content. All message names and field names are taken from the official Google Gemini API reference at https://ai.google.dev/api/live and https://ai.google.dev/api/generate-content.

View Spec View on GitHub Agentic AIArtificial IntelligenceCode GenerationEmbeddingsGenerative AIImage GenerationLLMMachine LearningMultimodalAsyncAPIWebhooksEvents

Channels

/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
publish sendLiveClientMessage
Client-to-server messages sent over the Live API WebSocket.
Single bidirectional WebSocket channel for the Live API. The first message sent by the client MUST be BidiGenerateContentSetup, after which any of the client-to-server messages can be sent and any of the server-to-client messages can be received.
/v1beta/{model}:streamGenerateContent
publish streamGenerateContentRequest
Send a streamGenerateContent request.
HTTP POST endpoint that streams a sequence of GenerateContentResponse objects as server-sent events. The request body is a GenerateContentRequest; the response is text/event-stream.

Messages

BidiGenerateContentSetup
Setup
First message the client sends after opening the WebSocket. Tells the server which model to use and how to configure the session. Must be sent exactly once before any other client message.
BidiGenerateContentClientContent
Client Content
Incremental update of the conversation delivered from the client. All content here is unconditionally appended to the conversation history and used as part of the prompt to the model to generate content.
BidiGenerateContentRealtimeInput
Realtime Input
Real-time user input sent as a stream. Distinct from ClientContent in that it is sent continuously, can be interrupted by ActivityStart/ActivityEnd signaling and supports raw audio, video and text chunks.
BidiGenerateContentToolResponse
Tool Response
Response from the client to a BidiGenerateContentToolCall received from the server. Individual FunctionResponse objects are matched to their FunctionCall objects by the id field.
BidiGenerateContentSetupComplete
Setup Complete
Sent in response to a BidiGenerateContentSetup message from the client when setup processing has finished. Has no fields.
BidiGenerateContentServerContent
Server Content
Incremental server update generated by the model in response to client messages. Content is generated as quickly as possible and not in real time. Clients may choose to buffer and play it out in real time.
BidiGenerateContentToolCall
Tool Call
Request from the server for the client to execute the provided functionCalls and return the responses with the matching ids.
BidiGenerateContentToolCallCancellation
Tool Call Cancellation
Notification for the client that a previously issued BidiGenerateContentToolCall with the specified ids should not have been executed and should be cancelled.
UsageMetadataMessage
Usage Metadata
Token usage metadata for the current session.
GoAwayMessage
Go Away
Server notice that the current connection will soon be terminated. Clients should use this signal to prepare to reconnect or save state.
SessionResumptionUpdateMessage
Session Resumption Update
Update of the session resumption state. Only sent when sessionResumption was configured in the setup message.
GenerateContentRequest
Generate Content Request
Request body for streamGenerateContent. Has the same fields as the non-streaming generateContent call.
GenerateContentResponseEvent
Generate Content Response (SSE event)
A single server-sent event in the streamGenerateContent response stream. Each event is a complete GenerateContentResponse JSON object containing one or more candidates with partial content.

Servers

wss
live generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
Gemini Live API bidirectional WebSocket endpoint (BidiGenerateContent). Stateful WSS connection that accepts audio (raw 16-bit PCM, 16kHz, little-endian), images (JPEG <= 1FPS) and text input, and streams audio (raw 16-bit PCM, 24kHz, little-endian) and text output back to the client.
https
rest generativelanguage.googleapis.com
Gemini REST endpoint used for streamGenerateContent. The streaming response is delivered as text/event-stream (SSE) where each event is a serialized GenerateContentResponse JSON object.

AsyncAPI Specification

Raw ↑
asyncapi: 2.6.0
info:
  title: Google Gemini Streaming and Live API
  version: 1.0.0
  description: |
    AsyncAPI specification describing Google Gemini's real-time and streaming
    surface area:

      * The Live API bidirectional WebSocket service
        (BidiGenerateContent) used for low-latency multimodal voice, video
        and text interactions.
      * The streamGenerateContent HTTP server-sent events (SSE) endpoint
        used for token-by-token streaming of generated content.

    All message names and field names are taken from the official Google
    Gemini API reference at https://ai.google.dev/api/live and
    https://ai.google.dev/api/generate-content.
  contact:
    name: Google AI for Developers
    url: https://ai.google.dev/
  license:
    name: Google APIs Terms of Service
    url: https://ai.google.dev/terms
  termsOfService: https://ai.google.dev/terms
  x-apievangelist-modified: '2026-05-29'

defaultContentType: application/json

servers:
  live:
    url: generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent
    protocol: wss
    description: |
      Gemini Live API bidirectional WebSocket endpoint
      (BidiGenerateContent). Stateful WSS connection that accepts audio
      (raw 16-bit PCM, 16kHz, little-endian), images (JPEG <= 1FPS) and
      text input, and streams audio (raw 16-bit PCM, 24kHz, little-endian)
      and text output back to the client.
    security:
      - apiKey: []
    bindings:
      ws:
        method: GET
        query:
          type: object
          properties:
            key:
              type: string
              description: Gemini API key (alternative to header auth).
        bindingVersion: 0.1.0
  rest:
    url: generativelanguage.googleapis.com
    protocol: https
    description: |
      Gemini REST endpoint used for streamGenerateContent. The streaming
      response is delivered as text/event-stream (SSE) where each event is
      a serialized GenerateContentResponse JSON object.
    security:
      - apiKey: []

channels:
  /ws/google.ai.generativelanguage.v1beta.GenerativeService.BidiGenerateContent:
    description: |
      Single bidirectional WebSocket channel for the Live API. The first
      message sent by the client MUST be BidiGenerateContentSetup, after
      which any of the client-to-server messages can be sent and any of
      the server-to-client messages can be received.
    servers:
      - live
    bindings:
      ws:
        bindingVersion: 0.1.0
    publish:
      summary: Client-to-server messages sent over the Live API WebSocket.
      operationId: sendLiveClientMessage
      message:
        oneOf:
          - $ref: '#/components/messages/BidiGenerateContentSetup'
          - $ref: '#/components/messages/BidiGenerateContentClientContent'
          - $ref: '#/components/messages/BidiGenerateContentRealtimeInput'
          - $ref: '#/components/messages/BidiGenerateContentToolResponse'
    subscribe:
      summary: Server-to-client messages received over the Live API WebSocket.
      operationId: receiveLiveServerMessage
      message:
        oneOf:
          - $ref: '#/components/messages/BidiGenerateContentSetupComplete'
          - $ref: '#/components/messages/BidiGenerateContentServerContent'
          - $ref: '#/components/messages/BidiGenerateContentToolCall'
          - $ref: '#/components/messages/BidiGenerateContentToolCallCancellation'
          - $ref: '#/components/messages/UsageMetadataMessage'
          - $ref: '#/components/messages/GoAwayMessage'
          - $ref: '#/components/messages/SessionResumptionUpdateMessage'

  /v1beta/{model}:streamGenerateContent:
    description: |
      HTTP POST endpoint that streams a sequence of GenerateContentResponse
      objects as server-sent events. The request body is a
      GenerateContentRequest; the response is text/event-stream.
    servers:
      - rest
    parameters:
      model:
        description: |
          Fully qualified model resource name, for example
          models/gemini-2.5-flash or models/gemini-2.5-pro.
        schema:
          type: string
          example: models/gemini-2.5-flash
    bindings:
      http:
        type: request
        method: POST
        bindingVersion: 0.3.0
    publish:
      summary: Send a streamGenerateContent request.
      operationId: streamGenerateContentRequest
      message:
        $ref: '#/components/messages/GenerateContentRequest'
    subscribe:
      summary: Receive streamed GenerateContentResponse SSE events.
      operationId: streamGenerateContentResponse
      message:
        $ref: '#/components/messages/GenerateContentResponseEvent'

components:
  securitySchemes:
    apiKey:
      type: httpApiKey
      name: x-goog-api-key
      in: header
      description: |
        Gemini API key. Can be supplied via the x-goog-api-key header or
        the key query parameter. Obtain from Google AI Studio.

  messages:
    # ---------------- Live API: client -> server ----------------
    BidiGenerateContentSetup:
      name: BidiGenerateContentSetup
      title: Setup
      summary: |
        First message the client sends after opening the WebSocket. Tells
        the server which model to use and how to configure the session.
        Must be sent exactly once before any other client message.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/BidiGenerateContentSetup'

    BidiGenerateContentClientContent:
      name: BidiGenerateContentClientContent
      title: Client Content
      summary: |
        Incremental update of the conversation delivered from the client.
        All content here is unconditionally appended to the conversation
        history and used as part of the prompt to the model to generate
        content.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/BidiGenerateContentClientContent'

    BidiGenerateContentRealtimeInput:
      name: BidiGenerateContentRealtimeInput
      title: Realtime Input
      summary: |
        Real-time user input sent as a stream. Distinct from
        ClientContent in that it is sent continuously, can be interrupted
        by ActivityStart/ActivityEnd signaling and supports raw audio,
        video and text chunks.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/BidiGenerateContentRealtimeInput'

    BidiGenerateContentToolResponse:
      name: BidiGenerateContentToolResponse
      title: Tool Response
      summary: |
        Response from the client to a BidiGenerateContentToolCall received
        from the server. Individual FunctionResponse objects are matched
        to their FunctionCall objects by the id field.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/BidiGenerateContentToolResponse'

    # ---------------- Live API: server -> client ----------------
    BidiGenerateContentSetupComplete:
      name: BidiGenerateContentSetupComplete
      title: Setup Complete
      summary: |
        Sent in response to a BidiGenerateContentSetup message from the
        client when setup processing has finished. Has no fields.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/BidiGenerateContentSetupComplete'

    BidiGenerateContentServerContent:
      name: BidiGenerateContentServerContent
      title: Server Content
      summary: |
        Incremental server update generated by the model in response to
        client messages. Content is generated as quickly as possible and
        not in real time. Clients may choose to buffer and play it out in
        real time.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/BidiGenerateContentServerContent'

    BidiGenerateContentToolCall:
      name: BidiGenerateContentToolCall
      title: Tool Call
      summary: |
        Request from the server for the client to execute the provided
        functionCalls and return the responses with the matching ids.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/BidiGenerateContentToolCall'

    BidiGenerateContentToolCallCancellation:
      name: BidiGenerateContentToolCallCancellation
      title: Tool Call Cancellation
      summary: |
        Notification for the client that a previously issued
        BidiGenerateContentToolCall with the specified ids should not have
        been executed and should be cancelled.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/BidiGenerateContentToolCallCancellation'

    UsageMetadataMessage:
      name: UsageMetadata
      title: Usage Metadata
      summary: Token usage metadata for the current session.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/UsageMetadata'

    GoAwayMessage:
      name: GoAway
      title: Go Away
      summary: |
        Server notice that the current connection will soon be terminated.
        Clients should use this signal to prepare to reconnect or save
        state.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/GoAway'

    SessionResumptionUpdateMessage:
      name: SessionResumptionUpdate
      title: Session Resumption Update
      summary: |
        Update of the session resumption state. Only sent when
        sessionResumption was configured in the setup message.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/SessionResumptionUpdate'

    # ---------------- streamGenerateContent ----------------
    GenerateContentRequest:
      name: GenerateContentRequest
      title: Generate Content Request
      summary: |
        Request body for streamGenerateContent. Has the same fields as the
        non-streaming generateContent call.
      contentType: application/json
      payload:
        $ref: '#/components/schemas/GenerateContentRequest'

    GenerateContentResponseEvent:
      name: GenerateContentResponse
      title: Generate Content Response (SSE event)
      summary: |
        A single server-sent event in the streamGenerateContent response
        stream. Each event is a complete GenerateContentResponse JSON
        object containing one or more candidates with partial content.
      contentType: text/event-stream
      payload:
        $ref: '#/components/schemas/GenerateContentResponse'

  schemas:
    # ============== Live API client schemas ==============
    BidiGenerateContentSetup:
      type: object
      description: Setup message envelope. Wrap the payload in the `setup` field.
      properties:
        setup:
          type: object
          required:
            - model
          properties:
            model:
              type: string
              description: |
                Fully qualified model resource name, for example
                models/gemini-2.5-flash-preview-native-audio-dialog.
              example: models/gemini-2.5-flash-preview-native-audio-dialog
            generationConfig:
              $ref: '#/components/schemas/GenerationConfig'
            systemInstruction:
              $ref: '#/components/schemas/Content'
            tools:
              type: array
              items:
                $ref: '#/components/schemas/Tool'
            realtimeInputConfig:
              $ref: '#/components/schemas/RealtimeInputConfig'
            sessionResumption:
              $ref: '#/components/schemas/SessionResumptionConfig'
            contextWindowCompression:
              $ref: '#/components/schemas/ContextWindowCompressionConfig'
            inputAudioTranscription:
              $ref: '#/components/schemas/AudioTranscriptionConfig'
            outputAudioTranscription:
              $ref: '#/components/schemas/AudioTranscriptionConfig'
            proactivity:
              $ref: '#/components/schemas/ProactivityConfig'
            historyConfig:
              $ref: '#/components/schemas/HistoryConfig'

    BidiGenerateContentClientContent:
      type: object
      description: ClientContent envelope. Wrap the payload in `clientContent`.
      properties:
        clientContent:
          type: object
          properties:
            turns:
              type: array
              description: |
                Content appended to the current conversation with the model.
              items:
                $ref: '#/components/schemas/Content'
            turnComplete:
              type: boolean
              description: |
                If true, signals that the server content generation should
                start with the currently accumulated prompt. Otherwise the
                server awaits more messages before generating.

    BidiGenerateContentRealtimeInput:
      type: object
      description: RealtimeInput envelope. Wrap the payload in `realtimeInput`.
      properties:
        realtimeInput:
          type: object
          properties:
            mediaChunks:
              type: array
              deprecated: true
              description: |
                Inlined bytes of media input. Deprecated - use audio or
                video instead.
              items:
                $ref: '#/components/schemas/Blob'
            audio:
              $ref: '#/components/schemas/Blob'
            video:
              $ref: '#/components/schemas/Blob'
            activityStart:
              $ref: '#/components/schemas/ActivityStart'
            activityEnd:
              $ref: '#/components/schemas/ActivityEnd'
            audioStreamEnd:
              type: boolean
              description: |
                Indicates that the audio stream has ended (for example
                because the microphone was turned off).
            text:
              type: string
              description: Real-time text input from the user.

    BidiGenerateContentToolResponse:
      type: object
      description: ToolResponse envelope. Wrap the payload in `toolResponse`.
      properties:
        toolResponse:
          type: object
          properties:
            functionResponses:
              type: array
              description: Responses for the function calls issued by the model.
              items:
                $ref: '#/components/schemas/FunctionResponse'

    # ============== Live API server schemas ==============
    BidiGenerateContentSetupComplete:
      type: object
      description: SetupComplete envelope. The `setupComplete` field is empty.
      properties:
        setupComplete:
          type: object
          description: Empty object - no fields.

    BidiGenerateContentServerContent:
      type: object
      description: ServerContent envelope. Wrap the payload in `serverContent`.
      properties:
        serverContent:
          type: object
          properties:
            generationComplete:
              type: boolean
              description: |
                If true, indicates that the model has finished generating
                content for the current turn. May be followed by additional
                tool calls before turnComplete.
              readOnly: true
            turnComplete:
              type: boolean
              description: |
                If true, indicates that the model has finished its turn.
                Generation will only start in response to additional client
                messages.
              readOnly: true
            interrupted:
              type: boolean
              description: |
                If true, indicates that a client message has interrupted
                current model generation. If the client is playing out the
                content in real time it should stop playback and discard
                any queued audio chunks.
              readOnly: true
            groundingMetadata:
              $ref: '#/components/schemas/GroundingMetadata'
            inputTranscription:
              $ref: '#/components/schemas/BidiGenerateContentTranscription'
            outputTranscription:
              $ref: '#/components/schemas/BidiGenerateContentTranscription'
            urlContextMetadata:
              $ref: '#/components/schemas/UrlContextMetadata'
            modelTurn:
              $ref: '#/components/schemas/Content'

    BidiGenerateContentToolCall:
      type: object
      description: ToolCall envelope. Wrap the payload in `toolCall`.
      properties:
        toolCall:
          type: object
          properties:
            functionCalls:
              type: array
              description: Function calls the client should execute.
              items:
                $ref: '#/components/schemas/FunctionCall'
              readOnly: true

    BidiGenerateContentToolCallCancellation:
      type: object
      description: |
        ToolCallCancellation envelope. Wrap the payload in
        `toolCallCancellation`.
      properties:
        toolCallCancellation:
          type: object
          properties:
            ids:
              type: array
              description: |
                Ids of the FunctionCall objects that should be cancelled.
              items:
                type: string
              readOnly: true

    UsageMetadata:
      type: object
      description: |
        Token usage information for the connection. Delivered as the
        `usageMetadata` field on a server message.
      properties:
        usageMetadata:
          type: object
          properties:
            promptTokenCount:
              type: integer
              format: int32
              readOnly: true
            cachedContentTokenCount:
              type: integer
              format: int32
            responseTokenCount:
              type: integer
              format: int32
              readOnly: true
            toolUsePromptTokenCount:
              type: integer
              format: int32
              readOnly: true
            thoughtsTokenCount:
              type: integer
              format: int32
              readOnly: true
            totalTokenCount:
              type: integer
              format: int32
              readOnly: true
            promptTokensDetails:
              type: array
              items:
                $ref: '#/components/schemas/ModalityTokenCount'
              readOnly: true
            cacheTokensDetails:
              type: array
              items:
                $ref: '#/components/schemas/ModalityTokenCount'
              readOnly: true
            responseTokensDetails:
              type: array
              items:
                $ref: '#/components/schemas/ModalityTokenCount'
              readOnly: true
            toolUsePromptTokensDetails:
              type: array
              items:
                $ref: '#/components/schemas/ModalityTokenCount'
              readOnly: true

    GoAway:
      type: object
      description: GoAway envelope. Wrap the payload in `goAway`.
      properties:
        goAway:
          type: object
          properties:
            timeLeft:
              type: string
              description: |
                Duration string (seconds with up to nine fractional digits
                and an 's' suffix, e.g. "12.5s") indicating how much time
                remains before the server terminates the connection.

    SessionResumptionUpdate:
      type: object
      description: |
        SessionResumptionUpdate envelope. Wrap the payload in
        `sessionResumptionUpdate`.
      properties:
        sessionResumptionUpdate:
          type: object
          properties:
            newHandle:
              type: string
              description: |
                Resumption handle that can be used in a future
                SessionResumptionConfig.handle to resume this session.
            resumable:
              type: boolean
              description: |
                If true, the current session can be resumed using the
                newHandle.

    # ============== Live API supporting types ==============
    GenerationConfig:
      type: object
      description: Generation parameters used by Gemini models.
      properties:
        temperature:
          type: number
          format: float
        topP:
          type: number
          format: float
        topK:
          type: integer
          format: int32
        candidateCount:
          type: integer
          format: int32
        maxOutputTokens:
          type: integer
          format: int32
        stopSequences:
          type: array
          items:
            type: string
        responseMimeType:
          type: string
        responseSchema:
          type: object
        responseModalities:
          type: array
          items:
            type: string
            enum:
              - MODALITY_UNSPECIFIED
              - TEXT
              - IMAGE
              - AUDIO
        speechConfig:
          $ref: '#/components/schemas/SpeechConfig'
        mediaResolution:
          type: string
        thinkingConfig:
          type: object
          properties:
            includeThoughts:
              type: boolean
            thinkingBudget:
              type: integer
              format: int32

    SpeechConfig:
      type: object
      properties:
        voiceConfig:
          $ref: '#/components/schemas/VoiceConfig'
        languageCode:
          type: string

    VoiceConfig:
      type: object
      properties:
        prebuiltVoiceConfig:
          type: object
          properties:
            voiceName:
              type: string
              description: |
                Name of a preset voice (e.g. Puck, Charon, Kore, Fenrir,
                Aoede).

    Tool:
      type: object
      description: A tool the model can invoke.
      properties:
        functionDeclarations:
          type: array
          items:
            $ref: '#/components/schemas/FunctionDeclaration'
        googleSearch:
          type: object
          description: Google Search tool config.
        googleSearchRetrieval:
          type: object
          description: |
            Legacy Google Search retrieval tool config.
        codeExecution:
          type: object
          description: Code execution tool config.
        urlContext:
          type: object
          description: URL context tool config.

    FunctionDeclaration:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        parameters:
          type: object
          description: JSON schema for the function parameters.
        response:
          type: object

    RealtimeInputConfig:
      type: object
      properties:
        automaticActivityDetection:
          $ref: '#/components/schemas/AutomaticActivityDetection'
        activityHandling:
          type: string
          enum:
            - ACTIVITY_HANDLING_UNSPECIFIED
            - START_OF_ACTIVITY_INTERRUPTS
            - NO_INTERRUPTION
        turnCoverage:
          type: string
          enum:
            - TURN_COVERAGE_UNSPECIFIED
            - TURN_INCLUDES_ONLY_ACTIVITY
            - TURN_INCLUDES_ALL_INPUT

    AutomaticActivityDetection:
      type: object
      properties:
        disabled:
          type: boolean
        startOfSpeechSensitivity:
          type: string
          enum:
            - START_SENSITIVITY_UNSPECIFIED
            - START_SENSITIVITY_HIGH
            - START_SENSITIVITY_LOW
        endOfSpeechSensitivity:
          type: string
          enum:
            - END_SENSITIVITY_UNSPECIFIED
            - END_SENSITIVITY_HIGH
            - END_SENSITIVITY_LOW
        prefixPaddingMs:
          type: integer
          format: int32
        silenceDurationMs:
          type: integer
          format: int32

    SessionResumptionConfig:
      type: object
      properties:
        handle:
          type: string
          description: |
            Handle for a previous session to resume; leave empty to start
            a new resumable session.
        transparent:
          type: boolean

    ContextWindowCompressionConfig:
      type: object
      properties:
        slidingWindow:
          type: object
          properties:
            targetTokens:
              type: integer
              format: int64
        triggerTokens:
          type: integer
          format: int64

    AudioTranscriptionConfig:
      type: object
      description: |
        Audio transcription configuration for inputAudioTranscription
        and outputAudioTranscription. Empty enables transcription with
        default settings.

    ProactivityConfig:
      type: object
      properties:
        proactiveAudio:
          type: boolean
          description: |
            When true, the model may proactively respond without an
            explicit user turn.

    HistoryConfig:
      type: object
      properties:
        initialHistoryInClientContent:
          type: boolean

    ActivityStart:
      type: object
      description: |
        Marks the beginning of user activity. Only valid when automatic
        activity detection is disabled.

    ActivityEnd:
      type: object
      description: |
        Marks the end of user activity. Only valid when automatic activity
        detection is disabled.

    BidiGenerateContentTranscription:
      type: object
      description: |
        Audio transcription chunk produced by the Live API for input or
        output audio.
      properties:
        text:
          type: string

    ModalityTokenCount:
      type: object
      properties:
        modality:
          type: string
          enum:
            - MODALITY_UNSPECIFIED
            - TEXT
            - IMAGE
            - VIDEO
            - AUDIO
            - DOCUMENT
        tokenCount:
          type: integer
          format: int32

    # ============== streamGenerateContent schemas ==============
    GenerateContentRequest:
      type: object
      required:
        - contents
      properties:
        contents:
          type: array
          items:
            $ref: '#/components/schemas/Content'
        tools:
          type: array
          items:
            $ref: '#/components/schemas/Tool'
        toolConfig:
          $ref: '#/components/schemas/ToolConfig'
        safetySettings:
          type: array
          items:
            $ref: '#/components/schemas/SafetySetting'
        systemInstruction:
          $ref: '#/components/schemas/Content'
        generationConfig:
          $ref: '#/components/schemas/GenerationConfig'
        cachedContent:
          type: string
          description: |
            Resource name of cached content used as context, e.g.
            cachedContents/{id}.

    GenerateContentResponse:
      type: object
      description: |
        Single SSE event in a streamGenerateContent stream. Contains a
        partial slice of the model's output.
      properties:
        candidates:
          type: array
          items:
            $ref: '#/components/schemas/Candidate'
        promptFeedback:
          $ref: '#/components/schemas/PromptFeedback'
        usageMetadata:
          $ref: '#/components/schemas/UsageMetadataInline'
        modelVersion:
          type: string
        responseId:
          type: string

    Candidate:
      type: object
      properties:
        content:
          $ref: '#/components/schemas/Content'
        finishReason:
          type: string
          enum:
            - FINISH_REASON_UNSPECIFIED
            - STOP
            - MAX_TOKENS
            - SAFETY
            - RECITATION
            - LANGUAGE
            - OTHER
            - BLOCKLIST
            - PROHIBITED_CONTENT
            - SPII
            - MALFORMED_FUNCTION_CALL
            - IMAGE_SAFETY
        safetyRatings:
          type: array
          items:
            $ref: '#/components/schemas/SafetyRating'
        citationMetadata:
          $ref: '#/components/schemas/CitationMetadata'
        tokenCount:
          type: integer
          format: int32
        groundingMetadata:
          $ref: '#/components/schemas/GroundingMetadata'
        index:
          type: integer
          format: int32
        avgLogprobs:
          type: number
          format: double
        logprobsResult:
          type: object

    PromptFeedback:
      type: object
      properties:
        blockReason:
          type: string
          enum:
            - BLOCK_REASON_UNSPECIFIED
            - SAFETY
            - OTHER
            - BLOCKLIST
            - PROHIBITED_CONTENT
            - IMAGE_SAFETY
        safetyRatings:
          type: array
          items:
            $ref: '#/components/schemas/SafetyRating'

    UsageMetadataInline:
      type: object
      description: |
        Token usage metadata included on each streamed
        GenerateContentResponse event.
      properties:
        promptTokenCount:
          type: integer
          format: int32
        cachedContentTokenCount:
          type: integer
          format: int32
        candidatesTokenCount:
          type: integer
          format: int32
        toolUsePromptTokenCount:
          type: integer
          format: int32
        thoughtsTokenCount:
          type: integer
          format: int32
        totalTokenCount:
          type: integer
          format: int32
        promptTokensDetails:
          type: array
          items:
            $ref: '#/components/schemas/ModalityTokenCount'
        cacheTokensDetails:
          type: array
          items:
            $ref: '#/components/schemas/ModalityTokenCount'
        candidatesTokensDetails:
          type: array
          items:
            $ref: '#/components/schemas/ModalityTokenCount'
        toolUsePromptTokensDetails:
          type: array
          items:
            $ref: '#/components/schemas/ModalityTokenCount'

    SafetySetting:
      type: object
      properties:
        category:
          type: string
          enum:
            - HARM_CATEGORY_UNSPECIFIED
            - HARM_CATEGORY_DEROGATORY
            - HARM_CATEGORY_TOXICITY
            - HARM_CATEGORY_VIOLENCE
            - HARM_CATEGORY_SEXUAL
            - HARM_CATEGORY_MEDICAL
            - HARM_CATEGORY_DANGEROUS
            - HARM_CATEGORY_HARASSMENT
            - HARM_CATEGORY_HATE_SPEECH
            - HARM_CATEGORY_SEXUALLY_EXPLICIT
            - HARM_CATEGORY_DANGEROUS_CONTENT
            - HARM_CATEGORY_CIVIC_INTEGRITY
        threshold:
          type: string
          enum:
            - HARM_BLOCK_THRESHOLD_UNSPECIFIED
            - BLOCK_LOW_AND_ABOVE
            - BLOCK_MEDIUM_AND_ABOVE
            - BLOCK_ONLY_HIGH
            - BLOCK_NONE
            - 'OFF'

    SafetyRating:
      type: object
      properties:
        category:
          type: string
        probability:
          type: string
          enum:
            - HARM_PROBABILITY_UNSPECIFIED
            - NEGLIGIBLE
            - LOW
            - MEDIUM
            - HIGH
        blocked:
          type: boolean

    ToolConfig:
      type: object
      properties:
        functionCallingConfig:
          type: object
          properties:
            mode:
              type: string
              enum:
                - MODE_UNSPECIFIED
                - AUTO
                - ANY
                - NONE
            allowedFunctionNames:
              type: array
              items:
                type: string

    CitationMetadata:
      type: object
      properties:
        citationSources:
          type: array
          items:
            type: object
            properties:
              startIndex:
                type: integer
                format: int32
              endIndex:
                type: integer
                format: int32
              uri:
                type: string
              license:
                type: string

    GroundingMetadata:
      type: object
      properties:
        searchEntryPoint:
          type: object
          properties:
            renderedContent:
              type: string
            sdkBlob:
              type: string
              format: byte
        groundingChunks:
          type: array
          items:
            type: object
        groundingSupports:
          type: array
          items:
            type: object
        webSearchQueries:
          type: array
          items:
            type: string
        retrievalMetadata:
          type: object

    UrlContextMetadata:
      type: object
      properties:
        urlMetadata:
          type: array
          items:
            type: object
            properties:
              retr

# --- truncated at 32 KB (34 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/google-gemini/refs/heads/main/asyncapi/google-gemini-asyncapi.yml