Waymore Docs

API Reference

Complete reference for the LLM Portal REST API. All endpoints use JSON request and response bodies unless otherwise noted.

Programmatic API base URL: https://chat.waymore.ai/v1 — dashboard endpoints under /api require a signed-in browser session.

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.

cURL
1curl 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/register

Register a new user account. Rate limited to 5 attempts per 15 minutes. · Auth: None (public)

POST
/api/auth/verify-email

Verify email address with a token sent to the user's inbox. · Auth: None (public)

POST
/api/auth/resend-verification

Resend the verification email. Rate limited to 3 per 5 minutes. · Auth: None (public)

POST
/api/auth/forgot-password

Request a password reset link via email. · Auth: None (public)

POST
/api/auth/reset-password

Reset password using a valid reset token. · Auth: None (public)

Two-Factor Authentication

POST
/api/auth/2fa/setup

Generate a TOTP secret and QR code to enable 2FA. · Auth: Session only (dashboard)

POST
/api/auth/2fa/verify

Verify a TOTP token to complete 2FA setup. Returns backup codes. · Auth: Session only (dashboard)

POST
/api/auth/2fa/disable

Disable 2FA. Requires password and a valid token or backup code. · Auth: Session only (dashboard)

Register Request

POST /api/auth/register
1{
2 "name": "John Doe",
3 "email": "john@example.com",
4 "password": "SecureP@ssw0rd!"
5}
Response 201
1{
2 "id": "clx...",
3 "name": "John Doe",
4 "email": "john@example.com",
5 "requiresVerification": true
6}

2FA Setup Response

Response 200
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/completions

Create a chat completion. Supports streaming via SSE. · Auth: API key or session

POST
/api/chat/completions

Alias of /v1/chat/completions. Prefer the /v1 path for programmatic access. · Auth: API key or session

Request

POST /v1/chat/completions
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

Response 200
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)

Event Stream
1data: {"id":"chatcmpl-abc123","choices":[{"delta":{"content":"Quantum"},"index":0}]}
2 
3data: {"id":"chatcmpl-abc123","choices":[{"delta":{"content":" computing"},"index":0}]}
4 
5data: [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/messages

Create a message (Anthropic Messages API). Supports streaming via Anthropic SSE events. · Auth: API key or session

Request

cURL
1curl 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 }'
POST /v1/messages (with tools)
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.

Response 200
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.

Event Stream
1event: message_start
2data: {"type":"message_start","message":{"id":"msg_...","type":"message","role":"assistant","content":[],"usage":{"input_tokens":25,"output_tokens":0}}}
3 
4event: content_block_start
5data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
6 
7event: content_block_delta
8data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Hello"}}
9 
10event: content_block_stop
11data: {"type":"content_block_stop","index":0}
12 
13event: message_delta
14data: {"type":"message_delta","delta":{"stop_reason":"end_turn"},"usage":{"output_tokens":12}}
15 
16event: message_stop
17data: {"type":"message_stop"}

Errors

Errors use the Anthropic error envelope with 400 / 401 / 429 / 5xx error types.

Error Response
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:

POST /v1/chat/completions
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".

Response 200
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.

POST /v1/chat/completions
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.

Response with parallel tool calls
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

ValueBehavior
"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/sessions

List all chat sessions for the current user (50 most recent). · Auth: Session only (dashboard)

POST
/api/chat/sessions

Create a new chat session with optional title and model. · Auth: Session only (dashboard)

PATCH
/api/chat/sessions/:sessionId

Update a session's title or model. · Auth: Session only (dashboard)

DELETE
/api/chat/sessions/:sessionId

Delete a chat session and all its messages. · Auth: Session only (dashboard)

Create Session

POST /api/chat/sessions
1{
2 "title": "Quantum Physics Discussion",
3 "model": "Waymore-A1-Instruct-1011"
4}
Response 201
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/messages

List all messages in a session with attachments. · Auth: Session only (dashboard)

POST
/api/chat/messages

Create a new message with optional attachments. · Auth: Session only (dashboard)

PATCH
/api/chat/messages/:messageId

Update a message (e.g. video data). · Auth: Session only (dashboard)

POST
/api/chat/messages/:messageId/rating

Rate an assistant message (thumbs up/down). · Auth: Session only (dashboard)

POST
/api/chat/attachments

Upload files for chat messages (max 5 files, 50MB each). · Auth: Session only (dashboard)

Create Message

POST /api/chat/messages
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}
Response 201
1{
2 "id": "clx...",
3 "sessionId": "clx...",
4 "role": "user",
5 "content": "What is machine learning?",
6 "attachments": [...],
7 "totalTokens": 12
8}

Rate Message

POST /api/chat/messages/:messageId/rating
1{
2 "rating": "up"
3}
Response 200
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/models

Get all available LLM models and their providers. · Auth: API key or session

GET
/api/chat/models

Same model list for the chat UI. · Auth: Session only (dashboard)

Response

cURL
1curl https://chat.waymore.ai/v1/models \
2 -H "Authorization: Bearer YOUR_API_KEY"
GET /v1/models — Response 200
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/keys

List all API keys for the current user. · Auth: Session only (dashboard)

POST
/api/keys

Create a new API key with permissions and limits. · Auth: Session only (dashboard)

GET
/api/keys/:keyId

Get API key details. · Auth: Session only (dashboard)

PATCH
/api/keys/:keyId

Update API key metadata, permissions, and limits. · Auth: Session only (dashboard)

DELETE
/api/keys/:keyId

Delete an API key permanently. · Auth: Session only (dashboard)

POST
/api/keys/:keyId/regenerate

Regenerate the API key secret. Old key is invalidated. · Auth: Session only (dashboard)

POST
/api/keys/:keyId/revoke

