Skip to content

WordPress

POST /v1/wordpress/{id}/autologin · scope wordpress:console

Logs in as the first administrator without a password. Single use, short-lived (expires_in_seconds). It is a POST because the URL is a credential: it is not cached, not replayed by Idempotency-Key, and it enters the audit log. Requires wordpress:console.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/autologin \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.autologin

POST /v1/wordpress/{id}/backups · scope wordpress:write · asynchronous · idempotent

Database and files. Counts against the daily manual-backup allowance of the plan (429 rate_limited when exceeded) and its storage quota (429 quota_exceeded). One at a time per site (409). The operation carries the backup_id in result.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/backups \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.backups.create

DELETE /v1/wordpress/{id}/backups/{backup_id} · scope wordpress:write · destructive — cannot be undone · idempotent

Irreversible. Scheduled backups are also pruned by the retention policy; you rarely need this.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/backups/wp_20260915_030000_daily \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.backups.delete

POST /v1/wordpress/{id}/backups/{backup_id}/download · scope wordpress:write

The archive may have to be rebuilt from cold storage first, which can take a minute. It is a POST because the URL is a credential: it is not cached and it enters the audit log.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/backups/wp_20260915_030000_daily/download \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.backups.download

GET /v1/wordpress/{id}/backups · scope wordpress:read

Newest first. Scheduled and manual ones, wherever they are stored.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/backups \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.backups.list

POST /v1/wordpress/{id}/backups/{backup_id}/restore · scope wordpress:write · destructive — cannot be undone · asynchronous · idempotent

Destructive: overwrites the database and the files with the backup. Everything changed since it was taken is lost. Take a fresh backup first if in doubt.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/backups/wp_20260915_030000_daily/restore \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.backups.restore

GET /v1/wordpress/{id}/backups/settings · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/backups/settings \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.backups.settings.get

PUT /v1/wordpress/{id}/backups/settings · scope wordpress:write · reversible · idempotent

retention_days is clamped to the range the plan allows; the response shows what was applied.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/backups/settings \
-X PUT \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"enabled":true,"frequency":"daily","retention_days":1}'

operationId: wordpress.backups.settings.update

POST /v1/wordpress/{id}/cache/flush · scope wordpress:write · idempotent

Object cache (Redis), page cache and the CDN edge if enabled. Harmless: the caches rebuild on the next visits.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cache/flush \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cache.flush

POST /v1/wordpress/{id}/cdn/disable · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cdn/disable \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cdn.disable

POST /v1/wordpress/{id}/cdn/enable · scope wordpress:write · reversible · idempotent

Serves uploads from the edge with on-the-fly image optimization. Media URLs are rewritten on the frontend only.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cdn/enable \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cdn.enable

GET /v1/wordpress/{id}/cdn · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cdn \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cdn.get

POST /v1/wordpress/{id}/cdn/purge · scope wordpress:write · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cdn/purge \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cdn.purge

POST /v1/wordpress/{id}/cloudflare/disable · scope wordpress:write · reversible · idempotent

Removes the Cloudflare hostnames and goes back to per-domain certificates. Point your DNS at the site again.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cloudflare/disable \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cloudflare.disable

POST /v1/wordpress/{id}/cloudflare/enable · scope wordpress:write · reversible · idempotent

Registers each custom domain with Cloudflare and switches its certificate. The operation result lists, per domain, the DNS records to publish. Until they resolve, the domain keeps working as before.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cloudflare/enable \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cloudflare.enable

GET /v1/wordpress/{id}/cloudflare · scope wordpress:read

Whether your custom domains go through Cloudflare (edge cache, DDoS protection, managed certificates) and the per-domain status. Only on sites whose capabilities.cloudflare is true.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cloudflare \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cloudflare.get

Get the DNS records a Cloudflare-enabled domain needs

Section titled “Get the DNS records a Cloudflare-enabled domain needs”

GET /v1/wordpress/{id}/cloudflare/records · scope wordpress:read

Re-fetches the records and the current verification status from Cloudflare. Use it to check progress after publishing them.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cloudflare/records \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cloudflare.records.get

POST /v1/wordpress/{id}/core/updates · scope wordpress:write · reversible · idempotent

Updates to the latest version WordPress offers and runs the database upgrade. Take a backup first.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/core/updates \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.core.updates.apply

