Files

82 lines
3.3 KiB
Markdown

# 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-<base64 string ending with =>`
- Example: `[REDACTED-KEY]=`
- Header: `Authorization: Bearer <key>`
- 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 <jwt>`
- 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 |