| Environment | Base URL |
|---|---|
| Production | https://api.odai.com |
| Development | http://localhost:8080 |
Authentication
WebSocket connections authenticate via a Firebase ID token passed as a query parameter:Authorization header:
Firebase ID tokens are short-lived (1 hour). Your client should refresh the token before it expires and reconnect the WebSocket with the updated token.
Endpoint index
| Method | Path | Auth | Description |
|---|---|---|---|
WS | /chats/{chat_id} | Required | Real-time chat streaming |
GET | / | None | Serve static file (dev) or redirect to odai.com (prod) |
GET | /test | None | Health check — returns service status and active connection count |
POST | /waitlist | None | Add an email address to the waitlist |
POST | /email | None | Alias for /waitlist |
POST | /google_access_request | Required | Initiate Google OAuth access flow |
GET | /update_integrations | None | Reload agent integration configurations |
GET | /auth/google/login | Required | Redirect to Google OAuth consent page |
GET | /auth/google/callback | None | OAuth callback — exchanges code for tokens |
POST | /auth/plaid/create_link_token | Required | Create a Plaid Link token |
POST | /auth/plaid/set_access_token | Required | Exchange Plaid public token for access token |
GET | /auth/plaid/accounts | Required | List connected bank accounts |
DELETE | /auth/plaid/accounts/{account_id} | Required | Disconnect a bank account |
WS | /app/voice/stream/{session_id} | Required | In-app voice session over WebSocket |
API surfaces
WebSocket API
Real-time bidirectional chat with streaming text, tool call events, and agent handoff events
REST endpoints
Health checks, OAuth flows, waitlist management, and integration reloading
Agent pattern
How to implement a new agent following ODAI conventions
Tool responses
Standardized
ToolResponse format used by all agents