ServerEvent: {
    session?: {
        id?: string | null;
    };
    type: "session.started";
} | {
    delta?: string;
    type: "session.output_audio.delta";
} | {
    delta?: string;
    end_ms?: number | null;
    start_ms?: number | null;
    type: "session.output_transcript.delta" | "session.input_transcript.delta";
} | {
    delegation?: {
        id?: string | null;
        target?: DelegationTarget | null;
    };
    type: "session.delegation.created";
} | {
    delegation_id?: string | null;
    event?: ResponsesEvent;
    type: "response.event";
} | {
    context_window?: {
        usage_ratio?: number | null;
    } | null;
    type: "session.usage.updated";
    usage?: {
        seconds?: number;
    };
} | {
    context_window?: {
        usage_ratio?: number | null;
    } | null;
    reason?: "close_requested" | "expired" | "content" | "remote_hangup" | "connection_lost" | null;
    type: "session.closed";
    usage?: {
        seconds?: number;
    };
} | {
    error?: ErrorBody;
    type: "error";
} | {
    client_event_id?: string;
    type: "session.updated" | "session.input_audio.muted" | "session.input_audio.unmuted";
} | {
    client_event_id?: string;
    type: "session.instructions.appended" | "session.thinking.appended" | "session.commentary.appended";
}

Server fields are optional so missing fields do not end a session.

Type declaration

  • Optional session?: {
        id?: string | null;
    }
    • Optional id?: string | null
  • type: "session.started"

Type declaration

  • Optional delta?: string
  • type: "session.output_audio.delta"

Type declaration

  • Optional delta?: string
  • Optional end_ms?: number | null
  • Optional start_ms?: number | null
  • type: "session.output_transcript.delta" | "session.input_transcript.delta"

Type declaration

  • Optional delegation?: {
        id?: string | null;
        target?: DelegationTarget | null;
    }
  • type: "session.delegation.created"

Type declaration

  • Optional delegation_id?: string | null
  • Optional event?: ResponsesEvent
  • type: "response.event"

Type declaration

  • Optional context_window?: {
        usage_ratio?: number | null;
    } | null
  • type: "session.usage.updated"
  • Optional usage?: {
        seconds?: number;
    }
    • Optional seconds?: number

Type declaration

  • Optional context_window?: {
        usage_ratio?: number | null;
    } | null
  • Optional reason?: "close_requested" | "expired" | "content" | "remote_hangup" | "connection_lost" | null
  • type: "session.closed"
  • Optional usage?: {
        seconds?: number;
    }
    • Optional seconds?: number

Type declaration

Type declaration

  • Optional client_event_id?: string
  • type: "session.updated" | "session.input_audio.muted" | "session.input_audio.unmuted"

Type declaration

  • Optional client_event_id?: string
  • type: "session.instructions.appended" | "session.thinking.appended" | "session.commentary.appended"

    Sent at the estimated context-injection end; does not indicate speech completion.