Bulk-upsert preference rows.
Returns the full merged grid post-update so the frontend has the new ground truth without a follow-up GET.
409 (whole-batch rejection) if any row tries to disable a mandatory
(type, channel). This is intentional — partial application would
leave the user with a UI in a state they didn’t ask for.
Documentation Index
Fetch the complete documentation index at: https://docs.roughy.ai/llms.txt
Use this file to discover all available pages before exploring further.
Either your Supabase session JWT (UI flows) or an API key minted via POST /api-keys (programmatic flows). Pass it as Authorization: Bearer <token>. The server inspects the token format and routes to JWT or API-key verification automatically.
Bulk PATCH body. The whole batch is applied atomically -- if any update would disable a mandatory (type, channel), the entire request is rejected with 409. Partial application would surprise the user.
Bulk updates; max 100 per request.
1 - 100 elementsSuccessful Response
Full grid of every (type, channel) prefs for the caller, with defaults merged in. Stable order so the UI can render predictably.