GET /v1/wordpress/{id}/core/updates · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/core/updates \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.core.updates.list

DELETE /v1/wordpress/{id}/cron/{hook} · scope wordpress:write · destructive — cannot be undone · idempotent

Removes every scheduled occurrence of the hook. A plugin may schedule it again.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/cron/wp_version_check \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cron.delete

GET /v1/wordpress/{id}/cron · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/cron \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cron.list

POST /v1/wordpress/{id}/cron/{hook}/run · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/cron/wp_version_check/run \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.cron.run

POST /v1/wordpress/{id}/domains · scope wordpress:write · reversible · idempotent

Registers the domain, requests its certificate and — if it is the first custom domain — makes it the primary and rewrites the site URLs. The response says which DNS records to publish. By default the request fails if the domain does not point here yet; pass force to add it first and configure DNS afterwards.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/domains \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"domain":"shop.example.com"}'

operationId: wordpress.domains.add

DELETE /v1/wordpress/{id}/domains/{domain_id} · scope wordpress:write · destructive — cannot be undone · idempotent

The site stops answering on it. Its certificate is dropped. The platform hostname cannot be removed.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/domains/<domain_id> \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.domains.delete

GET /v1/wordpress/{id}/domains · scope wordpress:read

Includes the platform hostname the site was born with and every custom domain you added.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/domains \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.domains.list

POST /v1/wordpress/{id}/domains/{domain_id}/primary · scope wordpress:write · reversible · idempotent

Rewrites siteurl/home and every URL in the database. An apex becomes www.: that is the canonical form.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/domains/<domain_id>/primary \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.domains.set_primary

Retry certificate issuance for every domain

Section titled “Retry certificate issuance for every domain”

POST /v1/wordpress/{id}/domains/ssl/retry · scope wordpress:write · idempotent

Clears failed certificate attempts and asks for them again. Use it after fixing DNS. Let’s Encrypt allows 5 failures per hour per domain: do not loop on this.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/domains/ssl/retry \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.domains.ssl.retry

GET /v1/wordpress/{id}/domains/{domain_id}/verify · scope wordpress:read

Resolves the domain (and www. for an apex) and says whether it points here, or why not.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/domains/<domain_id>/verify \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.domains.verify

GET /v1/wordpress/{id}/email · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/email \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.email.get

GET /v1/wordpress/{id}/email/log · scope wordpress:read

What wp_mail() sent in the last 7 days: recipient, subject and method. No bodies.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/email/log \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.email.log

POST /v1/wordpress/{id}/email/test · scope wordpress:write · idempotent

Sends through the site’s own mailer. result.sent says whether wp_mail() succeeded; a false is the diagnosis, not an error.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/email/test \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"to":"you@example.com"}'

operationId: wordpress.email.test

GET /v1/wordpress/{id} · scope wordpress:read

Queries the node. If it does not respond, live comes back null instead of failing: a node hiccup should not stop you from reading the rest of the resource or its capabilities.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432 \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.get

GET /v1/wordpress · scope wordpress:read

Served from the database, without querying the node: live comes back null. Fetching it would cost one backend call per page item. For the live state of one site, use GET /v1/wordpress/{id}.

Terminal window
curl https://api.truo.cloud/v1/wordpress \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.list

GET /v1/wordpress/{id}/logs · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/logs \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.logs.get

GET /v1/wordpress/{id}/monitoring/pagespeed · scope wordpress:read

Runs Google PageSpeed Insights live for mobile and desktop: 10–30 s. Core Web Vitals included.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/monitoring/pagespeed \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.monitoring.pagespeed

GET /v1/wordpress/{id}/monitoring/recovery · scope wordpress:read

The platform watches every site and repairs the common failures on its own (plugin fatals, stuck services). This is what it did to yours, and whether it gave up (halted).

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/monitoring/recovery \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.monitoring.recovery

GET /v1/wordpress/{id}/php · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/php \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.php.get

POST /v1/wordpress/{id}/php/restart · scope wordpress:write · idempotent

Recycles the PHP workers and reloads the web server. No downtime; in-flight requests finish.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/php/restart \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.php.restart

PATCH /v1/wordpress/{id}/php · scope wordpress:write · reversible · idempotent

