Riferimento API REST

Il plugin espone 94 route sotto /wp-json/wpcb/v1. Le usa il server MCP, le usa Xaflo Desktop, e possono usarle i tuoi script: è semplice HTTPS con JSON, niente di specifico per l’AI.

In questa pagina

URL di base e autenticazione

Ogni route vive sotto la base REST del tuo sito. Invia il token nell’header Authorization:

curl
curl -H "Authorization: Bearer YOUR_TOKEN" 
  https://your-site.example/wp-json/wpcb/v1/whoami
  • Se il tuo hosting toglie Authorization, invia lo stesso valore in X-WPCB-Authorization.
  • Le richieste devono usare HTTPS; a quelle in HTTP semplice si risponde con 426.
  • /health, /install/info e i due script di installazione sono pubblici. Le route di gestione dei token e del plugin accettano solo un amministratore collegato a WordPress, non un token.
  • L’elenco aggiornato delle route è sempre in GET /wp-json/wpcb/v1, l’indice standard del namespace di WordPress.

Errori

Gli errori usano il formato REST di WordPress, con un codice che inizia per wpcb_:

JSON
{
  "code": "wpcb_rate_limited",
  "message": "…",
  "data": { "status": 429, "retry_after": 12, "limit": 60, "scope_limited": "__global__" }
}
StatoCodiceSignificato
400wpcb_validationUn parametro manca o non è valido.
401wpcb_unauthorizedNessun token valido.
403wpcb_forbiddenManca lo scope o la capability di WordPress.
426wpcb_upgrade_requiredLa richiesta non era in HTTPS.
428wpcb_confirmation_requiredOperazione distruttiva: ripetila con il confirmation_token ricevuto.
428wpcb_confirmation_invalidIl token di conferma è scaduto, già usato o di un’altra operazione.
429wpcb_rate_limitedTroppe richieste; aspetta i secondi indicati in Retry-After.
400wpcb_hash_mismatch, wpcb_invalid_packageUno zip caricato non coincide con il suo SHA-256, o non contiene esattamente un plugin.
403xaflo_fs_outside_uploadsUna modifica di file fuori dalla cartella uploads senza fs:admin.
409wpcb_login_link_2fa e rifiuti del databaseQualcosa sul sito ferma la richiesta: un plugin di accesso a due fattori per l’accesso rapido, o tabelle o impostazioni MySQL con cui /db/query non può lavorare.
413wpcb_too_largeUno zip caricato oltre 20 MB o oltre il limite di caricamento del server.

Conferma in due passaggi

Le operazioni distruttive rispondono alla prima chiamata con 428 e un token di conferma, invece di agire:

JSON · prima risposta
{
  "error": {
    "code": "wpcb_confirmation_required",
    "message": "Provide confirmation_token to restore.",
    "confirmation_token": "ct_…",
    "expires_at": "…",
    "operation_summary": "…"
  }
}

Ripeti la stessa chiamata con confirmation_token impostato su quel valore entro cinque minuti. Il token vale una sola volta, solo per quell’operazione, quell’utente e quella risorsa; per le scritture è legato anche al contenuto esatto, e per il caricamento di un plugin allo slug e all’hash. Il server MCP 1.3 e Xaflo Desktop 2.0 non lo inviano mai da soli: mostrano il riepilogo e aspettano la persona.

I rifiuti di /db/query hanno codici propri, come unsupported_placeholder, unknown_qualifier, cross_database, secret_column, protected_option o protected_table.

Controllo di salute

GET /health non richiede token e restituisce status, version, plugin_version, wp_version, php_version, site_url, rest_base, time e multilingual. Inviato con un token valido, restituisce anche i suoi scopes (plugin 1.7.0). Non finisce nel registro delle chiamate.

