nexus-scribe-api

REST API request and response type definitions.

Overview

Defines all API request/response structures for:

  • Authentication endpoints
  • Meeting management
  • Transcript operations
  • WebSocket messages
  • Health checks

Authentication Types

Login

pub struct LoginRequest {
    pub email: String,  // Also accepts username/identifier
    pub password: String,
}

// Response variants
pub enum AuthResponse {
    Success(LoginResponse),
    MfaRequired(MfaRequiredResponse),
}

pub struct LoginResponse {
    pub access_token: String,
    pub refresh_token: String,
    pub expires_in: i64,
    pub user: PublicUserResponse,
}

pub struct MfaRequiredResponse {
    pub mfa_required: bool,
    pub mfa_session_token: String,
    pub mfa_session_expires_in: i64,
    pub user: PublicUserResponse,
}

Registration

pub struct RegisterRequest {
    pub email: String,
    pub password: String,
    pub display_name: String,
    pub org_name: Option<String>,
}

Password Reset

pub struct ForgotPasswordRequest {
    pub email: String,
}

pub struct ResetPasswordRequest {
    pub token: String,
    pub new_password: String,
}

Meeting Types

Create Meeting

#[serde(rename_all = "camelCase")]
pub struct CreateMeetingRequest {
    pub title: String,
    pub description: Option<String>,
    pub privacy_level: PrivacyLevel,
    pub start_time: Option<String>,
    pub participant_ids: Option<Vec<String>>,
}

Meeting Response

pub struct MeetingResponse {
    pub id: Uuid,
    pub title: String,
    pub description: Option<String>,
    pub host: PublicUserResponse,
    pub start_time: DateTime<Utc>,
    pub end_time: Option<DateTime<Utc>>,
    pub status: MeetingStatus,
    pub privacy_level: PrivacyLevel,
    pub participant_count: usize,
    pub transcript_available: bool,
}

Transcript Types

pub struct TranscriptSegmentResponse {
    pub id: Uuid,
    pub speaker_name: Option<String>,
    pub start_time_ms: i64,
    pub end_time_ms: i64,
    pub text: String,
    pub confidence_score: f32,
    pub edited: bool,
}

pub struct UpdateSegmentRequest {
    pub text: String,
}

WebSocket Messages

Tagged enum for real-time communication:

#[serde(tag = "type", rename_all = "snake_case")]
pub enum WebSocketMessage {
    AudioChunk {
        stream_id: Uuid,
        timestamp: i64,
        data: String,  // Base64 encoded
        sequence: u64,
    },
    TranscriptSegment {
        meeting_id: Uuid,
        segment: TranscriptSegmentResponse,
    },
    SpeakerChange {
        speaker_id: Option<Uuid>,
        speaker_name: Option<String>,
        timestamp_ms: i64,
    },
    Edit {
        segment_id: Uuid,
        user_id: Uuid,
        text: String,
        timestamp: i64,
    },
    Ping,
    Pong,
}

Health Check

pub struct HealthCheckResponse {
    pub status: String,
    pub version: String,
    pub uptime: u64,
    pub database: DatabaseHealth,
    pub hailo: HailoHealth,
    pub services: ServiceStatus,
}

pub struct ServiceStatus {
    pub audio: bool,
    pub transcription: bool,
    pub speaker: bool,
    pub collaboration: bool,
}

Error Response

pub struct ErrorResponse {
    pub error: String,
    pub message: String,
    pub details: Option<serde_json::Value>,
}

impl ErrorResponse {
    pub fn new(error: &str, message: &str) -> Self;
    pub fn with_details(error: &str, message: &str, details: Value) -> Self;
}

Usage

[dependencies]
nexus-scribe-api = { path = "../nexus-scribe-api" }
use nexus_scribe_api::{LoginRequest, LoginResponse, WebSocketMessage};