Auto-save V3 draft with Dual-Write to legacy columns.Idempotent if the payload is unchanged from the last draft. Pydantic re-validates the payload (incl. external_theme URL allowlist) before any DB write.Rejects oversized payloads with 413 (Payload Too Large) before the service layer touches the DB. JSONB can technically hold ~1 GB, but a customization that big means runaway preset duplication or embedded data URLs and the autosave debouncer can't keep up.Optimistic concurrency: when the client sends If-Match: <etag> (the etag from the most recent /draft fetch or a previous autosave), we compare to the current store_theme.updated_at. On mismatch → 409 with the current etag + draft so the client can surface "another tab is editing; reload to continue". When the request body carries expected_etag, that wins over the header (kept for clients that prefer body-only payloads).
Request
Authorization
Bearer Token
Provide your bearer token in the
Authorization
header when making requests to protected resources.