API Reference

Table of Contents

  1. Base URL
  2. Authentication
  3. Auth Endpoints
    1. Register
    2. Login
    3. Refresh Token
    4. Logout
  4. User Endpoints
    1. Get Current User
    2. Update Profile
  5. Meeting Endpoints
    1. List Meetings
    2. Create Meeting
    3. Get Meeting
    4. Start Recording
    5. Stop Recording
    6. Get Transcript
  6. Search Endpoint
    1. Full-Text Search
  7. Webhook Endpoints
    1. List Webhooks
    2. Create Webhook
  8. Organization Endpoints
    1. Create Organization
    2. Invite Member
    3. Get Usage Stats
  9. Privacy Endpoints (GDPR/CCPA)
    1. Request Data Export
    2. Request Data Deletion
    3. Update Consent
    4. CCPA Do Not Sell
  10. WebSocket Endpoints
    1. Real-time Transcription
  11. Error Responses

Base URL

http://localhost:8080/api/v1

Authentication

Most endpoints require a JWT access token in the Authorization header:

Authorization: Bearer <access_token>

Auth Endpoints

Register

POST /api/v1/auth/register

Request Body:

{
  "email": "user@example.com",
  "password": "SecurePassword123!",
  "display_name": "John Doe"
}

Response: 201 Created

{
  "id": "uuid",
  "email": "user@example.com",
  "display_name": "John Doe",
  "role": "user"
}

Login

POST /api/v1/auth/login

Request Body:

{
  "email": "user@example.com",
  "password": "SecurePassword123!"
}

Response: 200 OK

{
  "access_token": "eyJ...",
  "refresh_token": "eyJ...",
  "expires_in": 3600,
  "user": {
    "id": "uuid",
    "email": "user@example.com",
    "display_name": "John Doe",
    "role": "admin"
  },
  "mfa_required": false
}

Refresh Token

POST /api/v1/auth/refresh

Request Body:

{
  "refresh_token": "eyJ..."
}

Logout

POST /api/v1/auth/logout
Authorization: Bearer <token>

User Endpoints

Get Current User

GET /api/v1/users/me
Authorization: Bearer <token>

Update Profile

PUT /api/v1/users/me
Authorization: Bearer <token>

Request Body:

{
  "display_name": "New Name",
  "email": "newemail@example.com"
}

Meeting Endpoints

List Meetings

GET /api/v1/meetings
Authorization: Bearer <token>

Query Parameters:

  • page - Page number (default: 1)
  • limit - Items per page (default: 20)
  • status - Filter by status (scheduled, active, completed)

Create Meeting

POST /api/v1/meetings
Authorization: Bearer <token>

Request Body:

{
  "title": "Weekly Standup",
  "description": "Team sync meeting",
  "scheduled_at": "2024-01-15T10:00:00Z"
}

Get Meeting

GET /api/v1/meetings/:id
Authorization: Bearer <token>

Start Recording

POST /api/v1/meetings/:id/start
Authorization: Bearer <token>

Stop Recording

POST /api/v1/meetings/:id/stop
Authorization: Bearer <token>

Get Transcript

GET /api/v1/meetings/:id/transcript
Authorization: Bearer <token>

Search Endpoint

GET /api/v1/search
Authorization: Bearer <token>

Query Parameters:

  • q - Search query (required)
  • type - Content type (transcript, meeting, comment)
  • from - Start date (ISO 8601)
  • to - End date (ISO 8601)
  • limit - Max results (default: 20)

Example:

curl "http://localhost:8080/api/v1/search?q=action+items&type=transcript" \
  -H "Authorization: Bearer <token>"

Webhook Endpoints

List Webhooks

GET /api/v1/webhooks
Authorization: Bearer <token>

Create Webhook

POST /api/v1/webhooks
Authorization: Bearer <token>

Request Body:

{
  "url": "https://your-server.com/webhook",
  "events": ["meeting.started", "meeting.ended", "transcript.completed"],
  "secret": "your-webhook-secret"
}

Available Events:

  • meeting.started
  • meeting.ended
  • transcript.completed
  • participant.joined
  • participant.left

Organization Endpoints

Create Organization

POST /api/v1/organizations
Authorization: Bearer <token>

Request Body:

{
  "name": "Acme Corp",
  "slug": "acme"
}

Invite Member

POST /api/v1/organizations/:org_id/members
Authorization: Bearer <token>

Request Body:

{
  "email": "user@acme.com",
  "role": "editor"
}

Get Usage Stats

GET /api/v1/organizations/:org_id/usage
Authorization: Bearer <token>

Privacy Endpoints (GDPR/CCPA)

Request Data Export

POST /api/v1/privacy/export
Authorization: Bearer <token>

Request Data Deletion

POST /api/v1/privacy/delete
Authorization: Bearer <token>

Request Body:

{
  "confirm": true
}
PUT /api/v1/privacy/consent
Authorization: Bearer <token>

Request Body:

{
  "marketing": false,
  "analytics": true
}

CCPA Do Not Sell

PUT /api/v1/privacy/ccpa
Authorization: Bearer <token>

Request Body:

{
  "do_not_sell": true,
  "ca_resident": true
}

WebSocket Endpoints

Real-time Transcription

const ws = new WebSocket('ws://localhost:8080/ws/meeting/<meeting_id>');

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  // Handle transcript segment, speaker update, etc.
};

Message Types:

  • transcript_segment - New transcription text
  • speaker_update - Speaker identification
  • participant_joined - New participant
  • participant_left - Participant left

Error Responses

All errors follow this format:

{
  "error": "error_code",
  "message": "Human readable message"
}

Common Error Codes:

Code HTTP Status Description
unauthorized 401 Invalid or missing token
forbidden 403 Insufficient permissions
not_found 404 Resource not found
validation_error 400 Invalid request body
rate_limited 429 Too many requests
internal_error 500 Server error