Authentication
There are two authentication methods, and they apply to different parts of the API. API keys (sent as a Bearer token in the Authorization header) work on the programmatic API surface: /v1/chat/completions, /v1/messages (which also accepts the Anthropic-style x-api-key header), /v1/models, file upload/download, and a few read-only GET endpoints (/api/usage/summary, /api/keys/:keyId/usage, /api/stuff, /api/stuff/stats). All other dashboard and management endpoints — API key management writes, billing, content writes, collections, canvas, chat sessions/messages, profile, 2FA — authenticate with the signed-in browser session cookie only; sending an API key to those endpoints returns 401. Each endpoint below is annotated with the auth it accepts.
| 1 | curl https://chat.waymore.ai/v1/chat/completions \ |
| 2 | -H "Authorization: Bearer YOUR_API_KEY" \ |
| 3 | -H "Content-Type: application/json" \ |
| 4 | -d '{ |
| 5 | "model": "Waymore-A1-Instruct-1011", |
| 6 | "messages": [{"role": "user", "content": "Hello"}] |
| 7 | }' |
Auth Endpoints
POST/api/auth/registerRegister a new user account. Rate limited to 5 attempts per 15 minutes. · Auth: None (public)
POST/api/auth/verify-emailVerify email address with a token sent to the user's inbox. · Auth: None (public)
POST/api/auth/resend-verificationResend the verification email. Rate limited to 3 per 5 minutes. · Auth: None (public)
POST/api/auth/forgot-passwordRequest a password reset link via email. · Auth: None (public)
POST/api/auth/reset-passwordReset password using a valid reset token. · Auth: None (public)
Two-Factor Authentication
POST/api/auth/2fa/setupGenerate a TOTP secret and QR code to enable 2FA. · Auth: Session only (dashboard)
POST/api/auth/2fa/verifyVerify a TOTP token to complete 2FA setup. Returns backup codes. · Auth: Session only (dashboard)
POST/api/auth/2fa/disableDisable 2FA. Requires password and a valid token or backup code. · Auth: Session only (dashboard)
Register Request
| 1 | { |
| 2 | "name": "John Doe", |
| 3 | "email": "john@example.com", |
| 4 | "password": "SecureP@ssw0rd!" |
| 5 | } |
| 1 | { |
| 2 | "id": "clx...", |
| 3 | "name": "John Doe", |
| 4 | "email": "john@example.com", |
| 5 | "requiresVerification": true |
| 6 | } |
2FA Setup Response
| 1 | { |
| 2 | "secret": "JBSWY3DPEHPK3PXP", |
| 3 | "qrCode": "data:image/png;base64,...", |
| 4 | "otpauthUrl": "otpauth://totp/LLMPortal:john@example.com?..." |
| 5 | } |
Chat Completions
Send messages to AI models and receive streaming or non-streaming responses. Accepts an API key (Bearer token) or a signed-in session. Timeout is 5 minutes.
POST/v1/chat/completionsCreate a chat completion. Supports streaming via SSE. · Auth: API key or session
POST/api/chat/completionsAlias of /v1/chat/completions. Prefer the /v1 path for programmatic access. · Auth: API key or session
Request
| 1 | { |
| 2 | "model": "Waymore-A1-Instruct-1011", |
| 3 | "messages": [ |
| 4 | { "role": "system", "content": "You are a helpful assistant." }, |
| 5 | { "role": "user", "content": "Explain quantum computing." } |
| 6 | ], |
| 7 | "stream": true, |
| 8 | "temperature": 0.7 |
| 9 | } |
Non-Streaming Response
| 1 | { |
| 2 | "id": "chatcmpl-abc123", |
| 3 | "model": "Waymore-A1-Instruct-1011", |
| 4 | "choices": [ |
| 5 | { |
| 6 | "message": { |
| 7 | "role": "assistant", |
| 8 | "content": "Quantum computing uses..." |
| 9 | }, |
| 10 | "finish_reason": "stop" |
| 11 | } |
| 12 | ], |
| 13 | "usage": { |
| 14 | "prompt_tokens": 25, |
| 15 | "completion_tokens": 150, |
| 16 | "total_tokens": 175 |
| 17 | } |
| 18 | } |
Streaming Response (SSE)
| 1 | data: {"id":"chatcmpl-abc123","choices":[{"delta":{"content":"Quantum"},"index":0}]} |
| 2 | |
| 3 | data: {"id":"chatcmpl-abc123","choices":[{"delta":{"content":" computing"},"index":0}]} |
| 4 | |
| 5 | data: [DONE] |
Messages (Anthropic-compatible)
A native Anthropic Messages API endpoint, compatible with Anthropic SDKs. Authenticate with the x-api-key header (Anthropic SDK convention), Authorization: Bearer, or a signed-in session. Required fields: model, messages, max_tokens. Supports system (string or text blocks), content blocks (text, base64 image, tool_use, tool_result), tools with input_schema, tool_choice ({"type": "auto" | "any" | "tool"}), temperature, top_p, stop_sequences, and stream.
POST/v1/messagesCreate a message (Anthropic Messages API). Supports streaming via Anthropic SSE events. · Auth: API key or session
Request
| 1 | curl https://chat.waymore.ai/v1/messages \ |
| 2 | -H "x-api-key: YOUR_API_KEY" \ |
| 3 | -H "Content-Type: application/json" \ |
| 4 | -d '{ |
| 5 | "model": "Waymore-A1-Instruct-1011", |
| 6 | "max_tokens": 256, |
| 7 | "messages": [{"role": "user", "content": "Hello"}] |
| 8 | }' |
| 1 | { |
| 2 | "model": "Waymore-A1-Instruct-1011", |
| 3 | "max_tokens": 1024, |
| 4 | "system": "You are a helpful assistant.", |
| 5 | "messages": [ |
| 6 | {"role": "user", "content": "What is the weather in Athens, Greece?"} |
| 7 | ], |
| 8 | "tools": [ |
| 9 | { |
| 10 | "name": "get_weather", |
| 11 | "description": "Get the current weather for a given location", |
| 12 | "input_schema": { |
| 13 | "type": "object", |
| 14 | "properties": { |
| 15 | "location": { |
| 16 | "type": "string", |
| 17 | "description": "The city and country, e.g. Athens, Greece" |
| 18 | } |
| 19 | }, |
| 20 | "required": ["location"] |
| 21 | } |
| 22 | } |
| 23 | ], |
| 24 | "tool_choice": {"type": "auto"} |
| 25 | } |
Response
Non-streaming responses are Anthropic-format messages: content blocks, stop_reason of end_turn / max_tokens / tool_use, and usage.input_tokens / usage.output_tokens. Submit tool results as tool_result content blocks in a user message, matching the tool_use id.
| 1 | { |
| 2 | "id": "msg_...", |
| 3 | "type": "message", |
| 4 | "role": "assistant", |
| 5 | "model": "Waymore-A1-Instruct-1011", |
| 6 | "content": [ |
| 7 | {"type": "text", "text": "I'll check the current weather in Athens, Greece for you."}, |
| 8 | { |
| 9 | "type": "tool_use", |
| 10 | "id": "toolu_01...", |
| 11 | "name": "get_weather", |
| 12 | "input": {"location": "Athens, Greece"} |
| 13 | } |
| 14 | ], |
| 15 | "stop_reason": "tool_use", |
| 16 | "usage": {"input_tokens": 855, "output_tokens": 30} |
| 17 | } |
Streaming (SSE)
With "stream": true, the endpoint emits Anthropic SSE events: message_start, content_block_start, content_block_delta (with text_delta / input_json_delta), content_block_stop, message_delta, message_stop.
| 1 | event: message_start |
| 2 | data: {"type":"message_start","message":{"id":"msg_...","type":"message","role":"assistant","content":[],"usage":{"input_tokens":25,"output_tokens":0}}} |
| 3 | |
| 4 | event: content_block_start |
| 5 | data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}} |
| 6 | |
| 7 | event: content_block_delta |
| 8 | data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}} |
| 9 | |
| 10 | event: content_block_stop |
| 11 | data: {"type":"content_block_stop","index":0} |
| 12 | |
| 13 | event: message_delta |
| 14 | data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":12}} |
| 15 | |
| 16 | event: message_stop |
| 17 | data: {"type":"message_stop"} |
Errors
Errors use the Anthropic error envelope with 400 / 401 / 429 / 5xx error types.
| 1 | { |
| 2 | "type": "error", |
| 3 | "error": { |
| 4 | "type": "invalid_request_error", |
| 5 | "message": "max_tokens: field required and must be a positive integer" |
| 6 | } |
| 7 | } |
Function Calling
Extend the model with custom functions (tools) that it can invoke during a conversation. On /v1/chat/completions, tool definitions use the OpenAI-compatible format (tools, tool_choice) and are forwarded to the backend. The Anthropic tool format (input_schema, tool_use / tool_result blocks) is supported on /v1/messages — see Messages (Anthropic-compatible). Formats are not auto-detected: each endpoint accepts only its own format. Supports parallel tool calls.
Tool Definitions
Each tool has a type: "function" wrapper with parameters:
| 1 | { |
| 2 | "model": "Waymore-A1-Instruct-1011", |
| 3 | "messages": [ |
| 4 | {"role": "user", "content": "What is the weather in Athens, Greece?"} |
| 5 | ], |
| 6 | "tools": [ |
| 7 | { |
| 8 | "type": "function", |
| 9 | "function": { |
| 10 | "name": "get_weather", |
| 11 | "description": "Get the current weather for a given location", |
| 12 | "parameters": { |
| 13 | "type": "object", |
| 14 | "properties": { |
| 15 | "location": { |
| 16 | "type": "string", |
| 17 | "description": "The city and country, e.g. Athens, Greece" |
| 18 | }, |
| 19 | "unit": { |
| 20 | "type": "string", |
| 21 | "enum": ["celsius", "fahrenheit"], |
| 22 | "description": "Temperature unit" |
| 23 | } |
| 24 | }, |
| 25 | "required": ["location"] |
| 26 | } |
| 27 | } |
| 28 | } |
| 29 | ], |
| 30 | "tool_choice": "auto" |
| 31 | } |
Tool Call Responses
Response includes tool_calls and finish_reason: "tool_calls".
| 1 | { |
| 2 | "id": "chatcmpl-abc123", |
| 3 | "model": "Waymore-A1-Instruct-1011", |
| 4 | "choices": [ |
| 5 | { |
| 6 | "index": 0, |
| 7 | "message": { |
| 8 | "role": "assistant", |
| 9 | "content": "I'll check the current weather in Athens, Greece for you.", |
| 10 | "tool_calls": [ |
| 11 | { |
| 12 | "id": "functions.get_weather:0", |
| 13 | "index": 0, |
| 14 | "type": "function", |
| 15 | "function": { |
| 16 | "name": "get_weather", |
| 17 | "arguments": "{"location": "Athens, Greece"}" |
| 18 | } |
| 19 | } |
| 20 | ] |
| 21 | }, |
| 22 | "finish_reason": "tool_calls" |
| 23 | } |
| 24 | ], |
| 25 | "usage": { |
| 26 | "prompt_tokens": 885, |
| 27 | "completion_tokens": 33, |
| 28 | "total_tokens": 918 |
| 29 | } |
| 30 | } |
Submitting Tool Results
Send the result as a message with role: "tool" and the matching tool_call_id.
| 1 | { |
| 2 | "model": "Waymore-A1-Instruct-1011", |
| 3 | "messages": [ |
| 4 | {"role": "user", "content": "What is the weather in Athens, Greece?"}, |
| 5 | { |
| 6 | "role": "assistant", |
| 7 | "content": "I'll check the current weather in Athens, Greece for you.", |
| 8 | "tool_calls": [ |
| 9 | { |
| 10 | "id": "functions.get_weather:0", |
| 11 | "type": "function", |
| 12 | "function": { |
| 13 | "name": "get_weather", |
| 14 | "arguments": "{"location": "Athens, Greece"}" |
| 15 | } |
| 16 | } |
| 17 | ] |
| 18 | }, |
| 19 | { |
| 20 | "role": "tool", |
| 21 | "tool_call_id": "functions.get_weather:0", |
| 22 | "content": "{"temperature": 18, "unit": "celsius", "condition": "Partly cloudy", "humidity": 55}" |
| 23 | } |
| 24 | ], |
| 25 | "tools": [...] |
| 26 | } |
Parallel Tool Calls
The model can invoke multiple tools in a single response. Each tool call has a unique id and index. Submit all results before the next completion request.
| 1 | { |
| 2 | "choices": [ |
| 3 | { |
| 4 | "message": { |
| 5 | "role": "assistant", |
| 6 | "content": "I'll check the weather for both cities.", |
| 7 | "tool_calls": [ |
| 8 | { |
| 9 | "id": "functions.get_weather:0", |
| 10 | "index": 0, |
| 11 | "type": "function", |
| 12 | "function": { |
| 13 | "name": "get_weather", |
| 14 | "arguments": "{"location": "Athens, Greece"}" |
| 15 | } |
| 16 | }, |
| 17 | { |
| 18 | "id": "functions.get_weather:1", |
| 19 | "index": 1, |
| 20 | "type": "function", |
| 21 | "function": { |
| 22 | "name": "get_weather", |
| 23 | "arguments": "{"location": "London, United Kingdom"}" |
| 24 | } |
| 25 | } |
| 26 | ] |
| 27 | }, |
| 28 | "finish_reason": "tool_calls" |
| 29 | } |
| 30 | ] |
| 31 | } |
tool_choice Options
| Value | Behavior |
|---|
| "auto" | Model decides whether to call a tool (default) |
| "none" | Model will not call any tools |
| "required" | Model must call at least one tool |
| {"type":"function","function":{"name":"..."}} | Force a specific function to be called |
Chat Sessions
Manage chat sessions (conversations). Sessions group messages together and track the model being used. These endpoints require a signed-in browser session — API keys are not accepted.
GET/api/chat/sessionsList all chat sessions for the current user (50 most recent). · Auth: Session only (dashboard)
POST/api/chat/sessionsCreate a new chat session with optional title and model. · Auth: Session only (dashboard)
PATCH/api/chat/sessions/:sessionIdUpdate a session's title or model. · Auth: Session only (dashboard)
DELETE/api/chat/sessions/:sessionIdDelete a chat session and all its messages. · Auth: Session only (dashboard)
Create Session
| 1 | { |
| 2 | "title": "Quantum Physics Discussion", |
| 3 | "model": "Waymore-A1-Instruct-1011" |
| 4 | } |
| 1 | { |
| 2 | "id": "clx...", |
| 3 | "title": "Quantum Physics Discussion", |
| 4 | "model": "Waymore-A1-Instruct-1011", |
| 5 | "messages": [] |
| 6 | } |
Chat Messages
Create, retrieve, and manage messages within chat sessions. Messages support file attachments and ratings. These endpoints require a signed-in browser session — API keys are not accepted.
GET/api/chat/sessions/:sessionId/messagesList all messages in a session with attachments. · Auth: Session only (dashboard)
POST/api/chat/messagesCreate a new message with optional attachments. · Auth: Session only (dashboard)
PATCH/api/chat/messages/:messageIdUpdate a message (e.g. video data). · Auth: Session only (dashboard)
POST/api/chat/messages/:messageId/ratingRate an assistant message (thumbs up/down). · Auth: Session only (dashboard)
POST/api/chat/attachmentsUpload files for chat messages (max 5 files, 50MB each). · Auth: Session only (dashboard)
Create Message
| 1 | { |
| 2 | "sessionId": "clx...", |
| 3 | "role": "user", |
| 4 | "content": "What is machine learning?", |
| 5 | "model": "Waymore-A1-Instruct-1011", |
| 6 | "attachments": [ |
| 7 | { "name": "data.csv", "type": "text/csv", "size": 1024, "url": "/uploads/..." } |
| 8 | ] |
| 9 | } |
| 1 | { |
| 2 | "id": "clx...", |
| 3 | "sessionId": "clx...", |
| 4 | "role": "user", |
| 5 | "content": "What is machine learning?", |
| 6 | "attachments": [...], |
| 7 | "totalTokens": 12 |
| 8 | } |
Rate Message
| 1 | { |
| 2 | "success": true, |
| 3 | "rating": 1 |
| 4 | } |
Models
Retrieve the list of available LLM models. Use /v1/models for programmatic access with an API key.
GET/v1/modelsGet all available LLM models and their providers. · Auth: API key or session
GET/api/chat/modelsSame model list for the chat UI. · Auth: Session only (dashboard)
Response
| 1 | curl https://chat.waymore.ai/v1/models \ |
| 2 | -H "Authorization: Bearer YOUR_API_KEY" |
| 1 | { |
| 2 | "data": [ |
| 3 | { "id": "Waymore-A1-Instruct-1011", "owned_by": "waymore" } |
| 4 | ] |
| 5 | } |
API Keys
Create, list, rotate, and revoke API keys. Keys support granular permissions (chat, images, vision, research), IP whitelisting, and rate limits. The number of keys allowed depends on your subscription plan. Key management is a dashboard function: these endpoints require a signed-in browser session and cannot be called with an API key, with one exception — GET /api/keys/:keyId/usage is read-only and also accepts Authorization: Bearer.
GET/api/keysList all API keys for the current user. · Auth: Session only (dashboard)
POST/api/keysCreate a new API key with permissions and limits. · Auth: Session only (dashboard)
GET/api/keys/:keyIdGet API key details. · Auth: Session only (dashboard)
PATCH/api/keys/:keyIdUpdate API key metadata, permissions, and limits. · Auth: Session only (dashboard)
DELETE/api/keys/:keyIdDelete an API key permanently. · Auth: Session only (dashboard)
POST/api/keys/:keyId/regenerateRegenerate the API key secret. Old key is invalidated. · Auth: Session only (dashboard)
POST/api/keys/:keyId/revokeRevoke an API key with an optional reason. · Auth: Session only (dashboard)
POST/api/keys/:keyId/reactivateReactivate a previously revoked API key. · Auth: Session only (dashboard)
GET/api/keys/:keyId/usage?days=30Get usage statistics for an API key over a time period. Read-only. · Auth: API key or session
GET/api/keys/:keyId/requests?limit=10Get request history (daily aggregated) for an API key. · Auth: Session only (dashboard)
Create Key
| 1 | { |
| 2 | "name": "Production Key", |
| 3 | "description": "Main production API key", |
| 4 | "permissions": ["chat", "images", "vision"], |
| 5 | "ipWhitelist": ["203.0.113.0/24"], |
| 6 | "dailyLimit": 10000, |
| 7 | "monthlyLimit": 250000, |
| 8 | "rpmLimit": 60, |
| 9 | "expiresInDays": 90 |
| 10 | } |
| 1 | { |
| 2 | "id": "clx...", |
| 3 | "name": "Production Key", |
| 4 | "key": "sk-live-abc123...", |
| 5 | "status": "ACTIVE", |
| 6 | "tier": "PRO" |
| 7 | } |
Key Usage
| 1 | { |
| 2 | "apiKey": { |
| 3 | "id": "clx...", |
| 4 | "name": "Production Key", |
| 5 | "totalTokensUsed": 125000 |
| 6 | }, |
| 7 | "dailyUsage": [ |
| 8 | { "date": "2025-01-15", "requests": 340, "tokens": 45000, "cost": 1.35, "errors": 2 } |
| 9 | ], |
| 10 | "stats": { |
| 11 | "totalRequests": 5200, |
| 12 | "totalTokens": 125000, |
| 13 | "avgResponseTime": 850 |
| 14 | } |
| 15 | } |
Usage & Analytics
Retrieve detailed usage metrics with filtering by time period, API key, model, and status. Includes cost breakdowns and model-level analytics. GET /api/usage/summary is read-only and accepts an API key (Bearer) or a session; /api/usage/filters requires a signed-in browser session.
GET/api/usage/summaryGet detailed usage summary with advanced filtering. Read-only. · Auth: API key or session
GET/api/usage/filtersGet available filter options (keys, models) for usage queries. · Auth: Session only (dashboard)
Usage Summary
| 1 | curl "https://chat.waymore.ai/api/usage/summary?period=30d&model=Waymore-A1-Instruct-1011" \ |
| 2 | -H "Authorization: Bearer YOUR_API_KEY" |
| 1 | { |
| 2 | "stats": { |
| 3 | "totalRequests": 12500, |
| 4 | "totalTokens": 3200000, |
| 5 | "inputTokens": 1200000, |
| 6 | "outputTokens": 2000000, |
| 7 | "totalCost": 48.50, |
| 8 | "avgResponseTime": 920, |
| 9 | "errorCount": 15, |
| 10 | "errorRate": 0.12 |
| 11 | }, |
| 12 | "dailyUsage": [ |
| 13 | { "date": "2025-01-15", "requests": 420, "tokens": 105000, "cost": 1.65, "errors": 1 } |
| 14 | ], |
| 15 | "byModel": [ |
| 16 | { |
| 17 | "model": "Waymore-A1-Instruct-1011", |
| 18 | "requests": 8500, |
| 19 | "tokens": 2400000, |
| 20 | "cost": 38.40, |
| 21 | "percentage": 79.2 |
| 22 | } |
| 23 | ], |
| 24 | "costBreakdown": { |
| 25 | "inputTokensCost": 12.00, |
| 26 | "outputTokensCost": 30.00, |
| 27 | "imagesCost": 6.50, |
| 28 | "total": 48.50 |
| 29 | } |
| 30 | } |
Billing
Manage subscriptions, view invoices, and handle payment methods. Billing is powered by Stripe. These endpoints require a signed-in browser session — API keys are not accepted.
GET/api/billingGet billing overview: subscription, usage, payment methods, invoices. · Auth: Session only (dashboard)
GET/api/billing/plansList all available subscription plans with feature comparison. · Auth: Session only (dashboard)
GET/api/billing/change-plan?planId=...Preview a plan change with proration details. · Auth: Session only (dashboard)
POST/api/billing/change-planChange subscription plan. · Auth: Session only (dashboard)
POST/api/billing/cancelCancel subscription (effective at period end). · Auth: Session only (dashboard)
GET/api/billing/invoices?limit=20&offset=0Get paginated list of invoices. · Auth: Session only (dashboard)
GET/api/billing/payment-methodsList all payment methods on file. · Auth: Session only (dashboard)
POST/api/billing/payment-methodsAdd a new payment method via Stripe payment method ID. · Auth: Session only (dashboard)
PATCH/api/billing/payment-methods/:idUpdate a payment method (e.g. set as default). · Auth: Session only (dashboard)
DELETE/api/billing/payment-methods/:idRemove a payment method. · Auth: Session only (dashboard)
Billing Overview
| 1 | { |
| 2 | "subscription": { |
| 3 | "id": "clx...", |
| 4 | "status": "ACTIVE", |
| 5 | "plan": { "name": "Pro", "tier": "PRO" }, |
| 6 | "currentPeriod": { "start": "2025-01-01", "end": "2025-02-01" }, |
| 7 | "cancelAtPeriodEnd": false |
| 8 | }, |
| 9 | "usage": { |
| 10 | "tokensUsed": 125000, |
| 11 | "tokensLimit": 10000000, |
| 12 | "percentUsed": 1.25 |
| 13 | }, |
| 14 | "paymentMethods": [ |
| 15 | { "id": "pm_...", "brand": "visa", "last4": "4242", "isDefault": true } |
| 16 | ], |
| 17 | "recentInvoices": [...] |
| 18 | } |
Available Plans
| 1 | { |
| 2 | "plans": [ |
| 3 | { |
| 4 | "id": "clx...", |
| 5 | "name": "Free", |
| 6 | "tier": "FREE", |
| 7 | "monthlyPrice": 0, |
| 8 | "features": { "tokens": "100,000/mo", "dailyTokens": "10,000/day", "apiKeys": 2, "rpm": 600 } |
| 9 | }, |
| 10 | { |
| 11 | "id": "clx...", |
| 12 | "name": "Starter", |
| 13 | "tier": "STARTER", |
| 14 | "monthlyPrice": 1900, |
| 15 | "features": { "tokens": "1,000,000/mo", "apiKeys": 5, "rpm": 1200 } |
| 16 | }, |
| 17 | { |
| 18 | "id": "clx...", |
| 19 | "name": "Pro", |
| 20 | "tier": "PRO", |
| 21 | "monthlyPrice": 4900, |
| 22 | "features": { "tokens": "10,000,000/mo", "apiKeys": 20, "rpm": 3000, "support": "Priority" } |
| 23 | }, |
| 24 | { |
| 25 | "id": "clx...", |
| 26 | "name": "Enterprise", |
| 27 | "tier": "ENTERPRISE", |
| 28 | "monthlyPrice": 19900, |
| 29 | "features": { "tokens": "Unlimited", "apiKeys": 100, "rpm": 6000 } |
| 30 | } |
| 31 | ], |
| 32 | "currentPlanId": "clx...", |
| 33 | "features": [ |
| 34 | { "name": "Monthly Tokens", "values": { "FREE": "100,000", "STARTER": "1,000,000", "PRO": "10,000,000", "ENTERPRISE": "Unlimited" } } |
| 35 | ] |
| 36 | } |
User Profile
View and update user profile information and change passwords. These endpoints require a signed-in browser session — API keys are not accepted.
GET/api/user/profileGet the current user's profile information. · Auth: Session only (dashboard)
PATCH/api/user/profileUpdate profile fields (name, email, company, phone, timezone). · Auth: Session only (dashboard)
POST/api/user/passwordChange password. Requires current password and a strong new password (min 12 chars). · Auth: Session only (dashboard)
Profile Response
| 1 | { |
| 2 | "id": "clx...", |
| 3 | "name": "John Doe", |
| 4 | "email": "john@example.com", |
| 5 | "role": "USER", |
| 6 | "status": "ACTIVE", |
| 7 | "firstName": "John", |
| 8 | "lastName": "Doe", |
| 9 | "company": "Acme Inc", |
| 10 | "timezone": "America/New_York", |
| 11 | "twoFactorEnabled": true, |
| 12 | "createdAt": "2025-01-01T00:00:00Z" |
| 13 | } |
Files & Uploads
Upload and manage files. File endpoints proxy to the LLM backend for processing and accept an API key or a signed-in session. Supports images, videos, PDFs, documents, and code files up to 50MB.
GET/api/filesList uploaded files. · Auth: API key or session
POST/api/files/uploadUpload a file for LLM processing (multipart/form-data). · Auth: API key or session
GET/api/files/:fileIdGet file metadata. · Auth: API key or session
DELETE/api/files/:fileIdDelete an uploaded file. · Auth: API key or session
Content Items
Save and organize content items (images, videos, files, code snippets, conversations, notes) in your personal library. Supports tagging, favorites, archiving, and full-text search. GET /api/stuff and GET /api/stuff/stats are read-only and accept an API key (Bearer) or a session; all other content endpoints require a signed-in browser session.
GET/api/stuffList content items with filtering, search, and pagination. Read-only. · Auth: API key or session
POST/api/stuffCreate a new content item. · Auth: Session only (dashboard)
GET/api/stuff/:idGet a content item with its collections. · Auth: Session only (dashboard)
PATCH/api/stuff/:idUpdate item metadata (title, description, tags, favorite, archive). · Auth: Session only (dashboard)
DELETE/api/stuff/:idDelete a content item permanently. · Auth: Session only (dashboard)
GET/api/stuff/statsGet aggregated content statistics and storage usage. Read-only. · Auth: API key or session
POST/api/stuff/uploadUpload files to your library (multipart/form-data, max 50MB). · Auth: Session only (dashboard)
GET/api/stuff/download/:userId/:filenameDownload a file with caching support. · Auth: Session only (dashboard)
Query Parameters
| 1 | curl "https://chat.waymore.ai/api/stuff?type=IMAGE&search=photo&favorite=true&sortBy=newest&page=1&limit=20" \ |
| 2 | -H "Authorization: Bearer YOUR_API_KEY" |
| 3 | |
| 4 | |
| 5 | |
| 6 | |
Content Stats
| 1 | { |
| 2 | "total": 145, |
| 3 | "images": 52, |
| 4 | "videos": 8, |
| 5 | "files": 30, |
| 6 | "code": 25, |
| 7 | "conversations": 20, |
| 8 | "notes": 10, |
| 9 | "storageUsed": 524288000, |
| 10 | "storageLimit": 5368709120 |
| 11 | } |
Collections
Organize content items into collections with custom colors and icons. These endpoints require a signed-in browser session — API keys are not accepted.
GET/api/collectionsList all collections with item counts. · Auth: Session only (dashboard)
POST/api/collectionsCreate a new collection. · Auth: Session only (dashboard)
GET/api/collections/:idGet a collection with all its items. · Auth: Session only (dashboard)
PATCH/api/collections/:idUpdate collection metadata (name, description, color, icon). · Auth: Session only (dashboard)
DELETE/api/collections/:idDelete a collection (not allowed for default collections). · Auth: Session only (dashboard)
POST/api/collections/:id/itemsAdd a content item to a collection. · Auth: Session only (dashboard)
DELETE/api/collections/:id/items?itemId=...Remove a content item from a collection. · Auth: Session only (dashboard)
Canvas Documents
Manage collaborative canvas documents linked to chat sessions. Supports version history with up to 50 snapshots. These endpoints require a signed-in browser session — API keys are not accepted.
GET/api/canvas/:sessionIdLoad a canvas document and recent versions for a session. · Auth: Session only (dashboard)
PUT/api/canvas/:sessionIdCreate or update (upsert) a canvas document. · Auth: Session only (dashboard)
DELETE/api/canvas/:sessionIdDelete a canvas document and all its versions. · Auth: Session only (dashboard)
GET/api/canvas/:sessionId/versionsList all version snapshots. · Auth: Session only (dashboard)
POST/api/canvas/:sessionId/versionsCreate a new version snapshot (max 50, oldest auto-deleted). · Auth: Session only (dashboard)
Errors
The API uses standard HTTP status codes. Error responses include a JSON body with details.
| 1 | { |
| 2 | "error": "Descriptive error message" |
| 3 | } |
| Code | Description |
|---|
| 200 | Success |
| 201 | Created |
| 400 | Bad request — invalid parameters or validation error |
| 401 | Unauthorized — missing or invalid authentication |
| 403 | Forbidden — insufficient permissions |
| 404 | Not found — resource does not exist |
| 409 | Conflict — resource already exists |
| 429 | Too many requests — rate limit exceeded |
| 500 | Internal server error |
Rate Limits
| Endpoint | Limit |
|---|
| /api/auth/register | 5 per 15 minutes per IP |
| /api/auth/resend-verification | 3 per 5 minutes per IP |
| /api/auth/forgot-password | 3 per 15 minutes per IP |
| /v1/chat/completions | Per API key RPM limit (configurable; plan cap: Free 600 / Starter 1200 / Pro 3000 / Enterprise 6000 RPM) |