# Apodex API Endpoints Reference (2026-06-26) ## Core Endpoints | Endpoint | Method | Auth | Purpose | |----------|--------|------|---------| | `https://api.apodex.ai/v1/chat/completions` | POST | Bearer API Key | Chat completions (OpenAI-compatible) | | `https://api.apodex.ai/v1/models` | GET | Bearer API Key | List available models | | `https://api.apodex.ai/v1/api-keys` | GET | Bearer Supabase JWT | List/Create API keys | | `https://hgejqhubxceqppqkgqgx.supabase.co/auth/v1/otp` | POST | apikey header | Trigger OTP | | `https://hgejqhubxceqppqkgqgx.supabase.co/auth/v1/verify` | POST | apikey header | Verify OTP → session | ## Models (confirmed via `/v1/models`) | Model ID | Context | Max Output | |----------|---------|------------| | `apodex-1-0-deep-discovery` | 131,072 | 262,144 | | `apodex-1-0-deep-reasoning` | 262,144 | 16,384 | | `apodex-1-0-deep-research` | 262,144 | 16,384 | ## Auth Systems ### 1. API Key (for completions) - Format: `sk-` - Example: `[REDACTED-KEY]=` - Header: `Authorization: Bearer ` - Works on: `/v1/chat/completions`, `/v1/models` - Does NOT work on: `/v1/api-keys` (returns `{"error":"invalid token"}`) ### 2. Supabase Session JWT (for key management) - Format: JWT (`eyJ...`) - Stored in: `localStorage.getItem('sb-hgejqhubxceqppqkgqgx-auth-token')` - Header: `Authorization: Bearer ` - Works on: `/v1/api-keys` - Obtained via: OTP verify flow ### 3. Session Cookie - Format: 32 hex chars (e.g., `[REDACTED-KEY]`) - NOT a valid Bearer token for ANY endpoint (returns `invalid api key` on chat completions) - May work for Supabase session lookup ## Error Messages | Error | Meaning | Where | |-------|---------|-------| | `{"error":"invalid token"}` | API key used on wrong endpoint | `/v1/api-keys` with API key | | `{"error":"invalid api key"}` | Session cookie used as Bearer | any endpoint | | `{"error":{"message":"Only POST is supported",...}}` | GET on chat completions | `/v1/chat/completions` | | `{"error":"invalid api key"}` | Wrong/missing auth | any endpoint | | `PASSWORDLESS_SEND_RATE_LIMITED` | IP-based rate limit on OTP | Supabase auth | ## Working Keys (2026-06-26) | Account | Key | Status | |---------|-----|--------| | `[REDACTED-EMAIL]` | `[REDACTED-KEY]=` | ✅ Live | | `[REDACTED-EMAIL]` | `[REDACTED-KEY]=` | ✅ Live | ## Account Table (20 total, 2026-06-26) | # | Email | API Key | Status | |---|-------|---------|--------| | 1 | `[REDACTED-EMAIL]` | `[REDACTED-KEY]=` | ✅ | | 2 | `[REDACTED-EMAIL]` | `[REDACTED-KEY]=` | ✅ | | 3 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 4 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 5 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 6 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 7 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 8 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 9 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 10 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 11 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 12 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 13 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 14 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 15 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 16 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 17 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 18 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 19 | `[REDACTED-EMAIL]` | ❓ | ✅ Created | | 20 | `[REDACTED-EMAIL]` | ❓ | ✅ Created |