Usage Limits
Trust levels, quotas, rate limiting, and HTTP caching configuration. All values shown are the defaults — customize them in config/timetiles.yml (see Configuration).
Trust Levels
Each user is assigned a trust level that determines their quotas and rate limits. Admins set trust levels in /dashboard/collections/users.
| Level | Name | Description |
|---|---|---|
| 0 | Untrusted | New or unverified accounts |
| 1 | Basic | Conservative limits |
| 2 | Regular | Standard operational limits |
| 3 | Trusted | Enhanced access, scraper access |
| 4 | Power User | Generous allowances |
| 5 | Unlimited | No restrictions (admins) |
Quotas
| Quota | L0 | L1 | L2 | L3 | L4 | L5 |
|---|---|---|---|---|---|---|
| File uploads/day | 1 | 3 | 10 | 50 | 200 | - |
| Events per import | 100 | 1K | 10K | 50K | 200K | - |
| Total events | 100 | 5K | 50K | 500K | 2M | - |
| Import jobs/day | 1 | 5 | 20 | 100 | 500 | - |
| Max file size | 1 MB | 10 MB | 50 MB | 100 MB | 500 MB | 1 GB |
| Catalogs | 1 | 2 | 5 | 20 | 100 | - |
| Active schedules | 0 | 1 | 5 | 20 | 100 | - |
| URL fetches/day | 0 | 5 | 20 | 100 | 500 | - |
| Scraper repos | 0 | 0 | 0 | 3 | 10 | - |
| Scraper runs/day | 0 | 0 | 0 | 10 | 50 | - |
- = unlimited. Scraper access requires trust level 3+.
Custom Quotas
Override quotas per user in the admin panel at /dashboard/collections/users. Custom quotas take priority over trust level defaults.
Monitoring
- Admin panel:
/dashboard/collections/users(per-user usage) - API:
GET /api/quotas(current user) - Response headers on quota-enforced operations
Rate Limiting
File Upload Rates
| Trust Level | Burst | Hourly | Daily |
|---|---|---|---|
| Untrusted (0) | 1/min | 1 | 1 |
| Basic (1) | 1/10s | 3 | 3 |
| Regular (2) | 1/5s | 5 | 20 |
| Trusted (3) | 2/5s | 20 | 50 |
| Power User (4) | 5/5s | 100 | 200 |
| Unlimited (5) | 10/s | 1000 | - |
API General Rates
| Trust Level | Burst | Hourly |
|---|---|---|
| Untrusted (0) | 1/s | 10 |
| Basic (1) | 2/s | 30 |
| Regular (2) | 5/s | 50 |
| Trusted (3) | 10/s | 200 |
| Power User (4) | 20/s | 1000 |
| Unlimited (5) | 100/s | 10000 |
When rate limited, the response includes:
HTTP 429 Too Many Requests
X-RateLimit-Limit: 10
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 2025-10-06T15:30:00.000ZHTTP Caching
URL fetch caching for scheduled imports (outgoing requests). Respects RFC 7234 Cache-Control headers from external APIs. Configure in config/timetiles.yml:
cache:
urlFetch:
dir: /tmp/url-fetch-cache
maxSizeBytes: 104857600 # 100 MB
defaultTtlSeconds: 3600 # 1 hour
maxTtlSeconds: 2592000 # 30 days
respectCacheControl: trueTroubleshooting: High cache misses — increase TTL or size. Stale data — reduce TTL or clear cache (rm -rf $URL_FETCH_CACHE_DIR/*). Disk space — reduce max size.
Related
- Resource Protection Architecture — How quotas and rate limiting work internally
- HTTP Caching Architecture — Cache system design