Architecture
Convex functions are organized into three types:| Type | Purpose | Real-time | Auth required |
|---|---|---|---|
| Queries | Read data | ✅ Auto-subscribes to changes | Varies |
| Mutations | Write data | ✅ Triggers re-renders | ✅ Yes |
| Actions | Side effects (HTTP calls, etc.) | ❌ One-shot | ✅ Yes |
Namespaces
The API is organized into namespaces:Saves
CRUD operations on saves — list, create, update, delete, favorites, archive.
Tags
Tag management — list, create, update, delete, smart suggestions.
Collections
Collection management — list, create, update, delete, default tags.
Spaces
Space settings — profile, theme, slug, custom domains, data export.
Snapshots
Reader mode — get snapshot, request new snapshot, version history.
Public
Public API (no auth) — resolve spaces, list public saves, visit tracking.
Authentication
API calls are authenticated using Clerk JWT tokens. The Convex client handles token management automatically:- User signs in via Clerk (web, mobile, or extension)
- Clerk issues a JWT token
- The Convex client includes the token in every request
- Convex validates the token server-side
Real-time subscriptions
Convex queries are reactive by default. When you use a query in your UI, it automatically re-runs whenever the underlying data changes:Error handling
Convex functions throw typed errors that the client can catch:Rate limiting
Some operations have rate limits to ensure fair usage:| Operation | Limit |
|---|---|
| Snapshot requests | 50 per user per 24 hours |
| Public list queries | 5-100 items per request |
Shared types
All API inputs and outputs use types from the@backpocket/types package:
