Limits
The same caps that apply when you use Moonjar in the app apply to the API. There is no separate integrator tier with different allowances — programmatic and in-app usage count against the same monthly counters.
Monthly allowances
Section titled “Monthly allowances”| Resource | Allowance |
|---|---|
| Chat messages | 1,000 / month |
| Captures | 2,000 / month |
| Voice calls | 200 sessions / month |
| Voice minutes | 120 minutes / month |
| Storage | 20 GB |
The 30-day rolling reset is per-account: it starts the first time you use any of these resources and resets exactly 30 days later. See Usage and limits for detail.
Per-request caps
Section titled “Per-request caps”| Surface | Cap |
|---|---|
POST /api/upload (file) | 20 MB per file |
POST /api/upload/scan (multi-page) | 20 pages per upload |
POST /api/transcribe (audio) | 25 MB per clip |
GET /api/atlas/points | 500 per type by default, 2000 max |
GET /api/search | 100 results max per request |
POST /api/chat (per turn) | 30 iterations / 100 tool calls |
These are hard limits enforced by the server. A request over the limit is rejected with a 4xx error.
Rate limits
Section titled “Rate limits”Most endpoints aren’t rate-limited beyond the monthly caps. The authentication endpoints have their own short-window throttling to prevent brute-force:
POST /api/auth/signup— 3 / hour per IP.POST /api/auth/request-code— 5 / hour per IP.POST /api/auth/verify-code— 10 / hour per IP.
These are intentionally low — successful sign-in moves you off the auth endpoints, so a real user won’t see them.
What happens at a cap
Section titled “What happens at a cap”Hitting a monthly allowance returns a clear error:
{ "error": "Monthly chat limit reached", "resource": "chat", "resets_at": "..." }Hitting a per-request cap returns 4xx with the limit referenced.
The server doesn’t apply any global per-second / per-minute rate limit on authenticated endpoints beyond the monthly allowances and the auth-window throttles above. Heavy clients should still be considerate — Moonjar’s database is the same one the mobile app talks to.
Storage cap behaviour
Section titled “Storage cap behaviour”Uploading a file that would push your storage past 20 GB is rejected at the upload endpoint. The document isn’t created. Delete other documents to free space first.
See also
Section titled “See also”- Usage and limits — same caps, in-app framing.
- Programmatic access