API key
For server-to-server integrations, use an API key. Create one in Settings → Developer in the dashboard — keys are prefixedsp_live_... and scoped to your team.
Supabase JWT
The web app authenticates via Supabase JWT tokens. The frontend manages these automatically — you only need to handle them yourself when building a custom integration against the same backend.Unauthenticated endpoints
A small number of routes are intentionally public:| Path | Purpose |
|---|---|
GET /health | Liveness probe |
GET /auth/tiktok/callback | TikTok OAuth redirect (state token verified via KV) |
GET /auth/instagram/callback | Instagram OAuth redirect |
GET /auth/shopify/callback | Shopify OAuth redirect |
POST /webhooks/higgsfield/:jobId | Higgsfield image-generation callback — protected by a per-job nonce in the ?token= query |
Authorization: Bearer ... header and will return 401 without one.
Rate limits
Limits are applied per-team across three buckets:| Tier | Limit | Endpoints |
|---|---|---|
| Expensive | 30 / minute | /generate/slides, /generate/image, /render, /stores/:id/sync |
| Mutating | 120 / minute | All POST / PATCH / DELETE writes |
| Read | 600 / minute | All GET requests |
429 response with a Retry-After header indicating when to retry: