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};