Revoke an API key with an optional reason. · Auth: Session only (dashboard)

POST
/api/keys/:keyId/reactivate

Reactivate a previously revoked API key. · Auth: Session only (dashboard)

GET
/api/keys/:keyId/usage?days=30

Get usage statistics for an API key over a time period. Read-only. · Auth: API key or session

GET
/api/keys/:keyId/requests?limit=10

Get request history (daily aggregated) for an API key. · Auth: Session only (dashboard)

Create Key

POST /api/keys
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}
Response 201
1{
2 "id": "clx...",
3 "name": "Production Key",
4 "key": "sk-live-abc123...",
5 "status": "ACTIVE",
6 "tier": "PRO"
7}

Key Usage

GET /api/keys/:keyId/usage?days=30 — Response 200
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/summary

Get detailed usage summary with advanced filtering. Read-only. · Auth: API key or session

GET
/api/usage/filters

Get available filter options (keys, models) for usage queries. · Auth: Session only (dashboard)

Usage Summary

cURL
1curl "https://chat.waymore.ai/api/usage/summary?period=30d&model=Waymore-A1-Instruct-1011" \
2 -H "Authorization: Bearer YOUR_API_KEY"
Response 200
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/billing

Get billing overview: subscription, usage, payment methods, invoices. · Auth: Session only (dashboard)

GET
/api/billing/plans

List 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-plan

Change subscription plan. · Auth: Session only (dashboard)

POST
/api/billing/cancel

Cancel subscription (effective at period end). · Auth: Session only (dashboard)

GET
/api/billing/invoices?limit=20&offset=0

Get paginated list of invoices. · Auth: Session only (dashboard)

GET
/api/billing/payment-methods

List all payment methods on file. · Auth: Session only (dashboard)

POST
/api/billing/payment-methods

Add a new payment method via Stripe payment method ID. · Auth: Session only (dashboard)

PATCH
/api/billing/payment-methods/:id

Update a payment method (e.g. set as default). · Auth: Session only (dashboard)

DELETE
/api/billing/payment-methods/:id

Remove a payment method. · Auth: Session only (dashboard)

Billing Overview

GET /api/billing — Response 200
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

GET /api/billing/plans — Response 200
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/profile

Get the current user's profile information. · Auth: Session only (dashboard)

PATCH
/api/user/profile

Update profile fields (name, email, company, phone, timezone). · Auth: Session only (dashboard)

POST
/api/user/password

Change password. Requires current password and a strong new password (min 12 chars). · Auth: Session only (dashboard)

Profile Response

GET /api/user/profile — Response 200
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/files

List uploaded files. · Auth: API key or session

POST
/api/files/upload

Upload a file for LLM processing (multipart/form-data). · Auth: API key or session

GET
/api/files/:fileId

Get file metadata. · Auth: API key or session

DELETE
/api/files/:fileId

Delete 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/stuff

List content items with filtering, search, and pagination. Read-only. · Auth: API key or session

POST
/api/stuff

Create a new content item. · Auth: Session only (dashboard)

GET
/api/stuff/:id

Get a content item with its collections. · Auth: Session only (dashboard)

PATCH
/api/stuff/:id

Update item metadata (title, description, tags, favorite, archive). · Auth: Session only (dashboard)

DELETE
/api/stuff/:id

Delete a content item permanently. · Auth: Session only (dashboard)

GET
/api/stuff/stats

Get aggregated content statistics and storage usage. Read-only. · Auth: API key or session

POST
/api/stuff/upload

Upload files to your library (multipart/form-data, max 50MB). · Auth: Session only (dashboard)

GET
/api/stuff/download/:userId/:filename

Download a file with caching support. · Auth: Session only (dashboard)

Query Parameters

cURL
1curl "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# Supported types: IMAGE, VIDEO, FILE, CODE, CONVERSATION, NOTE
5# Sort options: newest, oldest, name_asc, name_desc, size
6# Filters: type, search, source, favorite, archived, collectionId

Content Stats

GET /api/stuff/stats — Response 200
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/collections

List all collections with item counts. · Auth: Session only (dashboard)

POST
/api/collections

Create a new collection. · Auth: Session only (dashboard)

GET
/api/collections/:id

Get a collection with all its items. · Auth: Session only (dashboard)

PATCH
/api/collections/:id

Update collection metadata (name, description, color, icon). · Auth: Session only (dashboard)

DELETE
/api/collections/:id

Delete a collection (not allowed for default collections). · Auth: Session only (dashboard)

POST
/api/collections/:id/items

Add 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/:sessionId

Load a canvas document and recent versions for a session. · Auth: Session only (dashboard)

PUT
/api/canvas/:sessionId

Create or update (upsert) a canvas document. · Auth: Session only (dashboard)

DELETE
/api/canvas/:sessionId

Delete a canvas document and all its versions. · Auth: Session only (dashboard)

GET
/api/canvas/:sessionId/versions

List all version snapshots. · Auth: Session only (dashboard)

POST
/api/canvas/:sessionId/versions

Create 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.

Error Response
1{
2 "error": "Descriptive error message"
3}
CodeDescription
200Success
201Created
400Bad request — invalid parameters or validation error
401Unauthorized — missing or invalid authentication
403Forbidden — insufficient permissions
404Not found — resource does not exist
409Conflict — resource already exists
429Too many requests — rate limit exceeded
500Internal server error

Rate Limits

EndpointLimit
/api/auth/register5 per 15 minutes per IP
/api/auth/resend-verification3 per 5 minutes per IP
/api/auth/forgot-password3 per 15 minutes per IP
/v1/chat/completionsPer API key RPM limit (configurable; plan cap: Free 600 / Starter 1200 / Pro 3000 / Enterprise 6000 RPM)
Updated February 2026