Only the provided keys change. PHP reloads gracefully: no downtime.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/php \
-X PATCH \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'

operationId: wordpress.php.update

POST /v1/wordpress/{id}/php/version · scope wordpress:write · reversible · idempotent

Switches the interpreter and restarts PHP: a few seconds of errors while it comes back. Custom settings carry over.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/php/version \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"version":"8.3"}'

operationId: wordpress.php.version.set

POST /v1/wordpress/{id}/plugins/{slug}/activate · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/plugins/woocommerce/activate \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.plugins.activate

POST /v1/wordpress/{id}/plugins/{slug}/deactivate · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/plugins/woocommerce/deactivate \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.plugins.deactivate

DELETE /v1/wordpress/{id}/plugins/{slug} · scope wordpress:write · destructive — cannot be undone · idempotent

Removes its files. Its settings stay in the database, as WordPress does.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/plugins/woocommerce \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.plugins.delete

POST /v1/wordpress/{id}/plugins · scope wordpress:write · reversible · idempotent

From wordpress.org by slug, or from an https:// zip. Activates it unless activate is false.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/plugins \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"slug":"woocommerce"}'

operationId: wordpress.plugins.install

GET /v1/wordpress/{id}/plugins · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/plugins \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.plugins.list

GET /v1/wordpress/{id}/plugins/search · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/plugins/search \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.plugins.search

POST /v1/wordpress/{id}/plugins/{slug}/update · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/plugins/woocommerce/update \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.plugins.update

Update every plugin with an update available

Section titled “Update every plugin with an update available”

POST /v1/wordpress/{id}/plugins/update-all · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/plugins/update-all \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.plugins.update_all

POST /v1/wordpress/{id}/recipes/apply · scope wordpress:write · reversible · asynchronous · idempotent

Runs the manifest against the site over WP-CLI, in order: requirements → zip checksums → backup → plugins → constants → options → roles → secrets → verify → register. requires is checked in this request (recipe_requirements_unmet, 412, nothing touched); everything else runs in the background and the operation result shows each step. A checksum mismatch fails before the backup with recipe_checksum_mismatch; a red verify fails with recipe_verify_failed and leaves the site as it is — the backup is the way back. On success the site stores truo_recipe = {name, version, applied_at} and, if the recipe declares secrets, result.secrets.claim says where to fetch them once.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/recipes/apply \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"haztap-golden"}'

operationId: wordpress.recipes.apply

POST /v1/wordpress/recipes · scope wordpress:write · reversible · idempotent

The body is a recipe/v1 manifest. It is validated in full before it is stored — limits, allowed constants, and every WP-CLI line it would run — and a problem comes back as recipe_invalid with param pointing at the field. Zips in url are not downloaded here; their checksum is verified when the recipe is applied. Max 20 recipes per account.

Terminal window
curl https://api.truo.cloud/v1/wordpress/recipes \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'

operationId: wordpress.recipes.create

DELETE /v1/wordpress/recipes/{name} · scope wordpress:write · destructive — cannot be undone · idempotent

Sites that already have it applied are not touched.

Terminal window
curl https://api.truo.cloud/v1/wordpress/recipes/haztap-golden \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.recipes.delete

GET /v1/wordpress/recipes/{name} · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/recipes/haztap-golden \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.recipes.get

GET /v1/wordpress/recipes · scope wordpress:read

Recipes belong to the account, not to a site. Manifests are not included; use wordpress.recipes.get.

Terminal window
curl https://api.truo.cloud/v1/wordpress/recipes \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.recipes.list

Claim the secrets a recipe generated (once)

Section titled “Claim the secrets a recipe generated (once)”

POST /v1/wordpress/{id}/recipes/secrets · scope wordpress:write

Returns the values of the secrets a wordpress.recipes.apply operation generated for this site, exactly once: this response deletes them. They are kept encrypted for 24 hours after the operation succeeds; after that, or after a first claim, this is not_found. Store them on your side.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/recipes/secrets \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"operation":"op_01JQ8XKM4N7P2R9TAB12CD34EF"}'

operationId: wordpress.recipes.secrets.claim

PUT /v1/wordpress/recipes/{name} · scope wordpress:write · reversible · idempotent

