API d'administració

Tot el que fa la consola és HTTP sota /admin/. Cada ruta necessita un JWT de sessió o una clau d'API (Authorization: Bearer sk_live_…). Les rutes de projecte resolen {ref} i apliquen un permís per verb. L'embolcall d'èxit és { "data": … }; les eliminacions retornen 204.

Nodes

POST /admin/p/{ref}/nodes/

Crea un node (node:write). Cos: { parent_id?, slug, type, title, kind?("page"|"entry"), locale?, template_id?, blocks?, meta? }. Si blocks és buit i template_id està definit, els blocs es clonen de la plantilla. 409 conflict si el slug col·lisiona.

PATCH /admin/p/{ref}/nodes/{id}

Actualitza (node:write). Cos NodePatch (tot opcional): { parent_id?, slug?, title?, status?, kind?, locale?, blocks?, meta? }. Un canvi de status necessita un permís extra per a la transició: node:publish (draft→published), node:unpublish, node:archive — si no, 403 publish_forbidden.

DELETE /admin/p/{ref}/nodes/{id}

Elimina (node:delete).

GET /admin/p/{ref}/nodes/{id}/preview

Previsualització en HTML renderitzada al servidor dels blocs del node (node:read).

GET /admin/p/{ref}/nodes/{id}/entries

Entrades paginades sota un node de col·lecció.

Instantànies

Versions puntuals d'un node sota /nodes/{id}/snapshots: GET / (línia temporal, snapshot:read), POST / ({label}, snapshot:write), GET /{sid}, DELETE /{sid}, i POST /{sid}/restore (snapshot:restore).

Plantilles i arrencades

Formes reutilitzables. /templates (node únic) i /starters (diversos nodes) ofereixen tots dos CRUD; POST /starters/{id}/instantiate materialitza els nodes d'una arrencada al projecte.

Membres, rols i ACL

  • /members — GET, POST convidar ({email, role_id?|role?} — envia per correu un enllaç màgic als usuaris nous), PATCH /{userId}, DELETE /{userId}. El rol de propietari no es pot assignar ni eliminar aquí.

  • /roles — CRUD més GET /roles/catalog (cada cadena de permís coneguda). Un rol és { slug, label, permissions:[] }.

  • ACLs — denegació a nivell de node per rol (/roles/{id}/acls) o per usuari (/members/{userId}/acls): { node_id, scope:"this"|"subtree" }.

Projectes i plugins

  • GET/POST /admin/projects — llistar / crear (el creador passa a ser propietari). PATCH /{id} modifica { name?, default_locale?, enabled_locales?, public_base_url?, custom_domain?, locked? } (locked és només per al propietari). DELETE409 project_locked si està bloquejat.

  • /modules — el gestor de plugins: GET / llista els mòduls que no són del nucli amb un indicador enabled per tenant; POST /{slug}/enable / /disable els activen o desactiven.

Claus d'API

POST /admin/api-keys { name, scopes? } retorna el sk_live_… en text pla una sola vegada; GET llista (sense text pla); DELETE /{id} revoca.