Novità e modifiche nella 1.7.0

  • POST /admin/login-link (scope admin:login, amministratore) restituisce {url, expires_in: 60}, un link di accesso monouso; il redirect_to facoltativo deve essere un percorso dentro wp-admin. GET /admin/login-link/redeem è pubblico e funziona una volta.
  • POST /plugins/install-zip accetta anche zip_base64, filename e sha256 al posto di zip_url; l’attivazione solo con activate: true.
  • Scritture /fs/*: site:write solo dentro uploads, fs:admin altrove; confirmation_token accettato su write, upload, rename e delete; fs/write restituisce l’id di un backup.
  • /media e /media/unused richiedono media:read; /db/query richiede un amministratore; ogni route con token controlla una capability di WordPress.
  • GET /plugins riporta gli aggiornamenti disponibili e le descrizioni; i valori di WP-CLI vanno in args.

Tutte le route

“Richiede” elenca gli scope per ogni metodo, nello stesso ordine. “admin” vuol dire che anche l’utente dietro al token deve poter gestire le opzioni; “sessione admin” vuol dire un amministratore collegato all’amministrazione di WordPress, senza token.

Identità, salute e statistiche

RouteMetodiRichiedeCosa fa
/healthGETpubblicaVersione del plugin, versioni di WordPress e PHP, indirizzo del sito, ora, adattatore multilingua; con un token valido, anche i suoi scope.
/whoamiGETauth:readL’utente e gli scope dietro al token.
/auditGETaudit:read · adminIl registro delle chiamate.
/stats/dashboardGETdashboard:readStatistiche della dashboard.
/stats/timeseriesGETdashboard:readNumero di richieste nel tempo.

Articoli, pagine, termini e ricerca

RouteMetodiRichiedeCosa fa
/postsGET · POSTcontent:read · content:writeElenca o crea articoli. I nuovi articoli sono bozze se il token non ha content:publish.
/posts/{id}GET · PATCH · DELETEcontent:read · content:writeLegge, aggiorna (salvando prima una revisione) o elimina. L’eliminazione definitiva chiede conferma.
/posts/{id}/publishPOSTcontent:publishPubblica un articolo.
/pagesGET · POSTcontent:read · content:writeElenca o crea pagine.
/pages/{id}PATCH · DELETEcontent:writeAggiorna o elimina una pagina. L’eliminazione definitiva chiede conferma.
/termsGET · POSTcontent:read · content:writeElenca o crea i termini di una tassonomia.
/searchGETcontent:readCerca nei contenuti.

Media

RouteMetodiRichiedeCosa fa
/mediaGETmedia:readElenca la libreria media.
/media/from-urlPOSTmedia:writeScarica un file da un URL (con protezione SSRF).
/media/from-base64POSTmedia:writeCarica un file codificato in base64.
/media/{id}PATCH · DELETEmedia:writeModifica testo alternativo, didascalia e descrizione; elimina con conferma.
/media/{id}/optimizePOSTmedia:writeOttimizza un’immagine.
/media/unusedGETmedia:readMedia che nessun contenuto usa.

SEO

RouteMetodiRichiedeCosa fa
/seo/{post_id}GET · PATCHseo:read · seo:writeLegge o scrive i meta SEO di un articolo.
/seo/{post_id}/analyzeGETseo:readAnalizza un articolo.
/seo/auditGETseo:readControlla molti articoli.
/seo/sitemapGETseo:readStato della sitemap.
/seo/broken-linksGETseo:readLink rotti nei contenuti recenti o in tutti.

Analytics

RouteMetodiRichiedeCosa fa
/analytics/detectGETanalytics:readQuale fonte di analytics ha il sito.
/analytics/overviewGETanalytics:readPanoramica del traffico.
/analytics/top-postsGETanalytics:readContenuti più visti.
/analytics/top-referrersGETanalytics:readPrincipali provenienze.
/analytics/top-keywordsGETanalytics:readPrincipali parole chiave di ricerca.
/analytics/post/{post_id}GETanalytics:readTraffico di un articolo.
/analytics/compareGETanalytics:readConfronta due periodi.
/analytics/trend-by-categoryGETanalytics:readAndamento per categoria.
/analytics/no-traffic-pagesGETanalytics:readContenuti pubblicati senza visite.

Multilingua

RouteMetodiRichiedeCosa fa
/multilingual/detectGETcontent:readQuale plugin multilingua è attivo.
/multilingual/languagesGETcontent:readLingue del sito.
/multilingual/post/{post_id}/translationsGET · POSTcontent:read · content:writeLegge o collega traduzioni.
/multilingual/post/{post_id}/languagePATCHcontent:writeImposta la lingua di un articolo.
/multilingual/media/{attachment_id}/translationsGETcontent:readTraduzioni dei media.
/multilingual/media/{attachment_id}/translations/{language_code}PATCHmedia:writeTraduce i metadati di un media.
/multilingual/media/auditGETcontent:readCopertura delle traduzioni dei media.
/multilingual/stringsGETcontent:readTraduzioni delle stringhe.
/multilingual/strings/auditGETcontent:readCopertura delle traduzioni delle stringhe.

Tema

RouteMetodiRichiedeCosa fa
/themeGETtheme:readIl tema attivo.
/theme/filesGET · PUTtheme:read · theme:writeElenca i file, o ne scrive uno (la versione precedente viene conservata).
/theme/files/readGETtheme:readLegge un file del tema.
/theme/custom-cssPOSTtheme:writeAggiunge CSS personalizzato.
/theme/switchPOSTtheme:writeCambia tema, con conferma.

Plugin

RouteMetodiRichiedeCosa fa
/pluginsGETplugin:readPlugin installati.
/plugins/{slug}/files/readGETplugin:readLegge un file di un plugin.
/plugins/{slug}/filesPUTplugin:writeScrive un file di un plugin.
/plugins/scaffoldPOSTplugin:installCrea lo scheletro di un nuovo plugin.
/plugins/install-zipPOSTplugin:installInstalla da un URL di uno zip, o da uno zip nella richiesta (zip_base64, filename, sha256; al massimo 20 MB). Sostituire un plugin installato chiede conferma.
/plugins/install-repoPOSTplugin:installInstalla dalla directory di WordPress.org, con conferma.
/plugins/{slug}/activatePOSTplugin:installAttiva un plugin.
/plugins/{slug}/deactivatePOSTplugin:installDisattiva un plugin.

Impostazioni, menu, widget

RouteMetodiRichiedeCosa fa
/settingsGET · POSTsite:read · site:writeLegge o cambia le impostazioni. Cambiare siteurl, home o admin_email chiede conferma.
/menusGET · POSTsite:read · site:writeElenca o crea menu.
/menus/{id}PATCHsite:writeAggiorna un menu.
/widgetsGET · POSTsite:read · site:writeLegge o imposta i widget.
/customizerGET · POSTsite:read · site:writeLegge o imposta i valori del Customizer.
/performanceGETsite:readInformazioni su sistema, database, cache e disco.

Backup

RouteMetodiRichiedeCosa fa
/backupGET · POSTsystem:backup · adminElenca i backup, o ne crea uno (database, file o entrambi).
/backup/{id}/restorePOSTsystem:backup · adminRipristina un backup, con conferma.

Manutenzione e debug log

RouteMetodiRichiedeCosa fa
/maintenanceGET · POST · DELETEsite:read · site:write · adminStato, attiva, disattiva.
/maintenance/previewGETsite:read · adminMostra la pagina 503 senza attivarla.
/debug/logGET · DELETEaudit:read · site:write · adminMostra o svuota debug.log.
/debug/log/statusGETaudit:read · adminDimensione e stato di debug.log.

File

RouteMetodiRichiedeCosa fa
/fs/listGETsite:read · adminElenca una cartella.
/fs/readGETsite:read · adminLegge un file.
/fs/downloadGETsite:read · adminScarica un file.
/fs/searchGETsite:read · adminTrova file per nome.
/fs/writePUTsite:write · fs:admin · adminScrive un file: dentro uploads con site:write, altrove con fs:admin (le sovrascritture chiedono conferma).
/fs/mkdirPOSTsite:write · fs:admin · adminCrea una cartella.
/fs/renamePOSTsite:write · fs:admin · adminRinomina o sposta, con conferma sotto fs:admin.
/fs/uploadPOSTsite:write · fs:admin · adminCarica un file.
/fs/deleteDELETE · POSTsite:write · fs:admin · adminElimina, con conferma; ricorsivo per le cartelle.

Database e WP-CLI

RouteMetodiRichiedeCosa fa
/db/queryPOSTdb:read · db:write · adminSQL attraverso la protezione. Le scritture richiedono la modalità write, db:write, tabelle InnoDB e conferma.
/cliPOSTcli:exec · adminComandi WP-CLI ammessi. Spento finché il proprietario del sito non lo attiva.

Accesso rapido

RouteMetodiRichiedeCosa fa
/admin/login-linkPOSTadmin:login · adminUn link monouso, valido 60 secondi, che fa entrare in wp-admin l’utente del token.
/admin/login-link/redeemGETpubblicaUsa una volta un link di accesso. Ogni rifiuto rimanda a wp-login.php.

Amministrazione del plugin

RouteMetodiRichiedeCosa fa
/tokensGET · POSTsessione adminElenca o crea token.
/tokens/{jti}DELETEsessione adminRevoca un token.
/scopesGETsessione adminTutti gli scope con descrizione.
/jwt-secret-suggestGETsessione adminUn nuovo valore per la chiave.
/admin/settingsGET · POSTsessione adminImpostazioni del plugin.
/admin/cleanup-nowPOSTsessione adminEsegue subito la pulizia giornaliera.
/admin/jwt-secret/statusGETsessione adminSe la chiave è impostata.
/admin/jwt-secret/installPOSTsessione adminScrive una nuova chiave in wp-config.php.
/admin/jwt-secret/rotatePOSTsessione adminSostituisce la chiave, invalidando tutti i token.
/admin/jwt-secret/removePOSTsessione adminRimuove la chiave.
/admin/routesGETsessione adminL’elenco delle route attive.
/install/infoGETpubblicaVersione del pacchetto MCP e indirizzi degli installer.
/install/script.shGETpubblicaScript di installazione per bash.
/install/script.ps1GETpubblicaScript di installazione per PowerShell.
/install/bundlePOSTsessione adminPacchetto di installazione.