The body is a full manifest whose name matches the URL and whose version is greater than every version already published. Published versions are immutable: a site that reports truo_recipe = name@1.2.0 always points at the manifest that was applied.

Terminal window
curl https://api.truo.cloud/v1/wordpress/recipes/haztap-golden \
-X PUT \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'

operationId: wordpress.recipes.update

POST /v1/wordpress/{id}/restart · scope wordpress:write · reversible · idempotent

Restarts the whole site (web server, PHP, database, cache): ~30 s of downtime. To reload PHP alone without downtime use POST /v1/wordpress/{id}/php/restart.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/restart \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.restart

DELETE /v1/wordpress/{id}/security/blocked-ips/{ip_id} · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/security/blocked-ips/<ip_id> \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.security.blocked_ips.delete

GET /v1/wordpress/{id}/security/blocked-ips · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/security/blocked-ips \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.security.blocked_ips.list

GET /v1/wordpress/{id}/security · scope wordpress:read

Login protection counters and the result of the last integrity scan (core and wordpress.org plugins against official checksums).

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/security \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.security.get

POST /v1/wordpress/{id}/security/scan · scope wordpress:write · asynchronous · idempotent

Verifies core and wordpress.org plugins against their official checksums. The findings come in the operation result.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/security/scan \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.security.scan

POST /v1/wordpress/{id}/staging · scope wordpress:write · reversible · asynchronous · idempotent

A full copy of the site (database and files) on its own URL, with fixed resources. Takes a minute or two. The operation carries the clone in result.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/staging \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.staging.create

DELETE /v1/wordpress/{id}/staging/{name} · scope wordpress:write · destructive — cannot be undone · idempotent

Irreversible: the clone and its data are removed. Production is not touched.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/staging/staging \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.staging.delete

GET /v1/wordpress/{id}/staging · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/staging \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.staging.list

POST /v1/wordpress/{id}/staging/{name}/push · scope wordpress:write · destructive — cannot be undone · asynchronous · idempotent

Destructive: copies the database and/or the files of the clone OVER the live site. Take a backup of production first.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/staging/staging/push \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.staging.push

Get runtime state, health and resource usage

Section titled “Get runtime state, health and resource usage”

GET /v1/wordpress/{id}/status · scope wordpress:read

Health (installed, database reachable, pending updates) comes from a check the node runs every 15 minutes: checked_at says when. Resource usage is measured for this request.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/status \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.status

POST /v1/wordpress/{id}/themes/{slug}/activate · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/themes/woocommerce/activate \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.themes.activate

DELETE /v1/wordpress/{id}/themes/{slug} · scope wordpress:write · destructive — cannot be undone · idempotent

The active theme cannot be deleted: activate another one first.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/themes/woocommerce \
-X DELETE \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.themes.delete

POST /v1/wordpress/{id}/themes · scope wordpress:write · reversible · idempotent

From wordpress.org by slug, or from an https:// zip. Does not activate it unless activate is true.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/themes \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"slug":"woocommerce"}'

operationId: wordpress.themes.install

GET /v1/wordpress/{id}/themes · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/themes \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.themes.list

GET /v1/wordpress/{id}/themes/search · scope wordpress:read

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/themes/search \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.themes.search

POST /v1/wordpress/{id}/themes/{slug}/update · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_1241/themes/woocommerce/update \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.themes.update

Update every theme with an update available

Section titled “Update every theme with an update available”

POST /v1/wordpress/{id}/themes/update-all · scope wordpress:write · reversible · idempotent

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/themes/update-all \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN"

operationId: wordpress.themes.update_all

POST /v1/wordpress/{id}/wp-cli · scope wordpress:console · destructive — cannot be undone · idempotent

Runs wp <command> <args…> inside the site and returns exit_code, output and error in the operation result (output capped at 64 KB, truncated: true past it). A non-zero exit code is the command’s result, not an API error. Only an allowlist of subcommands runs: no eval, no shell, no free-form db query, no global flags that change where it runs. Requires wordpress:console: WP-CLI is full access to the site and its database.

Terminal window
curl https://api.truo.cloud/v1/wordpress/svc_10432/wp-cli \
-X POST \
-H "Authorization: Bearer $TRUO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"command":"plugin list"}'

operationId: wordpress.wpcli.run